diff --git a/.gitignore b/.gitignore index 16a095f9..44045986 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ **/__pycache__ node_modules makefile +build diff --git a/ChangeLog.md b/ChangeLog.md index c31ca1b8..4773971a 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -10,6 +10,16 @@ Features: Bugfixes: +### v1.0.14 (not released) + +Features: + * [#42](https://github.com/iExecBlockchainComputing/PoCo/issues/42) ajust timeout categories + * [#40](https://github.com/iExecBlockchainComputing/PoCo/issues/40) Removing the build/ folder from git and create a specific one for contracts addresses deployed + + Bugfixes: + * [#41](https://github.com/iExecBlockchainComputing/PoCo/issues/41) : truffle compile doesn't work + + ### [v1.0.13](https://github.com/iExecBlockchainComputing/PoCo/releases/tag/v1.0.13) Features: diff --git a/README.md b/README.md index d73b0a00..8d1dee02 100644 --- a/README.md +++ b/README.md @@ -492,7 +492,7 @@ or ``` -coverage : 20/05/2018 +coverage : 11/06/2018 184 passing (10m) 1 pending diff --git a/audits/ChainSecurity_iExec-V2.pdf b/audits/ChainSecurity_iExec-V2.pdf new file mode 100644 index 00000000..cc8b346d Binary files /dev/null and b/audits/ChainSecurity_iExec-V2.pdf differ diff --git a/config/categories.json b/config/categories.json index bb9ff1a1..98b5d5d9 100644 --- a/config/categories.json +++ b/config/categories.json @@ -4,35 +4,35 @@ "description": { "io": "10mo" }, - "workClockTimeRef": 30 + "workClockTimeRef": 300 }, { "name": "2", "description": { "io": "100mo" }, - "workClockTimeRef": 120 + "workClockTimeRef": 900 }, { "name": "3", "description": { "io": "250mo" }, - "workClockTimeRef": 900 + "workClockTimeRef": 1800 }, { "name": "4", "description": { "io": "500mo" }, - "workClockTimeRef": 1800 + "workClockTimeRef": 3600 }, { "name": "5", "description": { "io": "1go" }, - "workClockTimeRef": 3600 + "workClockTimeRef": 7200 } ] } diff --git a/contractsCompacted/AppHub.sol b/contractsCompacted/AppHub.sol new file mode 100644 index 00000000..c7f354c4 --- /dev/null +++ b/contractsCompacted/AppHub.sol @@ -0,0 +1,599 @@ +//v1.0.14 +//License: Apache2.0 +pragma solidity ^0.4.8; + +contract TokenSpender { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} + +pragma solidity ^0.4.8; + +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + +pragma solidity ^0.4.8; + +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + +pragma solidity ^0.4.21; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + * last open zepplin version used for : add sub mul div function : https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol +* commit : https://github.com/OpenZeppelin/zeppelin-solidity/commit/815d9e1f457f57cfbb1b4e889f2255c9a517f661 + */ +library SafeMathOZ +{ + function add(uint256 a, uint256 b) internal pure returns (uint256) + { + uint256 c = a + b; + assert(c >= a); + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) + { + assert(b <= a); + return a - b; + } + + function mul(uint256 a, uint256 b) internal pure returns (uint256) + { + if (a == 0) + { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) + { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function max(uint256 a, uint256 b) internal pure returns (uint256) + { + return a >= b ? a : b; + } + + function min(uint256 a, uint256 b) internal pure returns (uint256) + { + return a < b ? a : b; + } + + function mulByFraction(uint256 a, uint256 b, uint256 c) internal pure returns (uint256) + { + return div(mul(a, b), c); + } + + function percentage(uint256 a, uint256 b) internal pure returns (uint256) + { + return mulByFraction(a, b, 100); + } + // Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity + function log(uint x) internal pure returns (uint y) + { + assembly + { + let arg := x + x := sub(x,1) + x := or(x, div(x, 0x02)) + x := or(x, div(x, 0x04)) + x := or(x, div(x, 0x10)) + x := or(x, div(x, 0x100)) + x := or(x, div(x, 0x10000)) + x := or(x, div(x, 0x100000000)) + x := or(x, div(x, 0x10000000000000000)) + x := or(x, div(x, 0x100000000000000000000000000000000)) + x := add(x, 1) + let m := mload(0x40) + mstore(m, 0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd) + mstore(add(m,0x20), 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe) + mstore(add(m,0x40), 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616) + mstore(add(m,0x60), 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff) + mstore(add(m,0x80), 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e) + mstore(add(m,0xa0), 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707) + mstore(add(m,0xc0), 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606) + mstore(add(m,0xe0), 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100) + mstore(0x40, add(m, 0x100)) + let magic := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff + let shift := 0x100000000000000000000000000000000000000000000000000000000000000 + let a := div(mul(x, magic), shift) + y := div(mload(add(m,sub(255,a))), shift) + y := add(y, mul(256, gt(arg, 0x8000000000000000000000000000000000000000000000000000000000000000))) + } + } +} + + +pragma solidity ^0.4.8; + +contract Ownable { + address public owner; + + function Ownable() { + owner = msg.sender; + } + + modifier onlyOwner() { + if (msg.sender == owner) + _; + } + + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) owner = newOwner; + } + +} + +pragma solidity ^0.4.21; + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract OwnableOZ +{ + address public m_owner; + bool public m_changeable; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() + { + require(msg.sender == m_owner); + _; + } + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function OwnableOZ() public + { + m_owner = msg.sender; + m_changeable = true; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param _newOwner The address to transfer ownership to. + */ + function setImmutableOwnership(address _newOwner) public onlyOwner + { + require(m_changeable); + require(_newOwner != address(0)); + emit OwnershipTransferred(m_owner, _newOwner); + m_owner = _newOwner; + m_changeable = false; + } + +} + + +pragma solidity ^0.4.8; + +contract RLC is ERC20, SafeMath, Ownable { + + /* Public variables of the token */ + string public name; //fancy name + string public symbol; + uint8 public decimals; //How many decimals to show. + string public version = 'v0.1'; + uint public initialSupply; + uint public totalSupply; + bool public locked; + //uint public unlockBlock; + + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + + // lock transfer during the ICO + modifier onlyUnlocked() { + if (msg.sender != owner && locked) throw; + _; + } + + /* + * The RLC Token created with the time at which the crowdsale end + */ + + function RLC() { + // lock the transfer function during the crowdsale + locked = true; + //unlockBlock= now + 45 days; // (testnet) - for mainnet put the block number + + initialSupply = 87000000000000000; + totalSupply = initialSupply; + balances[msg.sender] = initialSupply;// Give the creator all initial tokens + name = 'iEx.ec Network Token'; // Set the name for display purposes + symbol = 'RLC'; // Set the symbol for display purposes + decimals = 9; // Amount of decimals for display purposes + } + + function unlock() onlyOwner { + locked = false; + } + + function burn(uint256 _value) returns (bool){ + balances[msg.sender] = safeSub(balances[msg.sender], _value) ; + totalSupply = safeSub(totalSupply, _value); + Transfer(msg.sender, 0x0, _value); + return true; + } + + function transfer(address _to, uint _value) onlyUnlocked returns (bool) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint _value) onlyUnlocked returns (bool) { + var _allowance = allowed[_from][msg.sender]; + + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + + function approve(address _spender, uint _value) returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /* Approve and then comunicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData){ + TokenSpender spender = TokenSpender(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + } + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + + +pragma solidity ^0.4.21; + + +contract IexecHubInterface +{ + RLC public rlc; + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public; + + function setCategoriesCreator( + address _categoriesCreator) + public; + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public returns (uint256 catid); + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool); + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp); + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset); + + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address); + + function isWoidRegistred( + address _woid) + public view returns (bool); + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256); + + function claimFailedConsensus( + address _woid) + public returns (bool); + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public returns (bool); + + function getCategoryWorkClockTimeRef( + uint256 _catId) + public view returns (uint256 workClockTimeRef); + + function existingCategory( + uint256 _catId) + public view returns (bool categoryExist); + + function getCategory( + uint256 _catId) + public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef); + + function getWorkerStatus( + address _worker) + public view returns (address workerPool, uint256 workerScore); + + function getWorkerScore(address _worker) public view returns (uint256 workerScore); + + function registerToPool(address _worker) public returns (bool subscribed); + + function unregisterFromPool(address _worker) public returns (bool unsubscribed); + + function evictWorker(address _worker) public returns (bool unsubscribed); + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed); + + function lockForOrder(address _user, uint256 _amount) public returns (bool); + + function unlockForOrder(address _user, uint256 _amount) public returns (bool); + + function lockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function unlockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function deposit(uint256 _amount) external returns (bool); + + function withdraw(uint256 _amount) external returns (bool); + + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked); + + function reward(address _user, uint256 _amount) internal returns (bool); + + function seize(address _user, uint256 _amount) internal returns (bool); + + function lock(address _user, uint256 _amount) internal returns (bool); + + function unlock(address _user, uint256 _amount) internal returns (bool); +} + + +pragma solidity ^0.4.21; + + +contract IexecHubAccessor +{ + IexecHubInterface internal iexecHubInterface; + + modifier onlyIexecHub() + { + require(msg.sender == address(iexecHubInterface)); + _; + } + + function IexecHubAccessor(address _iexecHubAddress) public + { + require(_iexecHubAddress != address(0)); + iexecHubInterface = IexecHubInterface(_iexecHubAddress); + } + +} + + +pragma solidity ^0.4.21; + + +contract App is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_appName; + uint256 public m_appPrice; + string public m_appParams; + + /** + * Constructor + */ + function App( + address _iexecHubAddress, + string _appName, + uint256 _appPrice, + string _appParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_appName = _appName; + m_appPrice = _appPrice; + m_appParams = _appParams; + + } + + + +} + + +pragma solidity ^0.4.21; + + + +contract AppHub is OwnableOZ // is Owned by IexecHub +{ + + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_appCountByOwner; + mapping(address => mapping(uint256 => address)) m_appByOwnerByIndex; + mapping(address => bool) m_appRegistered; + + mapping(uint256 => address) m_appByIndex; + uint256 public m_totalAppCount; + + /** + * Constructor + */ + function AppHub() public + { + } + + /** + * Methods + */ + function isAppRegistered(address _app) public view returns (bool) + { + return m_appRegistered[_app]; + } + function getAppsCount(address _owner) public view returns (uint256) + { + return m_appCountByOwner[_owner]; + } + function getApp(address _owner, uint256 _index) public view returns (address) + { + return m_appByOwnerByIndex[_owner][_index]; + } + function getAppByIndex(uint256 _index) public view returns (address) + { + return m_appByIndex[_index]; + } + + function addApp(address _owner, address _app) internal + { + uint id = m_appCountByOwner[_owner].add(1); + m_totalAppCount=m_totalAppCount.add(1); + m_appByIndex [m_totalAppCount] = _app; + m_appCountByOwner [_owner] = id; + m_appByOwnerByIndex[_owner][id] = _app; + m_appRegistered [_app] = true; + } + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdApp) + { + // tx.origin == owner + // msg.sender == IexecHub + address newApp = new App( + msg.sender, + _appName, + _appPrice, + _appParams + ); + addApp(tx.origin, newApp); + return newApp; + } + +} diff --git a/contractsCompacted/DatasetHub.sol b/contractsCompacted/DatasetHub.sol new file mode 100644 index 00000000..b0e4c778 --- /dev/null +++ b/contractsCompacted/DatasetHub.sol @@ -0,0 +1,602 @@ +//v1.0.14 +//License: Apache2.0 + + +pragma solidity ^0.4.8; + +contract TokenSpender { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} + +pragma solidity ^0.4.8; + +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + +pragma solidity ^0.4.8; + +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + +pragma solidity ^0.4.21; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + * last open zepplin version used for : add sub mul div function : https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol +* commit : https://github.com/OpenZeppelin/zeppelin-solidity/commit/815d9e1f457f57cfbb1b4e889f2255c9a517f661 + */ +library SafeMathOZ +{ + function add(uint256 a, uint256 b) internal pure returns (uint256) + { + uint256 c = a + b; + assert(c >= a); + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) + { + assert(b <= a); + return a - b; + } + + function mul(uint256 a, uint256 b) internal pure returns (uint256) + { + if (a == 0) + { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) + { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function max(uint256 a, uint256 b) internal pure returns (uint256) + { + return a >= b ? a : b; + } + + function min(uint256 a, uint256 b) internal pure returns (uint256) + { + return a < b ? a : b; + } + + function mulByFraction(uint256 a, uint256 b, uint256 c) internal pure returns (uint256) + { + return div(mul(a, b), c); + } + + function percentage(uint256 a, uint256 b) internal pure returns (uint256) + { + return mulByFraction(a, b, 100); + } + // Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity + function log(uint x) internal pure returns (uint y) + { + assembly + { + let arg := x + x := sub(x,1) + x := or(x, div(x, 0x02)) + x := or(x, div(x, 0x04)) + x := or(x, div(x, 0x10)) + x := or(x, div(x, 0x100)) + x := or(x, div(x, 0x10000)) + x := or(x, div(x, 0x100000000)) + x := or(x, div(x, 0x10000000000000000)) + x := or(x, div(x, 0x100000000000000000000000000000000)) + x := add(x, 1) + let m := mload(0x40) + mstore(m, 0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd) + mstore(add(m,0x20), 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe) + mstore(add(m,0x40), 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616) + mstore(add(m,0x60), 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff) + mstore(add(m,0x80), 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e) + mstore(add(m,0xa0), 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707) + mstore(add(m,0xc0), 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606) + mstore(add(m,0xe0), 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100) + mstore(0x40, add(m, 0x100)) + let magic := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff + let shift := 0x100000000000000000000000000000000000000000000000000000000000000 + let a := div(mul(x, magic), shift) + y := div(mload(add(m,sub(255,a))), shift) + y := add(y, mul(256, gt(arg, 0x8000000000000000000000000000000000000000000000000000000000000000))) + } + } +} + + +pragma solidity ^0.4.8; + +contract Ownable { + address public owner; + + function Ownable() { + owner = msg.sender; + } + + modifier onlyOwner() { + if (msg.sender == owner) + _; + } + + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) owner = newOwner; + } + +} + +pragma solidity ^0.4.21; + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract OwnableOZ +{ + address public m_owner; + bool public m_changeable; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() + { + require(msg.sender == m_owner); + _; + } + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function OwnableOZ() public + { + m_owner = msg.sender; + m_changeable = true; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param _newOwner The address to transfer ownership to. + */ + function setImmutableOwnership(address _newOwner) public onlyOwner + { + require(m_changeable); + require(_newOwner != address(0)); + emit OwnershipTransferred(m_owner, _newOwner); + m_owner = _newOwner; + m_changeable = false; + } + +} + + +pragma solidity ^0.4.8; + +contract RLC is ERC20, SafeMath, Ownable { + + /* Public variables of the token */ + string public name; //fancy name + string public symbol; + uint8 public decimals; //How many decimals to show. + string public version = 'v0.1'; + uint public initialSupply; + uint public totalSupply; + bool public locked; + //uint public unlockBlock; + + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + + // lock transfer during the ICO + modifier onlyUnlocked() { + if (msg.sender != owner && locked) throw; + _; + } + + /* + * The RLC Token created with the time at which the crowdsale end + */ + + function RLC() { + // lock the transfer function during the crowdsale + locked = true; + //unlockBlock= now + 45 days; // (testnet) - for mainnet put the block number + + initialSupply = 87000000000000000; + totalSupply = initialSupply; + balances[msg.sender] = initialSupply;// Give the creator all initial tokens + name = 'iEx.ec Network Token'; // Set the name for display purposes + symbol = 'RLC'; // Set the symbol for display purposes + decimals = 9; // Amount of decimals for display purposes + } + + function unlock() onlyOwner { + locked = false; + } + + function burn(uint256 _value) returns (bool){ + balances[msg.sender] = safeSub(balances[msg.sender], _value) ; + totalSupply = safeSub(totalSupply, _value); + Transfer(msg.sender, 0x0, _value); + return true; + } + + function transfer(address _to, uint _value) onlyUnlocked returns (bool) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint _value) onlyUnlocked returns (bool) { + var _allowance = allowed[_from][msg.sender]; + + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + + function approve(address _spender, uint _value) returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /* Approve and then comunicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData){ + TokenSpender spender = TokenSpender(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + } + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + + +pragma solidity ^0.4.21; + + +contract IexecHubInterface +{ + RLC public rlc; + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public; + + function setCategoriesCreator( + address _categoriesCreator) + public; + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public returns (uint256 catid); + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool); + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp); + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset); + + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address); + + function isWoidRegistred( + address _woid) + public view returns (bool); + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256); + + function claimFailedConsensus( + address _woid) + public returns (bool); + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public returns (bool); + + function getCategoryWorkClockTimeRef( + uint256 _catId) + public view returns (uint256 workClockTimeRef); + + function existingCategory( + uint256 _catId) + public view returns (bool categoryExist); + + function getCategory( + uint256 _catId) + public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef); + + function getWorkerStatus( + address _worker) + public view returns (address workerPool, uint256 workerScore); + + function getWorkerScore(address _worker) public view returns (uint256 workerScore); + + function registerToPool(address _worker) public returns (bool subscribed); + + function unregisterFromPool(address _worker) public returns (bool unsubscribed); + + function evictWorker(address _worker) public returns (bool unsubscribed); + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed); + + function lockForOrder(address _user, uint256 _amount) public returns (bool); + + function unlockForOrder(address _user, uint256 _amount) public returns (bool); + + function lockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function unlockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function deposit(uint256 _amount) external returns (bool); + + function withdraw(uint256 _amount) external returns (bool); + + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked); + + function reward(address _user, uint256 _amount) internal returns (bool); + + function seize(address _user, uint256 _amount) internal returns (bool); + + function lock(address _user, uint256 _amount) internal returns (bool); + + function unlock(address _user, uint256 _amount) internal returns (bool); +} + + + +pragma solidity ^0.4.21; + + +contract IexecHubAccessor +{ + IexecHubInterface internal iexecHubInterface; + + modifier onlyIexecHub() + { + require(msg.sender == address(iexecHubInterface)); + _; + } + + function IexecHubAccessor(address _iexecHubAddress) public + { + require(_iexecHubAddress != address(0)); + iexecHubInterface = IexecHubInterface(_iexecHubAddress); + } + +} + + + +pragma solidity ^0.4.21; + + +contract Dataset is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_datasetName; + uint256 public m_datasetPrice; + string public m_datasetParams; + + /** + * Constructor + */ + function Dataset( + address _iexecHubAddress, + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_datasetName = _datasetName; + m_datasetPrice = _datasetPrice; + m_datasetParams = _datasetParams; + + } + + +} + + +pragma solidity ^0.4.21; + + + +contract DatasetHub is OwnableOZ // is Owned by IexecHub +{ + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_datasetCountByOwner; + mapping(address => mapping(uint256 => address)) m_datasetByOwnerByIndex; + mapping(address => bool) m_datasetRegistered; + + mapping(uint256 => address) m_datasetByIndex; + uint256 public m_totalDatasetCount; + + + + /** + * Constructor + */ + function DatasetHub() public + { + } + + /** + * Methods + */ + function isDatasetRegistred(address _dataset) public view returns (bool) + { + return m_datasetRegistered[_dataset]; + } + function getDatasetsCount(address _owner) public view returns (uint256) + { + return m_datasetCountByOwner[_owner]; + } + function getDataset(address _owner, uint256 _index) public view returns (address) + { + return m_datasetByOwnerByIndex[_owner][_index]; + } + function getDatasetByIndex(uint256 _index) public view returns (address) + { + return m_datasetByIndex[_index]; + } + + function addDataset(address _owner, address _dataset) internal + { + uint id = m_datasetCountByOwner[_owner].add(1); + m_totalDatasetCount = m_totalDatasetCount.add(1); + m_datasetByIndex [m_totalDatasetCount] = _dataset; + m_datasetCountByOwner [_owner] = id; + m_datasetByOwnerByIndex[_owner][id] = _dataset; + m_datasetRegistered [_dataset] = true; + } + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdDataset) + { + // tx.origin == owner + // msg.sender == IexecHub + address newDataset = new Dataset( + msg.sender, + _datasetName, + _datasetPrice, + _datasetParams + ); + addDataset(tx.origin, newDataset); + return newDataset; + } +} diff --git a/contractsCompacted/IexecHub.sol b/contractsCompacted/IexecHub.sol new file mode 100644 index 00000000..dcc833b1 --- /dev/null +++ b/contractsCompacted/IexecHub.sol @@ -0,0 +1,2324 @@ +//v1.0.14 +//License: Apache2.0 +pragma solidity ^0.4.8; + +contract TokenSpender { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} + +pragma solidity ^0.4.8; + +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + +pragma solidity ^0.4.8; + +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + +pragma solidity ^0.4.21; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + * last open zepplin version used for : add sub mul div function : https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol +* commit : https://github.com/OpenZeppelin/zeppelin-solidity/commit/815d9e1f457f57cfbb1b4e889f2255c9a517f661 + */ +library SafeMathOZ +{ + function add(uint256 a, uint256 b) internal pure returns (uint256) + { + uint256 c = a + b; + assert(c >= a); + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) + { + assert(b <= a); + return a - b; + } + + function mul(uint256 a, uint256 b) internal pure returns (uint256) + { + if (a == 0) + { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) + { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function max(uint256 a, uint256 b) internal pure returns (uint256) + { + return a >= b ? a : b; + } + + function min(uint256 a, uint256 b) internal pure returns (uint256) + { + return a < b ? a : b; + } + + function mulByFraction(uint256 a, uint256 b, uint256 c) internal pure returns (uint256) + { + return div(mul(a, b), c); + } + + function percentage(uint256 a, uint256 b) internal pure returns (uint256) + { + return mulByFraction(a, b, 100); + } + // Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity + function log(uint x) internal pure returns (uint y) + { + assembly + { + let arg := x + x := sub(x,1) + x := or(x, div(x, 0x02)) + x := or(x, div(x, 0x04)) + x := or(x, div(x, 0x10)) + x := or(x, div(x, 0x100)) + x := or(x, div(x, 0x10000)) + x := or(x, div(x, 0x100000000)) + x := or(x, div(x, 0x10000000000000000)) + x := or(x, div(x, 0x100000000000000000000000000000000)) + x := add(x, 1) + let m := mload(0x40) + mstore(m, 0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd) + mstore(add(m,0x20), 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe) + mstore(add(m,0x40), 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616) + mstore(add(m,0x60), 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff) + mstore(add(m,0x80), 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e) + mstore(add(m,0xa0), 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707) + mstore(add(m,0xc0), 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606) + mstore(add(m,0xe0), 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100) + mstore(0x40, add(m, 0x100)) + let magic := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff + let shift := 0x100000000000000000000000000000000000000000000000000000000000000 + let a := div(mul(x, magic), shift) + y := div(mload(add(m,sub(255,a))), shift) + y := add(y, mul(256, gt(arg, 0x8000000000000000000000000000000000000000000000000000000000000000))) + } + } +} + + +pragma solidity ^0.4.8; + +contract Ownable { + address public owner; + + function Ownable() { + owner = msg.sender; + } + + modifier onlyOwner() { + if (msg.sender == owner) + _; + } + + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) owner = newOwner; + } + +} + +pragma solidity ^0.4.21; + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract OwnableOZ +{ + address public m_owner; + bool public m_changeable; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() + { + require(msg.sender == m_owner); + _; + } + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function OwnableOZ() public + { + m_owner = msg.sender; + m_changeable = true; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param _newOwner The address to transfer ownership to. + */ + function setImmutableOwnership(address _newOwner) public onlyOwner + { + require(m_changeable); + require(_newOwner != address(0)); + emit OwnershipTransferred(m_owner, _newOwner); + m_owner = _newOwner; + m_changeable = false; + } + +} + + +pragma solidity ^0.4.8; + +contract RLC is ERC20, SafeMath, Ownable { + + /* Public variables of the token */ + string public name; //fancy name + string public symbol; + uint8 public decimals; //How many decimals to show. + string public version = 'v0.1'; + uint public initialSupply; + uint public totalSupply; + bool public locked; + //uint public unlockBlock; + + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + + // lock transfer during the ICO + modifier onlyUnlocked() { + if (msg.sender != owner && locked) throw; + _; + } + + /* + * The RLC Token created with the time at which the crowdsale end + */ + + function RLC() { + // lock the transfer function during the crowdsale + locked = true; + //unlockBlock= now + 45 days; // (testnet) - for mainnet put the block number + + initialSupply = 87000000000000000; + totalSupply = initialSupply; + balances[msg.sender] = initialSupply;// Give the creator all initial tokens + name = 'iEx.ec Network Token'; // Set the name for display purposes + symbol = 'RLC'; // Set the symbol for display purposes + decimals = 9; // Amount of decimals for display purposes + } + + function unlock() onlyOwner { + locked = false; + } + + function burn(uint256 _value) returns (bool){ + balances[msg.sender] = safeSub(balances[msg.sender], _value) ; + totalSupply = safeSub(totalSupply, _value); + Transfer(msg.sender, 0x0, _value); + return true; + } + + function transfer(address _to, uint _value) onlyUnlocked returns (bool) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint _value) onlyUnlocked returns (bool) { + var _allowance = allowed[_from][msg.sender]; + + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + + function approve(address _spender, uint _value) returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /* Approve and then comunicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData){ + TokenSpender spender = TokenSpender(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + } + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + + +pragma solidity ^0.4.21; + +library IexecLib +{ + /***************************************************************************/ + /* Market Order */ + /***************************************************************************/ + enum MarketOrderDirectionEnum + { + UNSET, + BID, + ASK, + CLOSED + } + struct MarketOrder + { + MarketOrderDirectionEnum direction; + uint256 category; // runtime selection + uint256 trust; // for PoCo + uint256 value; // value/cost/price + uint256 volume; // quantity of instances (total) + uint256 remaining; // remaining instances + address workerpool; // BID can use null for any + address workerpoolOwner; // fix ownership if workerpool ownership change during the workorder steps + } + + /***************************************************************************/ + /* Work Order */ + /***************************************************************************/ + enum WorkOrderStatusEnum + { + UNSET, // Work order not yet initialized (invalid address) + ACTIVE, // Marketed → constributions are open + REVEALING, // Starting consensus reveal + CLAIMED, // failed consensus + COMPLETED // Concensus achieved + } + + /***************************************************************************/ + /* Consensus */ + /* --- */ + /* used in WorkerPool.sol */ + /***************************************************************************/ + struct Consensus + { + uint256 poolReward; + uint256 stakeAmount; + bytes32 consensus; + uint256 revealDate; + uint256 revealCounter; + uint256 consensusTimeout; + uint256 winnerCount; + address[] contributors; + address workerpoolOwner; + uint256 schedulerRewardRatioPolicy; + + } + + /***************************************************************************/ + /* Contribution */ + /* --- */ + /* used in WorkerPool.sol */ + /***************************************************************************/ + enum ContributionStatusEnum + { + UNSET, + AUTHORIZED, + CONTRIBUTED, + PROVED, + REJECTED + } + struct Contribution + { + ContributionStatusEnum status; + bytes32 resultHash; + bytes32 resultSign; + address enclaveChallenge; + uint256 score; + uint256 weight; + } + + /***************************************************************************/ + /* Account / ContributionHistory / Category */ + /* --- */ + /* used in IexecHub.sol */ + /***************************************************************************/ + struct Account + { + uint256 stake; + uint256 locked; + } + + struct ContributionHistory // for credibility computation, f = failed/total + { + uint256 success; + uint256 failed; + } + + struct Category + { + uint256 catid; + string name; + string description; + uint256 workClockTimeRef; + } + +} + + +pragma solidity ^0.4.21; + +contract WorkOrder +{ + + + event WorkOrderActivated(); + event WorkOrderReActivated(); + event WorkOrderRevealing(); + event WorkOrderClaimed (); + event WorkOrderCompleted(); + + /** + * Members + */ + IexecLib.WorkOrderStatusEnum public m_status; + + uint256 public m_marketorderIdx; + + address public m_app; + address public m_dataset; + address public m_workerpool; + address public m_requester; + + uint256 public m_emitcost; + string public m_params; + address public m_callback; + address public m_beneficiary; + + bytes32 public m_resultCallbackProof; + string public m_stdout; + string public m_stderr; + string public m_uri; + + address public m_iexecHubAddress; + + modifier onlyIexecHub() + { + require(msg.sender == m_iexecHubAddress); + _; + } + + /** + * Constructor + */ + function WorkOrder( + uint256 _marketorderIdx, + address _requester, + address _app, + address _dataset, + address _workerpool, + uint256 _emitcost, + string _params, + address _callback, + address _beneficiary) + public + { + m_iexecHubAddress = msg.sender; + require(_requester != address(0)); + m_status = IexecLib.WorkOrderStatusEnum.ACTIVE; + m_marketorderIdx = _marketorderIdx; + m_app = _app; + m_dataset = _dataset; + m_workerpool = _workerpool; + m_requester = _requester; + m_emitcost = _emitcost; + m_params = _params; + m_callback = _callback; + m_beneficiary = _beneficiary; + // needed for the scheduler to authorize api token access on this m_beneficiary address in case _requester is a smart contract. + } + + function startRevealingPhase() public returns (bool) + { + require(m_workerpool == msg.sender); + require(m_status == IexecLib.WorkOrderStatusEnum.ACTIVE); + m_status = IexecLib.WorkOrderStatusEnum.REVEALING; + emit WorkOrderRevealing(); + return true; + } + + function reActivate() public returns (bool) + { + require(m_workerpool == msg.sender); + require(m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.ACTIVE; + emit WorkOrderReActivated(); + return true; + } + + + function claim() public onlyIexecHub + { + require(m_status == IexecLib.WorkOrderStatusEnum.ACTIVE || m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.CLAIMED; + emit WorkOrderClaimed(); + } + + + function setResult(string _stdout, string _stderr, string _uri) public onlyIexecHub + { + require(m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.COMPLETED; + m_stdout = _stdout; + m_stderr = _stderr; + m_uri = _uri; + m_resultCallbackProof =keccak256(_stdout,_stderr,_uri); + emit WorkOrderCompleted(); + } + +} + +pragma solidity ^0.4.21; + +contract IexecHubInterface +{ + RLC public rlc; + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public; + + function setCategoriesCreator( + address _categoriesCreator) + public; + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public returns (uint256 catid); + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool); + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp); + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset); + + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address); + + function isWoidRegistred( + address _woid) + public view returns (bool); + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256); + + function claimFailedConsensus( + address _woid) + public returns (bool); + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public returns (bool); + + function getCategoryWorkClockTimeRef( + uint256 _catId) + public view returns (uint256 workClockTimeRef); + + function existingCategory( + uint256 _catId) + public view returns (bool categoryExist); + + function getCategory( + uint256 _catId) + public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef); + + function getWorkerStatus( + address _worker) + public view returns (address workerPool, uint256 workerScore); + + function getWorkerScore(address _worker) public view returns (uint256 workerScore); + + function registerToPool(address _worker) public returns (bool subscribed); + + function unregisterFromPool(address _worker) public returns (bool unsubscribed); + + function evictWorker(address _worker) public returns (bool unsubscribed); + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed); + + function lockForOrder(address _user, uint256 _amount) public returns (bool); + + function unlockForOrder(address _user, uint256 _amount) public returns (bool); + + function lockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function unlockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function deposit(uint256 _amount) external returns (bool); + + function withdraw(uint256 _amount) external returns (bool); + + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked); + + function reward(address _user, uint256 _amount) internal returns (bool); + + function seize(address _user, uint256 _amount) internal returns (bool); + + function lock(address _user, uint256 _amount) internal returns (bool); + + function unlock(address _user, uint256 _amount) internal returns (bool); +} + + +pragma solidity ^0.4.21; + +contract IexecHubAccessor +{ + IexecHubInterface internal iexecHubInterface; + + modifier onlyIexecHub() + { + require(msg.sender == address(iexecHubInterface)); + _; + } + + function IexecHubAccessor(address _iexecHubAddress) public + { + require(_iexecHubAddress != address(0)); + iexecHubInterface = IexecHubInterface(_iexecHubAddress); + } + +} + +pragma solidity ^0.4.21; + +contract IexecCallbackInterface +{ + + function workOrderCallback( + address _woid, + string _stdout, + string _stderr, + string _uri) public returns (bool); + + event WorkOrderCallback(address woid, string stdout, string stderr, string uri); +} + +pragma solidity ^0.4.21; +contract MarketplaceInterface +{ + function createMarketOrder( + IexecLib.MarketOrderDirectionEnum _direction, + uint256 _category, + uint256 _trust, + uint256 _value, + address _workerpool, + uint256 _volume) + public returns (uint); + + function closeMarketOrder( + uint256 _marketorderIdx) + public returns (bool); + + function getMarketOrderValue( + uint256 _marketorderIdx) + public view returns(uint256); + + function getMarketOrderWorkerpoolOwner( + uint256 _marketorderIdx) + public view returns(address); + + function getMarketOrderCategory( + uint256 _marketorderIdx) + public view returns (uint256); + + function getMarketOrderTrust( + uint256 _marketorderIdx) + public view returns(uint256); + + function getMarketOrder( + uint256 _marketorderIdx) + public view returns( + IexecLib.MarketOrderDirectionEnum direction, + uint256 category, // runtime selection + uint256 trust, // for PoCo + uint256 value, // value/cost/price + uint256 volume, // quantity of instances (total) + uint256 remaining, // remaining instances + address workerpool); // BID can use null for any +} + + +pragma solidity ^0.4.21; + +contract MarketplaceAccessor +{ + address internal marketplaceAddress; + MarketplaceInterface internal marketplaceInterface; +/* not used + modifier onlyMarketplace() + { + require(msg.sender == marketplaceAddress); + _; + }*/ + + function MarketplaceAccessor(address _marketplaceAddress) public + { + require(_marketplaceAddress != address(0)); + marketplaceAddress = _marketplaceAddress; + marketplaceInterface = MarketplaceInterface(_marketplaceAddress); + } +} + +pragma solidity ^0.4.21; + +contract WorkerPool is OwnableOZ, IexecHubAccessor, MarketplaceAccessor +{ + using SafeMathOZ for uint256; + + + /** + * Members + */ + string public m_description; + uint256 public m_stakeRatioPolicy; // % of reward to stake + uint256 public m_schedulerRewardRatioPolicy; // % of reward given to scheduler + uint256 public m_subscriptionLockStakePolicy; // Stake locked when in workerpool - Constant set by constructor, do not update + uint256 public m_subscriptionMinimumStakePolicy; // Minimum stake for subscribing + uint256 public m_subscriptionMinimumScorePolicy; // Minimum score for subscribing + address[] public m_workers; + mapping(address => uint256) public m_workerIndex; + + // mapping(woid => IexecLib.Consensus) + mapping(address => IexecLib.Consensus) public m_consensus; + // mapping(woid => worker address => Contribution); + mapping(address => mapping(address => IexecLib.Contribution)) public m_contributions; + + uint256 public constant REVEAL_PERIOD_DURATION_RATIO = 2; + uint256 public constant CONSENSUS_DURATION_RATIO = 10; + + /** + * Address of slave/related contracts + */ + address public m_workerPoolHubAddress; + + + /** + * Events + */ + event WorkerPoolPolicyUpdate( + uint256 oldStakeRatioPolicy, uint256 newStakeRatioPolicy, + uint256 oldSchedulerRewardRatioPolicy, uint256 newSchedulerRewardRatioPolicy, + uint256 oldSubscriptionMinimumStakePolicy, uint256 newSubscriptionMinimumStakePolicy, + uint256 oldSubscriptionMinimumScorePolicy, uint256 newSubscriptionMinimumScorePolicy); + + event WorkOrderActive (address indexed woid); + event WorkOrderClaimed (address indexed woid); + + event AllowWorkerToContribute (address indexed woid, address indexed worker, uint256 workerScore); + event Contribute (address indexed woid, address indexed worker, bytes32 resultHash); + event RevealConsensus (address indexed woid, bytes32 consensus); + event Reveal (address indexed woid, address indexed worker, bytes32 result); + event Reopen (address indexed woid); + event FinalizeWork (address indexed woid, string stdout, string stderr, string uri); + + + + event WorkerSubscribe (address indexed worker); + event WorkerUnsubscribe (address indexed worker); + event WorkerEviction (address indexed worker); + + /** + * Methods + */ + // Constructor + function WorkerPool( + address _iexecHubAddress, + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy, + address _marketplaceAddress) + IexecHubAccessor(_iexecHubAddress) + MarketplaceAccessor(_marketplaceAddress) + public + { + // tx.origin == owner + // msg.sender == WorkerPoolHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_description = _description; + m_stakeRatioPolicy = 30; // % of the work order price to stake + m_schedulerRewardRatioPolicy = 1; // % of the work reward going to scheduler vs workers reward + m_subscriptionLockStakePolicy = _subscriptionLockStakePolicy; // only at creation. cannot be change to respect lock/unlock of worker stake + m_subscriptionMinimumStakePolicy = _subscriptionMinimumStakePolicy; + m_subscriptionMinimumScorePolicy = _subscriptionMinimumScorePolicy; + m_workerPoolHubAddress = msg.sender; + + } + + function changeWorkerPoolPolicy( + uint256 _newStakeRatioPolicy, + uint256 _newSchedulerRewardRatioPolicy, + uint256 _newSubscriptionMinimumStakePolicy, + uint256 _newSubscriptionMinimumScorePolicy) + public onlyOwner + { + emit WorkerPoolPolicyUpdate( + m_stakeRatioPolicy, _newStakeRatioPolicy, + m_schedulerRewardRatioPolicy, _newSchedulerRewardRatioPolicy, + m_subscriptionMinimumStakePolicy, _newSubscriptionMinimumStakePolicy, + m_subscriptionMinimumScorePolicy, _newSubscriptionMinimumScorePolicy + ); + require(_newSchedulerRewardRatioPolicy <= 100); + m_stakeRatioPolicy = _newStakeRatioPolicy; + m_schedulerRewardRatioPolicy = _newSchedulerRewardRatioPolicy; + m_subscriptionMinimumStakePolicy = _newSubscriptionMinimumStakePolicy; + m_subscriptionMinimumScorePolicy = _newSubscriptionMinimumScorePolicy; + } + + /************************* worker list management **************************/ + function getWorkerAddress(uint _index) public view returns (address) + { + return m_workers[_index]; + } + function getWorkerIndex(address _worker) public view returns (uint) + { + uint index = m_workerIndex[_worker]; + require(m_workers[index] == _worker); + return index; + } + function getWorkersCount() public view returns (uint) + { + return m_workers.length; + } + + function subscribeToPool() public returns (bool) + { + // msg.sender = worker + require(iexecHubInterface.registerToPool(msg.sender)); + uint index = m_workers.push(msg.sender); + m_workerIndex[msg.sender] = index.sub(1); + emit WorkerSubscribe(msg.sender); + return true; + } + + function unsubscribeFromPool() public returns (bool) + { + // msg.sender = worker + require(iexecHubInterface.unregisterFromPool(msg.sender)); + require(removeWorker(msg.sender)); + emit WorkerUnsubscribe(msg.sender); + return true; + } + + function evictWorker(address _worker) public onlyOwner returns (bool) + { + // msg.sender = scheduler + require(iexecHubInterface.evictWorker(_worker)); + require(removeWorker(_worker)); + emit WorkerEviction(_worker); + return true; + } + + function removeWorker(address _worker) internal returns (bool) + { + uint index = getWorkerIndex(_worker); // fails if worker not registered + address lastWorker = m_workers[m_workers.length.sub(1)]; + m_workers [index ] = lastWorker; + m_workerIndex[lastWorker] = index; + delete m_workers[m_workers.length.sub(1)]; + m_workers.length = m_workers.length.sub(1); + return true; + } + + function getConsensusDetails(address _woid) public view returns ( + uint256 c_poolReward, + uint256 c_stakeAmount, + bytes32 c_consensus, + uint256 c_revealDate, + uint256 c_revealCounter, + uint256 c_consensusTimeout, + uint256 c_winnerCount, + address c_workerpoolOwner) + { + IexecLib.Consensus storage consensus = m_consensus[_woid]; + return ( + consensus.poolReward, + consensus.stakeAmount, + consensus.consensus, + consensus.revealDate, + consensus.revealCounter, + consensus.consensusTimeout, + consensus.winnerCount, + consensus.workerpoolOwner + ); + } + + function getContributorsCount(address _woid) public view returns (uint256 contributorsCount) + { + return m_consensus[_woid].contributors.length; + } + + function getContributor(address _woid, uint256 index) public view returns (address contributor) + { + return m_consensus[_woid].contributors[index]; + } + + function existingContribution(address _woid, address _worker) public view returns (bool contributionExist) + { + return m_contributions[_woid][_worker].status != IexecLib.ContributionStatusEnum.UNSET; + } + + function getContribution(address _woid, address _worker) public view returns + ( + IexecLib.ContributionStatusEnum status, + bytes32 resultHash, + bytes32 resultSign, + address enclaveChallenge, + uint256 score, + uint256 weight) + { + require(existingContribution(_woid, _worker)); // no silent value returned + IexecLib.Contribution storage contribution = m_contributions[_woid][_worker]; + return ( + contribution.status, + contribution.resultHash, + contribution.resultSign, + contribution.enclaveChallenge, + contribution.score, + contribution.weight + ); + } + + + /**************************** Works management *****************************/ + function emitWorkOrder(address _woid, uint256 _marketorderIdx) public onlyIexecHub returns (bool) + { + uint256 catid = marketplaceInterface.getMarketOrderCategory(_marketorderIdx); + uint256 timeout = iexecHubInterface.getCategoryWorkClockTimeRef(catid).mul(CONSENSUS_DURATION_RATIO).add(now); + + IexecLib.Consensus storage consensus = m_consensus[_woid]; + consensus.poolReward = marketplaceInterface.getMarketOrderValue(_marketorderIdx); + consensus.workerpoolOwner = marketplaceInterface.getMarketOrderWorkerpoolOwner(_marketorderIdx); + consensus.stakeAmount = consensus.poolReward.percentage(m_stakeRatioPolicy); + consensus.consensusTimeout = timeout; + consensus.schedulerRewardRatioPolicy = m_schedulerRewardRatioPolicy; + + emit WorkOrderActive(_woid); + + return true; + } + + function claimFailedConsensus(address _woid) public onlyIexecHub returns (bool) + { + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now > consensus.consensusTimeout); + uint256 i; + address w; + for (i = 0; i < consensus.contributors.length; ++i) + { + w = consensus.contributors[i]; + if (m_contributions[_woid][w].status != IexecLib.ContributionStatusEnum.AUTHORIZED) + { + require(iexecHubInterface.unlockForWork(_woid, w, consensus.stakeAmount)); + } + } + emit WorkOrderClaimed(_woid); + return true; + } + + function allowWorkersToContribute(address _woid, address[] _workers, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool) + { + for (uint i = 0; i < _workers.length; ++i) + { + require(allowWorkerToContribute(_woid, _workers[i], _enclaveChallenge)); + } + return true; + } + + function allowWorkerToContribute(address _woid, address _worker, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE); + IexecLib.Contribution storage contribution = m_contributions[_woid][_worker]; + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + + address workerPool; + uint256 workerScore; + (workerPool, workerScore) = iexecHubInterface.getWorkerStatus(_worker); // workerPool, workerScore + require(workerPool == address(this)); + + require(contribution.status == IexecLib.ContributionStatusEnum.UNSET); + contribution.status = IexecLib.ContributionStatusEnum.AUTHORIZED; + contribution.enclaveChallenge = _enclaveChallenge; + + emit AllowWorkerToContribute(_woid, _worker, workerScore); + return true; + } + + function contribute(address _woid, bytes32 _resultHash, bytes32 _resultSign, uint8 _v, bytes32 _r, bytes32 _s) public returns (uint256 workerStake) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE); // can't contribute on a claimed or completed workorder + IexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender]; + + // msg.sender = a worker + require(_resultHash != 0x0); + require(_resultSign != 0x0); + if (contribution.enclaveChallenge != address(0)) + { + require(contribution.enclaveChallenge == ecrecover(keccak256("\x19Ethereum Signed Message:\n64", _resultHash, _resultSign), _v, _r, _s)); + } + + require(contribution.status == IexecLib.ContributionStatusEnum.AUTHORIZED); + contribution.status = IexecLib.ContributionStatusEnum.CONTRIBUTED; + contribution.resultHash = _resultHash; + contribution.resultSign = _resultSign; + contribution.score = iexecHubInterface.getWorkerScore(msg.sender); + consensus.contributors.push(msg.sender); + + require(iexecHubInterface.lockForWork(_woid, msg.sender, consensus.stakeAmount)); + emit Contribute(_woid, msg.sender, _resultHash); + return consensus.stakeAmount; + } + + function revealConsensus(address _woid, bytes32 _consensus) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(WorkOrder(_woid).startRevealingPhase()); + + consensus.winnerCount = 0; + for (uint256 i = 0; i 0); // you cannot revealConsensus if no worker has contributed to this hash + + consensus.consensus = _consensus; + consensus.revealDate = iexecHubInterface.getCategoryWorkClockTimeRef(marketplaceInterface.getMarketOrderCategory(WorkOrder(_woid).m_marketorderIdx())).mul(REVEAL_PERIOD_DURATION_RATIO).add(now); // is it better to store th catid ? + emit RevealConsensus(_woid, _consensus); + return true; + } + + function reveal(address _woid, bytes32 _result) public returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + IexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender]; + + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.REVEALING ); + require(consensus.revealDate > now ); + require(contribution.status == IexecLib.ContributionStatusEnum.CONTRIBUTED); + require(contribution.resultHash == consensus.consensus ); + require(contribution.resultHash == keccak256(_result ) ); + require(contribution.resultSign == keccak256(_result ^ keccak256(msg.sender)) ); + + contribution.status = IexecLib.ContributionStatusEnum.PROVED; + consensus.revealCounter = consensus.revealCounter.add(1); + + emit Reveal(_woid, msg.sender, _result); + return true; + } + + function reopen(address _woid) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(consensus.revealDate <= now && consensus.revealCounter == 0); + require(WorkOrder(_woid).reActivate()); + + for (uint256 i = 0; i < consensus.contributors.length; ++i) + { + address w = consensus.contributors[i]; + if (m_contributions[_woid][w].resultHash == consensus.consensus) + { + m_contributions[_woid][w].status = IexecLib.ContributionStatusEnum.REJECTED; + } + } + // Reset to status before revealConsensus. Must be after REJECTED traitement above because of consensus.consensus check + consensus.winnerCount = 0; + consensus.consensus = 0x0; + consensus.revealDate = 0; + emit Reopen(_woid); + return true; + } + + // if sheduler never call finalized ? no incetive to do that. schedulermust be pay also at this time + function finalizeWork(address _woid, string _stdout, string _stderr, string _uri) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require((consensus.revealDate <= now && consensus.revealCounter > 0) || (consensus.revealCounter == consensus.winnerCount)); // consensus.winnerCount never 0 at this step + + // add penalized to the call worker to contribution and they never contribute ? + require(distributeRewards(_woid, consensus)); + + require(iexecHubInterface.finalizeWorkOrder(_woid, _stdout, _stderr, _uri)); + emit FinalizeWork(_woid,_stdout,_stderr,_uri); + return true; + } + + function distributeRewards(address _woid, IexecLib.Consensus _consensus) internal returns (bool) + { + uint256 i; + address w; + uint256 workerBonus; + uint256 workerWeight; + uint256 totalWeight; + uint256 individualWorkerReward; + uint256 totalReward = _consensus.poolReward; + address[] memory contributors = _consensus.contributors; + for (i = 0; i 0); + + // compute how much is going to the workers + uint256 totalWorkersReward = totalReward.percentage(uint256(100).sub(_consensus.schedulerRewardRatioPolicy)); + + for (i = 0; iIexecLib.MarketOrder) public m_orderBook; + + uint256 public constant ASK_STAKE_RATIO = 30; + + /** + * Events + */ + event MarketOrderCreated (uint marketorderIdx); + event MarketOrderClosed (uint marketorderIdx); + event MarketOrderAskConsume(uint marketorderIdx, address requester); + + /** + * Constructor + */ + function Marketplace(address _iexecHubAddress) + IexecHubAccessor(_iexecHubAddress) + public + { + } + + /** + * Market orders + */ + function createMarketOrder( + IexecLib.MarketOrderDirectionEnum _direction, + uint256 _category, + uint256 _trust, + uint256 _value, + address _workerpool, + uint256 _volume) + public returns (uint) + { + require(iexecHubInterface.existingCategory(_category)); + require(_volume >0); + m_orderCount = m_orderCount.add(1); + IexecLib.MarketOrder storage marketorder = m_orderBook[m_orderCount]; + marketorder.direction = _direction; + marketorder.category = _category; + marketorder.trust = _trust; + marketorder.value = _value; + marketorder.volume = _volume; + marketorder.remaining = _volume; + + if (_direction == IexecLib.MarketOrderDirectionEnum.ASK) + { + require(WorkerPool(_workerpool).m_owner() == msg.sender); + + require(iexecHubInterface.lockForOrder(msg.sender, _value.percentage(ASK_STAKE_RATIO).mul(_volume))); // mul must be done after percentage to avoid rounding errors + marketorder.workerpool = _workerpool; + marketorder.workerpoolOwner = msg.sender; + } + else + { + // no BID implementation + revert(); + } + emit MarketOrderCreated(m_orderCount); + return m_orderCount; + } + + function closeMarketOrder(uint256 _marketorderIdx) public returns (bool) + { + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + if (marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK) + { + require(marketorder.workerpoolOwner == msg.sender); + require(iexecHubInterface.unlockForOrder(marketorder.workerpoolOwner, marketorder.value.percentage(ASK_STAKE_RATIO).mul(marketorder.remaining))); // mul must be done after percentage to avoid rounding errors + } + else + { + // no BID implementation + revert(); + } + marketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED; + emit MarketOrderClosed(_marketorderIdx); + return true; + } + + + /** + * Assets consumption + */ + function consumeMarketOrderAsk( + uint256 _marketorderIdx, + address _requester, + address _workerpool) + public onlyIexecHub returns (bool) + { + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + require(marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK); + require(marketorder.remaining > 0); + require(marketorder.workerpool == _workerpool); + + marketorder.remaining = marketorder.remaining.sub(1); + if (marketorder.remaining == 0) + { + marketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED; + } + require(iexecHubInterface.lockForOrder(_requester, marketorder.value)); + emit MarketOrderAskConsume(_marketorderIdx, _requester); + return true; + } + + function existingMarketOrder(uint256 _marketorderIdx) public view returns (bool marketOrderExist) + { + return m_orderBook[_marketorderIdx].category > 0; + } + + /** + * Views + */ + function getMarketOrderValue(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].value; + } + function getMarketOrderWorkerpoolOwner(uint256 _marketorderIdx) public view returns (address) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].workerpoolOwner; + } + function getMarketOrderCategory(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].category; + } + function getMarketOrderTrust(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].trust; + } + function getMarketOrder(uint256 _marketorderIdx) public view returns + ( + IexecLib.MarketOrderDirectionEnum direction, + uint256 category, // runtime selection + uint256 trust, // for PoCo + uint256 value, // value/cost/price + uint256 volume, // quantity of instances (total) + uint256 remaining, // remaining instances + address workerpool, // BID can use null for any + address workerpoolOwner) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + return ( + marketorder.direction, + marketorder.category, + marketorder.trust, + marketorder.value, + marketorder.volume, + marketorder.remaining, + marketorder.workerpool, + marketorder.workerpoolOwner + ); + } + + /** + * Callback Proof managment + */ + + event WorkOrderCallbackProof(address indexed woid, address requester, address beneficiary,address indexed callbackTo, address indexed gasCallbackProvider,string stdout, string stderr , string uri); + + //mapping(workorder => bool) + mapping(address => bool) m_callbackDone; + + function isCallbackDone(address _woid) public view returns (bool callbackDone) + { + return m_callbackDone[_woid]; + } + + function workOrderCallback(address _woid,string _stdout, string _stderr, string _uri) public + { + require(iexecHubInterface.isWoidRegistred(_woid)); + require(!isCallbackDone(_woid)); + m_callbackDone[_woid] = true; + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.COMPLETED); + require(WorkOrder(_woid).m_resultCallbackProof() == keccak256(_stdout,_stderr,_uri)); + address callbackTo =WorkOrder(_woid).m_callback(); + require(callbackTo != address(0)); + require(IexecCallbackInterface(callbackTo).workOrderCallback( + _woid, + _stdout, + _stderr, + _uri + )); + emit WorkOrderCallbackProof(_woid,WorkOrder(_woid).m_requester(),WorkOrder(_woid).m_beneficiary(),callbackTo,tx.origin,_stdout,_stderr,_uri); + } + +} + +pragma solidity ^0.4.21; + +contract App is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_appName; + uint256 public m_appPrice; + string public m_appParams; + + /** + * Constructor + */ + function App( + address _iexecHubAddress, + string _appName, + uint256 _appPrice, + string _appParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_appName = _appName; + m_appPrice = _appPrice; + m_appParams = _appParams; + + } + +} + + +pragma solidity ^0.4.21; + +contract AppHub is OwnableOZ // is Owned by IexecHub +{ + + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_appCountByOwner; + mapping(address => mapping(uint256 => address)) m_appByOwnerByIndex; + mapping(address => bool) m_appRegistered; + + mapping(uint256 => address) m_appByIndex; + uint256 public m_totalAppCount; + + /** + * Constructor + */ + function AppHub() public + { + } + + /** + * Methods + */ + function isAppRegistered(address _app) public view returns (bool) + { + return m_appRegistered[_app]; + } + function getAppsCount(address _owner) public view returns (uint256) + { + return m_appCountByOwner[_owner]; + } + function getApp(address _owner, uint256 _index) public view returns (address) + { + return m_appByOwnerByIndex[_owner][_index]; + } + function getAppByIndex(uint256 _index) public view returns (address) + { + return m_appByIndex[_index]; + } + + function addApp(address _owner, address _app) internal + { + uint id = m_appCountByOwner[_owner].add(1); + m_totalAppCount=m_totalAppCount.add(1); + m_appByIndex [m_totalAppCount] = _app; + m_appCountByOwner [_owner] = id; + m_appByOwnerByIndex[_owner][id] = _app; + m_appRegistered [_app] = true; + } + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdApp) + { + // tx.origin == owner + // msg.sender == IexecHub + address newApp = new App( + msg.sender, + _appName, + _appPrice, + _appParams + ); + addApp(tx.origin, newApp); + return newApp; + } + +} + + +pragma solidity ^0.4.21; + +contract Dataset is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_datasetName; + uint256 public m_datasetPrice; + string public m_datasetParams; + + /** + * Constructor + */ + function Dataset( + address _iexecHubAddress, + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_datasetName = _datasetName; + m_datasetPrice = _datasetPrice; + m_datasetParams = _datasetParams; + + } + + +} + +pragma solidity ^0.4.21; + +contract DatasetHub is OwnableOZ // is Owned by IexecHub +{ + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_datasetCountByOwner; + mapping(address => mapping(uint256 => address)) m_datasetByOwnerByIndex; + mapping(address => bool) m_datasetRegistered; + + mapping(uint256 => address) m_datasetByIndex; + uint256 public m_totalDatasetCount; + + + + /** + * Constructor + */ + function DatasetHub() public + { + } + + /** + * Methods + */ + function isDatasetRegistred(address _dataset) public view returns (bool) + { + return m_datasetRegistered[_dataset]; + } + function getDatasetsCount(address _owner) public view returns (uint256) + { + return m_datasetCountByOwner[_owner]; + } + function getDataset(address _owner, uint256 _index) public view returns (address) + { + return m_datasetByOwnerByIndex[_owner][_index]; + } + function getDatasetByIndex(uint256 _index) public view returns (address) + { + return m_datasetByIndex[_index]; + } + + function addDataset(address _owner, address _dataset) internal + { + uint id = m_datasetCountByOwner[_owner].add(1); + m_totalDatasetCount = m_totalDatasetCount.add(1); + m_datasetByIndex [m_totalDatasetCount] = _dataset; + m_datasetCountByOwner [_owner] = id; + m_datasetByOwnerByIndex[_owner][id] = _dataset; + m_datasetRegistered [_dataset] = true; + } + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdDataset) + { + // tx.origin == owner + // msg.sender == IexecHub + address newDataset = new Dataset( + msg.sender, + _datasetName, + _datasetPrice, + _datasetParams + ); + addDataset(tx.origin, newDataset); + return newDataset; + } +} + + +pragma solidity ^0.4.21; + +contract WorkerPoolHub is OwnableOZ // is Owned by IexecHub +{ + + using SafeMathOZ for uint256; + + /** + * Members + */ + // worker => workerPool + mapping(address => address) m_workerAffectation; + // owner => index + mapping(address => uint256) m_workerPoolCountByOwner; + // owner => index => workerPool + mapping(address => mapping(uint256 => address)) m_workerPoolByOwnerByIndex; + // workerPool => owner // stored in the workerPool + /* mapping(address => address) m_ownerByWorkerPool; */ + mapping(address => bool) m_workerPoolRegistered; + + mapping(uint256 => address) m_workerPoolByIndex; + uint256 public m_totalWorkerPoolCount; + + + + /** + * Constructor + */ + function WorkerPoolHub() public + { + } + + /** + * Methods + */ + function isWorkerPoolRegistered(address _workerPool) public view returns (bool) + { + return m_workerPoolRegistered[_workerPool]; + } + function getWorkerPoolsCount(address _owner) public view returns (uint256) + { + return m_workerPoolCountByOwner[_owner]; + } + function getWorkerPool(address _owner, uint256 _index) public view returns (address) + { + return m_workerPoolByOwnerByIndex[_owner][_index]; + } + function getWorkerPoolByIndex(uint256 _index) public view returns (address) + { + return m_workerPoolByIndex[_index]; + } + function getWorkerAffectation(address _worker) public view returns (address workerPool) + { + return m_workerAffectation[_worker]; + } + + function addWorkerPool(address _owner, address _workerPool) internal + { + uint id = m_workerPoolCountByOwner[_owner].add(1); + m_totalWorkerPoolCount = m_totalWorkerPoolCount.add(1); + m_workerPoolByIndex [m_totalWorkerPoolCount] = _workerPool; + m_workerPoolCountByOwner [_owner] = id; + m_workerPoolByOwnerByIndex[_owner][id] = _workerPool; + m_workerPoolRegistered [_workerPool] = true; + } + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy, + address _marketplaceAddress) + external onlyOwner /*owner == IexecHub*/ returns (address createdWorkerPool) + { + // tx.origin == owner + // msg.sender == IexecHub + // At creating ownership is transfered to tx.origin + address newWorkerPool = new WorkerPool( + msg.sender, // iexecHubAddress + _description, + _subscriptionLockStakePolicy, + _subscriptionMinimumStakePolicy, + _subscriptionMinimumScorePolicy, + _marketplaceAddress + ); + addWorkerPool(tx.origin, newWorkerPool); + return newWorkerPool; + } + + function registerWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool subscribed) + { + // you must have no cuurent affectation on others worker Pool + require(m_workerAffectation[_worker] == address(0)); + m_workerAffectation[_worker] = _workerPool; + return true; + } + + function unregisterWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool unsubscribed) + { + require(m_workerAffectation[_worker] == _workerPool); + m_workerAffectation[_worker] = address(0); + return true; + } +} + + +pragma solidity ^0.4.21; + +/** + * @title IexecHub + */ + +contract IexecHub +{ + using SafeMathOZ for uint256; + + /** + * RLC contract for token transfers. + */ + RLC public rlc; + + uint256 public constant STAKE_BONUS_RATIO = 10; + uint256 public constant STAKE_BONUS_MIN_THRESHOLD = 1000; + uint256 public constant SCORE_UNITARY_SLASH = 50; + + /** + * Slaves contracts + */ + AppHub public appHub; + DatasetHub public datasetHub; + WorkerPoolHub public workerPoolHub; + + /** + * Market place + */ + Marketplace public marketplace; + modifier onlyMarketplace() + { + require(msg.sender == address(marketplace)); + _; + } + /** + * Categories + */ + mapping(uint256 => IexecLib.Category) public m_categories; + uint256 public m_categoriesCount; + address public m_categoriesCreator; + modifier onlyCategoriesCreator() + { + require(msg.sender == m_categoriesCreator); + _; + } + + /** + * Escrow + */ + mapping(address => IexecLib.Account) public m_accounts; + + + /** + * workOrder Registered + */ + mapping(address => bool) public m_woidRegistered; + modifier onlyRegisteredWoid(address _woid) + { + require(m_woidRegistered[_woid]); + _; + } + + /** + * Reputation for PoCo + */ + mapping(address => uint256) public m_scores; + IexecLib.ContributionHistory public m_contributionHistory; + + + event WorkOrderActivated(address woid, address indexed workerPool); + event WorkOrderClaimed (address woid, address workerPool); + event WorkOrderCompleted(address woid, address workerPool); + + event CreateApp (address indexed appOwner, address indexed app, string appName, uint256 appPrice, string appParams ); + event CreateDataset (address indexed datasetOwner, address indexed dataset, string datasetName, uint256 datasetPrice, string datasetParams); + event CreateWorkerPool(address indexed workerPoolOwner, address indexed workerPool, string workerPoolDescription ); + + event CreateCategory (uint256 catid, string name, string description, uint256 workClockTimeRef); + + event WorkerPoolSubscription (address indexed workerPool, address worker); + event WorkerPoolUnsubscription(address indexed workerPool, address worker); + event WorkerPoolEviction (address indexed workerPool, address worker); + + event AccurateContribution(address woid, address indexed worker); + event FaultyContribution (address woid, address indexed worker); + + event Deposit (address owner, uint256 amount); + event Withdraw(address owner, uint256 amount); + event Reward (address user, uint256 amount); + event Seize (address user, uint256 amount); + + /** + * Constructor + */ + function IexecHub() + public + { + m_categoriesCreator = msg.sender; + } + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public onlyCategoriesCreator + { + require(address(rlc) == address(0)); + rlc = RLC (_tokenAddress ); + marketplace = Marketplace (_marketplaceAddress ); + workerPoolHub = WorkerPoolHub(_workerPoolHubAddress); + appHub = AppHub (_appHubAddress ); + datasetHub = DatasetHub (_datasetHubAddress ); + + } + + function setCategoriesCreator(address _categoriesCreator) + public onlyCategoriesCreator + { + m_categoriesCreator = _categoriesCreator; + } + /** + * Factory + */ + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public onlyCategoriesCreator returns (uint256 catid) + { + m_categoriesCount = m_categoriesCount.add(1); + IexecLib.Category storage category = m_categories[m_categoriesCount]; + category.catid = m_categoriesCount; + category.name = _name; + category.description = _description; + category.workClockTimeRef = _workClockTimeRef; + emit CreateCategory(m_categoriesCount, _name, _description, _workClockTimeRef); + return m_categoriesCount; + } + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool) + { + address newWorkerPool = workerPoolHub.createWorkerPool( + _description, + _subscriptionLockStakePolicy, + _subscriptionMinimumStakePolicy, + _subscriptionMinimumScorePolicy, + address(marketplace) + ); + emit CreateWorkerPool(tx.origin, newWorkerPool, _description); + return newWorkerPool; + } + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp) + { + address newApp = appHub.createApp( + _appName, + _appPrice, + _appParams + ); + emit CreateApp(tx.origin, newApp, _appName, _appPrice, _appParams); + return newApp; + } + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset) + { + address newDataset = datasetHub.createDataset( + _datasetName, + _datasetPrice, + _datasetParams + ); + emit CreateDataset(tx.origin, newDataset, _datasetName, _datasetPrice, _datasetParams); + return newDataset; + } + + /** + * WorkOrder Emission + */ + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address) + { + address requester = msg.sender; + require(marketplace.consumeMarketOrderAsk(_marketorderIdx, requester, _workerpool)); + + uint256 emitcost = lockWorkOrderCost(requester, _workerpool, _app, _dataset); + + WorkOrder workorder = new WorkOrder( + _marketorderIdx, + requester, + _app, + _dataset, + _workerpool, + emitcost, + _params, + _callback, + _beneficiary + ); + + m_woidRegistered[workorder] = true; + + require(WorkerPool(_workerpool).emitWorkOrder(workorder, _marketorderIdx)); + + emit WorkOrderActivated(workorder, _workerpool); + return workorder; + } + + function isWoidRegistred(address _woid) public view returns (bool) + { + return m_woidRegistered[_woid]; + } + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256) + { + // APP + App app = App(_app); + require(appHub.isAppRegistered (_app)); + // initialize usercost with dapp price + uint256 emitcost = app.m_appPrice(); + + // DATASET + if (_dataset != address(0)) // address(0) → no dataset + { + Dataset dataset = Dataset(_dataset); + require(datasetHub.isDatasetRegistred(_dataset)); + // add optional datasetPrice for userCost + emitcost = emitcost.add(dataset.m_datasetPrice()); + } + + // WORKERPOOL + require(workerPoolHub.isWorkerPoolRegistered(_workerpool)); + + require(lock(_requester, emitcost)); // Lock funds for app + dataset payment + + return emitcost; + } + + /** + * WorkOrder life cycle + */ + + function claimFailedConsensus(address _woid) + public onlyRegisteredWoid(_woid) returns (bool) + { + WorkOrder workorder = WorkOrder(_woid); + require(workorder.m_requester() == msg.sender); + WorkerPool workerpool = WorkerPool(workorder.m_workerpool()); + + IexecLib.WorkOrderStatusEnum currentStatus = workorder.m_status(); + require(currentStatus == IexecLib.WorkOrderStatusEnum.ACTIVE || currentStatus == IexecLib.WorkOrderStatusEnum.REVEALING); + // Unlock stakes for all workers + require(workerpool.claimFailedConsensus(_woid)); + workorder.claim(); // revert on error + + /* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */ + /* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */ + uint256 value; + address workerpoolOwner; + (,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas + uint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO()); + + require(unlock (workorder.m_requester(), value.add(workorder.m_emitcost()))); // UNLOCK THE FUNDS FOR REINBURSEMENT + require(seize (workerpoolOwner, workerpoolStake)); + // put workerpoolOwner stake seize into iexecHub address for bonus for scheduler on next well finalized Task + require(reward (this, workerpoolStake)); + require(lock (this, workerpoolStake)); + + emit WorkOrderClaimed(_woid, workorder.m_workerpool()); + return true; + } + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public onlyRegisteredWoid(_woid) returns (bool) + { + WorkOrder workorder = WorkOrder(_woid); + require(workorder.m_workerpool() == msg.sender); + require(workorder.m_status() == IexecLib.WorkOrderStatusEnum.REVEALING); + + // APP + App app = App(workorder.m_app()); + uint256 appPrice = app.m_appPrice(); + if (appPrice > 0) + { + require(reward(app.m_owner(), appPrice)); + } + + // DATASET + Dataset dataset = Dataset(workorder.m_dataset()); + if (dataset != address(0)) + { + uint256 datasetPrice = dataset.m_datasetPrice(); + if (datasetPrice > 0) + { + require(reward(dataset.m_owner(), datasetPrice)); + } + } + + // WORKERPOOL → rewarding done by the caller itself + + /** + * seize stacked funds from requester. + * reward = value: was locked at market making + * emitcost: was locked at when emiting the workorder + */ + /* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */ + /* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */ + uint256 value; + address workerpoolOwner; + (,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas + uint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO()); + + require(seize (workorder.m_requester(), value.add(workorder.m_emitcost()))); // seize funds for payment (market value + emitcost) + require(unlock(workerpoolOwner, workerpoolStake)); // unlock scheduler stake + + // write results + workorder.setResult(_stdout, _stderr, _uri); // revert on error + + // Rien ne se perd, rien ne se crée, tout se transfere + // distribute bonus to scheduler. jackpot bonus come from scheduler stake loose on IexecHub contract + // we reuse the varaible value for the kitty / fraction of the kitty (stack too deep) + /* (,value) = checkBalance(this); // kitty is locked on `this` wallet */ + value = m_accounts[this].locked; // kitty is locked on `this` wallet + if(value > 0) + { + value = value.min(value.percentage(STAKE_BONUS_RATIO).max(STAKE_BONUS_MIN_THRESHOLD)); + require(seize(this, value)); + require(reward(workerpoolOwner, value)); + } + + emit WorkOrderCompleted(_woid, workorder.m_workerpool()); + return true; + } + + /** + * Views + */ + function getCategoryWorkClockTimeRef(uint256 _catId) public view returns (uint256 workClockTimeRef) + { + require(existingCategory(_catId)); + return m_categories[_catId].workClockTimeRef; + } + + function existingCategory(uint256 _catId) public view returns (bool categoryExist) + { + return m_categories[_catId].catid > 0; + } + + function getCategory(uint256 _catId) public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef) + { + require(existingCategory(_catId)); + return ( + m_categories[_catId].catid, + m_categories[_catId].name, + m_categories[_catId].description, + m_categories[_catId].workClockTimeRef + ); + } + + function getWorkerStatus(address _worker) public view returns (address workerPool, uint256 workerScore) + { + return (workerPoolHub.getWorkerAffectation(_worker), m_scores[_worker]); + } + + function getWorkerScore(address _worker) public view returns (uint256 workerScore) + { + return m_scores[_worker]; + } + + /** + * Worker subscription + */ + function registerToPool(address _worker) public returns (bool subscribed) + // msg.sender = workerPool + { + WorkerPool workerpool = WorkerPool(msg.sender); + // Check credentials + require(workerPoolHub.isWorkerPoolRegistered(msg.sender)); + // Lock worker deposit + require(lock(_worker, workerpool.m_subscriptionLockStakePolicy())); + // Check subscription policy + require(m_accounts[_worker].stake >= workerpool.m_subscriptionMinimumStakePolicy()); + require(m_scores[_worker] >= workerpool.m_subscriptionMinimumScorePolicy()); + // Update affectation + require(workerPoolHub.registerWorkerAffectation(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolSubscription(msg.sender, _worker); + return true; + } + + function unregisterFromPool(address _worker) public returns (bool unsubscribed) + // msg.sender = workerPool + { + require(removeWorker(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolUnsubscription(msg.sender, _worker); + return true; + } + + function evictWorker(address _worker) public returns (bool unsubscribed) + // msg.sender = workerpool + { + require(removeWorker(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolEviction(msg.sender, _worker); + return true; + } + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed) + { + WorkerPool workerpool = WorkerPool(_workerpool); + // Check credentials + require(workerPoolHub.isWorkerPoolRegistered(_workerpool)); + // Unlick worker stake + require(unlock(_worker, workerpool.m_subscriptionLockStakePolicy())); + // Update affectation + require(workerPoolHub.unregisterWorkerAffectation(_workerpool, _worker)); + return true; + } + + /** + * Stake, reward and penalty functions + */ + /* Marketplace */ + function lockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool) + { + require(lock(_user, _amount)); + return true; + } + function unlockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool) + { + require(unlock(_user, _amount)); + return true; + } + /* Work */ + function lockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(lock(_user, _amount)); + return true; + } + function unlockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(unlock(_user, _amount)); + return true; + } + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(reward(_worker, _amount)); + if (_reputation) + { + m_contributionHistory.success = m_contributionHistory.success.add(1); + m_scores[_worker] = m_scores[_worker].add(1); + emit AccurateContribution(_woid, _worker); + } + return true; + } + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(seize(_worker, _amount)); + if (_reputation) + { + m_contributionHistory.failed = m_contributionHistory.failed.add(1); + m_scores[_worker] = m_scores[_worker].sub(m_scores[_worker].min(SCORE_UNITARY_SLASH)); + emit FaultyContribution(_woid, _worker); + } + return true; + } + /** + * Wallet methods: public + */ + function deposit(uint256 _amount) external returns (bool) + { + require(rlc.transferFrom(msg.sender, address(this), _amount)); + m_accounts[msg.sender].stake = m_accounts[msg.sender].stake.add(_amount); + emit Deposit(msg.sender, _amount); + return true; + } + function withdraw(uint256 _amount) external returns (bool) + { + m_accounts[msg.sender].stake = m_accounts[msg.sender].stake.sub(_amount); + require(rlc.transfer(msg.sender, _amount)); + emit Withdraw(msg.sender, _amount); + return true; + } + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked) + { + return (m_accounts[_owner].stake, m_accounts[_owner].locked); + } + /** + * Wallet methods: Internal + */ + function reward(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].stake = m_accounts[_user].stake.add(_amount); + emit Reward(_user, _amount); + return true; + } + function seize(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].locked = m_accounts[_user].locked.sub(_amount); + emit Seize(_user, _amount); + return true; + } + function lock(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].stake = m_accounts[_user].stake.sub(_amount); + m_accounts[_user].locked = m_accounts[_user].locked.add(_amount); + return true; + } + function unlock(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].locked = m_accounts[_user].locked.sub(_amount); + m_accounts[_user].stake = m_accounts[_user].stake.add(_amount); + return true; + } +} diff --git a/contractsCompacted/Marketplace.sol b/contractsCompacted/Marketplace.sol new file mode 100644 index 00000000..72606cc1 --- /dev/null +++ b/contractsCompacted/Marketplace.sol @@ -0,0 +1,2344 @@ +//v1.0.14 +//License: Apache2.0 +pragma solidity ^0.4.21; + +library IexecLib +{ + /***************************************************************************/ + /* Market Order */ + /***************************************************************************/ + enum MarketOrderDirectionEnum + { + UNSET, + BID, + ASK, + CLOSED + } + struct MarketOrder + { + MarketOrderDirectionEnum direction; + uint256 category; // runtime selection + uint256 trust; // for PoCo + uint256 value; // value/cost/price + uint256 volume; // quantity of instances (total) + uint256 remaining; // remaining instances + address workerpool; // BID can use null for any + address workerpoolOwner; // fix ownership if workerpool ownership change during the workorder steps + } + + /***************************************************************************/ + /* Work Order */ + /***************************************************************************/ + enum WorkOrderStatusEnum + { + UNSET, // Work order not yet initialized (invalid address) + ACTIVE, // Marketed → constributions are open + REVEALING, // Starting consensus reveal + CLAIMED, // failed consensus + COMPLETED // Concensus achieved + } + + /***************************************************************************/ + /* Consensus */ + /* --- */ + /* used in WorkerPool.sol */ + /***************************************************************************/ + struct Consensus + { + uint256 poolReward; + uint256 stakeAmount; + bytes32 consensus; + uint256 revealDate; + uint256 revealCounter; + uint256 consensusTimeout; + uint256 winnerCount; + address[] contributors; + address workerpoolOwner; + uint256 schedulerRewardRatioPolicy; + + } + + /***************************************************************************/ + /* Contribution */ + /* --- */ + /* used in WorkerPool.sol */ + /***************************************************************************/ + enum ContributionStatusEnum + { + UNSET, + AUTHORIZED, + CONTRIBUTED, + PROVED, + REJECTED + } + struct Contribution + { + ContributionStatusEnum status; + bytes32 resultHash; + bytes32 resultSign; + address enclaveChallenge; + uint256 score; + uint256 weight; + } + + /***************************************************************************/ + /* Account / ContributionHistory / Category */ + /* --- */ + /* used in IexecHub.sol */ + /***************************************************************************/ + struct Account + { + uint256 stake; + uint256 locked; + } + + struct ContributionHistory // for credibility computation, f = failed/total + { + uint256 success; + uint256 failed; + } + + struct Category + { + uint256 catid; + string name; + string description; + uint256 workClockTimeRef; + } + +} + + +pragma solidity ^0.4.8; + +contract TokenSpender { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} + +pragma solidity ^0.4.8; + +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + +pragma solidity ^0.4.21; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + * last open zepplin version used for : add sub mul div function : https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol +* commit : https://github.com/OpenZeppelin/zeppelin-solidity/commit/815d9e1f457f57cfbb1b4e889f2255c9a517f661 + */ +library SafeMathOZ +{ + function add(uint256 a, uint256 b) internal pure returns (uint256) + { + uint256 c = a + b; + assert(c >= a); + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) + { + assert(b <= a); + return a - b; + } + + function mul(uint256 a, uint256 b) internal pure returns (uint256) + { + if (a == 0) + { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) + { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function max(uint256 a, uint256 b) internal pure returns (uint256) + { + return a >= b ? a : b; + } + + function min(uint256 a, uint256 b) internal pure returns (uint256) + { + return a < b ? a : b; + } + + function mulByFraction(uint256 a, uint256 b, uint256 c) internal pure returns (uint256) + { + return div(mul(a, b), c); + } + + function percentage(uint256 a, uint256 b) internal pure returns (uint256) + { + return mulByFraction(a, b, 100); + } + // Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity + function log(uint x) internal pure returns (uint y) + { + assembly + { + let arg := x + x := sub(x,1) + x := or(x, div(x, 0x02)) + x := or(x, div(x, 0x04)) + x := or(x, div(x, 0x10)) + x := or(x, div(x, 0x100)) + x := or(x, div(x, 0x10000)) + x := or(x, div(x, 0x100000000)) + x := or(x, div(x, 0x10000000000000000)) + x := or(x, div(x, 0x100000000000000000000000000000000)) + x := add(x, 1) + let m := mload(0x40) + mstore(m, 0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd) + mstore(add(m,0x20), 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe) + mstore(add(m,0x40), 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616) + mstore(add(m,0x60), 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff) + mstore(add(m,0x80), 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e) + mstore(add(m,0xa0), 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707) + mstore(add(m,0xc0), 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606) + mstore(add(m,0xe0), 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100) + mstore(0x40, add(m, 0x100)) + let magic := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff + let shift := 0x100000000000000000000000000000000000000000000000000000000000000 + let a := div(mul(x, magic), shift) + y := div(mload(add(m,sub(255,a))), shift) + y := add(y, mul(256, gt(arg, 0x8000000000000000000000000000000000000000000000000000000000000000))) + } + } +} + + +pragma solidity ^0.4.8; + +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + + +pragma solidity ^0.4.21; + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract OwnableOZ +{ + address public m_owner; + bool public m_changeable; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() + { + require(msg.sender == m_owner); + _; + } + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function OwnableOZ() public + { + m_owner = msg.sender; + m_changeable = true; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param _newOwner The address to transfer ownership to. + */ + function setImmutableOwnership(address _newOwner) public onlyOwner + { + require(m_changeable); + require(_newOwner != address(0)); + emit OwnershipTransferred(m_owner, _newOwner); + m_owner = _newOwner; + m_changeable = false; + } + +} + + +pragma solidity ^0.4.8; + +contract Ownable { + address public owner; + + function Ownable() { + owner = msg.sender; + } + + modifier onlyOwner() { + if (msg.sender == owner) + _; + } + + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) owner = newOwner; + } + +} + + + +pragma solidity ^0.4.8; + +contract RLC is ERC20, SafeMath, Ownable { + + /* Public variables of the token */ + string public name; //fancy name + string public symbol; + uint8 public decimals; //How many decimals to show. + string public version = 'v0.1'; + uint public initialSupply; + uint public totalSupply; + bool public locked; + //uint public unlockBlock; + + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + + // lock transfer during the ICO + modifier onlyUnlocked() { + if (msg.sender != owner && locked) throw; + _; + } + + /* + * The RLC Token created with the time at which the crowdsale end + */ + + function RLC() { + // lock the transfer function during the crowdsale + locked = true; + //unlockBlock= now + 45 days; // (testnet) - for mainnet put the block number + + initialSupply = 87000000000000000; + totalSupply = initialSupply; + balances[msg.sender] = initialSupply;// Give the creator all initial tokens + name = 'iEx.ec Network Token'; // Set the name for display purposes + symbol = 'RLC'; // Set the symbol for display purposes + decimals = 9; // Amount of decimals for display purposes + } + + function unlock() onlyOwner { + locked = false; + } + + function burn(uint256 _value) returns (bool){ + balances[msg.sender] = safeSub(balances[msg.sender], _value) ; + totalSupply = safeSub(totalSupply, _value); + Transfer(msg.sender, 0x0, _value); + return true; + } + + function transfer(address _to, uint _value) onlyUnlocked returns (bool) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint _value) onlyUnlocked returns (bool) { + var _allowance = allowed[_from][msg.sender]; + + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + + function approve(address _spender, uint _value) returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /* Approve and then comunicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData){ + TokenSpender spender = TokenSpender(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + } + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + + + +pragma solidity ^0.4.21; + +contract IexecHubInterface +{ + RLC public rlc; + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public; + + function setCategoriesCreator( + address _categoriesCreator) + public; + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public returns (uint256 catid); + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool); + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp); + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset); + + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address); + + function isWoidRegistred( + address _woid) + public view returns (bool); + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256); + + function claimFailedConsensus( + address _woid) + public returns (bool); + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public returns (bool); + + function getCategoryWorkClockTimeRef( + uint256 _catId) + public view returns (uint256 workClockTimeRef); + + function existingCategory( + uint256 _catId) + public view returns (bool categoryExist); + + function getCategory( + uint256 _catId) + public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef); + + function getWorkerStatus( + address _worker) + public view returns (address workerPool, uint256 workerScore); + + function getWorkerScore(address _worker) public view returns (uint256 workerScore); + + function registerToPool(address _worker) public returns (bool subscribed); + + function unregisterFromPool(address _worker) public returns (bool unsubscribed); + + function evictWorker(address _worker) public returns (bool unsubscribed); + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed); + + function lockForOrder(address _user, uint256 _amount) public returns (bool); + + function unlockForOrder(address _user, uint256 _amount) public returns (bool); + + function lockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function unlockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function deposit(uint256 _amount) external returns (bool); + + function withdraw(uint256 _amount) external returns (bool); + + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked); + + function reward(address _user, uint256 _amount) internal returns (bool); + + function seize(address _user, uint256 _amount) internal returns (bool); + + function lock(address _user, uint256 _amount) internal returns (bool); + + function unlock(address _user, uint256 _amount) internal returns (bool); +} + + + +pragma solidity ^0.4.21; + + +contract IexecHubAccessor +{ + IexecHubInterface internal iexecHubInterface; + + modifier onlyIexecHub() + { + require(msg.sender == address(iexecHubInterface)); + _; + } + + function IexecHubAccessor(address _iexecHubAddress) public + { + require(_iexecHubAddress != address(0)); + iexecHubInterface = IexecHubInterface(_iexecHubAddress); + } + +} + + +pragma solidity ^0.4.21; + +contract MarketplaceInterface +{ + function createMarketOrder( + IexecLib.MarketOrderDirectionEnum _direction, + uint256 _category, + uint256 _trust, + uint256 _value, + address _workerpool, + uint256 _volume) + public returns (uint); + + function closeMarketOrder( + uint256 _marketorderIdx) + public returns (bool); + + function getMarketOrderValue( + uint256 _marketorderIdx) + public view returns(uint256); + + function getMarketOrderWorkerpoolOwner( + uint256 _marketorderIdx) + public view returns(address); + + function getMarketOrderCategory( + uint256 _marketorderIdx) + public view returns (uint256); + + function getMarketOrderTrust( + uint256 _marketorderIdx) + public view returns(uint256); + + function getMarketOrder( + uint256 _marketorderIdx) + public view returns( + IexecLib.MarketOrderDirectionEnum direction, + uint256 category, // runtime selection + uint256 trust, // for PoCo + uint256 value, // value/cost/price + uint256 volume, // quantity of instances (total) + uint256 remaining, // remaining instances + address workerpool); // BID can use null for any +} + + +pragma solidity ^0.4.21; + +contract MarketplaceAccessor +{ + address internal marketplaceAddress; + MarketplaceInterface internal marketplaceInterface; +/* not used + modifier onlyMarketplace() + { + require(msg.sender == marketplaceAddress); + _; + }*/ + + function MarketplaceAccessor(address _marketplaceAddress) public + { + require(_marketplaceAddress != address(0)); + marketplaceAddress = _marketplaceAddress; + marketplaceInterface = MarketplaceInterface(_marketplaceAddress); + } +} + +pragma solidity ^0.4.21; + +contract WorkOrder +{ + + + event WorkOrderActivated(); + event WorkOrderReActivated(); + event WorkOrderRevealing(); + event WorkOrderClaimed (); + event WorkOrderCompleted(); + + /** + * Members + */ + IexecLib.WorkOrderStatusEnum public m_status; + + uint256 public m_marketorderIdx; + + address public m_app; + address public m_dataset; + address public m_workerpool; + address public m_requester; + + uint256 public m_emitcost; + string public m_params; + address public m_callback; + address public m_beneficiary; + + bytes32 public m_resultCallbackProof; + string public m_stdout; + string public m_stderr; + string public m_uri; + + address public m_iexecHubAddress; + + modifier onlyIexecHub() + { + require(msg.sender == m_iexecHubAddress); + _; + } + + /** + * Constructor + */ + function WorkOrder( + uint256 _marketorderIdx, + address _requester, + address _app, + address _dataset, + address _workerpool, + uint256 _emitcost, + string _params, + address _callback, + address _beneficiary) + public + { + m_iexecHubAddress = msg.sender; + require(_requester != address(0)); + m_status = IexecLib.WorkOrderStatusEnum.ACTIVE; + m_marketorderIdx = _marketorderIdx; + m_app = _app; + m_dataset = _dataset; + m_workerpool = _workerpool; + m_requester = _requester; + m_emitcost = _emitcost; + m_params = _params; + m_callback = _callback; + m_beneficiary = _beneficiary; + // needed for the scheduler to authorize api token access on this m_beneficiary address in case _requester is a smart contract. + } + + function startRevealingPhase() public returns (bool) + { + require(m_workerpool == msg.sender); + require(m_status == IexecLib.WorkOrderStatusEnum.ACTIVE); + m_status = IexecLib.WorkOrderStatusEnum.REVEALING; + emit WorkOrderRevealing(); + return true; + } + + function reActivate() public returns (bool) + { + require(m_workerpool == msg.sender); + require(m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.ACTIVE; + emit WorkOrderReActivated(); + return true; + } + + + function claim() public onlyIexecHub + { + require(m_status == IexecLib.WorkOrderStatusEnum.ACTIVE || m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.CLAIMED; + emit WorkOrderClaimed(); + } + + + function setResult(string _stdout, string _stderr, string _uri) public onlyIexecHub + { + require(m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.COMPLETED; + m_stdout = _stdout; + m_stderr = _stderr; + m_uri = _uri; + m_resultCallbackProof =keccak256(_stdout,_stderr,_uri); + emit WorkOrderCompleted(); + } + +} + + +pragma solidity ^0.4.21; + + +contract App is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_appName; + uint256 public m_appPrice; + string public m_appParams; + + /** + * Constructor + */ + function App( + address _iexecHubAddress, + string _appName, + uint256 _appPrice, + string _appParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_appName = _appName; + m_appPrice = _appPrice; + m_appParams = _appParams; + + } + + + +} + + +pragma solidity ^0.4.21; + + +contract AppHub is OwnableOZ // is Owned by IexecHub +{ + + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_appCountByOwner; + mapping(address => mapping(uint256 => address)) m_appByOwnerByIndex; + mapping(address => bool) m_appRegistered; + + mapping(uint256 => address) m_appByIndex; + uint256 public m_totalAppCount; + + /** + * Constructor + */ + function AppHub() public + { + } + + /** + * Methods + */ + function isAppRegistered(address _app) public view returns (bool) + { + return m_appRegistered[_app]; + } + function getAppsCount(address _owner) public view returns (uint256) + { + return m_appCountByOwner[_owner]; + } + function getApp(address _owner, uint256 _index) public view returns (address) + { + return m_appByOwnerByIndex[_owner][_index]; + } + function getAppByIndex(uint256 _index) public view returns (address) + { + return m_appByIndex[_index]; + } + + function addApp(address _owner, address _app) internal + { + uint id = m_appCountByOwner[_owner].add(1); + m_totalAppCount=m_totalAppCount.add(1); + m_appByIndex [m_totalAppCount] = _app; + m_appCountByOwner [_owner] = id; + m_appByOwnerByIndex[_owner][id] = _app; + m_appRegistered [_app] = true; + } + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdApp) + { + // tx.origin == owner + // msg.sender == IexecHub + address newApp = new App( + msg.sender, + _appName, + _appPrice, + _appParams + ); + addApp(tx.origin, newApp); + return newApp; + } + +} + +pragma solidity ^0.4.21; + + +contract Dataset is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_datasetName; + uint256 public m_datasetPrice; + string public m_datasetParams; + + /** + * Constructor + */ + function Dataset( + address _iexecHubAddress, + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_datasetName = _datasetName; + m_datasetPrice = _datasetPrice; + m_datasetParams = _datasetParams; + + } + + +} + + +pragma solidity ^0.4.21; + + +contract DatasetHub is OwnableOZ // is Owned by IexecHub +{ + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_datasetCountByOwner; + mapping(address => mapping(uint256 => address)) m_datasetByOwnerByIndex; + mapping(address => bool) m_datasetRegistered; + + mapping(uint256 => address) m_datasetByIndex; + uint256 public m_totalDatasetCount; + + + + /** + * Constructor + */ + function DatasetHub() public + { + } + + /** + * Methods + */ + function isDatasetRegistred(address _dataset) public view returns (bool) + { + return m_datasetRegistered[_dataset]; + } + function getDatasetsCount(address _owner) public view returns (uint256) + { + return m_datasetCountByOwner[_owner]; + } + function getDataset(address _owner, uint256 _index) public view returns (address) + { + return m_datasetByOwnerByIndex[_owner][_index]; + } + function getDatasetByIndex(uint256 _index) public view returns (address) + { + return m_datasetByIndex[_index]; + } + + function addDataset(address _owner, address _dataset) internal + { + uint id = m_datasetCountByOwner[_owner].add(1); + m_totalDatasetCount = m_totalDatasetCount.add(1); + m_datasetByIndex [m_totalDatasetCount] = _dataset; + m_datasetCountByOwner [_owner] = id; + m_datasetByOwnerByIndex[_owner][id] = _dataset; + m_datasetRegistered [_dataset] = true; + } + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdDataset) + { + // tx.origin == owner + // msg.sender == IexecHub + address newDataset = new Dataset( + msg.sender, + _datasetName, + _datasetPrice, + _datasetParams + ); + addDataset(tx.origin, newDataset); + return newDataset; + } +} + + +pragma solidity ^0.4.21; + +contract WorkerPoolHub is OwnableOZ // is Owned by IexecHub +{ + + using SafeMathOZ for uint256; + + /** + * Members + */ + // worker => workerPool + mapping(address => address) m_workerAffectation; + // owner => index + mapping(address => uint256) m_workerPoolCountByOwner; + // owner => index => workerPool + mapping(address => mapping(uint256 => address)) m_workerPoolByOwnerByIndex; + // workerPool => owner // stored in the workerPool + /* mapping(address => address) m_ownerByWorkerPool; */ + mapping(address => bool) m_workerPoolRegistered; + + mapping(uint256 => address) m_workerPoolByIndex; + uint256 public m_totalWorkerPoolCount; + + + + /** + * Constructor + */ + function WorkerPoolHub() public + { + } + + /** + * Methods + */ + function isWorkerPoolRegistered(address _workerPool) public view returns (bool) + { + return m_workerPoolRegistered[_workerPool]; + } + function getWorkerPoolsCount(address _owner) public view returns (uint256) + { + return m_workerPoolCountByOwner[_owner]; + } + function getWorkerPool(address _owner, uint256 _index) public view returns (address) + { + return m_workerPoolByOwnerByIndex[_owner][_index]; + } + function getWorkerPoolByIndex(uint256 _index) public view returns (address) + { + return m_workerPoolByIndex[_index]; + } + function getWorkerAffectation(address _worker) public view returns (address workerPool) + { + return m_workerAffectation[_worker]; + } + + function addWorkerPool(address _owner, address _workerPool) internal + { + uint id = m_workerPoolCountByOwner[_owner].add(1); + m_totalWorkerPoolCount = m_totalWorkerPoolCount.add(1); + m_workerPoolByIndex [m_totalWorkerPoolCount] = _workerPool; + m_workerPoolCountByOwner [_owner] = id; + m_workerPoolByOwnerByIndex[_owner][id] = _workerPool; + m_workerPoolRegistered [_workerPool] = true; + } + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy, + address _marketplaceAddress) + external onlyOwner /*owner == IexecHub*/ returns (address createdWorkerPool) + { + // tx.origin == owner + // msg.sender == IexecHub + // At creating ownership is transfered to tx.origin + address newWorkerPool = new WorkerPool( + msg.sender, // iexecHubAddress + _description, + _subscriptionLockStakePolicy, + _subscriptionMinimumStakePolicy, + _subscriptionMinimumScorePolicy, + _marketplaceAddress + ); + addWorkerPool(tx.origin, newWorkerPool); + return newWorkerPool; + } + + function registerWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool subscribed) + { + // you must have no cuurent affectation on others worker Pool + require(m_workerAffectation[_worker] == address(0)); + m_workerAffectation[_worker] = _workerPool; + return true; + } + + function unregisterWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool unsubscribed) + { + require(m_workerAffectation[_worker] == _workerPool); + m_workerAffectation[_worker] = address(0); + return true; + } +} + + +pragma solidity ^0.4.21; + + +/** + * @title IexecHub + */ + +contract IexecHub +{ + using SafeMathOZ for uint256; + + /** + * RLC contract for token transfers. + */ + RLC public rlc; + + uint256 public constant STAKE_BONUS_RATIO = 10; + uint256 public constant STAKE_BONUS_MIN_THRESHOLD = 1000; + uint256 public constant SCORE_UNITARY_SLASH = 50; + + /** + * Slaves contracts + */ + AppHub public appHub; + DatasetHub public datasetHub; + WorkerPoolHub public workerPoolHub; + + /** + * Market place + */ + Marketplace public marketplace; + modifier onlyMarketplace() + { + require(msg.sender == address(marketplace)); + _; + } + /** + * Categories + */ + mapping(uint256 => IexecLib.Category) public m_categories; + uint256 public m_categoriesCount; + address public m_categoriesCreator; + modifier onlyCategoriesCreator() + { + require(msg.sender == m_categoriesCreator); + _; + } + + /** + * Escrow + */ + mapping(address => IexecLib.Account) public m_accounts; + + + /** + * workOrder Registered + */ + mapping(address => bool) public m_woidRegistered; + modifier onlyRegisteredWoid(address _woid) + { + require(m_woidRegistered[_woid]); + _; + } + + /** + * Reputation for PoCo + */ + mapping(address => uint256) public m_scores; + IexecLib.ContributionHistory public m_contributionHistory; + + + event WorkOrderActivated(address woid, address indexed workerPool); + event WorkOrderClaimed (address woid, address workerPool); + event WorkOrderCompleted(address woid, address workerPool); + + event CreateApp (address indexed appOwner, address indexed app, string appName, uint256 appPrice, string appParams ); + event CreateDataset (address indexed datasetOwner, address indexed dataset, string datasetName, uint256 datasetPrice, string datasetParams); + event CreateWorkerPool(address indexed workerPoolOwner, address indexed workerPool, string workerPoolDescription ); + + event CreateCategory (uint256 catid, string name, string description, uint256 workClockTimeRef); + + event WorkerPoolSubscription (address indexed workerPool, address worker); + event WorkerPoolUnsubscription(address indexed workerPool, address worker); + event WorkerPoolEviction (address indexed workerPool, address worker); + + event AccurateContribution(address woid, address indexed worker); + event FaultyContribution (address woid, address indexed worker); + + event Deposit (address owner, uint256 amount); + event Withdraw(address owner, uint256 amount); + event Reward (address user, uint256 amount); + event Seize (address user, uint256 amount); + + /** + * Constructor + */ + function IexecHub() + public + { + m_categoriesCreator = msg.sender; + } + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public onlyCategoriesCreator + { + require(address(rlc) == address(0)); + rlc = RLC (_tokenAddress ); + marketplace = Marketplace (_marketplaceAddress ); + workerPoolHub = WorkerPoolHub(_workerPoolHubAddress); + appHub = AppHub (_appHubAddress ); + datasetHub = DatasetHub (_datasetHubAddress ); + + } + + function setCategoriesCreator(address _categoriesCreator) + public onlyCategoriesCreator + { + m_categoriesCreator = _categoriesCreator; + } + /** + * Factory + */ + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public onlyCategoriesCreator returns (uint256 catid) + { + m_categoriesCount = m_categoriesCount.add(1); + IexecLib.Category storage category = m_categories[m_categoriesCount]; + category.catid = m_categoriesCount; + category.name = _name; + category.description = _description; + category.workClockTimeRef = _workClockTimeRef; + emit CreateCategory(m_categoriesCount, _name, _description, _workClockTimeRef); + return m_categoriesCount; + } + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool) + { + address newWorkerPool = workerPoolHub.createWorkerPool( + _description, + _subscriptionLockStakePolicy, + _subscriptionMinimumStakePolicy, + _subscriptionMinimumScorePolicy, + address(marketplace) + ); + emit CreateWorkerPool(tx.origin, newWorkerPool, _description); + return newWorkerPool; + } + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp) + { + address newApp = appHub.createApp( + _appName, + _appPrice, + _appParams + ); + emit CreateApp(tx.origin, newApp, _appName, _appPrice, _appParams); + return newApp; + } + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset) + { + address newDataset = datasetHub.createDataset( + _datasetName, + _datasetPrice, + _datasetParams + ); + emit CreateDataset(tx.origin, newDataset, _datasetName, _datasetPrice, _datasetParams); + return newDataset; + } + + /** + * WorkOrder Emission + */ + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address) + { + address requester = msg.sender; + require(marketplace.consumeMarketOrderAsk(_marketorderIdx, requester, _workerpool)); + + uint256 emitcost = lockWorkOrderCost(requester, _workerpool, _app, _dataset); + + WorkOrder workorder = new WorkOrder( + _marketorderIdx, + requester, + _app, + _dataset, + _workerpool, + emitcost, + _params, + _callback, + _beneficiary + ); + + m_woidRegistered[workorder] = true; + + require(WorkerPool(_workerpool).emitWorkOrder(workorder, _marketorderIdx)); + + emit WorkOrderActivated(workorder, _workerpool); + return workorder; + } + + function isWoidRegistred(address _woid) public view returns (bool) + { + return m_woidRegistered[_woid]; + } + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256) + { + // APP + App app = App(_app); + require(appHub.isAppRegistered (_app)); + // initialize usercost with dapp price + uint256 emitcost = app.m_appPrice(); + + // DATASET + if (_dataset != address(0)) // address(0) → no dataset + { + Dataset dataset = Dataset(_dataset); + require(datasetHub.isDatasetRegistred(_dataset)); + // add optional datasetPrice for userCost + emitcost = emitcost.add(dataset.m_datasetPrice()); + } + + // WORKERPOOL + require(workerPoolHub.isWorkerPoolRegistered(_workerpool)); + + require(lock(_requester, emitcost)); // Lock funds for app + dataset payment + + return emitcost; + } + + /** + * WorkOrder life cycle + */ + + function claimFailedConsensus(address _woid) + public onlyRegisteredWoid(_woid) returns (bool) + { + WorkOrder workorder = WorkOrder(_woid); + require(workorder.m_requester() == msg.sender); + WorkerPool workerpool = WorkerPool(workorder.m_workerpool()); + + IexecLib.WorkOrderStatusEnum currentStatus = workorder.m_status(); + require(currentStatus == IexecLib.WorkOrderStatusEnum.ACTIVE || currentStatus == IexecLib.WorkOrderStatusEnum.REVEALING); + // Unlock stakes for all workers + require(workerpool.claimFailedConsensus(_woid)); + workorder.claim(); // revert on error + + /* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */ + /* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */ + uint256 value; + address workerpoolOwner; + (,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas + uint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO()); + + require(unlock (workorder.m_requester(), value.add(workorder.m_emitcost()))); // UNLOCK THE FUNDS FOR REINBURSEMENT + require(seize (workerpoolOwner, workerpoolStake)); + // put workerpoolOwner stake seize into iexecHub address for bonus for scheduler on next well finalized Task + require(reward (this, workerpoolStake)); + require(lock (this, workerpoolStake)); + + emit WorkOrderClaimed(_woid, workorder.m_workerpool()); + return true; + } + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public onlyRegisteredWoid(_woid) returns (bool) + { + WorkOrder workorder = WorkOrder(_woid); + require(workorder.m_workerpool() == msg.sender); + require(workorder.m_status() == IexecLib.WorkOrderStatusEnum.REVEALING); + + // APP + App app = App(workorder.m_app()); + uint256 appPrice = app.m_appPrice(); + if (appPrice > 0) + { + require(reward(app.m_owner(), appPrice)); + } + + // DATASET + Dataset dataset = Dataset(workorder.m_dataset()); + if (dataset != address(0)) + { + uint256 datasetPrice = dataset.m_datasetPrice(); + if (datasetPrice > 0) + { + require(reward(dataset.m_owner(), datasetPrice)); + } + } + + // WORKERPOOL → rewarding done by the caller itself + + /** + * seize stacked funds from requester. + * reward = value: was locked at market making + * emitcost: was locked at when emiting the workorder + */ + /* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */ + /* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */ + uint256 value; + address workerpoolOwner; + (,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas + uint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO()); + + require(seize (workorder.m_requester(), value.add(workorder.m_emitcost()))); // seize funds for payment (market value + emitcost) + require(unlock(workerpoolOwner, workerpoolStake)); // unlock scheduler stake + + // write results + workorder.setResult(_stdout, _stderr, _uri); // revert on error + + // Rien ne se perd, rien ne se crée, tout se transfere + // distribute bonus to scheduler. jackpot bonus come from scheduler stake loose on IexecHub contract + // we reuse the varaible value for the kitty / fraction of the kitty (stack too deep) + /* (,value) = checkBalance(this); // kitty is locked on `this` wallet */ + value = m_accounts[this].locked; // kitty is locked on `this` wallet + if(value > 0) + { + value = value.min(value.percentage(STAKE_BONUS_RATIO).max(STAKE_BONUS_MIN_THRESHOLD)); + require(seize(this, value)); + require(reward(workerpoolOwner, value)); + } + + emit WorkOrderCompleted(_woid, workorder.m_workerpool()); + return true; + } + + /** + * Views + */ + function getCategoryWorkClockTimeRef(uint256 _catId) public view returns (uint256 workClockTimeRef) + { + require(existingCategory(_catId)); + return m_categories[_catId].workClockTimeRef; + } + + function existingCategory(uint256 _catId) public view returns (bool categoryExist) + { + return m_categories[_catId].catid > 0; + } + + function getCategory(uint256 _catId) public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef) + { + require(existingCategory(_catId)); + return ( + m_categories[_catId].catid, + m_categories[_catId].name, + m_categories[_catId].description, + m_categories[_catId].workClockTimeRef + ); + } + + function getWorkerStatus(address _worker) public view returns (address workerPool, uint256 workerScore) + { + return (workerPoolHub.getWorkerAffectation(_worker), m_scores[_worker]); + } + + function getWorkerScore(address _worker) public view returns (uint256 workerScore) + { + return m_scores[_worker]; + } + + /** + * Worker subscription + */ + function registerToPool(address _worker) public returns (bool subscribed) + // msg.sender = workerPool + { + WorkerPool workerpool = WorkerPool(msg.sender); + // Check credentials + require(workerPoolHub.isWorkerPoolRegistered(msg.sender)); + // Lock worker deposit + require(lock(_worker, workerpool.m_subscriptionLockStakePolicy())); + // Check subscription policy + require(m_accounts[_worker].stake >= workerpool.m_subscriptionMinimumStakePolicy()); + require(m_scores[_worker] >= workerpool.m_subscriptionMinimumScorePolicy()); + // Update affectation + require(workerPoolHub.registerWorkerAffectation(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolSubscription(msg.sender, _worker); + return true; + } + + function unregisterFromPool(address _worker) public returns (bool unsubscribed) + // msg.sender = workerPool + { + require(removeWorker(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolUnsubscription(msg.sender, _worker); + return true; + } + + function evictWorker(address _worker) public returns (bool unsubscribed) + // msg.sender = workerpool + { + require(removeWorker(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolEviction(msg.sender, _worker); + return true; + } + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed) + { + WorkerPool workerpool = WorkerPool(_workerpool); + // Check credentials + require(workerPoolHub.isWorkerPoolRegistered(_workerpool)); + // Unlick worker stake + require(unlock(_worker, workerpool.m_subscriptionLockStakePolicy())); + // Update affectation + require(workerPoolHub.unregisterWorkerAffectation(_workerpool, _worker)); + return true; + } + + /** + * Stake, reward and penalty functions + */ + /* Marketplace */ + function lockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool) + { + require(lock(_user, _amount)); + return true; + } + function unlockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool) + { + require(unlock(_user, _amount)); + return true; + } + /* Work */ + function lockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(lock(_user, _amount)); + return true; + } + function unlockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(unlock(_user, _amount)); + return true; + } + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(reward(_worker, _amount)); + if (_reputation) + { + m_contributionHistory.success = m_contributionHistory.success.add(1); + m_scores[_worker] = m_scores[_worker].add(1); + emit AccurateContribution(_woid, _worker); + } + return true; + } + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(seize(_worker, _amount)); + if (_reputation) + { + m_contributionHistory.failed = m_contributionHistory.failed.add(1); + m_scores[_worker] = m_scores[_worker].sub(m_scores[_worker].min(SCORE_UNITARY_SLASH)); + emit FaultyContribution(_woid, _worker); + } + return true; + } + /** + * Wallet methods: public + */ + function deposit(uint256 _amount) external returns (bool) + { + require(rlc.transferFrom(msg.sender, address(this), _amount)); + m_accounts[msg.sender].stake = m_accounts[msg.sender].stake.add(_amount); + emit Deposit(msg.sender, _amount); + return true; + } + function withdraw(uint256 _amount) external returns (bool) + { + m_accounts[msg.sender].stake = m_accounts[msg.sender].stake.sub(_amount); + require(rlc.transfer(msg.sender, _amount)); + emit Withdraw(msg.sender, _amount); + return true; + } + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked) + { + return (m_accounts[_owner].stake, m_accounts[_owner].locked); + } + /** + * Wallet methods: Internal + */ + function reward(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].stake = m_accounts[_user].stake.add(_amount); + emit Reward(_user, _amount); + return true; + } + function seize(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].locked = m_accounts[_user].locked.sub(_amount); + emit Seize(_user, _amount); + return true; + } + function lock(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].stake = m_accounts[_user].stake.sub(_amount); + m_accounts[_user].locked = m_accounts[_user].locked.add(_amount); + return true; + } + function unlock(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].locked = m_accounts[_user].locked.sub(_amount); + m_accounts[_user].stake = m_accounts[_user].stake.add(_amount); + return true; + } +} + + + +pragma solidity ^0.4.21; + +contract IexecCallbackInterface +{ + + function workOrderCallback( + address _woid, + string _stdout, + string _stderr, + string _uri) public returns (bool); + + event WorkOrderCallback(address woid, string stdout, string stderr, string uri); +} + +pragma solidity ^0.4.21; + + +contract WorkerPool is OwnableOZ, IexecHubAccessor, MarketplaceAccessor +{ + using SafeMathOZ for uint256; + + + /** + * Members + */ + string public m_description; + uint256 public m_stakeRatioPolicy; // % of reward to stake + uint256 public m_schedulerRewardRatioPolicy; // % of reward given to scheduler + uint256 public m_subscriptionLockStakePolicy; // Stake locked when in workerpool - Constant set by constructor, do not update + uint256 public m_subscriptionMinimumStakePolicy; // Minimum stake for subscribing + uint256 public m_subscriptionMinimumScorePolicy; // Minimum score for subscribing + address[] public m_workers; + mapping(address => uint256) public m_workerIndex; + + // mapping(woid => IexecLib.Consensus) + mapping(address => IexecLib.Consensus) public m_consensus; + // mapping(woid => worker address => Contribution); + mapping(address => mapping(address => IexecLib.Contribution)) public m_contributions; + + uint256 public constant REVEAL_PERIOD_DURATION_RATIO = 2; + uint256 public constant CONSENSUS_DURATION_RATIO = 10; + + /** + * Address of slave/related contracts + */ + address public m_workerPoolHubAddress; + + + /** + * Events + */ + event WorkerPoolPolicyUpdate( + uint256 oldStakeRatioPolicy, uint256 newStakeRatioPolicy, + uint256 oldSchedulerRewardRatioPolicy, uint256 newSchedulerRewardRatioPolicy, + uint256 oldSubscriptionMinimumStakePolicy, uint256 newSubscriptionMinimumStakePolicy, + uint256 oldSubscriptionMinimumScorePolicy, uint256 newSubscriptionMinimumScorePolicy); + + event WorkOrderActive (address indexed woid); + event WorkOrderClaimed (address indexed woid); + + event AllowWorkerToContribute (address indexed woid, address indexed worker, uint256 workerScore); + event Contribute (address indexed woid, address indexed worker, bytes32 resultHash); + event RevealConsensus (address indexed woid, bytes32 consensus); + event Reveal (address indexed woid, address indexed worker, bytes32 result); + event Reopen (address indexed woid); + event FinalizeWork (address indexed woid, string stdout, string stderr, string uri); + + + + event WorkerSubscribe (address indexed worker); + event WorkerUnsubscribe (address indexed worker); + event WorkerEviction (address indexed worker); + + /** + * Methods + */ + // Constructor + function WorkerPool( + address _iexecHubAddress, + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy, + address _marketplaceAddress) + IexecHubAccessor(_iexecHubAddress) + MarketplaceAccessor(_marketplaceAddress) + public + { + // tx.origin == owner + // msg.sender == WorkerPoolHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_description = _description; + m_stakeRatioPolicy = 30; // % of the work order price to stake + m_schedulerRewardRatioPolicy = 1; // % of the work reward going to scheduler vs workers reward + m_subscriptionLockStakePolicy = _subscriptionLockStakePolicy; // only at creation. cannot be change to respect lock/unlock of worker stake + m_subscriptionMinimumStakePolicy = _subscriptionMinimumStakePolicy; + m_subscriptionMinimumScorePolicy = _subscriptionMinimumScorePolicy; + m_workerPoolHubAddress = msg.sender; + + } + + function changeWorkerPoolPolicy( + uint256 _newStakeRatioPolicy, + uint256 _newSchedulerRewardRatioPolicy, + uint256 _newSubscriptionMinimumStakePolicy, + uint256 _newSubscriptionMinimumScorePolicy) + public onlyOwner + { + emit WorkerPoolPolicyUpdate( + m_stakeRatioPolicy, _newStakeRatioPolicy, + m_schedulerRewardRatioPolicy, _newSchedulerRewardRatioPolicy, + m_subscriptionMinimumStakePolicy, _newSubscriptionMinimumStakePolicy, + m_subscriptionMinimumScorePolicy, _newSubscriptionMinimumScorePolicy + ); + require(_newSchedulerRewardRatioPolicy <= 100); + m_stakeRatioPolicy = _newStakeRatioPolicy; + m_schedulerRewardRatioPolicy = _newSchedulerRewardRatioPolicy; + m_subscriptionMinimumStakePolicy = _newSubscriptionMinimumStakePolicy; + m_subscriptionMinimumScorePolicy = _newSubscriptionMinimumScorePolicy; + } + + /************************* worker list management **************************/ + function getWorkerAddress(uint _index) public view returns (address) + { + return m_workers[_index]; + } + function getWorkerIndex(address _worker) public view returns (uint) + { + uint index = m_workerIndex[_worker]; + require(m_workers[index] == _worker); + return index; + } + function getWorkersCount() public view returns (uint) + { + return m_workers.length; + } + + function subscribeToPool() public returns (bool) + { + // msg.sender = worker + require(iexecHubInterface.registerToPool(msg.sender)); + uint index = m_workers.push(msg.sender); + m_workerIndex[msg.sender] = index.sub(1); + emit WorkerSubscribe(msg.sender); + return true; + } + + function unsubscribeFromPool() public returns (bool) + { + // msg.sender = worker + require(iexecHubInterface.unregisterFromPool(msg.sender)); + require(removeWorker(msg.sender)); + emit WorkerUnsubscribe(msg.sender); + return true; + } + + function evictWorker(address _worker) public onlyOwner returns (bool) + { + // msg.sender = scheduler + require(iexecHubInterface.evictWorker(_worker)); + require(removeWorker(_worker)); + emit WorkerEviction(_worker); + return true; + } + + function removeWorker(address _worker) internal returns (bool) + { + uint index = getWorkerIndex(_worker); // fails if worker not registered + address lastWorker = m_workers[m_workers.length.sub(1)]; + m_workers [index ] = lastWorker; + m_workerIndex[lastWorker] = index; + delete m_workers[m_workers.length.sub(1)]; + m_workers.length = m_workers.length.sub(1); + return true; + } + + function getConsensusDetails(address _woid) public view returns ( + uint256 c_poolReward, + uint256 c_stakeAmount, + bytes32 c_consensus, + uint256 c_revealDate, + uint256 c_revealCounter, + uint256 c_consensusTimeout, + uint256 c_winnerCount, + address c_workerpoolOwner) + { + IexecLib.Consensus storage consensus = m_consensus[_woid]; + return ( + consensus.poolReward, + consensus.stakeAmount, + consensus.consensus, + consensus.revealDate, + consensus.revealCounter, + consensus.consensusTimeout, + consensus.winnerCount, + consensus.workerpoolOwner + ); + } + + function getContributorsCount(address _woid) public view returns (uint256 contributorsCount) + { + return m_consensus[_woid].contributors.length; + } + + function getContributor(address _woid, uint256 index) public view returns (address contributor) + { + return m_consensus[_woid].contributors[index]; + } + + function existingContribution(address _woid, address _worker) public view returns (bool contributionExist) + { + return m_contributions[_woid][_worker].status != IexecLib.ContributionStatusEnum.UNSET; + } + + function getContribution(address _woid, address _worker) public view returns + ( + IexecLib.ContributionStatusEnum status, + bytes32 resultHash, + bytes32 resultSign, + address enclaveChallenge, + uint256 score, + uint256 weight) + { + require(existingContribution(_woid, _worker)); // no silent value returned + IexecLib.Contribution storage contribution = m_contributions[_woid][_worker]; + return ( + contribution.status, + contribution.resultHash, + contribution.resultSign, + contribution.enclaveChallenge, + contribution.score, + contribution.weight + ); + } + + + /**************************** Works management *****************************/ + function emitWorkOrder(address _woid, uint256 _marketorderIdx) public onlyIexecHub returns (bool) + { + uint256 catid = marketplaceInterface.getMarketOrderCategory(_marketorderIdx); + uint256 timeout = iexecHubInterface.getCategoryWorkClockTimeRef(catid).mul(CONSENSUS_DURATION_RATIO).add(now); + + IexecLib.Consensus storage consensus = m_consensus[_woid]; + consensus.poolReward = marketplaceInterface.getMarketOrderValue(_marketorderIdx); + consensus.workerpoolOwner = marketplaceInterface.getMarketOrderWorkerpoolOwner(_marketorderIdx); + consensus.stakeAmount = consensus.poolReward.percentage(m_stakeRatioPolicy); + consensus.consensusTimeout = timeout; + consensus.schedulerRewardRatioPolicy = m_schedulerRewardRatioPolicy; + + emit WorkOrderActive(_woid); + + return true; + } + + function claimFailedConsensus(address _woid) public onlyIexecHub returns (bool) + { + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now > consensus.consensusTimeout); + uint256 i; + address w; + for (i = 0; i < consensus.contributors.length; ++i) + { + w = consensus.contributors[i]; + if (m_contributions[_woid][w].status != IexecLib.ContributionStatusEnum.AUTHORIZED) + { + require(iexecHubInterface.unlockForWork(_woid, w, consensus.stakeAmount)); + } + } + emit WorkOrderClaimed(_woid); + return true; + } + + function allowWorkersToContribute(address _woid, address[] _workers, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool) + { + for (uint i = 0; i < _workers.length; ++i) + { + require(allowWorkerToContribute(_woid, _workers[i], _enclaveChallenge)); + } + return true; + } + + function allowWorkerToContribute(address _woid, address _worker, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE); + IexecLib.Contribution storage contribution = m_contributions[_woid][_worker]; + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + + address workerPool; + uint256 workerScore; + (workerPool, workerScore) = iexecHubInterface.getWorkerStatus(_worker); // workerPool, workerScore + require(workerPool == address(this)); + + require(contribution.status == IexecLib.ContributionStatusEnum.UNSET); + contribution.status = IexecLib.ContributionStatusEnum.AUTHORIZED; + contribution.enclaveChallenge = _enclaveChallenge; + + emit AllowWorkerToContribute(_woid, _worker, workerScore); + return true; + } + + function contribute(address _woid, bytes32 _resultHash, bytes32 _resultSign, uint8 _v, bytes32 _r, bytes32 _s) public returns (uint256 workerStake) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE); // can't contribute on a claimed or completed workorder + IexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender]; + + // msg.sender = a worker + require(_resultHash != 0x0); + require(_resultSign != 0x0); + if (contribution.enclaveChallenge != address(0)) + { + require(contribution.enclaveChallenge == ecrecover(keccak256("\x19Ethereum Signed Message:\n64", _resultHash, _resultSign), _v, _r, _s)); + } + + require(contribution.status == IexecLib.ContributionStatusEnum.AUTHORIZED); + contribution.status = IexecLib.ContributionStatusEnum.CONTRIBUTED; + contribution.resultHash = _resultHash; + contribution.resultSign = _resultSign; + contribution.score = iexecHubInterface.getWorkerScore(msg.sender); + consensus.contributors.push(msg.sender); + + require(iexecHubInterface.lockForWork(_woid, msg.sender, consensus.stakeAmount)); + emit Contribute(_woid, msg.sender, _resultHash); + return consensus.stakeAmount; + } + + function revealConsensus(address _woid, bytes32 _consensus) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(WorkOrder(_woid).startRevealingPhase()); + + consensus.winnerCount = 0; + for (uint256 i = 0; i 0); // you cannot revealConsensus if no worker has contributed to this hash + + consensus.consensus = _consensus; + consensus.revealDate = iexecHubInterface.getCategoryWorkClockTimeRef(marketplaceInterface.getMarketOrderCategory(WorkOrder(_woid).m_marketorderIdx())).mul(REVEAL_PERIOD_DURATION_RATIO).add(now); // is it better to store th catid ? + emit RevealConsensus(_woid, _consensus); + return true; + } + + function reveal(address _woid, bytes32 _result) public returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + IexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender]; + + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.REVEALING ); + require(consensus.revealDate > now ); + require(contribution.status == IexecLib.ContributionStatusEnum.CONTRIBUTED); + require(contribution.resultHash == consensus.consensus ); + require(contribution.resultHash == keccak256(_result ) ); + require(contribution.resultSign == keccak256(_result ^ keccak256(msg.sender)) ); + + contribution.status = IexecLib.ContributionStatusEnum.PROVED; + consensus.revealCounter = consensus.revealCounter.add(1); + + emit Reveal(_woid, msg.sender, _result); + return true; + } + + function reopen(address _woid) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(consensus.revealDate <= now && consensus.revealCounter == 0); + require(WorkOrder(_woid).reActivate()); + + for (uint256 i = 0; i < consensus.contributors.length; ++i) + { + address w = consensus.contributors[i]; + if (m_contributions[_woid][w].resultHash == consensus.consensus) + { + m_contributions[_woid][w].status = IexecLib.ContributionStatusEnum.REJECTED; + } + } + // Reset to status before revealConsensus. Must be after REJECTED traitement above because of consensus.consensus check + consensus.winnerCount = 0; + consensus.consensus = 0x0; + consensus.revealDate = 0; + emit Reopen(_woid); + return true; + } + + // if sheduler never call finalized ? no incetive to do that. schedulermust be pay also at this time + function finalizeWork(address _woid, string _stdout, string _stderr, string _uri) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require((consensus.revealDate <= now && consensus.revealCounter > 0) || (consensus.revealCounter == consensus.winnerCount)); // consensus.winnerCount never 0 at this step + + // add penalized to the call worker to contribution and they never contribute ? + require(distributeRewards(_woid, consensus)); + + require(iexecHubInterface.finalizeWorkOrder(_woid, _stdout, _stderr, _uri)); + emit FinalizeWork(_woid,_stdout,_stderr,_uri); + return true; + } + + function distributeRewards(address _woid, IexecLib.Consensus _consensus) internal returns (bool) + { + uint256 i; + address w; + uint256 workerBonus; + uint256 workerWeight; + uint256 totalWeight; + uint256 individualWorkerReward; + uint256 totalReward = _consensus.poolReward; + address[] memory contributors = _consensus.contributors; + for (i = 0; i 0); + + // compute how much is going to the workers + uint256 totalWorkersReward = totalReward.percentage(uint256(100).sub(_consensus.schedulerRewardRatioPolicy)); + + for (i = 0; iIexecLib.MarketOrder) public m_orderBook; + + uint256 public constant ASK_STAKE_RATIO = 30; + + /** + * Events + */ + event MarketOrderCreated (uint marketorderIdx); + event MarketOrderClosed (uint marketorderIdx); + event MarketOrderAskConsume(uint marketorderIdx, address requester); + + /** + * Constructor + */ + function Marketplace(address _iexecHubAddress) + IexecHubAccessor(_iexecHubAddress) + public + { + } + + /** + * Market orders + */ + function createMarketOrder( + IexecLib.MarketOrderDirectionEnum _direction, + uint256 _category, + uint256 _trust, + uint256 _value, + address _workerpool, + uint256 _volume) + public returns (uint) + { + require(iexecHubInterface.existingCategory(_category)); + require(_volume >0); + m_orderCount = m_orderCount.add(1); + IexecLib.MarketOrder storage marketorder = m_orderBook[m_orderCount]; + marketorder.direction = _direction; + marketorder.category = _category; + marketorder.trust = _trust; + marketorder.value = _value; + marketorder.volume = _volume; + marketorder.remaining = _volume; + + if (_direction == IexecLib.MarketOrderDirectionEnum.ASK) + { + require(WorkerPool(_workerpool).m_owner() == msg.sender); + + require(iexecHubInterface.lockForOrder(msg.sender, _value.percentage(ASK_STAKE_RATIO).mul(_volume))); // mul must be done after percentage to avoid rounding errors + marketorder.workerpool = _workerpool; + marketorder.workerpoolOwner = msg.sender; + } + else + { + // no BID implementation + revert(); + } + emit MarketOrderCreated(m_orderCount); + return m_orderCount; + } + + function closeMarketOrder(uint256 _marketorderIdx) public returns (bool) + { + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + if (marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK) + { + require(marketorder.workerpoolOwner == msg.sender); + require(iexecHubInterface.unlockForOrder(marketorder.workerpoolOwner, marketorder.value.percentage(ASK_STAKE_RATIO).mul(marketorder.remaining))); // mul must be done after percentage to avoid rounding errors + } + else + { + // no BID implementation + revert(); + } + marketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED; + emit MarketOrderClosed(_marketorderIdx); + return true; + } + + + /** + * Assets consumption + */ + function consumeMarketOrderAsk( + uint256 _marketorderIdx, + address _requester, + address _workerpool) + public onlyIexecHub returns (bool) + { + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + require(marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK); + require(marketorder.remaining > 0); + require(marketorder.workerpool == _workerpool); + + marketorder.remaining = marketorder.remaining.sub(1); + if (marketorder.remaining == 0) + { + marketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED; + } + require(iexecHubInterface.lockForOrder(_requester, marketorder.value)); + emit MarketOrderAskConsume(_marketorderIdx, _requester); + return true; + } + + function existingMarketOrder(uint256 _marketorderIdx) public view returns (bool marketOrderExist) + { + return m_orderBook[_marketorderIdx].category > 0; + } + + /** + * Views + */ + function getMarketOrderValue(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].value; + } + function getMarketOrderWorkerpoolOwner(uint256 _marketorderIdx) public view returns (address) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].workerpoolOwner; + } + function getMarketOrderCategory(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].category; + } + function getMarketOrderTrust(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].trust; + } + function getMarketOrder(uint256 _marketorderIdx) public view returns + ( + IexecLib.MarketOrderDirectionEnum direction, + uint256 category, // runtime selection + uint256 trust, // for PoCo + uint256 value, // value/cost/price + uint256 volume, // quantity of instances (total) + uint256 remaining, // remaining instances + address workerpool, // BID can use null for any + address workerpoolOwner) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + return ( + marketorder.direction, + marketorder.category, + marketorder.trust, + marketorder.value, + marketorder.volume, + marketorder.remaining, + marketorder.workerpool, + marketorder.workerpoolOwner + ); + } + + /** + * Callback Proof managment + */ + + event WorkOrderCallbackProof(address indexed woid, address requester, address beneficiary,address indexed callbackTo, address indexed gasCallbackProvider,string stdout, string stderr , string uri); + + //mapping(workorder => bool) + mapping(address => bool) m_callbackDone; + + function isCallbackDone(address _woid) public view returns (bool callbackDone) + { + return m_callbackDone[_woid]; + } + + function workOrderCallback(address _woid,string _stdout, string _stderr, string _uri) public + { + require(iexecHubInterface.isWoidRegistred(_woid)); + require(!isCallbackDone(_woid)); + m_callbackDone[_woid] = true; + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.COMPLETED); + require(WorkOrder(_woid).m_resultCallbackProof() == keccak256(_stdout,_stderr,_uri)); + address callbackTo =WorkOrder(_woid).m_callback(); + require(callbackTo != address(0)); + require(IexecCallbackInterface(callbackTo).workOrderCallback( + _woid, + _stdout, + _stderr, + _uri + )); + emit WorkOrderCallbackProof(_woid,WorkOrder(_woid).m_requester(),WorkOrder(_woid).m_beneficiary(),callbackTo,tx.origin,_stdout,_stderr,_uri); + } + +} diff --git a/contractsCompacted/WorkerPoolHub.sol b/contractsCompacted/WorkerPoolHub.sol new file mode 100644 index 00000000..9d9d8da0 --- /dev/null +++ b/contractsCompacted/WorkerPoolHub.sol @@ -0,0 +1,2343 @@ +//v1.0.14 +//License: Apache2.0 +pragma solidity ^0.4.8; + +contract TokenSpender { + function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); +} + +pragma solidity ^0.4.8; + +contract ERC20 { + uint public totalSupply; + function balanceOf(address who) constant returns (uint); + function allowance(address owner, address spender) constant returns (uint); + + function transfer(address to, uint value) returns (bool ok); + function transferFrom(address from, address to, uint value) returns (bool ok); + function approve(address spender, uint value) returns (bool ok); + event Transfer(address indexed from, address indexed to, uint value); + event Approval(address indexed owner, address indexed spender, uint value); +} + +pragma solidity ^0.4.8; + +contract SafeMath { + function safeMul(uint a, uint b) internal returns (uint) { + uint c = a * b; + assert(a == 0 || c / a == b); + return c; + } + + function safeDiv(uint a, uint b) internal returns (uint) { + assert(b > 0); + uint c = a / b; + assert(a == b * c + a % b); + return c; + } + + function safeSub(uint a, uint b) internal returns (uint) { + assert(b <= a); + return a - b; + } + + function safeAdd(uint a, uint b) internal returns (uint) { + uint c = a + b; + assert(c>=a && c>=b); + return c; + } + + function max64(uint64 a, uint64 b) internal constant returns (uint64) { + return a >= b ? a : b; + } + + function min64(uint64 a, uint64 b) internal constant returns (uint64) { + return a < b ? a : b; + } + + function max256(uint256 a, uint256 b) internal constant returns (uint256) { + return a >= b ? a : b; + } + + function min256(uint256 a, uint256 b) internal constant returns (uint256) { + return a < b ? a : b; + } + + function assert(bool assertion) internal { + if (!assertion) { + throw; + } + } +} + +pragma solidity ^0.4.21; + + +/** + * @title SafeMath + * @dev Math operations with safety checks that throw on error + * last open zepplin version used for : add sub mul div function : https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol +* commit : https://github.com/OpenZeppelin/zeppelin-solidity/commit/815d9e1f457f57cfbb1b4e889f2255c9a517f661 + */ +library SafeMathOZ +{ + function add(uint256 a, uint256 b) internal pure returns (uint256) + { + uint256 c = a + b; + assert(c >= a); + return c; + } + + function sub(uint256 a, uint256 b) internal pure returns (uint256) + { + assert(b <= a); + return a - b; + } + + function mul(uint256 a, uint256 b) internal pure returns (uint256) + { + if (a == 0) + { + return 0; + } + uint256 c = a * b; + assert(c / a == b); + return c; + } + + function div(uint256 a, uint256 b) internal pure returns (uint256) + { + // assert(b > 0); // Solidity automatically throws when dividing by 0 + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + return c; + } + + function max(uint256 a, uint256 b) internal pure returns (uint256) + { + return a >= b ? a : b; + } + + function min(uint256 a, uint256 b) internal pure returns (uint256) + { + return a < b ? a : b; + } + + function mulByFraction(uint256 a, uint256 b, uint256 c) internal pure returns (uint256) + { + return div(mul(a, b), c); + } + + function percentage(uint256 a, uint256 b) internal pure returns (uint256) + { + return mulByFraction(a, b, 100); + } + // Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity + function log(uint x) internal pure returns (uint y) + { + assembly + { + let arg := x + x := sub(x,1) + x := or(x, div(x, 0x02)) + x := or(x, div(x, 0x04)) + x := or(x, div(x, 0x10)) + x := or(x, div(x, 0x100)) + x := or(x, div(x, 0x10000)) + x := or(x, div(x, 0x100000000)) + x := or(x, div(x, 0x10000000000000000)) + x := or(x, div(x, 0x100000000000000000000000000000000)) + x := add(x, 1) + let m := mload(0x40) + mstore(m, 0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd) + mstore(add(m,0x20), 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe) + mstore(add(m,0x40), 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616) + mstore(add(m,0x60), 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff) + mstore(add(m,0x80), 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e) + mstore(add(m,0xa0), 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707) + mstore(add(m,0xc0), 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606) + mstore(add(m,0xe0), 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100) + mstore(0x40, add(m, 0x100)) + let magic := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff + let shift := 0x100000000000000000000000000000000000000000000000000000000000000 + let a := div(mul(x, magic), shift) + y := div(mload(add(m,sub(255,a))), shift) + y := add(y, mul(256, gt(arg, 0x8000000000000000000000000000000000000000000000000000000000000000))) + } + } +} + + +pragma solidity ^0.4.8; + +contract Ownable { + address public owner; + + function Ownable() { + owner = msg.sender; + } + + modifier onlyOwner() { + if (msg.sender == owner) + _; + } + + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) owner = newOwner; + } + +} + +pragma solidity ^0.4.21; + +/** + * @title Ownable + * @dev The Ownable contract has an owner address, and provides basic authorization control + * functions, this simplifies the implementation of "user permissions". + */ +contract OwnableOZ +{ + address public m_owner; + bool public m_changeable; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() + { + require(msg.sender == m_owner); + _; + } + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function OwnableOZ() public + { + m_owner = msg.sender; + m_changeable = true; + } + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param _newOwner The address to transfer ownership to. + */ + function setImmutableOwnership(address _newOwner) public onlyOwner + { + require(m_changeable); + require(_newOwner != address(0)); + emit OwnershipTransferred(m_owner, _newOwner); + m_owner = _newOwner; + m_changeable = false; + } + +} + + +pragma solidity ^0.4.8; + +contract RLC is ERC20, SafeMath, Ownable { + + /* Public variables of the token */ + string public name; //fancy name + string public symbol; + uint8 public decimals; //How many decimals to show. + string public version = 'v0.1'; + uint public initialSupply; + uint public totalSupply; + bool public locked; + //uint public unlockBlock; + + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; + + // lock transfer during the ICO + modifier onlyUnlocked() { + if (msg.sender != owner && locked) throw; + _; + } + + /* + * The RLC Token created with the time at which the crowdsale end + */ + + function RLC() { + // lock the transfer function during the crowdsale + locked = true; + //unlockBlock= now + 45 days; // (testnet) - for mainnet put the block number + + initialSupply = 87000000000000000; + totalSupply = initialSupply; + balances[msg.sender] = initialSupply;// Give the creator all initial tokens + name = 'iEx.ec Network Token'; // Set the name for display purposes + symbol = 'RLC'; // Set the symbol for display purposes + decimals = 9; // Amount of decimals for display purposes + } + + function unlock() onlyOwner { + locked = false; + } + + function burn(uint256 _value) returns (bool){ + balances[msg.sender] = safeSub(balances[msg.sender], _value) ; + totalSupply = safeSub(totalSupply, _value); + Transfer(msg.sender, 0x0, _value); + return true; + } + + function transfer(address _to, uint _value) onlyUnlocked returns (bool) { + balances[msg.sender] = safeSub(balances[msg.sender], _value); + balances[_to] = safeAdd(balances[_to], _value); + Transfer(msg.sender, _to, _value); + return true; + } + + function transferFrom(address _from, address _to, uint _value) onlyUnlocked returns (bool) { + var _allowance = allowed[_from][msg.sender]; + + balances[_to] = safeAdd(balances[_to], _value); + balances[_from] = safeSub(balances[_from], _value); + allowed[_from][msg.sender] = safeSub(_allowance, _value); + Transfer(_from, _to, _value); + return true; + } + + function balanceOf(address _owner) constant returns (uint balance) { + return balances[_owner]; + } + + function approve(address _spender, uint _value) returns (bool) { + allowed[msg.sender][_spender] = _value; + Approval(msg.sender, _spender, _value); + return true; + } + + /* Approve and then comunicate the approved contract in a single tx */ + function approveAndCall(address _spender, uint256 _value, bytes _extraData){ + TokenSpender spender = TokenSpender(_spender); + if (approve(_spender, _value)) { + spender.receiveApproval(msg.sender, _value, this, _extraData); + } + } + + function allowance(address _owner, address _spender) constant returns (uint remaining) { + return allowed[_owner][_spender]; + } + +} + +pragma solidity ^0.4.21; + +library IexecLib +{ + /***************************************************************************/ + /* Market Order */ + /***************************************************************************/ + enum MarketOrderDirectionEnum + { + UNSET, + BID, + ASK, + CLOSED + } + struct MarketOrder + { + MarketOrderDirectionEnum direction; + uint256 category; // runtime selection + uint256 trust; // for PoCo + uint256 value; // value/cost/price + uint256 volume; // quantity of instances (total) + uint256 remaining; // remaining instances + address workerpool; // BID can use null for any + address workerpoolOwner; // fix ownership if workerpool ownership change during the workorder steps + } + + /***************************************************************************/ + /* Work Order */ + /***************************************************************************/ + enum WorkOrderStatusEnum + { + UNSET, // Work order not yet initialized (invalid address) + ACTIVE, // Marketed → constributions are open + REVEALING, // Starting consensus reveal + CLAIMED, // failed consensus + COMPLETED // Concensus achieved + } + + /***************************************************************************/ + /* Consensus */ + /* --- */ + /* used in WorkerPool.sol */ + /***************************************************************************/ + struct Consensus + { + uint256 poolReward; + uint256 stakeAmount; + bytes32 consensus; + uint256 revealDate; + uint256 revealCounter; + uint256 consensusTimeout; + uint256 winnerCount; + address[] contributors; + address workerpoolOwner; + uint256 schedulerRewardRatioPolicy; + + } + + /***************************************************************************/ + /* Contribution */ + /* --- */ + /* used in WorkerPool.sol */ + /***************************************************************************/ + enum ContributionStatusEnum + { + UNSET, + AUTHORIZED, + CONTRIBUTED, + PROVED, + REJECTED + } + struct Contribution + { + ContributionStatusEnum status; + bytes32 resultHash; + bytes32 resultSign; + address enclaveChallenge; + uint256 score; + uint256 weight; + } + + /***************************************************************************/ + /* Account / ContributionHistory / Category */ + /* --- */ + /* used in IexecHub.sol */ + /***************************************************************************/ + struct Account + { + uint256 stake; + uint256 locked; + } + + struct ContributionHistory // for credibility computation, f = failed/total + { + uint256 success; + uint256 failed; + } + + struct Category + { + uint256 catid; + string name; + string description; + uint256 workClockTimeRef; + } + +} + + +pragma solidity ^0.4.21; + + +contract IexecHubInterface +{ + RLC public rlc; + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public; + + function setCategoriesCreator( + address _categoriesCreator) + public; + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public returns (uint256 catid); + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool); + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp); + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset); + + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address); + + function isWoidRegistred( + address _woid) + public view returns (bool); + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256); + + function claimFailedConsensus( + address _woid) + public returns (bool); + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public returns (bool); + + function getCategoryWorkClockTimeRef( + uint256 _catId) + public view returns (uint256 workClockTimeRef); + + function existingCategory( + uint256 _catId) + public view returns (bool categoryExist); + + function getCategory( + uint256 _catId) + public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef); + + function getWorkerStatus( + address _worker) + public view returns (address workerPool, uint256 workerScore); + + function getWorkerScore(address _worker) public view returns (uint256 workerScore); + + function registerToPool(address _worker) public returns (bool subscribed); + + function unregisterFromPool(address _worker) public returns (bool unsubscribed); + + function evictWorker(address _worker) public returns (bool unsubscribed); + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed); + + function lockForOrder(address _user, uint256 _amount) public returns (bool); + + function unlockForOrder(address _user, uint256 _amount) public returns (bool); + + function lockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function unlockForWork(address _woid, address _user, uint256 _amount) public returns (bool); + + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public returns (bool); + + function deposit(uint256 _amount) external returns (bool); + + function withdraw(uint256 _amount) external returns (bool); + + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked); + + function reward(address _user, uint256 _amount) internal returns (bool); + + function seize(address _user, uint256 _amount) internal returns (bool); + + function lock(address _user, uint256 _amount) internal returns (bool); + + function unlock(address _user, uint256 _amount) internal returns (bool); +} + + +pragma solidity ^0.4.21; + + +contract IexecHubAccessor +{ + IexecHubInterface internal iexecHubInterface; + + modifier onlyIexecHub() + { + require(msg.sender == address(iexecHubInterface)); + _; + } + + function IexecHubAccessor(address _iexecHubAddress) public + { + require(_iexecHubAddress != address(0)); + iexecHubInterface = IexecHubInterface(_iexecHubAddress); + } + +} + +pragma solidity ^0.4.21; +contract MarketplaceInterface +{ + function createMarketOrder( + IexecLib.MarketOrderDirectionEnum _direction, + uint256 _category, + uint256 _trust, + uint256 _value, + address _workerpool, + uint256 _volume) + public returns (uint); + + function closeMarketOrder( + uint256 _marketorderIdx) + public returns (bool); + + function getMarketOrderValue( + uint256 _marketorderIdx) + public view returns(uint256); + + function getMarketOrderWorkerpoolOwner( + uint256 _marketorderIdx) + public view returns(address); + + function getMarketOrderCategory( + uint256 _marketorderIdx) + public view returns (uint256); + + function getMarketOrderTrust( + uint256 _marketorderIdx) + public view returns(uint256); + + function getMarketOrder( + uint256 _marketorderIdx) + public view returns( + IexecLib.MarketOrderDirectionEnum direction, + uint256 category, // runtime selection + uint256 trust, // for PoCo + uint256 value, // value/cost/price + uint256 volume, // quantity of instances (total) + uint256 remaining, // remaining instances + address workerpool); // BID can use null for any +} + + + + +pragma solidity ^0.4.21; + + +contract MarketplaceAccessor +{ + address internal marketplaceAddress; + MarketplaceInterface internal marketplaceInterface; +/* not used + modifier onlyMarketplace() + { + require(msg.sender == marketplaceAddress); + _; + }*/ + + function MarketplaceAccessor(address _marketplaceAddress) public + { + require(_marketplaceAddress != address(0)); + marketplaceAddress = _marketplaceAddress; + marketplaceInterface = MarketplaceInterface(_marketplaceAddress); + } +} + + +pragma solidity ^0.4.21; + +contract WorkOrder +{ + + + event WorkOrderActivated(); + event WorkOrderReActivated(); + event WorkOrderRevealing(); + event WorkOrderClaimed (); + event WorkOrderCompleted(); + + /** + * Members + */ + IexecLib.WorkOrderStatusEnum public m_status; + + uint256 public m_marketorderIdx; + + address public m_app; + address public m_dataset; + address public m_workerpool; + address public m_requester; + + uint256 public m_emitcost; + string public m_params; + address public m_callback; + address public m_beneficiary; + + bytes32 public m_resultCallbackProof; + string public m_stdout; + string public m_stderr; + string public m_uri; + + address public m_iexecHubAddress; + + modifier onlyIexecHub() + { + require(msg.sender == m_iexecHubAddress); + _; + } + + /** + * Constructor + */ + function WorkOrder( + uint256 _marketorderIdx, + address _requester, + address _app, + address _dataset, + address _workerpool, + uint256 _emitcost, + string _params, + address _callback, + address _beneficiary) + public + { + m_iexecHubAddress = msg.sender; + require(_requester != address(0)); + m_status = IexecLib.WorkOrderStatusEnum.ACTIVE; + m_marketorderIdx = _marketorderIdx; + m_app = _app; + m_dataset = _dataset; + m_workerpool = _workerpool; + m_requester = _requester; + m_emitcost = _emitcost; + m_params = _params; + m_callback = _callback; + m_beneficiary = _beneficiary; + // needed for the scheduler to authorize api token access on this m_beneficiary address in case _requester is a smart contract. + } + + function startRevealingPhase() public returns (bool) + { + require(m_workerpool == msg.sender); + require(m_status == IexecLib.WorkOrderStatusEnum.ACTIVE); + m_status = IexecLib.WorkOrderStatusEnum.REVEALING; + emit WorkOrderRevealing(); + return true; + } + + function reActivate() public returns (bool) + { + require(m_workerpool == msg.sender); + require(m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.ACTIVE; + emit WorkOrderReActivated(); + return true; + } + + + function claim() public onlyIexecHub + { + require(m_status == IexecLib.WorkOrderStatusEnum.ACTIVE || m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.CLAIMED; + emit WorkOrderClaimed(); + } + + + function setResult(string _stdout, string _stderr, string _uri) public onlyIexecHub + { + require(m_status == IexecLib.WorkOrderStatusEnum.REVEALING); + m_status = IexecLib.WorkOrderStatusEnum.COMPLETED; + m_stdout = _stdout; + m_stderr = _stderr; + m_uri = _uri; + m_resultCallbackProof =keccak256(_stdout,_stderr,_uri); + emit WorkOrderCompleted(); + } + +} + +pragma solidity ^0.4.21; + +contract IexecCallbackInterface +{ + + function workOrderCallback( + address _woid, + string _stdout, + string _stderr, + string _uri) public returns (bool); + + event WorkOrderCallback(address woid, string stdout, string stderr, string uri); +} + + +pragma solidity ^0.4.21; + +contract Marketplace is IexecHubAccessor +{ + using SafeMathOZ for uint256; + + /** + * Marketplace + */ + uint public m_orderCount; + mapping(uint =>IexecLib.MarketOrder) public m_orderBook; + + uint256 public constant ASK_STAKE_RATIO = 30; + + /** + * Events + */ + event MarketOrderCreated (uint marketorderIdx); + event MarketOrderClosed (uint marketorderIdx); + event MarketOrderAskConsume(uint marketorderIdx, address requester); + + /** + * Constructor + */ + function Marketplace(address _iexecHubAddress) + IexecHubAccessor(_iexecHubAddress) + public + { + } + + /** + * Market orders + */ + function createMarketOrder( + IexecLib.MarketOrderDirectionEnum _direction, + uint256 _category, + uint256 _trust, + uint256 _value, + address _workerpool, + uint256 _volume) + public returns (uint) + { + require(iexecHubInterface.existingCategory(_category)); + require(_volume >0); + m_orderCount = m_orderCount.add(1); + IexecLib.MarketOrder storage marketorder = m_orderBook[m_orderCount]; + marketorder.direction = _direction; + marketorder.category = _category; + marketorder.trust = _trust; + marketorder.value = _value; + marketorder.volume = _volume; + marketorder.remaining = _volume; + + if (_direction == IexecLib.MarketOrderDirectionEnum.ASK) + { + require(WorkerPool(_workerpool).m_owner() == msg.sender); + + require(iexecHubInterface.lockForOrder(msg.sender, _value.percentage(ASK_STAKE_RATIO).mul(_volume))); // mul must be done after percentage to avoid rounding errors + marketorder.workerpool = _workerpool; + marketorder.workerpoolOwner = msg.sender; + } + else + { + // no BID implementation + revert(); + } + emit MarketOrderCreated(m_orderCount); + return m_orderCount; + } + + function closeMarketOrder(uint256 _marketorderIdx) public returns (bool) + { + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + if (marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK) + { + require(marketorder.workerpoolOwner == msg.sender); + require(iexecHubInterface.unlockForOrder(marketorder.workerpoolOwner, marketorder.value.percentage(ASK_STAKE_RATIO).mul(marketorder.remaining))); // mul must be done after percentage to avoid rounding errors + } + else + { + // no BID implementation + revert(); + } + marketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED; + emit MarketOrderClosed(_marketorderIdx); + return true; + } + + + /** + * Assets consumption + */ + function consumeMarketOrderAsk( + uint256 _marketorderIdx, + address _requester, + address _workerpool) + public onlyIexecHub returns (bool) + { + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + require(marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK); + require(marketorder.remaining > 0); + require(marketorder.workerpool == _workerpool); + + marketorder.remaining = marketorder.remaining.sub(1); + if (marketorder.remaining == 0) + { + marketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED; + } + require(iexecHubInterface.lockForOrder(_requester, marketorder.value)); + emit MarketOrderAskConsume(_marketorderIdx, _requester); + return true; + } + + function existingMarketOrder(uint256 _marketorderIdx) public view returns (bool marketOrderExist) + { + return m_orderBook[_marketorderIdx].category > 0; + } + + /** + * Views + */ + function getMarketOrderValue(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].value; + } + function getMarketOrderWorkerpoolOwner(uint256 _marketorderIdx) public view returns (address) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].workerpoolOwner; + } + function getMarketOrderCategory(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].category; + } + function getMarketOrderTrust(uint256 _marketorderIdx) public view returns (uint256) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + return m_orderBook[_marketorderIdx].trust; + } + function getMarketOrder(uint256 _marketorderIdx) public view returns + ( + IexecLib.MarketOrderDirectionEnum direction, + uint256 category, // runtime selection + uint256 trust, // for PoCo + uint256 value, // value/cost/price + uint256 volume, // quantity of instances (total) + uint256 remaining, // remaining instances + address workerpool, // BID can use null for any + address workerpoolOwner) + { + require(existingMarketOrder(_marketorderIdx)); // no silent value returned + IexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx]; + return ( + marketorder.direction, + marketorder.category, + marketorder.trust, + marketorder.value, + marketorder.volume, + marketorder.remaining, + marketorder.workerpool, + marketorder.workerpoolOwner + ); + } + + /** + * Callback Proof managment + */ + + event WorkOrderCallbackProof(address indexed woid, address requester, address beneficiary,address indexed callbackTo, address indexed gasCallbackProvider,string stdout, string stderr , string uri); + + //mapping(workorder => bool) + mapping(address => bool) m_callbackDone; + + function isCallbackDone(address _woid) public view returns (bool callbackDone) + { + return m_callbackDone[_woid]; + } + + function workOrderCallback(address _woid,string _stdout, string _stderr, string _uri) public + { + require(iexecHubInterface.isWoidRegistred(_woid)); + require(!isCallbackDone(_woid)); + m_callbackDone[_woid] = true; + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.COMPLETED); + require(WorkOrder(_woid).m_resultCallbackProof() == keccak256(_stdout,_stderr,_uri)); + address callbackTo =WorkOrder(_woid).m_callback(); + require(callbackTo != address(0)); + require(IexecCallbackInterface(callbackTo).workOrderCallback( + _woid, + _stdout, + _stderr, + _uri + )); + emit WorkOrderCallbackProof(_woid,WorkOrder(_woid).m_requester(),WorkOrder(_woid).m_beneficiary(),callbackTo,tx.origin,_stdout,_stderr,_uri); + } + +} + + + +pragma solidity ^0.4.21; + + +contract App is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_appName; + uint256 public m_appPrice; + string public m_appParams; + + /** + * Constructor + */ + function App( + address _iexecHubAddress, + string _appName, + uint256 _appPrice, + string _appParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_appName = _appName; + m_appPrice = _appPrice; + m_appParams = _appParams; + + } + + + +} + +pragma solidity ^0.4.21; + + + +contract AppHub is OwnableOZ // is Owned by IexecHub +{ + + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_appCountByOwner; + mapping(address => mapping(uint256 => address)) m_appByOwnerByIndex; + mapping(address => bool) m_appRegistered; + + mapping(uint256 => address) m_appByIndex; + uint256 public m_totalAppCount; + + /** + * Constructor + */ + function AppHub() public + { + } + + /** + * Methods + */ + function isAppRegistered(address _app) public view returns (bool) + { + return m_appRegistered[_app]; + } + function getAppsCount(address _owner) public view returns (uint256) + { + return m_appCountByOwner[_owner]; + } + function getApp(address _owner, uint256 _index) public view returns (address) + { + return m_appByOwnerByIndex[_owner][_index]; + } + function getAppByIndex(uint256 _index) public view returns (address) + { + return m_appByIndex[_index]; + } + + function addApp(address _owner, address _app) internal + { + uint id = m_appCountByOwner[_owner].add(1); + m_totalAppCount=m_totalAppCount.add(1); + m_appByIndex [m_totalAppCount] = _app; + m_appCountByOwner [_owner] = id; + m_appByOwnerByIndex[_owner][id] = _app; + m_appRegistered [_app] = true; + } + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdApp) + { + // tx.origin == owner + // msg.sender == IexecHub + address newApp = new App( + msg.sender, + _appName, + _appPrice, + _appParams + ); + addApp(tx.origin, newApp); + return newApp; + } + +} + + +pragma solidity ^0.4.21; + +contract Dataset is OwnableOZ, IexecHubAccessor +{ + + /** + * Members + */ + string public m_datasetName; + uint256 public m_datasetPrice; + string public m_datasetParams; + + /** + * Constructor + */ + function Dataset( + address _iexecHubAddress, + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + IexecHubAccessor(_iexecHubAddress) + public + { + // tx.origin == owner + // msg.sender == DatasetHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_datasetName = _datasetName; + m_datasetPrice = _datasetPrice; + m_datasetParams = _datasetParams; + + } + + +} + + +pragma solidity ^0.4.21; + + +contract DatasetHub is OwnableOZ // is Owned by IexecHub +{ + using SafeMathOZ for uint256; + + /** + * Members + */ + mapping(address => uint256) m_datasetCountByOwner; + mapping(address => mapping(uint256 => address)) m_datasetByOwnerByIndex; + mapping(address => bool) m_datasetRegistered; + + mapping(uint256 => address) m_datasetByIndex; + uint256 public m_totalDatasetCount; + + + + /** + * Constructor + */ + function DatasetHub() public + { + } + + /** + * Methods + */ + function isDatasetRegistred(address _dataset) public view returns (bool) + { + return m_datasetRegistered[_dataset]; + } + function getDatasetsCount(address _owner) public view returns (uint256) + { + return m_datasetCountByOwner[_owner]; + } + function getDataset(address _owner, uint256 _index) public view returns (address) + { + return m_datasetByOwnerByIndex[_owner][_index]; + } + function getDatasetByIndex(uint256 _index) public view returns (address) + { + return m_datasetByIndex[_index]; + } + + function addDataset(address _owner, address _dataset) internal + { + uint id = m_datasetCountByOwner[_owner].add(1); + m_totalDatasetCount = m_totalDatasetCount.add(1); + m_datasetByIndex [m_totalDatasetCount] = _dataset; + m_datasetCountByOwner [_owner] = id; + m_datasetByOwnerByIndex[_owner][id] = _dataset; + m_datasetRegistered [_dataset] = true; + } + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + public onlyOwner /*owner == IexecHub*/ returns (address createdDataset) + { + // tx.origin == owner + // msg.sender == IexecHub + address newDataset = new Dataset( + msg.sender, + _datasetName, + _datasetPrice, + _datasetParams + ); + addDataset(tx.origin, newDataset); + return newDataset; + } +} + + +pragma solidity ^0.4.21; + + + +/** + * @title IexecHub + */ + +contract IexecHub +{ + using SafeMathOZ for uint256; + + /** + * RLC contract for token transfers. + */ + RLC public rlc; + + uint256 public constant STAKE_BONUS_RATIO = 10; + uint256 public constant STAKE_BONUS_MIN_THRESHOLD = 1000; + uint256 public constant SCORE_UNITARY_SLASH = 50; + + /** + * Slaves contracts + */ + AppHub public appHub; + DatasetHub public datasetHub; + WorkerPoolHub public workerPoolHub; + + /** + * Market place + */ + Marketplace public marketplace; + modifier onlyMarketplace() + { + require(msg.sender == address(marketplace)); + _; + } + /** + * Categories + */ + mapping(uint256 => IexecLib.Category) public m_categories; + uint256 public m_categoriesCount; + address public m_categoriesCreator; + modifier onlyCategoriesCreator() + { + require(msg.sender == m_categoriesCreator); + _; + } + + /** + * Escrow + */ + mapping(address => IexecLib.Account) public m_accounts; + + + /** + * workOrder Registered + */ + mapping(address => bool) public m_woidRegistered; + modifier onlyRegisteredWoid(address _woid) + { + require(m_woidRegistered[_woid]); + _; + } + + /** + * Reputation for PoCo + */ + mapping(address => uint256) public m_scores; + IexecLib.ContributionHistory public m_contributionHistory; + + + event WorkOrderActivated(address woid, address indexed workerPool); + event WorkOrderClaimed (address woid, address workerPool); + event WorkOrderCompleted(address woid, address workerPool); + + event CreateApp (address indexed appOwner, address indexed app, string appName, uint256 appPrice, string appParams ); + event CreateDataset (address indexed datasetOwner, address indexed dataset, string datasetName, uint256 datasetPrice, string datasetParams); + event CreateWorkerPool(address indexed workerPoolOwner, address indexed workerPool, string workerPoolDescription ); + + event CreateCategory (uint256 catid, string name, string description, uint256 workClockTimeRef); + + event WorkerPoolSubscription (address indexed workerPool, address worker); + event WorkerPoolUnsubscription(address indexed workerPool, address worker); + event WorkerPoolEviction (address indexed workerPool, address worker); + + event AccurateContribution(address woid, address indexed worker); + event FaultyContribution (address woid, address indexed worker); + + event Deposit (address owner, uint256 amount); + event Withdraw(address owner, uint256 amount); + event Reward (address user, uint256 amount); + event Seize (address user, uint256 amount); + + /** + * Constructor + */ + function IexecHub() + public + { + m_categoriesCreator = msg.sender; + } + + function attachContracts( + address _tokenAddress, + address _marketplaceAddress, + address _workerPoolHubAddress, + address _appHubAddress, + address _datasetHubAddress) + public onlyCategoriesCreator + { + require(address(rlc) == address(0)); + rlc = RLC (_tokenAddress ); + marketplace = Marketplace (_marketplaceAddress ); + workerPoolHub = WorkerPoolHub(_workerPoolHubAddress); + appHub = AppHub (_appHubAddress ); + datasetHub = DatasetHub (_datasetHubAddress ); + + } + + function setCategoriesCreator(address _categoriesCreator) + public onlyCategoriesCreator + { + m_categoriesCreator = _categoriesCreator; + } + /** + * Factory + */ + + function createCategory( + string _name, + string _description, + uint256 _workClockTimeRef) + public onlyCategoriesCreator returns (uint256 catid) + { + m_categoriesCount = m_categoriesCount.add(1); + IexecLib.Category storage category = m_categories[m_categoriesCount]; + category.catid = m_categoriesCount; + category.name = _name; + category.description = _description; + category.workClockTimeRef = _workClockTimeRef; + emit CreateCategory(m_categoriesCount, _name, _description, _workClockTimeRef); + return m_categoriesCount; + } + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy) + external returns (address createdWorkerPool) + { + address newWorkerPool = workerPoolHub.createWorkerPool( + _description, + _subscriptionLockStakePolicy, + _subscriptionMinimumStakePolicy, + _subscriptionMinimumScorePolicy, + address(marketplace) + ); + emit CreateWorkerPool(tx.origin, newWorkerPool, _description); + return newWorkerPool; + } + + function createApp( + string _appName, + uint256 _appPrice, + string _appParams) + external returns (address createdApp) + { + address newApp = appHub.createApp( + _appName, + _appPrice, + _appParams + ); + emit CreateApp(tx.origin, newApp, _appName, _appPrice, _appParams); + return newApp; + } + + function createDataset( + string _datasetName, + uint256 _datasetPrice, + string _datasetParams) + external returns (address createdDataset) + { + address newDataset = datasetHub.createDataset( + _datasetName, + _datasetPrice, + _datasetParams + ); + emit CreateDataset(tx.origin, newDataset, _datasetName, _datasetPrice, _datasetParams); + return newDataset; + } + + /** + * WorkOrder Emission + */ + function buyForWorkOrder( + uint256 _marketorderIdx, + address _workerpool, + address _app, + address _dataset, + string _params, + address _callback, + address _beneficiary) + external returns (address) + { + address requester = msg.sender; + require(marketplace.consumeMarketOrderAsk(_marketorderIdx, requester, _workerpool)); + + uint256 emitcost = lockWorkOrderCost(requester, _workerpool, _app, _dataset); + + WorkOrder workorder = new WorkOrder( + _marketorderIdx, + requester, + _app, + _dataset, + _workerpool, + emitcost, + _params, + _callback, + _beneficiary + ); + + m_woidRegistered[workorder] = true; + + require(WorkerPool(_workerpool).emitWorkOrder(workorder, _marketorderIdx)); + + emit WorkOrderActivated(workorder, _workerpool); + return workorder; + } + + function isWoidRegistred(address _woid) public view returns (bool) + { + return m_woidRegistered[_woid]; + } + + function lockWorkOrderCost( + address _requester, + address _workerpool, // Address of a smartcontract + address _app, // Address of a smartcontract + address _dataset) // Address of a smartcontract + internal returns (uint256) + { + // APP + App app = App(_app); + require(appHub.isAppRegistered (_app)); + // initialize usercost with dapp price + uint256 emitcost = app.m_appPrice(); + + // DATASET + if (_dataset != address(0)) // address(0) → no dataset + { + Dataset dataset = Dataset(_dataset); + require(datasetHub.isDatasetRegistred(_dataset)); + // add optional datasetPrice for userCost + emitcost = emitcost.add(dataset.m_datasetPrice()); + } + + // WORKERPOOL + require(workerPoolHub.isWorkerPoolRegistered(_workerpool)); + + require(lock(_requester, emitcost)); // Lock funds for app + dataset payment + + return emitcost; + } + + /** + * WorkOrder life cycle + */ + + function claimFailedConsensus(address _woid) + public onlyRegisteredWoid(_woid) returns (bool) + { + WorkOrder workorder = WorkOrder(_woid); + require(workorder.m_requester() == msg.sender); + WorkerPool workerpool = WorkerPool(workorder.m_workerpool()); + + IexecLib.WorkOrderStatusEnum currentStatus = workorder.m_status(); + require(currentStatus == IexecLib.WorkOrderStatusEnum.ACTIVE || currentStatus == IexecLib.WorkOrderStatusEnum.REVEALING); + // Unlock stakes for all workers + require(workerpool.claimFailedConsensus(_woid)); + workorder.claim(); // revert on error + + /* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */ + /* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */ + uint256 value; + address workerpoolOwner; + (,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas + uint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO()); + + require(unlock (workorder.m_requester(), value.add(workorder.m_emitcost()))); // UNLOCK THE FUNDS FOR REINBURSEMENT + require(seize (workerpoolOwner, workerpoolStake)); + // put workerpoolOwner stake seize into iexecHub address for bonus for scheduler on next well finalized Task + require(reward (this, workerpoolStake)); + require(lock (this, workerpoolStake)); + + emit WorkOrderClaimed(_woid, workorder.m_workerpool()); + return true; + } + + function finalizeWorkOrder( + address _woid, + string _stdout, + string _stderr, + string _uri) + public onlyRegisteredWoid(_woid) returns (bool) + { + WorkOrder workorder = WorkOrder(_woid); + require(workorder.m_workerpool() == msg.sender); + require(workorder.m_status() == IexecLib.WorkOrderStatusEnum.REVEALING); + + // APP + App app = App(workorder.m_app()); + uint256 appPrice = app.m_appPrice(); + if (appPrice > 0) + { + require(reward(app.m_owner(), appPrice)); + } + + // DATASET + Dataset dataset = Dataset(workorder.m_dataset()); + if (dataset != address(0)) + { + uint256 datasetPrice = dataset.m_datasetPrice(); + if (datasetPrice > 0) + { + require(reward(dataset.m_owner(), datasetPrice)); + } + } + + // WORKERPOOL → rewarding done by the caller itself + + /** + * seize stacked funds from requester. + * reward = value: was locked at market making + * emitcost: was locked at when emiting the workorder + */ + /* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */ + /* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */ + uint256 value; + address workerpoolOwner; + (,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas + uint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO()); + + require(seize (workorder.m_requester(), value.add(workorder.m_emitcost()))); // seize funds for payment (market value + emitcost) + require(unlock(workerpoolOwner, workerpoolStake)); // unlock scheduler stake + + // write results + workorder.setResult(_stdout, _stderr, _uri); // revert on error + + // Rien ne se perd, rien ne se crée, tout se transfere + // distribute bonus to scheduler. jackpot bonus come from scheduler stake loose on IexecHub contract + // we reuse the varaible value for the kitty / fraction of the kitty (stack too deep) + /* (,value) = checkBalance(this); // kitty is locked on `this` wallet */ + value = m_accounts[this].locked; // kitty is locked on `this` wallet + if(value > 0) + { + value = value.min(value.percentage(STAKE_BONUS_RATIO).max(STAKE_BONUS_MIN_THRESHOLD)); + require(seize(this, value)); + require(reward(workerpoolOwner, value)); + } + + emit WorkOrderCompleted(_woid, workorder.m_workerpool()); + return true; + } + + /** + * Views + */ + function getCategoryWorkClockTimeRef(uint256 _catId) public view returns (uint256 workClockTimeRef) + { + require(existingCategory(_catId)); + return m_categories[_catId].workClockTimeRef; + } + + function existingCategory(uint256 _catId) public view returns (bool categoryExist) + { + return m_categories[_catId].catid > 0; + } + + function getCategory(uint256 _catId) public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef) + { + require(existingCategory(_catId)); + return ( + m_categories[_catId].catid, + m_categories[_catId].name, + m_categories[_catId].description, + m_categories[_catId].workClockTimeRef + ); + } + + function getWorkerStatus(address _worker) public view returns (address workerPool, uint256 workerScore) + { + return (workerPoolHub.getWorkerAffectation(_worker), m_scores[_worker]); + } + + function getWorkerScore(address _worker) public view returns (uint256 workerScore) + { + return m_scores[_worker]; + } + + /** + * Worker subscription + */ + function registerToPool(address _worker) public returns (bool subscribed) + // msg.sender = workerPool + { + WorkerPool workerpool = WorkerPool(msg.sender); + // Check credentials + require(workerPoolHub.isWorkerPoolRegistered(msg.sender)); + // Lock worker deposit + require(lock(_worker, workerpool.m_subscriptionLockStakePolicy())); + // Check subscription policy + require(m_accounts[_worker].stake >= workerpool.m_subscriptionMinimumStakePolicy()); + require(m_scores[_worker] >= workerpool.m_subscriptionMinimumScorePolicy()); + // Update affectation + require(workerPoolHub.registerWorkerAffectation(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolSubscription(msg.sender, _worker); + return true; + } + + function unregisterFromPool(address _worker) public returns (bool unsubscribed) + // msg.sender = workerPool + { + require(removeWorker(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolUnsubscription(msg.sender, _worker); + return true; + } + + function evictWorker(address _worker) public returns (bool unsubscribed) + // msg.sender = workerpool + { + require(removeWorker(msg.sender, _worker)); + // Trigger event notice + emit WorkerPoolEviction(msg.sender, _worker); + return true; + } + + function removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed) + { + WorkerPool workerpool = WorkerPool(_workerpool); + // Check credentials + require(workerPoolHub.isWorkerPoolRegistered(_workerpool)); + // Unlick worker stake + require(unlock(_worker, workerpool.m_subscriptionLockStakePolicy())); + // Update affectation + require(workerPoolHub.unregisterWorkerAffectation(_workerpool, _worker)); + return true; + } + + /** + * Stake, reward and penalty functions + */ + /* Marketplace */ + function lockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool) + { + require(lock(_user, _amount)); + return true; + } + function unlockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool) + { + require(unlock(_user, _amount)); + return true; + } + /* Work */ + function lockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(lock(_user, _amount)); + return true; + } + function unlockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(unlock(_user, _amount)); + return true; + } + function rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(reward(_worker, _amount)); + if (_reputation) + { + m_contributionHistory.success = m_contributionHistory.success.add(1); + m_scores[_worker] = m_scores[_worker].add(1); + emit AccurateContribution(_woid, _worker); + } + return true; + } + function seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool) + { + require(WorkOrder(_woid).m_workerpool() == msg.sender); + require(seize(_worker, _amount)); + if (_reputation) + { + m_contributionHistory.failed = m_contributionHistory.failed.add(1); + m_scores[_worker] = m_scores[_worker].sub(m_scores[_worker].min(SCORE_UNITARY_SLASH)); + emit FaultyContribution(_woid, _worker); + } + return true; + } + /** + * Wallet methods: public + */ + function deposit(uint256 _amount) external returns (bool) + { + require(rlc.transferFrom(msg.sender, address(this), _amount)); + m_accounts[msg.sender].stake = m_accounts[msg.sender].stake.add(_amount); + emit Deposit(msg.sender, _amount); + return true; + } + function withdraw(uint256 _amount) external returns (bool) + { + m_accounts[msg.sender].stake = m_accounts[msg.sender].stake.sub(_amount); + require(rlc.transfer(msg.sender, _amount)); + emit Withdraw(msg.sender, _amount); + return true; + } + function checkBalance(address _owner) public view returns (uint256 stake, uint256 locked) + { + return (m_accounts[_owner].stake, m_accounts[_owner].locked); + } + /** + * Wallet methods: Internal + */ + function reward(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].stake = m_accounts[_user].stake.add(_amount); + emit Reward(_user, _amount); + return true; + } + function seize(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].locked = m_accounts[_user].locked.sub(_amount); + emit Seize(_user, _amount); + return true; + } + function lock(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].stake = m_accounts[_user].stake.sub(_amount); + m_accounts[_user].locked = m_accounts[_user].locked.add(_amount); + return true; + } + function unlock(address _user, uint256 _amount) internal returns (bool) + { + m_accounts[_user].locked = m_accounts[_user].locked.sub(_amount); + m_accounts[_user].stake = m_accounts[_user].stake.add(_amount); + return true; + } +} + + +pragma solidity ^0.4.21; + + +contract WorkerPool is OwnableOZ, IexecHubAccessor, MarketplaceAccessor +{ + using SafeMathOZ for uint256; + + + /** + * Members + */ + string public m_description; + uint256 public m_stakeRatioPolicy; // % of reward to stake + uint256 public m_schedulerRewardRatioPolicy; // % of reward given to scheduler + uint256 public m_subscriptionLockStakePolicy; // Stake locked when in workerpool - Constant set by constructor, do not update + uint256 public m_subscriptionMinimumStakePolicy; // Minimum stake for subscribing + uint256 public m_subscriptionMinimumScorePolicy; // Minimum score for subscribing + address[] public m_workers; + mapping(address => uint256) public m_workerIndex; + + // mapping(woid => IexecLib.Consensus) + mapping(address => IexecLib.Consensus) public m_consensus; + // mapping(woid => worker address => Contribution); + mapping(address => mapping(address => IexecLib.Contribution)) public m_contributions; + + uint256 public constant REVEAL_PERIOD_DURATION_RATIO = 2; + uint256 public constant CONSENSUS_DURATION_RATIO = 10; + + /** + * Address of slave/related contracts + */ + address public m_workerPoolHubAddress; + + + /** + * Events + */ + event WorkerPoolPolicyUpdate( + uint256 oldStakeRatioPolicy, uint256 newStakeRatioPolicy, + uint256 oldSchedulerRewardRatioPolicy, uint256 newSchedulerRewardRatioPolicy, + uint256 oldSubscriptionMinimumStakePolicy, uint256 newSubscriptionMinimumStakePolicy, + uint256 oldSubscriptionMinimumScorePolicy, uint256 newSubscriptionMinimumScorePolicy); + + event WorkOrderActive (address indexed woid); + event WorkOrderClaimed (address indexed woid); + + event AllowWorkerToContribute (address indexed woid, address indexed worker, uint256 workerScore); + event Contribute (address indexed woid, address indexed worker, bytes32 resultHash); + event RevealConsensus (address indexed woid, bytes32 consensus); + event Reveal (address indexed woid, address indexed worker, bytes32 result); + event Reopen (address indexed woid); + event FinalizeWork (address indexed woid, string stdout, string stderr, string uri); + + + + event WorkerSubscribe (address indexed worker); + event WorkerUnsubscribe (address indexed worker); + event WorkerEviction (address indexed worker); + + /** + * Methods + */ + // Constructor + function WorkerPool( + address _iexecHubAddress, + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy, + address _marketplaceAddress) + IexecHubAccessor(_iexecHubAddress) + MarketplaceAccessor(_marketplaceAddress) + public + { + // tx.origin == owner + // msg.sender == WorkerPoolHub + require(tx.origin != msg.sender); + setImmutableOwnership(tx.origin); // owner → tx.origin + + m_description = _description; + m_stakeRatioPolicy = 30; // % of the work order price to stake + m_schedulerRewardRatioPolicy = 1; // % of the work reward going to scheduler vs workers reward + m_subscriptionLockStakePolicy = _subscriptionLockStakePolicy; // only at creation. cannot be change to respect lock/unlock of worker stake + m_subscriptionMinimumStakePolicy = _subscriptionMinimumStakePolicy; + m_subscriptionMinimumScorePolicy = _subscriptionMinimumScorePolicy; + m_workerPoolHubAddress = msg.sender; + + } + + function changeWorkerPoolPolicy( + uint256 _newStakeRatioPolicy, + uint256 _newSchedulerRewardRatioPolicy, + uint256 _newSubscriptionMinimumStakePolicy, + uint256 _newSubscriptionMinimumScorePolicy) + public onlyOwner + { + emit WorkerPoolPolicyUpdate( + m_stakeRatioPolicy, _newStakeRatioPolicy, + m_schedulerRewardRatioPolicy, _newSchedulerRewardRatioPolicy, + m_subscriptionMinimumStakePolicy, _newSubscriptionMinimumStakePolicy, + m_subscriptionMinimumScorePolicy, _newSubscriptionMinimumScorePolicy + ); + require(_newSchedulerRewardRatioPolicy <= 100); + m_stakeRatioPolicy = _newStakeRatioPolicy; + m_schedulerRewardRatioPolicy = _newSchedulerRewardRatioPolicy; + m_subscriptionMinimumStakePolicy = _newSubscriptionMinimumStakePolicy; + m_subscriptionMinimumScorePolicy = _newSubscriptionMinimumScorePolicy; + } + + /************************* worker list management **************************/ + function getWorkerAddress(uint _index) public view returns (address) + { + return m_workers[_index]; + } + function getWorkerIndex(address _worker) public view returns (uint) + { + uint index = m_workerIndex[_worker]; + require(m_workers[index] == _worker); + return index; + } + function getWorkersCount() public view returns (uint) + { + return m_workers.length; + } + + function subscribeToPool() public returns (bool) + { + // msg.sender = worker + require(iexecHubInterface.registerToPool(msg.sender)); + uint index = m_workers.push(msg.sender); + m_workerIndex[msg.sender] = index.sub(1); + emit WorkerSubscribe(msg.sender); + return true; + } + + function unsubscribeFromPool() public returns (bool) + { + // msg.sender = worker + require(iexecHubInterface.unregisterFromPool(msg.sender)); + require(removeWorker(msg.sender)); + emit WorkerUnsubscribe(msg.sender); + return true; + } + + function evictWorker(address _worker) public onlyOwner returns (bool) + { + // msg.sender = scheduler + require(iexecHubInterface.evictWorker(_worker)); + require(removeWorker(_worker)); + emit WorkerEviction(_worker); + return true; + } + + function removeWorker(address _worker) internal returns (bool) + { + uint index = getWorkerIndex(_worker); // fails if worker not registered + address lastWorker = m_workers[m_workers.length.sub(1)]; + m_workers [index ] = lastWorker; + m_workerIndex[lastWorker] = index; + delete m_workers[m_workers.length.sub(1)]; + m_workers.length = m_workers.length.sub(1); + return true; + } + + function getConsensusDetails(address _woid) public view returns ( + uint256 c_poolReward, + uint256 c_stakeAmount, + bytes32 c_consensus, + uint256 c_revealDate, + uint256 c_revealCounter, + uint256 c_consensusTimeout, + uint256 c_winnerCount, + address c_workerpoolOwner) + { + IexecLib.Consensus storage consensus = m_consensus[_woid]; + return ( + consensus.poolReward, + consensus.stakeAmount, + consensus.consensus, + consensus.revealDate, + consensus.revealCounter, + consensus.consensusTimeout, + consensus.winnerCount, + consensus.workerpoolOwner + ); + } + + function getContributorsCount(address _woid) public view returns (uint256 contributorsCount) + { + return m_consensus[_woid].contributors.length; + } + + function getContributor(address _woid, uint256 index) public view returns (address contributor) + { + return m_consensus[_woid].contributors[index]; + } + + function existingContribution(address _woid, address _worker) public view returns (bool contributionExist) + { + return m_contributions[_woid][_worker].status != IexecLib.ContributionStatusEnum.UNSET; + } + + function getContribution(address _woid, address _worker) public view returns + ( + IexecLib.ContributionStatusEnum status, + bytes32 resultHash, + bytes32 resultSign, + address enclaveChallenge, + uint256 score, + uint256 weight) + { + require(existingContribution(_woid, _worker)); // no silent value returned + IexecLib.Contribution storage contribution = m_contributions[_woid][_worker]; + return ( + contribution.status, + contribution.resultHash, + contribution.resultSign, + contribution.enclaveChallenge, + contribution.score, + contribution.weight + ); + } + + + /**************************** Works management *****************************/ + function emitWorkOrder(address _woid, uint256 _marketorderIdx) public onlyIexecHub returns (bool) + { + uint256 catid = marketplaceInterface.getMarketOrderCategory(_marketorderIdx); + uint256 timeout = iexecHubInterface.getCategoryWorkClockTimeRef(catid).mul(CONSENSUS_DURATION_RATIO).add(now); + + IexecLib.Consensus storage consensus = m_consensus[_woid]; + consensus.poolReward = marketplaceInterface.getMarketOrderValue(_marketorderIdx); + consensus.workerpoolOwner = marketplaceInterface.getMarketOrderWorkerpoolOwner(_marketorderIdx); + consensus.stakeAmount = consensus.poolReward.percentage(m_stakeRatioPolicy); + consensus.consensusTimeout = timeout; + consensus.schedulerRewardRatioPolicy = m_schedulerRewardRatioPolicy; + + emit WorkOrderActive(_woid); + + return true; + } + + function claimFailedConsensus(address _woid) public onlyIexecHub returns (bool) + { + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now > consensus.consensusTimeout); + uint256 i; + address w; + for (i = 0; i < consensus.contributors.length; ++i) + { + w = consensus.contributors[i]; + if (m_contributions[_woid][w].status != IexecLib.ContributionStatusEnum.AUTHORIZED) + { + require(iexecHubInterface.unlockForWork(_woid, w, consensus.stakeAmount)); + } + } + emit WorkOrderClaimed(_woid); + return true; + } + + function allowWorkersToContribute(address _woid, address[] _workers, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool) + { + for (uint i = 0; i < _workers.length; ++i) + { + require(allowWorkerToContribute(_woid, _workers[i], _enclaveChallenge)); + } + return true; + } + + function allowWorkerToContribute(address _woid, address _worker, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE); + IexecLib.Contribution storage contribution = m_contributions[_woid][_worker]; + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + + address workerPool; + uint256 workerScore; + (workerPool, workerScore) = iexecHubInterface.getWorkerStatus(_worker); // workerPool, workerScore + require(workerPool == address(this)); + + require(contribution.status == IexecLib.ContributionStatusEnum.UNSET); + contribution.status = IexecLib.ContributionStatusEnum.AUTHORIZED; + contribution.enclaveChallenge = _enclaveChallenge; + + emit AllowWorkerToContribute(_woid, _worker, workerScore); + return true; + } + + function contribute(address _woid, bytes32 _resultHash, bytes32 _resultSign, uint8 _v, bytes32 _r, bytes32 _s) public returns (uint256 workerStake) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE); // can't contribute on a claimed or completed workorder + IexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender]; + + // msg.sender = a worker + require(_resultHash != 0x0); + require(_resultSign != 0x0); + if (contribution.enclaveChallenge != address(0)) + { + require(contribution.enclaveChallenge == ecrecover(keccak256("\x19Ethereum Signed Message:\n64", _resultHash, _resultSign), _v, _r, _s)); + } + + require(contribution.status == IexecLib.ContributionStatusEnum.AUTHORIZED); + contribution.status = IexecLib.ContributionStatusEnum.CONTRIBUTED; + contribution.resultHash = _resultHash; + contribution.resultSign = _resultSign; + contribution.score = iexecHubInterface.getWorkerScore(msg.sender); + consensus.contributors.push(msg.sender); + + require(iexecHubInterface.lockForWork(_woid, msg.sender, consensus.stakeAmount)); + emit Contribute(_woid, msg.sender, _resultHash); + return consensus.stakeAmount; + } + + function revealConsensus(address _woid, bytes32 _consensus) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(WorkOrder(_woid).startRevealingPhase()); + + consensus.winnerCount = 0; + for (uint256 i = 0; i 0); // you cannot revealConsensus if no worker has contributed to this hash + + consensus.consensus = _consensus; + consensus.revealDate = iexecHubInterface.getCategoryWorkClockTimeRef(marketplaceInterface.getMarketOrderCategory(WorkOrder(_woid).m_marketorderIdx())).mul(REVEAL_PERIOD_DURATION_RATIO).add(now); // is it better to store th catid ? + emit RevealConsensus(_woid, _consensus); + return true; + } + + function reveal(address _woid, bytes32 _result) public returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + IexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender]; + + require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.REVEALING ); + require(consensus.revealDate > now ); + require(contribution.status == IexecLib.ContributionStatusEnum.CONTRIBUTED); + require(contribution.resultHash == consensus.consensus ); + require(contribution.resultHash == keccak256(_result ) ); + require(contribution.resultSign == keccak256(_result ^ keccak256(msg.sender)) ); + + contribution.status = IexecLib.ContributionStatusEnum.PROVED; + consensus.revealCounter = consensus.revealCounter.add(1); + + emit Reveal(_woid, msg.sender, _result); + return true; + } + + function reopen(address _woid) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require(consensus.revealDate <= now && consensus.revealCounter == 0); + require(WorkOrder(_woid).reActivate()); + + for (uint256 i = 0; i < consensus.contributors.length; ++i) + { + address w = consensus.contributors[i]; + if (m_contributions[_woid][w].resultHash == consensus.consensus) + { + m_contributions[_woid][w].status = IexecLib.ContributionStatusEnum.REJECTED; + } + } + // Reset to status before revealConsensus. Must be after REJECTED traitement above because of consensus.consensus check + consensus.winnerCount = 0; + consensus.consensus = 0x0; + consensus.revealDate = 0; + emit Reopen(_woid); + return true; + } + + // if sheduler never call finalized ? no incetive to do that. schedulermust be pay also at this time + function finalizeWork(address _woid, string _stdout, string _stderr, string _uri) public onlyOwner /*onlySheduler*/ returns (bool) + { + require(iexecHubInterface.isWoidRegistred(_woid)); + IexecLib.Consensus storage consensus = m_consensus[_woid]; + require(now <= consensus.consensusTimeout); + require((consensus.revealDate <= now && consensus.revealCounter > 0) || (consensus.revealCounter == consensus.winnerCount)); // consensus.winnerCount never 0 at this step + + // add penalized to the call worker to contribution and they never contribute ? + require(distributeRewards(_woid, consensus)); + + require(iexecHubInterface.finalizeWorkOrder(_woid, _stdout, _stderr, _uri)); + emit FinalizeWork(_woid,_stdout,_stderr,_uri); + return true; + } + + function distributeRewards(address _woid, IexecLib.Consensus _consensus) internal returns (bool) + { + uint256 i; + address w; + uint256 workerBonus; + uint256 workerWeight; + uint256 totalWeight; + uint256 individualWorkerReward; + uint256 totalReward = _consensus.poolReward; + address[] memory contributors = _consensus.contributors; + for (i = 0; i 0); + + // compute how much is going to the workers + uint256 totalWorkersReward = totalReward.percentage(uint256(100).sub(_consensus.schedulerRewardRatioPolicy)); + + for (i = 0; i workerPool + mapping(address => address) m_workerAffectation; + // owner => index + mapping(address => uint256) m_workerPoolCountByOwner; + // owner => index => workerPool + mapping(address => mapping(uint256 => address)) m_workerPoolByOwnerByIndex; + // workerPool => owner // stored in the workerPool + /* mapping(address => address) m_ownerByWorkerPool; */ + mapping(address => bool) m_workerPoolRegistered; + + mapping(uint256 => address) m_workerPoolByIndex; + uint256 public m_totalWorkerPoolCount; + + + + /** + * Constructor + */ + function WorkerPoolHub() public + { + } + + /** + * Methods + */ + function isWorkerPoolRegistered(address _workerPool) public view returns (bool) + { + return m_workerPoolRegistered[_workerPool]; + } + function getWorkerPoolsCount(address _owner) public view returns (uint256) + { + return m_workerPoolCountByOwner[_owner]; + } + function getWorkerPool(address _owner, uint256 _index) public view returns (address) + { + return m_workerPoolByOwnerByIndex[_owner][_index]; + } + function getWorkerPoolByIndex(uint256 _index) public view returns (address) + { + return m_workerPoolByIndex[_index]; + } + function getWorkerAffectation(address _worker) public view returns (address workerPool) + { + return m_workerAffectation[_worker]; + } + + function addWorkerPool(address _owner, address _workerPool) internal + { + uint id = m_workerPoolCountByOwner[_owner].add(1); + m_totalWorkerPoolCount = m_totalWorkerPoolCount.add(1); + m_workerPoolByIndex [m_totalWorkerPoolCount] = _workerPool; + m_workerPoolCountByOwner [_owner] = id; + m_workerPoolByOwnerByIndex[_owner][id] = _workerPool; + m_workerPoolRegistered [_workerPool] = true; + } + + function createWorkerPool( + string _description, + uint256 _subscriptionLockStakePolicy, + uint256 _subscriptionMinimumStakePolicy, + uint256 _subscriptionMinimumScorePolicy, + address _marketplaceAddress) + external onlyOwner /*owner == IexecHub*/ returns (address createdWorkerPool) + { + // tx.origin == owner + // msg.sender == IexecHub + // At creating ownership is transfered to tx.origin + address newWorkerPool = new WorkerPool( + msg.sender, // iexecHubAddress + _description, + _subscriptionLockStakePolicy, + _subscriptionMinimumStakePolicy, + _subscriptionMinimumScorePolicy, + _marketplaceAddress + ); + addWorkerPool(tx.origin, newWorkerPool); + return newWorkerPool; + } + + function registerWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool subscribed) + { + // you must have no cuurent affectation on others worker Pool + require(m_workerAffectation[_worker] == address(0)); + m_workerAffectation[_worker] = _workerPool; + return true; + } + + function unregisterWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool unsubscribed) + { + require(m_workerAffectation[_worker] == _workerPool); + m_workerAffectation[_worker] = address(0); + return true; + } +} diff --git a/build/contracts/App.json b/deployed/contracts/App.json similarity index 99% rename from build/contracts/App.json rename to deployed/contracts/App.json index c60f83d8..14300044 100644 --- a/build/contracts/App.json +++ b/deployed/contracts/App.json @@ -1504,5 +1504,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.541Z" -} + "updatedAt": "2018-06-12T14:56:21.133Z" +} \ No newline at end of file diff --git a/build/contracts/AppHub.json b/deployed/contracts/AppHub.json similarity index 99% rename from build/contracts/AppHub.json rename to deployed/contracts/AppHub.json index 150ddfd3..2a8f89bb 100644 --- a/build/contracts/AppHub.json +++ b/deployed/contracts/AppHub.json @@ -4311,6 +4311,30 @@ "version": "0.4.21+commit.dfe3193c.Emscripten.clang" }, "networks": { + "1": { + "events": { + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + } + }, + "links": {}, + "address": "0xb4f226150bdc6cf901c15e4ed1caeda7ea5c512c", + "transactionHash": "0xfea5e3122cea6830157eb8c4b28319e62d65a64c53c4546160d31aadfb5d6ff6" + }, "3": { "events": { "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { @@ -4385,5 +4409,5 @@ } }, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-21T11:48:56.455Z" + "updatedAt": "2018-06-12T15:21:39.629Z" } diff --git a/build/contracts/Dataset.json b/deployed/contracts/Dataset.json similarity index 99% rename from build/contracts/Dataset.json rename to deployed/contracts/Dataset.json index de8c4a2d..280563fb 100644 --- a/build/contracts/Dataset.json +++ b/deployed/contracts/Dataset.json @@ -1504,5 +1504,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.543Z" -} + "updatedAt": "2018-06-12T14:56:21.134Z" +} \ No newline at end of file diff --git a/build/contracts/DatasetHub.json b/deployed/contracts/DatasetHub.json similarity index 99% rename from build/contracts/DatasetHub.json rename to deployed/contracts/DatasetHub.json index 9543992a..b973cd97 100644 --- a/build/contracts/DatasetHub.json +++ b/deployed/contracts/DatasetHub.json @@ -4311,6 +4311,30 @@ "version": "0.4.21+commit.dfe3193c.Emscripten.clang" }, "networks": { + "1": { + "events": { + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + } + }, + "links": {}, + "address": "0xd0bb45fd58e357c9b3a5e7a36a5c6b6b5d1cf9b2", + "transactionHash": "0x32e88b373ae05c173eb3d743879f98acbbccde8192a7056ce4a44e7a03cc2896" + }, "3": { "events": { "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { @@ -4385,5 +4409,5 @@ } }, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-21T11:48:56.465Z" + "updatedAt": "2018-06-12T15:21:39.560Z" } diff --git a/build/contracts/ERC20.json b/deployed/contracts/ERC20.json similarity index 99% rename from build/contracts/ERC20.json rename to deployed/contracts/ERC20.json index 3474217e..4b2eb0ec 100644 --- a/build/contracts/ERC20.json +++ b/deployed/contracts/ERC20.json @@ -1795,5 +1795,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.576Z" -} + "updatedAt": "2018-06-12T14:56:21.164Z" +} \ No newline at end of file diff --git a/build/contracts/IexecAPI.json b/deployed/contracts/IexecAPI.json similarity index 99% rename from build/contracts/IexecAPI.json rename to deployed/contracts/IexecAPI.json index 1e58e391..f559670e 100644 --- a/build/contracts/IexecAPI.json +++ b/deployed/contracts/IexecAPI.json @@ -6850,5 +6850,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.543Z" -} + "updatedAt": "2018-06-12T14:56:21.135Z" +} \ No newline at end of file diff --git a/build/contracts/IexecCallbackInterface.json b/deployed/contracts/IexecCallbackInterface.json similarity index 99% rename from build/contracts/IexecCallbackInterface.json rename to deployed/contracts/IexecCallbackInterface.json index e957a25e..eb8114ef 100644 --- a/build/contracts/IexecCallbackInterface.json +++ b/deployed/contracts/IexecCallbackInterface.json @@ -722,5 +722,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.544Z" -} + "updatedAt": "2018-06-12T14:56:21.136Z" +} \ No newline at end of file diff --git a/build/contracts/IexecHub.json b/deployed/contracts/IexecHub.json similarity index 94% rename from build/contracts/IexecHub.json rename to deployed/contracts/IexecHub.json index 02b3b958..e37e51dd 100644 --- a/build/contracts/IexecHub.json +++ b/deployed/contracts/IexecHub.json @@ -1234,11 +1234,11 @@ "type": "function" } ], - "bytecode": "0x6060604052341561000f57600080fd5b60078054600160a060020a03191633600160a060020a0316179055614408806100396000396000f300606060405260043610620002155763ffffffff60e060020a6000350416630800b89e81146200021a5780630c91f2d0146200023e57806310793b5014620002825780631708d72514620002b05780631f87172614620002d2578063234a0ee714620002fd578063298503d9146200032f5780632e1a7d4d14620003c757806332baa8d914620003e057806332ca558714620003f957806339b73122146200041b5780634f73b8e6146200044c578063536e280014620004625780635f51522614620004ac57806366de5a4f14620004ce57806369e99b5c14620004f95780636b4f6865146200051b5780636e885bd71462000546578063747bcd72146200055c578063817e83321462000572578063835436b414620005885780638981d07714620005aa5780638986916314620005d55780638c0f8e1114620005f75780639fdf96251462000619578063a0efe2551462000649578063abc8c7af146200065f578063ac26109e1462000675578063b017c036146200069a578063b218cf1514620006b0578063b6b55f2514620006d2578063b6b57ebd14620006eb578063b6b8c3cd14620007d1578063b7b6e97814620007e7578063bc04d77b146200080c578063be02ee6e1462000822578063ddaeb6001462000844578063e760a11a1462000866578063eeeb2ba014620008a0578063f3052d2614620009ae578063f69f190c14620009c7578063fc06a8771462000a0b575b600080fd5b34156200022657600080fd5b6200023c600160a060020a036004351662000a3c565b005b34156200024a57600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562000a87565b604051901515815260200160405180910390f35b34156200028e57600080fd5b6200029862000bf4565b60405191825260208201526040908101905180910390f35b3415620002bc57600080fd5b6200026e600160a060020a036004351662000bfd565b3415620002de57600080fd5b620002eb60043562000c66565b60405190815260200160405180910390f35b34156200030957600080fd5b6200031362000c95565b604051600160a060020a03909116815260200160405180910390f35b34156200033b57600080fd5b620002eb60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650509335935062000ca492505050565b3415620003d357600080fd5b6200026e60043562000e52565b3415620003ec57600080fd5b6200026e60043562000f5a565b34156200040557600080fd5b6200026e600160a060020a036004351662000f6d565b34156200042757600080fd5b6200031360246004803582810192908201359181359160443590810191013562000f8b565b34156200045857600080fd5b620002eb620010c9565b34156200046e57600080fd5b620003136004803590600160a060020a03602480358216926044358316926064358116926084359081019201359060a43581169060c43516620010cf565b3415620004b857600080fd5b62000298600160a060020a0360043516620012f9565b3415620004da57600080fd5b620003136024600480358281019291013590356044356064356200131c565b34156200050557600080fd5b620002eb600160a060020a036004351662001449565b34156200052757600080fd5b6200026e600160a060020a03600435811690602435166044356200145b565b34156200055257600080fd5b620003136200151e565b34156200056857600080fd5b620002eb6200152d565b34156200057e57600080fd5b620002eb62001532565b34156200059457600080fd5b6200026e600160a060020a036004351662001537565b3415620005b657600080fd5b6200026e600160a060020a0360043581169060243516604435620015a0565b3415620005e157600080fd5b6200026e600160a060020a03600435166200164c565b34156200060357600080fd5b620002eb600160a060020a036004351662001bbd565b34156200062557600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562001bd8565b34156200065557600080fd5b620002eb62001d6f565b34156200066b57600080fd5b6200031362001d75565b34156200068157600080fd5b6200026e600160a060020a036004351660243562001d84565b3415620006a657600080fd5b6200031362001dc4565b3415620006bc57600080fd5b6200026e600160a060020a036004351662001dd3565b3415620006de57600080fd5b6200026e6004356200207d565b3415620006f757600080fd5b6200026e60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506200219b95505050505050565b3415620007dd57600080fd5b62000313620029e9565b3415620007f357600080fd5b6200026e600160a060020a0360043516602435620029f8565b34156200081857600080fd5b6200031362002a23565b34156200082e57600080fd5b62000298600160a060020a036004351662002a32565b34156200085057600080fd5b6200026e600160a060020a036004351662002a4b565b34156200087257600080fd5b6200023c600160a060020a036004358116906024358116906044358116906064358116906084351662002a60565b3415620008ac57600080fd5b620008b960043562002aff565b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000908578082015183820152602001620008ee565b50505050905090810190601f168015620009365780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156200096e57808201518382015260200162000954565b50505050905090810190601f1680156200099c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3415620009ba57600080fd5b620008b960043562002c67565b3415620009d357600080fd5b620009e9600160a060020a036004351662002e0d565b604051600160a060020a03909216825260208201526040908101905180910390f35b341562000a1757600080fd5b6200031360246004803582810192908201359181359160443590810191013562002e9c565b60075433600160a060020a0390811691161462000a5857600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038416600090815260096020526040812054859060ff16151562000ab157600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000af957600080fd5b5af1151562000b0757600080fd5b50505060405180519050600160a060020a031614151562000b2757600080fd5b62000b33858562002fda565b151562000b3f57600080fd5b821562000be857600b5462000b5c90600163ffffffff6200307116565b600b55600160a060020a0385166000908152600a602052604090205462000b8b90600163ffffffff6200307116565b600160a060020a0386166000818152600a60205260409081902092909255907f98b231d22df4a95e9d99b5d3f4d25fab5a821c22d7f517a522731c2892ed453590889051600160a060020a03909116815260200160405180910390a25b50600195945050505050565b600b54600c5482565b600062000c0b33836200308c565b151562000c1757600080fd5b33600160a060020a03167f9644170e77fec17243f5fdc3519cba6d2162d1dda59af75508fd9a2005aeb78483604051600160a060020a03909116815260200160405180910390a2506001919050565b600062000c738262000f5a565b151562000c7f57600080fd5b5060009081526005602052604090206003015490565b600154600160a060020a031681565b600754600090819033600160a060020a0390811691161462000cc557600080fd5b60065462000cdb90600163ffffffff6200307116565b6006819055600081815260056020526040902090815590506001810185805162000d0a929160200190620036ba565b506002810184805162000d22929160200190620036ba565b50600381018390556006547f62bf08360c9d561749c54eaf4f8bf8cb6c8b6f4f40607bcec39a8172e714d25c90868686604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000da157808201518382015260200162000d87565b50505050905090810190601f16801562000dcf5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101562000e0757808201518382015260200162000ded565b50505050905090810190601f16801562000e355780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a150506006549392505050565b600160a060020a03331660009081526008602052604081205462000e7d908363ffffffff620031fa16565b33600160a060020a038181166000908152600860205260408082209490945554169163a9059cbb919085905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000eea57600080fd5b5af1151562000ef857600080fd5b50505060405180519050151562000f0e57600080fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243643383604051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b6000908152600560205260408120541190565b600160a060020a031660009081526009602052604090205460ff1690565b6002546000908190600160a060020a03166339b7312288888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b15156200101c57600080fd5b5af115156200102a57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f49413c774d3fe9c92f6ada69299963d9b4b1c13a1f2a95a019188e2c161ed1438989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b6103e881565b600454600090339082908190600160a060020a03166302a63c288d858e60405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b15156200113957600080fd5b5af115156200114757600080fd5b5050506040518051905015156200115d57600080fd5b6200116b838c8c8c6200320d565b91508b838b8b8e868d8d8d8d620011816200373f565b8a8152600160a060020a03808b16602083015289811660408301528881166060830152878116608083015260a0820187905283811660e0830152821661010082015261012060c08201818152908201859052610140820186868082843782019150509b505050505050505050505050604051809103906000f08015156200120757600080fd5b600160a060020a0380821660009081526009602052604090819020805460ff191660011790559192508c1690637919233f9083908f905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200127f57600080fd5b5af115156200128d57600080fd5b505050604051805190501515620012a357600080fd5b8a600160a060020a03167f359f2105b31d71ee8e2315c3dc3427b3f7297dcc85dd3883d4554e67f1f22d0082604051600160a060020a03909116815260200160405180910390a29b9a5050505050505050505050565b600160a060020a0316600090815260086020526040902080546001909101549091565b6003546004546000918291600160a060020a039182169163215bd303918a918a918a918a918a91166040518763ffffffff1660e060020a028152600401808060200186815260200185815260200184815260200183600160a060020a0316600160a060020a0316815260200182810382528888828181526020019250808284378201915050975050505050505050602060405180830381600087803b1515620013c457600080fd5b5af11515620013d257600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f3c29f4ff1e741e465a1ad9cc4c0b8e51c046c021ca9e77172d812ae667f566f889896040516020808252810182905280604081018484808284378201915050935050505060405180910390a39695505050505050565b600a6020526000908152604090205481565b600160a060020a038316600090815260096020526040812054849060ff1615156200148557600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620014cd57600080fd5b5af11515620014db57600080fd5b50505060405180519050600160a060020a0316141515620014fb57600080fd5b6200150784846200346c565b15156200151357600080fd5b506001949350505050565b600354600160a060020a031681565b603281565b600a81565b60006200154533836200308c565b15156200155157600080fd5b33600160a060020a03167f5580db655b3146ef4d1fdba3305cf74dbc3f29126c7a3832533f84e00d149ee383604051600160a060020a03909116815260200160405180910390a2506001919050565b600160a060020a038316600090815260096020526040812054849060ff161515620015ca57600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200161257600080fd5b5af115156200162057600080fd5b50505060405180519050600160a060020a03161415156200164057600080fd5b620015078484620034ef565b600160a060020a038116600090815260096020526040812054819081908190819081908190889060ff1615156200168257600080fd5b88965033600160a060020a031687600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016cd57600080fd5b5af11515620016db57600080fd5b50505060405180519050600160a060020a0316141515620016fb57600080fd5b86600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173957600080fd5b5af115156200174757600080fd5b5050506040518051965050600160a060020a03871663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200179057600080fd5b5af115156200179e57600080fd5b5050506040518051955060019050856004811115620017b957fe5b1480620017d257506002856004811115620017d057fe5b145b1515620017de57600080fd5b85600160a060020a031663898691638a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200182d57600080fd5b5af115156200183b57600080fd5b5050506040518051905015156200185157600080fd5b86600160a060020a0316634e71d92d6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156200188f57600080fd5b5af115156200189d57600080fd5b5050600454600160a060020a03908116915063eb3721be90891663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620018eb57600080fd5b5af11515620018f957600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b15156200193b57600080fd5b5af115156200194957600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a50620019f6975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b5af11515620019df57600080fd5b505050604051805186915063ffffffff6200357416565b915062001abf87600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a3a57600080fd5b5af1151562001a4857600080fd5b5050506040518051905062001ab989600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b5af1151562001aa257600080fd5b505050604051805188915063ffffffff6200307116565b6200346c565b151562001acb57600080fd5b62001ad783836200358b565b151562001ae357600080fd5b62001aef308362002fda565b151562001afb57600080fd5b62001b073083620034ef565b151562001b1357600080fd5b7fb3cae8ec1c2754530963fb2e254826aae88dda74178f1a0c5656776941e604b88988600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001b7357600080fd5b5af1151562001b8157600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a150600198975050505050505050565b600160a060020a03166000908152600a602052604090205490565b600160a060020a038416600090815260096020526040812054859060ff16151562001c0257600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001c4a57600080fd5b5af1151562001c5857600080fd5b50505060405180519050600160a060020a031614151562001c7857600080fd5b62001c8485856200358b565b151562001c9057600080fd5b821562000be857600c5462001cad90600163ffffffff6200307116565b600c55600160a060020a0385166000908152600a602052604090205462001d079062001ce190603263ffffffff6200362816565b600160a060020a0387166000908152600a60205260409020549063ffffffff620031fa16565b600160a060020a0386166000818152600a60205260409081902092909255907fd21e70eb7104cb6f403402b79fe1c088dc56b69ecb7474ae68a3e861a5a6d49990889051600160a060020a03909116815260200160405180910390a250600195945050505050565b60065481565b600454600160a060020a031681565b60045460009033600160a060020a0390811691161462001da357600080fd5b62001daf8383620034ef565b151562001dbb57600080fd5b50600192915050565b600054600160a060020a031681565b6003546000903390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001e2957600080fd5b5af1151562001e3757600080fd5b50505060405180519050151562001e4d57600080fd5b62001eae8382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9057600080fd5b5af1151562001e9e57600080fd5b50505060405180519050620034ef565b151562001eba57600080fd5b80600160a060020a0316636ab6936a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001ef857600080fd5b5af1151562001f0657600080fd5b5050506040518051600160a060020a0385166000908152600860205260409020541015905062001f3557600080fd5b80600160a060020a031663cc6f06a36040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001f7357600080fd5b5af1151562001f8157600080fd5b5050506040518051600160a060020a0385166000908152600a60205260409020541015905062001fb057600080fd5b600354600160a060020a0316631884c517338560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156200200957600080fd5b5af115156200201757600080fd5b5050506040518051905015156200202d57600080fd5b33600160a060020a03167fd3548f8b6a2a11c4a35ef5a16dbf7142c9db5163c7d46e7f66482664277cff0784604051600160a060020a03909116815260200160405180910390a250600192915050565b60008054600160a060020a03166323b872dd33308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515620020e257600080fd5b5af11515620020f057600080fd5b5050506040518051905015156200210657600080fd5b600160a060020a03331660009081526008602052604090205462002131908363ffffffff6200307116565b33600160a060020a03811660009081526008602052604090819020929092557fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91849051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b600160a060020a038416600090815260096020526040812054819081908190819081908190819081908d9060ff161515620021d557600080fd5b8d985033600160a060020a031689600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200222057600080fd5b5af115156200222e57600080fd5b50505060405180519050600160a060020a03161415156200224e57600080fd5b600289600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200228e57600080fd5b5af115156200229c57600080fd5b505050604051805190506004811115620022b257fe5b14620022bd57600080fd5b88600160a060020a0316636946f6926040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620022fb57600080fd5b5af115156200230957600080fd5b5050506040518051985050600160a060020a0388166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200235257600080fd5b5af115156200236057600080fd5b50505060405180519750506000871115620023e257620023d688600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620023b757600080fd5b5af11515620023c557600080fd5b505050604051805190508862002fda565b1515620023e257600080fd5b88600160a060020a03166371a599ca6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200242057600080fd5b5af115156200242e57600080fd5b5050506040518051965050600160a060020a03861615620025175785600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200248757600080fd5b5af115156200249557600080fd5b5050506040518051955050600085111562002517576200250b86600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620024ec57600080fd5b5af11515620024fa57600080fd5b505050604051805190508662002fda565b15156200251757600080fd5b600454600160a060020a039081169063eb3721be908b1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200256257600080fd5b5af115156200257057600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b1515620025b257600080fd5b5af11515620025c057600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a5062002648975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b9150620026ec89600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200268c57600080fd5b5af115156200269a57600080fd5b50505060405180519050620026e68b600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b6200358b565b1515620026f857600080fd5b6200270483836200346c565b15156200271057600080fd5b88600160a060020a031663d5fdfdbc8e8e8e6040518463ffffffff1660e060020a02815260040180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156200277b57808201518382015260200162002761565b50505050905090810190601f168015620027a95780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015620027e1578082015183820152602001620027c7565b50505050905090810190601f1680156200280f5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015620028475780820151838201526020016200282d565b50505050905090810190601f168015620028755780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15156200289857600080fd5b5af11515620028a657600080fd5b505050600160a060020a03301660009081526008602052604081206001015494508411156200293a5762002908620028fa6103e8620028ed87600a63ffffffff6200357416565b9063ffffffff6200364016565b859063ffffffff6200362816565b93506200291630856200358b565b15156200292257600080fd5b6200292e838562002fda565b15156200293a57600080fd5b7fed236d0a24cb7a32c76960696e44bac711b80ef76780688405dc96c2495b75f98e8a600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200299a57600080fd5b5af11515620029a857600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a15060019d9c50505050505050505050505050565b600754600160a060020a031681565b60045460009033600160a060020a0390811691161462002a1757600080fd5b62001daf83836200346c565b600254600160a060020a031681565b6008602052600090815260409020805460019091015482565b60096020526000908152604090205460ff1681565b60075433600160a060020a0390811691161462002a7c57600080fd5b600054600160a060020a03161562002a9357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03978816179091556004805482169587169590951790945560038054851693861693909317909255600180548416918516919091179055600280549092169216919091179055565b6005602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002bb55780601f1062002b895761010080835404028352916020019162002bb5565b820191906000526020600020905b81548152906001019060200180831162002b9757829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002c575780601f1062002c2b5761010080835404028352916020019162002c57565b820191906000526020600020905b81548152906001019060200180831162002c3957829003601f168201915b5050505050908060030154905084565b600062002c7362003750565b62002c7d62003750565b600062002c8a8562000f5a565b151562002c9657600080fd5b60008581526005602090815260409182902080546003820154600180840180549396909560029586019593948794938116156101000260001901169290920491601f83018190048102019051908101604052809291908181526020018280546001816001161561010002031660029004801562002d575780601f1062002d2b5761010080835404028352916020019162002d57565b820191906000526020600020905b81548152906001019060200180831162002d3957829003601f168201915b50505050509250818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002df75780601f1062002dcb5761010080835404028352916020019162002df7565b820191906000526020600020905b81548152906001019060200180831162002dd957829003601f168201915b5050505050915093509350935093509193509193565b6003546000908190600160a060020a031663d440c6f38460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002e6357600080fd5b5af1151562002e7157600080fd5b5050506040518051600160a060020a03949094166000908152600a6020526040902054939492505050565b6001546000908190600160a060020a031663fc06a87788888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b151562002f2d57600080fd5b5af1151562002f3b57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f03d3b6187bbe7d21aa3cf229e292ba41fa8bca6ec2128c0f1625178b8191cdc28989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b600160a060020a03821660009081526008602052604081205462003005908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090819020919091557f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b6000828201838110156200308157fe5b8091505b5092915050565b6003546000908390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620030e257600080fd5b5af11515620030f057600080fd5b5050506040518051905015156200310657600080fd5b620031678382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200314957600080fd5b5af115156200315757600080fd5b505050604051805190506200346c565b15156200317357600080fd5b600354600160a060020a0316630b00de8d858560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515620031cc57600080fd5b5af11515620031da57600080fd5b505050604051805190501515620031f057600080fd5b5060019392505050565b6000828211156200320757fe5b50900390565b600154600090839082908190600160a060020a0316638403be918460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200326757600080fd5b5af115156200327557600080fd5b5050506040518051905015156200328b57600080fd5b82600160a060020a03166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620032c957600080fd5b5af11515620032d757600080fd5b5050506040518051925050600160a060020a03851615620033d457506002548490600160a060020a03166316265b4e8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200334657600080fd5b5af115156200335457600080fd5b5050506040518051905015156200336a57600080fd5b620033d181600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620033ac57600080fd5b5af11515620033ba57600080fd5b505050604051805184915063ffffffff6200307116565b91505b600354600160a060020a03166368c197dd8860405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200342557600080fd5b5af115156200343357600080fd5b5050506040518051905015156200344957600080fd5b620034558883620034ef565b15156200346157600080fd5b509695505050505050565b600160a060020a0382166000908152600860205260408120600101546200349a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020600181019190915554620034cd908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090205550600192915050565b600160a060020a0382166000908152600860205260408120546200351a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020908155600101546200354b908363ffffffff6200307116565b600160a060020a0384166000908152600860205260409020600190810191909155905092915050565b6000620035848383606462003652565b9392505050565b600160a060020a038216600090815260086020526040812060010154620035b9908363ffffffff620031fa16565b600160a060020a03841660009081526008602052604090819020600101919091557f4051ba94e08bb094159fc38391422b4b8ccfd2b1f8919c0eb37bb042d4b9cd8e908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b600081831062003639578162003584565b5090919050565b60008183101562003639578162003584565b60006200366b62003664858562003673565b83620036a2565b949350505050565b60008083151562003688576000915062003085565b508282028284828115156200369957fe5b04146200308157fe5b6000808284811515620036b157fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620036fd57805160ff19168380011785556200372d565b828001600101855582156200372d579182015b828111156200372d57825182559160200191906001019062003710565b506200373b92915062003762565b5090565b604051610c5a806200378383390190565b60206040519081016040526000815290565b6200377f91905b808211156200373b576000815560010162003769565b9056006060604052341561000f57600080fd5b604051610c5a380380610c5a8339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805182019190602001805191906020018051600e8054600160a060020a03191633600160a060020a039081169190911790915590925089161515905061009257600080fd5b6000805460ff1916600190811790915589905560028054600160a060020a0319908116600160a060020a038a81169190911790925560038054821689841617905560048054821688841617905560058054909116918a1691909117905560068490556007838051610107929160200190610141565b5060088054600160a060020a03938416600160a060020a03199182161790915560098054929093169116179055506101dc95505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061018257805160ff19168380011785556101af565b828001600101855582156101af579182015b828111156101af578251825591602001919060010190610194565b506101bb9291506101bf565b5090565b6101d991905b808211156101bb57600081556001016101c5565b90565b610a6f806101eb6000396000f3006060604052600436106101065763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630690e5b8811461010b57806315298c771461013a5780631a514d97146101c45780632d4d671f146101eb5780634e71d92d146101fe5780635f44910c146102135780636946f6921461022657806371a599ca146102395780638628aaff1461024c5780639c4a856114610271578063cc3a2dfa14610284578063d3281fd614610297578063d3a69e01146102aa578063d5fdfdbc146102bd578063da1fea2814610392578063e329c478146103a5578063ecc40f64146103dc578063f3859f57146103ef578063f6a5b13e14610402575b600080fd5b341561011657600080fd5b61011e610415565b604051600160a060020a03909116815260200160405180910390f35b341561014557600080fd5b61014d610424565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610189578082015183820152602001610171565b50505050905090810190601f1680156101b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101cf57600080fd5b6101d76104c2565b604051901515815260200160405180910390f35b34156101f657600080fd5b6101d761053d565b341561020957600080fd5b6102116105b7565b005b341561021e57600080fd5b61011e610647565b341561023157600080fd5b61011e610656565b341561024457600080fd5b61011e610665565b341561025757600080fd5b61025f610674565b60405190815260200160405180910390f35b341561027c57600080fd5b61014d61067a565b341561028f57600080fd5b61014d6106e5565b34156102a257600080fd5b61025f610750565b34156102b557600080fd5b61011e610756565b34156102c857600080fd5b61021160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061076595505050505050565b341561039d57600080fd5b61011e610913565b34156103b057600080fd5b6103b8610922565b604051808260048111156103c857fe5b60ff16815260200191505060405180910390f35b34156103e757600080fd5b61025f61092b565b34156103fa57600080fd5b61014d610931565b341561040d57600080fd5b61011e61099c565b600454600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b820191906000526020600020905b81548152906001019060200180831161049d57829003601f168201915b505050505081565b60045460009033600160a060020a039081169116146104e057600080fd5b600260005460ff1660048111156104f357fe5b146104fd57600080fd5b6000805460ff191660011790557f06c42818c4ab74dff6aec55942f601c2e9b7f2aa4321ee71690b125eacfe465460405160405180910390a15060015b90565b60045460009033600160a060020a0390811691161461055b57600080fd5b600160005460ff16600481111561056e57fe5b1461057857600080fd5b6000805460ff191660021790557f2b0cab0be6d82b2661b3b789c540ec9c7223aac635ac8e59a1e71e1137f2dd7760405160405180910390a150600190565b600e5433600160a060020a039081169116146105d257600080fd5b600160005460ff1660048111156105e557fe5b14806106015750600260005460ff1660048111156105ff57fe5b145b151561060c57600080fd5b6000805460ff191660031790557f1938697ee29e363ecda49e464c6d2aae25f0974bd1f2c81a91c21e13ad8dbf7760405160405180910390a1565b600554600160a060020a031681565b600254600160a060020a031681565b600354600160a060020a031681565b60065481565b600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600a5481565b600e54600160a060020a031681565b600e5433600160a060020a0390811691161461078057600080fd5b600260005460ff16600481111561079357fe5b1461079d57600080fd5b6000805460ff19166004179055600b8380516107bd9291602001906109ab565b50600c8280516107d19291602001906109ab565b50600d8180516107e59291602001906109ab565b508282826040518084805190602001908083835b602083106108185780518252601f1990920191602091820191016107f9565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b602083106108645780518252601f199092019160209182019101610845565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106108b05780518252601f199092019160209182019101610891565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600a557f777f59509d985349c80271b657d2649b218bc6f075a4625821b64448cc235b8660405160405180910390a1505050565b600854600160a060020a031681565b60005460ff1681565b60015481565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600954600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106109ec57805160ff1916838001178555610a19565b82800160010185558215610a19579182015b82811115610a195782518255916020019190600101906109fe565b50610a25929150610a29565b5090565b61053a91905b80821115610a255760008155600101610a2f5600a165627a7a72305820aab9d309bae837f3417f3dc81c0f650543365c210e440786b5dfc09f1981eba70029a165627a7a723058208b35e6ede3f96a784d6f976885ab01319f919cd17a134bcc7123f62ab2cd8ec00029", - "deployedBytecode": "0x606060405260043610620002155763ffffffff60e060020a6000350416630800b89e81146200021a5780630c91f2d0146200023e57806310793b5014620002825780631708d72514620002b05780631f87172614620002d2578063234a0ee714620002fd578063298503d9146200032f5780632e1a7d4d14620003c757806332baa8d914620003e057806332ca558714620003f957806339b73122146200041b5780634f73b8e6146200044c578063536e280014620004625780635f51522614620004ac57806366de5a4f14620004ce57806369e99b5c14620004f95780636b4f6865146200051b5780636e885bd71462000546578063747bcd72146200055c578063817e83321462000572578063835436b414620005885780638981d07714620005aa5780638986916314620005d55780638c0f8e1114620005f75780639fdf96251462000619578063a0efe2551462000649578063abc8c7af146200065f578063ac26109e1462000675578063b017c036146200069a578063b218cf1514620006b0578063b6b55f2514620006d2578063b6b57ebd14620006eb578063b6b8c3cd14620007d1578063b7b6e97814620007e7578063bc04d77b146200080c578063be02ee6e1462000822578063ddaeb6001462000844578063e760a11a1462000866578063eeeb2ba014620008a0578063f3052d2614620009ae578063f69f190c14620009c7578063fc06a8771462000a0b575b600080fd5b34156200022657600080fd5b6200023c600160a060020a036004351662000a3c565b005b34156200024a57600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562000a87565b604051901515815260200160405180910390f35b34156200028e57600080fd5b6200029862000bf4565b60405191825260208201526040908101905180910390f35b3415620002bc57600080fd5b6200026e600160a060020a036004351662000bfd565b3415620002de57600080fd5b620002eb60043562000c66565b60405190815260200160405180910390f35b34156200030957600080fd5b6200031362000c95565b604051600160a060020a03909116815260200160405180910390f35b34156200033b57600080fd5b620002eb60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650509335935062000ca492505050565b3415620003d357600080fd5b6200026e60043562000e52565b3415620003ec57600080fd5b6200026e60043562000f5a565b34156200040557600080fd5b6200026e600160a060020a036004351662000f6d565b34156200042757600080fd5b6200031360246004803582810192908201359181359160443590810191013562000f8b565b34156200045857600080fd5b620002eb620010c9565b34156200046e57600080fd5b620003136004803590600160a060020a03602480358216926044358316926064358116926084359081019201359060a43581169060c43516620010cf565b3415620004b857600080fd5b62000298600160a060020a0360043516620012f9565b3415620004da57600080fd5b620003136024600480358281019291013590356044356064356200131c565b34156200050557600080fd5b620002eb600160a060020a036004351662001449565b34156200052757600080fd5b6200026e600160a060020a03600435811690602435166044356200145b565b34156200055257600080fd5b620003136200151e565b34156200056857600080fd5b620002eb6200152d565b34156200057e57600080fd5b620002eb62001532565b34156200059457600080fd5b6200026e600160a060020a036004351662001537565b3415620005b657600080fd5b6200026e600160a060020a0360043581169060243516604435620015a0565b3415620005e157600080fd5b6200026e600160a060020a03600435166200164c565b34156200060357600080fd5b620002eb600160a060020a036004351662001bbd565b34156200062557600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562001bd8565b34156200065557600080fd5b620002eb62001d6f565b34156200066b57600080fd5b6200031362001d75565b34156200068157600080fd5b6200026e600160a060020a036004351660243562001d84565b3415620006a657600080fd5b6200031362001dc4565b3415620006bc57600080fd5b6200026e600160a060020a036004351662001dd3565b3415620006de57600080fd5b6200026e6004356200207d565b3415620006f757600080fd5b6200026e60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506200219b95505050505050565b3415620007dd57600080fd5b62000313620029e9565b3415620007f357600080fd5b6200026e600160a060020a0360043516602435620029f8565b34156200081857600080fd5b6200031362002a23565b34156200082e57600080fd5b62000298600160a060020a036004351662002a32565b34156200085057600080fd5b6200026e600160a060020a036004351662002a4b565b34156200087257600080fd5b6200023c600160a060020a036004358116906024358116906044358116906064358116906084351662002a60565b3415620008ac57600080fd5b620008b960043562002aff565b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000908578082015183820152602001620008ee565b50505050905090810190601f168015620009365780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156200096e57808201518382015260200162000954565b50505050905090810190601f1680156200099c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3415620009ba57600080fd5b620008b960043562002c67565b3415620009d357600080fd5b620009e9600160a060020a036004351662002e0d565b604051600160a060020a03909216825260208201526040908101905180910390f35b341562000a1757600080fd5b6200031360246004803582810192908201359181359160443590810191013562002e9c565b60075433600160a060020a0390811691161462000a5857600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038416600090815260096020526040812054859060ff16151562000ab157600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000af957600080fd5b5af1151562000b0757600080fd5b50505060405180519050600160a060020a031614151562000b2757600080fd5b62000b33858562002fda565b151562000b3f57600080fd5b821562000be857600b5462000b5c90600163ffffffff6200307116565b600b55600160a060020a0385166000908152600a602052604090205462000b8b90600163ffffffff6200307116565b600160a060020a0386166000818152600a60205260409081902092909255907f98b231d22df4a95e9d99b5d3f4d25fab5a821c22d7f517a522731c2892ed453590889051600160a060020a03909116815260200160405180910390a25b50600195945050505050565b600b54600c5482565b600062000c0b33836200308c565b151562000c1757600080fd5b33600160a060020a03167f9644170e77fec17243f5fdc3519cba6d2162d1dda59af75508fd9a2005aeb78483604051600160a060020a03909116815260200160405180910390a2506001919050565b600062000c738262000f5a565b151562000c7f57600080fd5b5060009081526005602052604090206003015490565b600154600160a060020a031681565b600754600090819033600160a060020a0390811691161462000cc557600080fd5b60065462000cdb90600163ffffffff6200307116565b6006819055600081815260056020526040902090815590506001810185805162000d0a929160200190620036ba565b506002810184805162000d22929160200190620036ba565b50600381018390556006547f62bf08360c9d561749c54eaf4f8bf8cb6c8b6f4f40607bcec39a8172e714d25c90868686604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000da157808201518382015260200162000d87565b50505050905090810190601f16801562000dcf5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101562000e0757808201518382015260200162000ded565b50505050905090810190601f16801562000e355780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a150506006549392505050565b600160a060020a03331660009081526008602052604081205462000e7d908363ffffffff620031fa16565b33600160a060020a038181166000908152600860205260408082209490945554169163a9059cbb919085905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000eea57600080fd5b5af1151562000ef857600080fd5b50505060405180519050151562000f0e57600080fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243643383604051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b6000908152600560205260408120541190565b600160a060020a031660009081526009602052604090205460ff1690565b6002546000908190600160a060020a03166339b7312288888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b15156200101c57600080fd5b5af115156200102a57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f49413c774d3fe9c92f6ada69299963d9b4b1c13a1f2a95a019188e2c161ed1438989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b6103e881565b600454600090339082908190600160a060020a03166302a63c288d858e60405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b15156200113957600080fd5b5af115156200114757600080fd5b5050506040518051905015156200115d57600080fd5b6200116b838c8c8c6200320d565b91508b838b8b8e868d8d8d8d620011816200373f565b8a8152600160a060020a03808b16602083015289811660408301528881166060830152878116608083015260a0820187905283811660e0830152821661010082015261012060c08201818152908201859052610140820186868082843782019150509b505050505050505050505050604051809103906000f08015156200120757600080fd5b600160a060020a0380821660009081526009602052604090819020805460ff191660011790559192508c1690637919233f9083908f905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200127f57600080fd5b5af115156200128d57600080fd5b505050604051805190501515620012a357600080fd5b8a600160a060020a03167f359f2105b31d71ee8e2315c3dc3427b3f7297dcc85dd3883d4554e67f1f22d0082604051600160a060020a03909116815260200160405180910390a29b9a5050505050505050505050565b600160a060020a0316600090815260086020526040902080546001909101549091565b6003546004546000918291600160a060020a039182169163215bd303918a918a918a918a918a91166040518763ffffffff1660e060020a028152600401808060200186815260200185815260200184815260200183600160a060020a0316600160a060020a0316815260200182810382528888828181526020019250808284378201915050975050505050505050602060405180830381600087803b1515620013c457600080fd5b5af11515620013d257600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f3c29f4ff1e741e465a1ad9cc4c0b8e51c046c021ca9e77172d812ae667f566f889896040516020808252810182905280604081018484808284378201915050935050505060405180910390a39695505050505050565b600a6020526000908152604090205481565b600160a060020a038316600090815260096020526040812054849060ff1615156200148557600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620014cd57600080fd5b5af11515620014db57600080fd5b50505060405180519050600160a060020a0316141515620014fb57600080fd5b6200150784846200346c565b15156200151357600080fd5b506001949350505050565b600354600160a060020a031681565b603281565b600a81565b60006200154533836200308c565b15156200155157600080fd5b33600160a060020a03167f5580db655b3146ef4d1fdba3305cf74dbc3f29126c7a3832533f84e00d149ee383604051600160a060020a03909116815260200160405180910390a2506001919050565b600160a060020a038316600090815260096020526040812054849060ff161515620015ca57600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200161257600080fd5b5af115156200162057600080fd5b50505060405180519050600160a060020a03161415156200164057600080fd5b620015078484620034ef565b600160a060020a038116600090815260096020526040812054819081908190819081908190889060ff1615156200168257600080fd5b88965033600160a060020a031687600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016cd57600080fd5b5af11515620016db57600080fd5b50505060405180519050600160a060020a0316141515620016fb57600080fd5b86600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173957600080fd5b5af115156200174757600080fd5b5050506040518051965050600160a060020a03871663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200179057600080fd5b5af115156200179e57600080fd5b5050506040518051955060019050856004811115620017b957fe5b1480620017d257506002856004811115620017d057fe5b145b1515620017de57600080fd5b85600160a060020a031663898691638a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200182d57600080fd5b5af115156200183b57600080fd5b5050506040518051905015156200185157600080fd5b86600160a060020a0316634e71d92d6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156200188f57600080fd5b5af115156200189d57600080fd5b5050600454600160a060020a03908116915063eb3721be90891663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620018eb57600080fd5b5af11515620018f957600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b15156200193b57600080fd5b5af115156200194957600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a50620019f6975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b5af11515620019df57600080fd5b505050604051805186915063ffffffff6200357416565b915062001abf87600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a3a57600080fd5b5af1151562001a4857600080fd5b5050506040518051905062001ab989600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b5af1151562001aa257600080fd5b505050604051805188915063ffffffff6200307116565b6200346c565b151562001acb57600080fd5b62001ad783836200358b565b151562001ae357600080fd5b62001aef308362002fda565b151562001afb57600080fd5b62001b073083620034ef565b151562001b1357600080fd5b7fb3cae8ec1c2754530963fb2e254826aae88dda74178f1a0c5656776941e604b88988600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001b7357600080fd5b5af1151562001b8157600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a150600198975050505050505050565b600160a060020a03166000908152600a602052604090205490565b600160a060020a038416600090815260096020526040812054859060ff16151562001c0257600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001c4a57600080fd5b5af1151562001c5857600080fd5b50505060405180519050600160a060020a031614151562001c7857600080fd5b62001c8485856200358b565b151562001c9057600080fd5b821562000be857600c5462001cad90600163ffffffff6200307116565b600c55600160a060020a0385166000908152600a602052604090205462001d079062001ce190603263ffffffff6200362816565b600160a060020a0387166000908152600a60205260409020549063ffffffff620031fa16565b600160a060020a0386166000818152600a60205260409081902092909255907fd21e70eb7104cb6f403402b79fe1c088dc56b69ecb7474ae68a3e861a5a6d49990889051600160a060020a03909116815260200160405180910390a250600195945050505050565b60065481565b600454600160a060020a031681565b60045460009033600160a060020a0390811691161462001da357600080fd5b62001daf8383620034ef565b151562001dbb57600080fd5b50600192915050565b600054600160a060020a031681565b6003546000903390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001e2957600080fd5b5af1151562001e3757600080fd5b50505060405180519050151562001e4d57600080fd5b62001eae8382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9057600080fd5b5af1151562001e9e57600080fd5b50505060405180519050620034ef565b151562001eba57600080fd5b80600160a060020a0316636ab6936a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001ef857600080fd5b5af1151562001f0657600080fd5b5050506040518051600160a060020a0385166000908152600860205260409020541015905062001f3557600080fd5b80600160a060020a031663cc6f06a36040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001f7357600080fd5b5af1151562001f8157600080fd5b5050506040518051600160a060020a0385166000908152600a60205260409020541015905062001fb057600080fd5b600354600160a060020a0316631884c517338560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156200200957600080fd5b5af115156200201757600080fd5b5050506040518051905015156200202d57600080fd5b33600160a060020a03167fd3548f8b6a2a11c4a35ef5a16dbf7142c9db5163c7d46e7f66482664277cff0784604051600160a060020a03909116815260200160405180910390a250600192915050565b60008054600160a060020a03166323b872dd33308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515620020e257600080fd5b5af11515620020f057600080fd5b5050506040518051905015156200210657600080fd5b600160a060020a03331660009081526008602052604090205462002131908363ffffffff6200307116565b33600160a060020a03811660009081526008602052604090819020929092557fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91849051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b600160a060020a038416600090815260096020526040812054819081908190819081908190819081908d9060ff161515620021d557600080fd5b8d985033600160a060020a031689600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200222057600080fd5b5af115156200222e57600080fd5b50505060405180519050600160a060020a03161415156200224e57600080fd5b600289600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200228e57600080fd5b5af115156200229c57600080fd5b505050604051805190506004811115620022b257fe5b14620022bd57600080fd5b88600160a060020a0316636946f6926040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620022fb57600080fd5b5af115156200230957600080fd5b5050506040518051985050600160a060020a0388166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200235257600080fd5b5af115156200236057600080fd5b50505060405180519750506000871115620023e257620023d688600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620023b757600080fd5b5af11515620023c557600080fd5b505050604051805190508862002fda565b1515620023e257600080fd5b88600160a060020a03166371a599ca6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200242057600080fd5b5af115156200242e57600080fd5b5050506040518051965050600160a060020a03861615620025175785600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200248757600080fd5b5af115156200249557600080fd5b5050506040518051955050600085111562002517576200250b86600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620024ec57600080fd5b5af11515620024fa57600080fd5b505050604051805190508662002fda565b15156200251757600080fd5b600454600160a060020a039081169063eb3721be908b1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200256257600080fd5b5af115156200257057600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b1515620025b257600080fd5b5af11515620025c057600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a5062002648975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b9150620026ec89600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200268c57600080fd5b5af115156200269a57600080fd5b50505060405180519050620026e68b600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b6200358b565b1515620026f857600080fd5b6200270483836200346c565b15156200271057600080fd5b88600160a060020a031663d5fdfdbc8e8e8e6040518463ffffffff1660e060020a02815260040180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156200277b57808201518382015260200162002761565b50505050905090810190601f168015620027a95780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015620027e1578082015183820152602001620027c7565b50505050905090810190601f1680156200280f5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015620028475780820151838201526020016200282d565b50505050905090810190601f168015620028755780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15156200289857600080fd5b5af11515620028a657600080fd5b505050600160a060020a03301660009081526008602052604081206001015494508411156200293a5762002908620028fa6103e8620028ed87600a63ffffffff6200357416565b9063ffffffff6200364016565b859063ffffffff6200362816565b93506200291630856200358b565b15156200292257600080fd5b6200292e838562002fda565b15156200293a57600080fd5b7fed236d0a24cb7a32c76960696e44bac711b80ef76780688405dc96c2495b75f98e8a600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200299a57600080fd5b5af11515620029a857600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a15060019d9c50505050505050505050505050565b600754600160a060020a031681565b60045460009033600160a060020a0390811691161462002a1757600080fd5b62001daf83836200346c565b600254600160a060020a031681565b6008602052600090815260409020805460019091015482565b60096020526000908152604090205460ff1681565b60075433600160a060020a0390811691161462002a7c57600080fd5b600054600160a060020a03161562002a9357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03978816179091556004805482169587169590951790945560038054851693861693909317909255600180548416918516919091179055600280549092169216919091179055565b6005602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002bb55780601f1062002b895761010080835404028352916020019162002bb5565b820191906000526020600020905b81548152906001019060200180831162002b9757829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002c575780601f1062002c2b5761010080835404028352916020019162002c57565b820191906000526020600020905b81548152906001019060200180831162002c3957829003601f168201915b5050505050908060030154905084565b600062002c7362003750565b62002c7d62003750565b600062002c8a8562000f5a565b151562002c9657600080fd5b60008581526005602090815260409182902080546003820154600180840180549396909560029586019593948794938116156101000260001901169290920491601f83018190048102019051908101604052809291908181526020018280546001816001161561010002031660029004801562002d575780601f1062002d2b5761010080835404028352916020019162002d57565b820191906000526020600020905b81548152906001019060200180831162002d3957829003601f168201915b50505050509250818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002df75780601f1062002dcb5761010080835404028352916020019162002df7565b820191906000526020600020905b81548152906001019060200180831162002dd957829003601f168201915b5050505050915093509350935093509193509193565b6003546000908190600160a060020a031663d440c6f38460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002e6357600080fd5b5af1151562002e7157600080fd5b5050506040518051600160a060020a03949094166000908152600a6020526040902054939492505050565b6001546000908190600160a060020a031663fc06a87788888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b151562002f2d57600080fd5b5af1151562002f3b57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f03d3b6187bbe7d21aa3cf229e292ba41fa8bca6ec2128c0f1625178b8191cdc28989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b600160a060020a03821660009081526008602052604081205462003005908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090819020919091557f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b6000828201838110156200308157fe5b8091505b5092915050565b6003546000908390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620030e257600080fd5b5af11515620030f057600080fd5b5050506040518051905015156200310657600080fd5b620031678382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200314957600080fd5b5af115156200315757600080fd5b505050604051805190506200346c565b15156200317357600080fd5b600354600160a060020a0316630b00de8d858560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515620031cc57600080fd5b5af11515620031da57600080fd5b505050604051805190501515620031f057600080fd5b5060019392505050565b6000828211156200320757fe5b50900390565b600154600090839082908190600160a060020a0316638403be918460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200326757600080fd5b5af115156200327557600080fd5b5050506040518051905015156200328b57600080fd5b82600160a060020a03166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620032c957600080fd5b5af11515620032d757600080fd5b5050506040518051925050600160a060020a03851615620033d457506002548490600160a060020a03166316265b4e8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200334657600080fd5b5af115156200335457600080fd5b5050506040518051905015156200336a57600080fd5b620033d181600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620033ac57600080fd5b5af11515620033ba57600080fd5b505050604051805184915063ffffffff6200307116565b91505b600354600160a060020a03166368c197dd8860405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200342557600080fd5b5af115156200343357600080fd5b5050506040518051905015156200344957600080fd5b620034558883620034ef565b15156200346157600080fd5b509695505050505050565b600160a060020a0382166000908152600860205260408120600101546200349a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020600181019190915554620034cd908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090205550600192915050565b600160a060020a0382166000908152600860205260408120546200351a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020908155600101546200354b908363ffffffff6200307116565b600160a060020a0384166000908152600860205260409020600190810191909155905092915050565b6000620035848383606462003652565b9392505050565b600160a060020a038216600090815260086020526040812060010154620035b9908363ffffffff620031fa16565b600160a060020a03841660009081526008602052604090819020600101919091557f4051ba94e08bb094159fc38391422b4b8ccfd2b1f8919c0eb37bb042d4b9cd8e908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b600081831062003639578162003584565b5090919050565b60008183101562003639578162003584565b60006200366b62003664858562003673565b83620036a2565b949350505050565b60008083151562003688576000915062003085565b508282028284828115156200369957fe5b04146200308157fe5b6000808284811515620036b157fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620036fd57805160ff19168380011785556200372d565b828001600101855582156200372d579182015b828111156200372d57825182559160200191906001019062003710565b506200373b92915062003762565b5090565b604051610c5a806200378383390190565b60206040519081016040526000815290565b6200377f91905b808211156200373b576000815560010162003769565b9056006060604052341561000f57600080fd5b604051610c5a380380610c5a8339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805182019190602001805191906020018051600e8054600160a060020a03191633600160a060020a039081169190911790915590925089161515905061009257600080fd5b6000805460ff1916600190811790915589905560028054600160a060020a0319908116600160a060020a038a81169190911790925560038054821689841617905560048054821688841617905560058054909116918a1691909117905560068490556007838051610107929160200190610141565b5060088054600160a060020a03938416600160a060020a03199182161790915560098054929093169116179055506101dc95505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061018257805160ff19168380011785556101af565b828001600101855582156101af579182015b828111156101af578251825591602001919060010190610194565b506101bb9291506101bf565b5090565b6101d991905b808211156101bb57600081556001016101c5565b90565b610a6f806101eb6000396000f3006060604052600436106101065763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630690e5b8811461010b57806315298c771461013a5780631a514d97146101c45780632d4d671f146101eb5780634e71d92d146101fe5780635f44910c146102135780636946f6921461022657806371a599ca146102395780638628aaff1461024c5780639c4a856114610271578063cc3a2dfa14610284578063d3281fd614610297578063d3a69e01146102aa578063d5fdfdbc146102bd578063da1fea2814610392578063e329c478146103a5578063ecc40f64146103dc578063f3859f57146103ef578063f6a5b13e14610402575b600080fd5b341561011657600080fd5b61011e610415565b604051600160a060020a03909116815260200160405180910390f35b341561014557600080fd5b61014d610424565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610189578082015183820152602001610171565b50505050905090810190601f1680156101b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101cf57600080fd5b6101d76104c2565b604051901515815260200160405180910390f35b34156101f657600080fd5b6101d761053d565b341561020957600080fd5b6102116105b7565b005b341561021e57600080fd5b61011e610647565b341561023157600080fd5b61011e610656565b341561024457600080fd5b61011e610665565b341561025757600080fd5b61025f610674565b60405190815260200160405180910390f35b341561027c57600080fd5b61014d61067a565b341561028f57600080fd5b61014d6106e5565b34156102a257600080fd5b61025f610750565b34156102b557600080fd5b61011e610756565b34156102c857600080fd5b61021160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061076595505050505050565b341561039d57600080fd5b61011e610913565b34156103b057600080fd5b6103b8610922565b604051808260048111156103c857fe5b60ff16815260200191505060405180910390f35b34156103e757600080fd5b61025f61092b565b34156103fa57600080fd5b61014d610931565b341561040d57600080fd5b61011e61099c565b600454600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b820191906000526020600020905b81548152906001019060200180831161049d57829003601f168201915b505050505081565b60045460009033600160a060020a039081169116146104e057600080fd5b600260005460ff1660048111156104f357fe5b146104fd57600080fd5b6000805460ff191660011790557f06c42818c4ab74dff6aec55942f601c2e9b7f2aa4321ee71690b125eacfe465460405160405180910390a15060015b90565b60045460009033600160a060020a0390811691161461055b57600080fd5b600160005460ff16600481111561056e57fe5b1461057857600080fd5b6000805460ff191660021790557f2b0cab0be6d82b2661b3b789c540ec9c7223aac635ac8e59a1e71e1137f2dd7760405160405180910390a150600190565b600e5433600160a060020a039081169116146105d257600080fd5b600160005460ff1660048111156105e557fe5b14806106015750600260005460ff1660048111156105ff57fe5b145b151561060c57600080fd5b6000805460ff191660031790557f1938697ee29e363ecda49e464c6d2aae25f0974bd1f2c81a91c21e13ad8dbf7760405160405180910390a1565b600554600160a060020a031681565b600254600160a060020a031681565b600354600160a060020a031681565b60065481565b600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600a5481565b600e54600160a060020a031681565b600e5433600160a060020a0390811691161461078057600080fd5b600260005460ff16600481111561079357fe5b1461079d57600080fd5b6000805460ff19166004179055600b8380516107bd9291602001906109ab565b50600c8280516107d19291602001906109ab565b50600d8180516107e59291602001906109ab565b508282826040518084805190602001908083835b602083106108185780518252601f1990920191602091820191016107f9565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b602083106108645780518252601f199092019160209182019101610845565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106108b05780518252601f199092019160209182019101610891565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600a557f777f59509d985349c80271b657d2649b218bc6f075a4625821b64448cc235b8660405160405180910390a1505050565b600854600160a060020a031681565b60005460ff1681565b60015481565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600954600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106109ec57805160ff1916838001178555610a19565b82800160010185558215610a19579182015b82811115610a195782518255916020019190600101906109fe565b50610a25929150610a29565b5090565b61053a91905b80821115610a255760008155600101610a2f5600a165627a7a72305820aab9d309bae837f3417f3dc81c0f650543365c210e440786b5dfc09f1981eba70029a165627a7a723058208b35e6ede3f96a784d6f976885ab01319f919cd17a134bcc7123f62ab2cd8ec00029", - "sourceMap": "281:17080:6:-;;;2896:69;;;;;;;;2929:19;:32;;-1:-1:-1;;;;;;2929:32:6;2951:10;-1:-1:-1;;;;;2929:32:6;;;;281:17080;;;-1:-1:-1;281:17080:6;;", - "deployedSourceMap": "281:17080:6:-;;;;;;;;;-1:-1:-1;;;281:17080:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3522:137;;;;;;;;;;-1:-1:-1;;;;;3522:137:6;;;;;;;14852:448;;;;;;;;;;-1:-1:-1;;;;;14852:448:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1499:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13056:254;;;;;;;;;;-1:-1:-1;;;;;13056:254:6;;;;;11323:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;603:27:6;;;;;;;;;;;;;;3684:616;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3684:616:6;;-1:-1:-1;;3684:616:6;;;-1:-1:-1;3684:616:6;;-1:-1:-1;;;3684:616:6;16082:239;;;;;;;;;;;;;;11516:130;;;;;;;;;;;;;;6310:106;;;;;;;;;;-1:-1:-1;;;;;6310:106:6;;;;;5132:366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;455:56;;;;;;;;;;;;5534:773;;;;;;;;;;;;;;-1:-1:-1;;;;;5534:773:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16323:159;;;;;;;;;;-1:-1:-1;;;;;16323:159:6;;;;;4303:526;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1452:44;;;;;;;;;;-1:-1:-1;;;;;1452:44:6;;;;;14619:231;;;;;;;;;;-1:-1:-1;;;;;14619:231:6;;;;;;;;;;;;667:34;;;;;;;;;;;;514:54;;;;;;;;;;;;398;;;;;;;;;;;;13313:241;;;;;;;;;;-1:-1:-1;;;;;13313:241:6;;;;;14390:227;;;;;;;;;;-1:-1:-1;;;;;14390:227:6;;;;;;;;;;;;7306:1561;;;;;;;;;;-1:-1:-1;;;;;7306:1561:6;;;;;12169:116;;;;;;;;;;-1:-1:-1;;;;;12169:116:6;;;;;15302:483;;;;;;;;;;-1:-1:-1;;;;;15302:483:6;;;;;;;;;;;;;;;;936:62;;;;;;;;;;;;732:30;;;;;;;;;;;;14079:145;;;;;;;;;;-1:-1:-1;;;;;14079:145:6;;;;;;;380:14;;;;;;;;;;;;12322:731;;;;;;;;;;-1:-1:-1;;;;;12322:731:6;;;;;15824:256;;;;;;;;;;;;;;8870:2430;;;;;;;;;;;;;-1:-1:-1;;;;;8870:2430:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8870:2430:6;;-1:-1:-1;8870:2430:6;;-1:-1:-1;;;;;;8870:2430:6;1001:64;;;;;;;;;;;;14226:150;;;;;;;;;;-1:-1:-1;;;;;14226:150:6;;;;;;;633:31;;;;;;;;;;;;1181:54;;;;;;;;;;-1:-1:-1;;;;;1181:54:6;;;;;1275:48;;;;;;;;;;-1:-1:-1;;;;;1275:48:6;;;;;2968:551;;;;;;;;;;-1:-1:-1;;;;;2968:551:6;;;;;;;;;;;;;;;;;;;;;;;;;876:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;876:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;876:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11649:330;;;;;;;;;;;;;;11982:184;;;;;;;;;;-1:-1:-1;;;;;11982:184:6;;;;;;;;-1:-1:-1;;;;;11982:184:6;;;;;;;;;;;;;;;;;;;;4832:297;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3522:137;1128:19;;1114:10;-1:-1:-1;;;;;1114:33:6;;;1128:19;;1114:33;1106:42;;;;;;3615:19;:40;;-1:-1:-1;;3615:40:6;-1:-1:-1;;;;;3615:40:6;;;;;;;;;;3522:137::o;14852:448::-;-1:-1:-1;;;;;1382:23:6;;14984:4;1382:23;;;:16;:23;;;;;;14968:5;;1382:23;;1374:32;;;;;;;;15038:10;-1:-1:-1;;;;;15003:45:6;15013:5;-1:-1:-1;;;;;15003:29:6;;:31;;;;;-1:-1:-1;;;15003:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15003:45:6;;14995:54;;;;;;;;15061:24;15068:7;15077;15061:6;:24::i;:::-;15053:33;;;;;;;;15094:11;15090:192;;;15146:21;:29;:36;;15180:1;15146:36;:33;:36;:::i;:::-;15114:21;:68;-1:-1:-1;;;;;15207:17:6;;15114:29;15207:17;;;:8;:17;;;;;;:24;;15229:1;15207:24;:21;:24;:::i;:::-;-1:-1:-1;;;;;15187:17:6;;;;;;:8;:17;;;;;;;:44;;;;:17;15241:36;;15262:5;;15241:36;-1:-1:-1;;;;;15241:36:6;;;;;;;;;;;;;;15090:192;-1:-1:-1;15292:4:6;;14852:448;-1:-1:-1;;;;;14852:448:6:o;1499:57::-;;;;;;:::o;13056:254::-;13117:17;13177:33;13190:10;13202:7;13177:12;:33::i;:::-;13169:42;;;;;;;;13271:10;-1:-1:-1;;;;;13246:45:6;;13283:7;13246:45;;-1:-1:-1;;;;;13246:45:6;;;;;;;;;;;;;;-1:-1:-1;13302:4:6;13056:254;;;:::o;11323:190::-;11397:24;11436;11453:6;11436:16;:24::i;:::-;11428:33;;;;;;;;-1:-1:-1;11472:20:6;;;;:12;:20;;;;;:37;;;;11323:190::o;603:27::-;;;-1:-1:-1;;;;;603:27:6;;:::o;3684:616::-;1128:19;;3818:13;;;;1114:10;-1:-1:-1;;;;;1114:33:6;;;1128:19;;1114:33;1106:42;;;;;;3875:17;;:24;;3897:1;3875:24;:21;:24;:::i;:::-;3838:17;:61;;;3940:31;;;;:12;:31;;;;;3975:54;;;3940:31;-1:-1:-1;4033:13:6;;;4070:5;;4033:42;;;;;;;;:::i;:::-;-1:-1:-1;4079:20:6;;;4116:12;;4079:49;;;;;;;;:::i;:::-;-1:-1:-1;4132:25:6;;;:54;;;4210:17;;4195:73;;4229:5;4236:12;4169:17;4195:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4195:73:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4195:73:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4279:17:6;;;3684:616;-1:-1:-1;;;3684:616:6:o;16082:239::-;-1:-1:-1;;;;;16188:10:6;16177:22;16135:4;16177:22;;;:10;:22;;;;;:28;:41;;16210:7;16177:41;:32;:41;:::i;:::-;16157:10;-1:-1:-1;;;;;16146:22:6;;;;;;;:10;:22;;;;;;:72;;;;16230:3;;;:12;;16157:10;16255:7;;16230:33;-1:-1:-1;;;16230:33:6;;;;;;-1:-1:-1;;;;;16230:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16222:42;;;;;;;;16273:29;16282:10;16294:7;16273:29;;-1:-1:-1;;;;;16273:29:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16313:4:6;16082:239;;;:::o;11516:130::-;11580:18;11612:20;;;:12;:20;;;;;:26;:30;;11516:130::o;6310:106::-;-1:-1:-1;;;;;6389:23:6;6371:4;6389:23;;;:16;:23;;;;;;;;;6310:106::o;5132:366::-;5300:10;;5250:22;;;;-1:-1:-1;;;;;5300:10:6;:24;5329:12;;5346:13;5364:14;;5300:83;;;;;-1:-1:-1;;;5300:83:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5300:83:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5279:104;;5417:10;-1:-1:-1;;;;;5392:81:6;5406:9;-1:-1:-1;;;;;5392:81:6;;5429:12;;5443:13;5458:14;;5392:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5392:81:6;;;;;;;;;;;;;;;;;;;;;;;;;;;5484:10;5132:366;-1:-1:-1;;;;;;5132:366:6:o;455:56::-;507:4;455:56;:::o;5534:773::-;5785:11;;5729:7;;5763:10;;5729:7;;;;-1:-1:-1;;;;;5785:11:6;:33;5819:15;5763:10;5847:11;5785:74;;-1:-1:-1;;;5785:74:6;;;;;;;;;;;;;-1:-1:-1;;;;;5785:74:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5777:83;;;;;;;;5884:57;5902:9;5913:11;5926:4;5932:8;5884:17;:57::i;:::-;5865:76;;5986:15;6006:9;6020:4;6029:8;6042:11;6058:8;6071:7;;6083:9;6097:12;5968:145;;:::i;:::-;;;;-1:-1:-1;;;;;5968:145:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6118:27:6;;;;;;;:16;:27;;;;;;;:34;;-1:-1:-1;;6118:34:6;6148:4;6118:34;;;5946:167;;-1:-1:-1;6165:37:6;;;;;5946:167;;6214:15;;6165:65;-1:-1:-1;;;6165:65:6;;;;;;-1:-1:-1;;;;;6165:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6157:74;;;;;;;;6271:11;-1:-1:-1;;;;;6241:42:6;;6260:9;6241:42;;-1:-1:-1;;;;;6241:42:6;;;;;;;;;;;;;;6294:9;5534:773;-1:-1:-1;;;;;;;;;;;5534:773:6:o;16323:159::-;-1:-1:-1;;;;;16426:18:6;16382:13;16426:18;;;:10;:18;;;;;:24;;16452:25;;;;;16426:24;;16323:159::o;4303:526::-;4555:13;;4720:11;;4499:25;;;;-1:-1:-1;;;;;4555:13:6;;;;:30;;4590:12;;;;4607:28;;4640:31;;4676;;4720:11;4555:181;;;;;-1:-1:-1;;;4555:181:6;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4555:181:6;-1:-1:-1;;;;;4555:181:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4531:205;;4773:13;-1:-1:-1;;;;;4745:56:6;4762:9;-1:-1:-1;;;;;4745:56:6;;4788:12;;4745:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4812:13;4303:526;-1:-1:-1;;;;;;4303:526:6:o;1452:44::-;;;;;;;;;;;;;:::o;14619:231::-;-1:-1:-1;;;;;1382:23:6;;14731:4;1382:23;;;:16;:23;;;;;;14715:5;;1382:23;;1374:32;;;;;;;;14785:10;-1:-1:-1;;;;;14750:45:6;14760:5;-1:-1:-1;;;;;14750:29:6;;:31;;;;;-1:-1:-1;;;14750:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14750:45:6;;14742:54;;;;;;;;14808:22;14815:5;14822:7;14808:6;:22::i;:::-;14800:31;;;;;;;;-1:-1:-1;14842:4:6;;14619:231;-1:-1:-1;;;;14619:231:6:o;667:34::-;;;-1:-1:-1;;;;;667:34:6;;:::o;514:54::-;566:2;514:54;:::o;398:::-;450:2;398:54;:::o;13313:241::-;13367:17;13427:33;13440:10;13452:7;13427:12;:33::i;:::-;13419:42;;;;;;;;13515:10;-1:-1:-1;;;;;13496:39:6;;13527:7;13496:39;;-1:-1:-1;;;;;13496:39:6;;;;;;;;;;;;;;-1:-1:-1;13546:4:6;13313:241;;;:::o;14390:227::-;-1:-1:-1;;;;;1382:23:6;;14500:4;1382:23;;;:16;:23;;;;;;14484:5;;1382:23;;1374:32;;;;;;;;14554:10;-1:-1:-1;;;;;14519:45:6;14529:5;-1:-1:-1;;;;;14519:29:6;;:31;;;;;-1:-1:-1;;;14519:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14519:45:6;;14511:54;;;;;;;;14577:20;14582:5;14589:7;14577:4;:20::i;7306:1561::-;-1:-1:-1;;;;;1382:23:6;;7394:4;1382:23;;;:16;:23;;;;;;7394:4;;;;;;;;;;;;7378:5;;1382:23;;1374:32;;;;;;;;7439:5;7405:40;;7484:10;-1:-1:-1;;;;;7457:37:6;:9;-1:-1:-1;;;;;7457:21:6;;:23;;;;;-1:-1:-1;;;7457:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7457:37:6;;7449:46;;;;;;;;7534:9;-1:-1:-1;;;;;7534:22:6;;:24;;;;;-1:-1:-1;;;7534:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;7609:18:6;;;:20;;;;;-1:-1:-1;;;7609:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7658:35:6;;-1:-1:-1;7641:13:6;:52;;;;;;;;;:111;;;-1:-1:-1;7714:38:6;7697:13;:55;;;;;;;;;7641:111;7633:120;;;;;;;;7800:10;-1:-1:-1;;;;;7800:31:6;;7832:5;7800:38;;-1:-1:-1;;;7800:38:6;;;;;;-1:-1:-1;;;;;7800:38:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7792:47;;;;;;;;7843:9;-1:-1:-1;;;;;7843:15:6;;:17;;;;;-1:-1:-1;;;7843:17:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8210:11:6;;-1:-1:-1;;;;;8210:11:6;;;;-1:-1:-1;8210:26:6;;8237;;;:28;;;;;-1:-1:-1;;;8237:28:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8210:56;;-1:-1:-1;;;8210:56:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:11;;8178:88;;-1:-1:-1;8210:56:6;-1:-1:-1;8325:47:6;;-1:-1:-1;;;;;;;8342:11:6;;;;-1:-1:-1;8342:27:6;;-1:-1:-1;8342:29:6;;-1:-1:-1;;;8342:29:6;;;;-1:-1:-1;;;8342:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8325:5;;-1:-1:-1;8325:47:6;:16;:47;:::i;:::-;8299:73;;8385:67;8393:9;-1:-1:-1;;;;;8393:21:6;;:23;;;;;-1:-1:-1;;;8393:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8418:33;8428:9;-1:-1:-1;;;;;8428:20:6;;:22;;;;;-1:-1:-1;;;8428:22:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8418:5;;-1:-1:-1;8418:33:6;:9;:33;:::i;:::-;8385:6;:67::i;:::-;8377:76;;;;;;;;8503:49;8511:15;8536;8503:5;:49::i;:::-;8495:58;;;;;;;;8676:49;8684:4;8709:15;8676:6;:49::i;:::-;8668:58;;;;;;;;8738:49;8746:4;8771:15;8738:4;:49::i;:::-;8730:58;;;;;;;;8799:49;8816:5;8823:9;-1:-1:-1;;;;;8823:22:6;;:24;;;;;-1:-1:-1;;;8823:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8799:49;;-1:-1:-1;;;;;8799:49:6;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8859:4:6;;7306:1561;-1:-1:-1;;;;;;;;7306:1561:6:o;12169:116::-;-1:-1:-1;;;;;12264:17:6;12231:19;12264:17;;;:8;:17;;;;;;;12169:116::o;15302:483::-;-1:-1:-1;;;;;1382:23:6;;15433:4;1382:23;;;:16;:23;;;;;;15417:5;;1382:23;;1374:32;;;;;;;;15487:10;-1:-1:-1;;;;;15452:45:6;15462:5;-1:-1:-1;;;;;15452:29:6;;:31;;;;;-1:-1:-1;;;15452:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15452:45:6;;15444:54;;;;;;;;15510:23;15516:7;15525;15510:5;:23::i;:::-;15502:32;;;;;;;;15542:11;15538:229;;;15593:28;;:35;;15626:1;15593:35;:32;:35;:::i;:::-;15562:28;:66;-1:-1:-1;;;;;15675:17:6;;;;;;:8;:17;;;;;;15653:65;;15675:42;;566:2;15675:42;:21;:42;:::i;:::-;-1:-1:-1;;;;;15653:17:6;;;;;;:8;:17;;;;;;;:65;:21;:65;:::i;:::-;-1:-1:-1;;;;;15633:17:6;;;;;;:8;:17;;;;;;;:85;;;;:17;15728:34;;15747:5;;15728:34;-1:-1:-1;;;;;15728:34:6;;;;;;;;;;;;;;-1:-1:-1;15777:4:6;;15302:483;-1:-1:-1;;;;;15302:483:6:o;936:62::-;;;;:::o;732:30::-;;;-1:-1:-1;;;;;732:30:6;;:::o;14079:145::-;827:11;;14165:4;;805:10;-1:-1:-1;;;;;805:34:6;;;827:11;;805:34;797:43;;;;;;14184:20;14189:5;14196:7;14184:4;:20::i;:::-;14176:29;;;;;;;;-1:-1:-1;14216:4:6;14079:145;;;;:::o;380:14::-;;;-1:-1:-1;;;;;380:14:6;;:::o;12322:731::-;12510:13;;12379:15;;12464:10;;-1:-1:-1;;;;;12510:13:6;:36;12464:10;12510:48;;-1:-1:-1;;;12510:48:6;;;;;;-1:-1:-1;;;;;12510:48:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12502:57;;;;;;;;12596;12601:7;12610:10;-1:-1:-1;;;;;12610:40:6;;:42;;;;;-1:-1:-1;;;12610:42:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12596:4;:57::i;:::-;12588:66;;;;;;;;12726:10;-1:-1:-1;;;;;12726:43:6;;:45;;;;;-1:-1:-1;;;12726:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12697:19:6;;;;;;:10;:19;;;;;:25;:74;;;-1:-1:-1;12689:83:6;;;;;;12813:10;-1:-1:-1;;;;;12813:43:6;;:45;;;;;-1:-1:-1;;;12813:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12784:17:6;;;;;;:8;:17;;;;;;:74;;;-1:-1:-1;12776:83:6;;;;;;12895:13;;-1:-1:-1;;;;;12895:13:6;:39;12935:10;12947:7;12895:60;;-1:-1:-1;;;12895:60:6;;;;;;-1:-1:-1;;;;;12895:60:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12887:69;;;;;;;;13014:10;-1:-1:-1;;;;;12991:43:6;;13026:7;12991:43;;-1:-1:-1;;;;;12991:43:6;;;;;;;;;;;;;;-1:-1:-1;13045:4:6;;12322:731;-1:-1:-1;;12322:731:6:o;15824:256::-;15876:4;15895:3;;-1:-1:-1;;;;;15895:3:6;:16;15912:10;15932:4;15939:7;15895:52;;-1:-1:-1;;;15895:52:6;;;;;;-1:-1:-1;;;;;15895:52:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15887:61;;;;;;;;-1:-1:-1;;;;;15994:10:6;15983:22;;;;;:10;:22;;;;;:28;:41;;16016:7;15983:41;:32;:41;:::i;:::-;15963:10;-1:-1:-1;;;;;15952:22:6;;;;;;:10;:22;;;;;;;:72;;;;16033:28;;16053:7;;16033:28;-1:-1:-1;;;;;16033:28:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16072:4:6;15824:256;;;:::o;8870:2430::-;-1:-1:-1;;;;;1382:23:6;;9012:4;1382:23;;;:16;:23;;;;;;9012:4;;;;;;;;;;;;;;;;8996:5;;1382:23;;1374:32;;;;;;;;9055:5;9023:38;;9101:10;-1:-1:-1;;;;;9073:38:6;:9;-1:-1:-1;;;;;9073:22:6;;:24;;;;;-1:-1:-1;;;9073:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9073:38:6;;9065:47;;;;;;;;9152:38;9124:9;-1:-1:-1;;;;;9124:18:6;;:20;;;;;-1:-1:-1;;;9124:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;;;;;9116:75;;;;;;9228:9;-1:-1:-1;;;;;9228:15:6;;:17;;;;;-1:-1:-1;;;9228:17:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;9269:14:6;;;:16;;;;;-1:-1:-1;;;9269:16:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9304:1:6;9293:12;;9289:70;;;9322:31;9329:3;-1:-1:-1;;;;;9329:11:6;;:13;;;;;-1:-1:-1;;;9329:13:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:8;9322:6;:31::i;:::-;9314:40;;;;;;;;9402:9;-1:-1:-1;;;;;9402:19:6;;:21;;;;;-1:-1:-1;;;9402:21:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;9432:21:6;;;9428:175;;9485:7;-1:-1:-1;;;;;9485:22:6;;:24;;;;;-1:-1:-1;;;9485:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9533:1:6;9518:16;;9514:85;;;9553:39;9560:7;-1:-1:-1;;;;;9560:15:6;;:17;;;;;-1:-1:-1;;;9560:17:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9579:12;9553:6;:39::i;:::-;9545:48;;;;;;;;10148:11;;-1:-1:-1;;;;;10148:11:6;;;;:26;;10175;;;:28;;;;;-1:-1:-1;;;10175:28:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10148:56;;-1:-1:-1;;;10148:56:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10286:11;;10116:88;;-1:-1:-1;10148:56:6;-1:-1:-1;10269:47:6;;-1:-1:-1;;;;;;;10286:11:6;;;;-1:-1:-1;10286:27:6;;-1:-1:-1;10286:29:6;;-1:-1:-1;;;10286:29:6;;;;-1:-1:-1;;;10286:29:6;;;;;;;;;;;;;;;;;;;;;;;10269:47;10237:79;;10329:66;10336:9;-1:-1:-1;;;;;10336:21:6;;:23;;;;;-1:-1:-1;;;10336:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10361:33;10371:9;-1:-1:-1;;;;;10371:20:6;;:22;;;;;-1:-1:-1;;;10371:22:6;;;;;;;;;;;;;;;;;;;;;;;10361:33;10329:5;:66::i;:::-;10321:75;;;;;;;;10461:48;10468:15;10493;10461:6;:48::i;:::-;10453:57;;;;;;;;10560:9;-1:-1:-1;;;;;10560:19:6;;10580:7;10589;10598:4;10560:43;;;;;-1:-1:-1;;;10560:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10560:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10560:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10560:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;10970:4:6;10959:16;;;;;:10;:16;;;;;:23;;;;-1:-1:-1;11025:9:6;;11022:199;;;11051:77;11061:66;507:4;11061:35;:5;450:2;11061:35;:16;:35;:::i;:::-;:39;:66;:39;:66;:::i;:::-;11051:5;;:77;:9;:77;:::i;:::-;11043:85;;11141:30;11147:4;11165:5;11141;:30::i;:::-;11133:39;;;;;;;;11185:30;11192:15;11209:5;11185:6;:30::i;:::-;11177:39;;;;;;;;11230:51;11249:5;11256:9;-1:-1:-1;;;;;11256:22:6;;:24;;;;;-1:-1:-1;;;11256:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11230:51;;-1:-1:-1;;;;;11230:51:6;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11292:4:6;;8870:2430;-1:-1:-1;;;;;;;;;;;;;8870:2430:6:o;1001:64::-;;;-1:-1:-1;;;;;1001:64:6;;:::o;14226:150::-;827:11;;14315:4;;805:10;-1:-1:-1;;;;;805:34:6;;;827:11;;805:34;797:43;;;;;;14334:22;14341:5;14348:7;14334:6;:22::i;633:31::-;;;-1:-1:-1;;;;;633:31:6;;:::o;1181:54::-;;;;;;;;;;;;;;;;;;;:::o;1275:48::-;;;;;;;;;;;;;;;:::o;2968:551::-;1128:19;;1114:10;-1:-1:-1;;;;;1114:33:6;;;1128:19;;1114:33;1106:42;;;;;;3206:1;3190:3;-1:-1:-1;;;;;3190:3:6;3182:26;3174:35;;;;;;3213:3;:57;;-1:-1:-1;;3213:57:6;;;-1:-1:-1;;;;;3213:57:6;;;;;;;3274:11;:57;;;;;;;;;;;;;;3335:13;:57;;;;;;;;;;;;;;-1:-1:-1;3396:57:6;;;;;;;;;;;;;-1:-1:-1;3457:57:6;;;;;;;;;;;;;2968:551::o;876:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11649:330::-;11707:13;11722:11;;:::i;:::-;11735:19;;:::i;:::-;11756:24;11795;11812:6;11795:16;:24::i;:::-;11787:33;;;;;;;;11836:20;;;;:12;:20;;;;;;;;;:26;;11934:37;;;;11867:25;;;;11824:151;;11836:26;;11867:25;;11897:32;;;;;11934:37;;11867:25;;11824:151;;;;;;-1:-1:-1;;11824:151:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11649:330;;;;;:::o;11982:184::-;12099:13;;12045:18;;;;-1:-1:-1;;;;;12099:13:6;:34;12134:7;12099:43;;-1:-1:-1;;;12099:43:6;;;;;;-1:-1:-1;;;;;12099:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12144:17:6;;;;;;;;:8;:17;;;;;;12099:43;;11982:184;-1:-1:-1;;;11982:184:6:o;4832:297::-;4976:6;;4934:18;;;;-1:-1:-1;;;;;4976:6:6;:16;4997:8;;5010:9;5024:10;;4976:62;;;;;-1:-1:-1;;;4976:62:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4976:62:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4959:79;;5068:6;-1:-1:-1;;;;;5047:61:6;5057:9;-1:-1:-1;;;;;5047:61:6;;5076:8;;5086:9;5097:10;;5047:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5047:61:6;;;;;;;;;;;;;;;;;;;;;;;;;;;5119:6;4832:297;-1:-1:-1;;;;;;4832:297:6:o;16523:189::-;-1:-1:-1;;;;;16626:17:6;;16589:4;16626:17;;;:10;:17;;;;;:23;:36;;16654:7;16626:36;:27;:36;:::i;:::-;-1:-1:-1;;;;;16600:17:6;;;;;;:10;:17;;;;;;;:62;;;;16671:22;;16611:5;;16685:7;;16671:22;-1:-1:-1;;;;;16671:22:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16704:4:6;16523:189;;;;:::o;405:123:15:-;463:7;489:5;;;505:6;;;;498:14;;;;523:1;516:8;;405:123;;;;;;:::o;13557:450:6:-;13741:13;;13635:17;;13694:11;;-1:-1:-1;;;;;13741:13:6;:36;13694:11;13741:49;;-1:-1:-1;;;13741:49:6;;;;;;-1:-1:-1;;;;;13741:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13733:58;;;;;;;;13828:59;13835:7;13844:10;-1:-1:-1;;;;;13844:40:6;;:42;;;;;-1:-1:-1;;;13844:42:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13828:6;:59::i;:::-;13820:68;;;;;;;;13924:13;;-1:-1:-1;;;;;13924:13:6;:41;13966:11;13979:7;13924:63;;-1:-1:-1;;;13924:63:6;;;;;;-1:-1:-1;;;;;13924:63:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13916:72;;;;;;;;-1:-1:-1;13999:4:6;;13557:450;-1:-1:-1;;;13557:450:6:o;531:106:15:-;589:7;610:6;;;;603:14;;;;-1:-1:-1;628:5:15;;;531:106::o;6419:848:6:-;6701:6;;6647:7;;6684:4;;6647:7;;;;-1:-1:-1;;;;;6701:6:6;:22;6684:4;6701:29;;-1:-1:-1;;;6701:29:6;;;;;;-1:-1:-1;;;;;6701:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6693:38;;;;;;;;6795:3;-1:-1:-1;;;;;6795:14:6;;:16;;;;;-1:-1:-1;;;6795:16:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;6833:22:6;;;6829:256;;-1:-1:-1;6941:10:6;;6919:8;;-1:-1:-1;;;;;6941:10:6;:29;6919:8;6941:39;;-1:-1:-1;;;6941:39:6;;;;;;-1:-1:-1;;;;;6941:39:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6933:48;;;;;;;;7042:38;7055:7;-1:-1:-1;;;;;7055:22:6;;:24;;;;;-1:-1:-1;;;7055:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7042:8;;-1:-1:-1;7042:38:6;:12;:38;:::i;:::-;7031:49;;6829:256;7113:13;;-1:-1:-1;;;;;7113:13:6;:36;7150:11;7113:49;;-1:-1:-1;;;7113:49:6;;;;;;-1:-1:-1;;;;;7113:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7105:58;;;;;;;;7176:26;7181:10;7193:8;7176:4;:26::i;:::-;7168:35;;;;;;;;-1:-1:-1;7255:8:6;6419:848;-1:-1:-1;;;;;;6419:848:6:o;17132:227::-;-1:-1:-1;;;;;17236:17:6;;17198:4;17236:17;;;:10;:17;;;;;:24;;;:37;;17265:7;17236:37;:28;:37;:::i;:::-;-1:-1:-1;;;;;17209:17:6;;;;;;:10;:17;;;;;:24;;;:64;;;;17304:23;:36;;17332:7;17304:36;:27;:36;:::i;:::-;-1:-1:-1;;;;;17277:17:6;;;;;;:10;:17;;;;;:63;-1:-1:-1;17351:4:6;17132:227;;;;:::o;16905:225::-;-1:-1:-1;;;;;17007:17:6;;16969:4;17007:17;;;:10;:17;;;;;:23;:36;;17035:7;17007:36;:27;:36;:::i;:::-;-1:-1:-1;;;;;16980:17:6;;;;;;:10;:17;;;;;:63;;;17074:24;;;:37;;17103:7;17074:37;:28;:37;:::i;:::-;-1:-1:-1;;;;;17047:17:6;;;;;;:10;:17;;;;;:24;;;;:64;;;;:24;-1:-1:-1;16905:225:6;;;;:::o;1388:114:15:-;1453:7;1474:24;1488:1;1491;1494:3;1474:13;:24::i;:::-;1467:31;1388:114;-1:-1:-1;;;1388:114:15:o;16714:189:6:-;-1:-1:-1;;;;;16817:17:6;;16779:4;16817:17;;;:10;:17;;;;;:24;;;:37;;16846:7;16817:37;:28;:37;:::i;:::-;-1:-1:-1;;;;;16790:17:6;;;;;;:10;:17;;;;;;;:24;;:64;;;;16863:21;;16801:5;;16876:7;;16863:21;-1:-1:-1;;;;;16863:21:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16895:4:6;16714:189;;;;:::o;1165:96:15:-;1223:7;1248:1;1244;:5;:13;;1256:1;1244:13;;;-1:-1:-1;1252:1:15;;1165:96;-1:-1:-1;1165:96:15:o;1065:97::-;1123:7;1149:1;1144;:6;;:14;;1157:1;1144:14;;1264:121;1343:7;1364:17;1368:9;1372:1;1375;1368:3;:9::i;:::-;1379:1;1364:3;:17::i;:::-;1357:24;1264:121;-1:-1:-1;;;;1264:121:15:o;640:162::-;698:7;;716:6;;712:32;;;738:1;731:8;;;;712:32;-1:-1:-1;759:5:15;;;763:1;759;:5;775;;;;;;;;:10;768:18;;;805:257;863:7;949:9;965:1;961;:5;;;;;;;;;805:257;-1:-1:-1;;;;805:257:15:o;281:17080:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;281:17080:6;;;-1:-1:-1;281:17080:6;:::i;:::-;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o", - "source": "pragma solidity ^0.4.21;\n\nimport \"rlc-token/contracts/RLC.sol\";\n\nimport './WorkOrder.sol';\nimport './Marketplace.sol';\nimport './AppHub.sol';\nimport './DatasetHub.sol';\nimport './WorkerPoolHub.sol';\nimport \"./SafeMathOZ.sol\";\nimport './IexecLib.sol';\n\n\n/**\n * @title IexecHub\n */\n\ncontract IexecHub\n{\n\tusing SafeMathOZ for uint256;\n\n\t/**\n\t* RLC contract for token transfers.\n\t*/\n\tRLC public rlc;\n\n\tuint256 public constant STAKE_BONUS_RATIO = 10;\n\tuint256 public constant STAKE_BONUS_MIN_THRESHOLD = 1000;\n\tuint256 public constant SCORE_UNITARY_SLASH = 50;\n\n\t/**\n\t * Slaves contracts\n\t */\n\tAppHub public appHub;\n\tDatasetHub public datasetHub;\n\tWorkerPoolHub public workerPoolHub;\n\n\t/**\n\t * Market place\n\t */\n\tMarketplace public marketplace;\n\tmodifier onlyMarketplace()\n\t{\n\t\trequire(msg.sender == address(marketplace));\n\t\t_;\n\t}\n\t/**\n\t * Categories\n\t */\n\tmapping(uint256 => IexecLib.Category) public m_categories;\n\tuint256 public m_categoriesCount;\n\taddress public m_categoriesCreator;\n\tmodifier onlyCategoriesCreator()\n\t{\n\t\trequire(msg.sender == m_categoriesCreator);\n\t\t_;\n\t}\n\n\t/**\n\t * Escrow\n\t */\n\tmapping(address => IexecLib.Account) public m_accounts;\n\n\n\t/**\n\t * workOrder Registered\n\t */\n\tmapping(address => bool) public m_woidRegistered;\n\tmodifier onlyRegisteredWoid(address _woid)\n\t{\n\t\trequire(m_woidRegistered[_woid]);\n\t\t_;\n\t}\n\n\t/**\n\t * Reputation for PoCo\n\t */\n\tmapping(address => uint256) public m_scores;\n\tIexecLib.ContributionHistory public m_contributionHistory;\n\n\n\tevent WorkOrderActivated(address woid, address indexed workerPool);\n\tevent WorkOrderClaimed (address woid, address workerPool);\n\tevent WorkOrderCompleted(address woid, address workerPool);\n\n\tevent CreateApp (address indexed appOwner, address indexed app, string appName, uint256 appPrice, string appParams );\n\tevent CreateDataset (address indexed datasetOwner, address indexed dataset, string datasetName, uint256 datasetPrice, string datasetParams);\n\tevent CreateWorkerPool(address indexed workerPoolOwner, address indexed workerPool, string workerPoolDescription );\n\n\tevent CreateCategory (uint256 catid, string name, string description, uint256 workClockTimeRef);\n\n\tevent WorkerPoolSubscription (address indexed workerPool, address worker);\n\tevent WorkerPoolUnsubscription(address indexed workerPool, address worker);\n\tevent WorkerPoolEviction (address indexed workerPool, address worker);\n\n\tevent AccurateContribution(address woid, address indexed worker);\n\tevent FaultyContribution (address woid, address indexed worker);\n\n\tevent Deposit (address owner, uint256 amount);\n\tevent Withdraw(address owner, uint256 amount);\n\tevent Reward (address user, uint256 amount);\n\tevent Seize (address user, uint256 amount);\n\n\t/**\n\t * Constructor\n\t */\n\tfunction IexecHub()\n\tpublic\n\t{\n\t\tm_categoriesCreator = msg.sender;\n\t}\n\n\tfunction attachContracts(\n\t\taddress _tokenAddress,\n\t\taddress _marketplaceAddress,\n\t\taddress _workerPoolHubAddress,\n\t\taddress _appHubAddress,\n\t\taddress _datasetHubAddress)\n\tpublic onlyCategoriesCreator\n\t{\n\t\trequire(address(rlc) == address(0));\n\t\trlc = RLC (_tokenAddress );\n\t\tmarketplace = Marketplace (_marketplaceAddress );\n\t\tworkerPoolHub = WorkerPoolHub(_workerPoolHubAddress);\n\t\tappHub = AppHub (_appHubAddress );\n\t\tdatasetHub = DatasetHub (_datasetHubAddress );\n\n\t}\n\n\tfunction setCategoriesCreator(address _categoriesCreator)\n\tpublic onlyCategoriesCreator\n\t{\n\t\tm_categoriesCreator = _categoriesCreator;\n\t}\n\t/**\n\t * Factory\n\t */\n\n\tfunction createCategory(\n\t\tstring _name,\n\t\tstring _description,\n\t\tuint256 _workClockTimeRef)\n\tpublic onlyCategoriesCreator returns (uint256 catid)\n\t{\n\t\tm_categoriesCount = m_categoriesCount.add(1);\n\t\tIexecLib.Category storage category = m_categories[m_categoriesCount];\n\t\tcategory.catid = m_categoriesCount;\n\t\tcategory.name = _name;\n\t\tcategory.description = _description;\n\t\tcategory.workClockTimeRef = _workClockTimeRef;\n\t\temit CreateCategory(m_categoriesCount, _name, _description, _workClockTimeRef);\n\t\treturn m_categoriesCount;\n\t}\n\n\tfunction createWorkerPool(\n\t\tstring _description,\n\t\tuint256 _subscriptionLockStakePolicy,\n\t\tuint256 _subscriptionMinimumStakePolicy,\n\t\tuint256 _subscriptionMinimumScorePolicy)\n\texternal returns (address createdWorkerPool)\n\t{\n\t\taddress newWorkerPool = workerPoolHub.createWorkerPool(\n\t\t\t_description,\n\t\t\t_subscriptionLockStakePolicy,\n\t\t\t_subscriptionMinimumStakePolicy,\n\t\t\t_subscriptionMinimumScorePolicy,\n\t\t\taddress(marketplace)\n\t\t);\n\t\temit CreateWorkerPool(tx.origin, newWorkerPool, _description);\n\t\treturn newWorkerPool;\n\t}\n\n\tfunction createApp(\n\t\tstring _appName,\n\t\tuint256 _appPrice,\n\t\tstring _appParams)\n\texternal returns (address createdApp)\n\t{\n\t\taddress newApp = appHub.createApp(\n\t\t\t_appName,\n\t\t\t_appPrice,\n\t\t\t_appParams\n\t\t);\n\t\temit CreateApp(tx.origin, newApp, _appName, _appPrice, _appParams);\n\t\treturn newApp;\n\t}\n\n\tfunction createDataset(\n\t\tstring _datasetName,\n\t\tuint256 _datasetPrice,\n\t\tstring _datasetParams)\n\texternal returns (address createdDataset)\n\t{\n\t\taddress newDataset = datasetHub.createDataset(\n\t\t\t_datasetName,\n\t\t\t_datasetPrice,\n\t\t\t_datasetParams\n\t\t\t);\n\t\temit CreateDataset(tx.origin, newDataset, _datasetName, _datasetPrice, _datasetParams);\n\t\treturn newDataset;\n\t}\n\n\t/**\n\t * WorkOrder Emission\n\t */\n\tfunction buyForWorkOrder(\n\t\tuint256 _marketorderIdx,\n\t\taddress _workerpool,\n\t\taddress _app,\n\t\taddress _dataset,\n\t\tstring _params,\n\t\taddress _callback,\n\t\taddress _beneficiary)\n\texternal returns (address)\n\t{\n\t\taddress requester = msg.sender;\n\t\trequire(marketplace.consumeMarketOrderAsk(_marketorderIdx, requester, _workerpool));\n\n\t\tuint256 emitcost = lockWorkOrderCost(requester, _workerpool, _app, _dataset);\n\n\t\tWorkOrder workorder = new WorkOrder(\n\t\t\t_marketorderIdx,\n\t\t\trequester,\n\t\t\t_app,\n\t\t\t_dataset,\n\t\t\t_workerpool,\n\t\t\temitcost,\n\t\t\t_params,\n\t\t\t_callback,\n\t\t\t_beneficiary\n\t\t);\n\n\t\tm_woidRegistered[workorder] = true;\n\n\t\trequire(WorkerPool(_workerpool).emitWorkOrder(workorder, _marketorderIdx));\n\n\t\temit WorkOrderActivated(workorder, _workerpool);\n\t\treturn workorder;\n\t}\n\n\tfunction isWoidRegistred(address _woid) public view returns (bool)\n\t{\n\t\treturn m_woidRegistered[_woid];\n\t}\n\n\tfunction lockWorkOrderCost(\n\t\taddress _requester,\n\t\taddress _workerpool, // Address of a smartcontract\n\t\taddress _app, // Address of a smartcontract\n\t\taddress _dataset) // Address of a smartcontract\n\tinternal returns (uint256)\n\t{\n\t\t// APP\n\t\tApp app = App(_app);\n\t\trequire(appHub.isAppRegistered (_app));\n\t\t// initialize usercost with dapp price\n\t\tuint256 emitcost = app.m_appPrice();\n\n\t\t// DATASET\n\t\tif (_dataset != address(0)) // address(0) → no dataset\n\t\t{\n\t\t\tDataset dataset = Dataset(_dataset);\n\t\t\trequire(datasetHub.isDatasetRegistred(_dataset));\n\t\t\t// add optional datasetPrice for userCost\n\t\t\temitcost = emitcost.add(dataset.m_datasetPrice());\n\t\t}\n\n\t\t// WORKERPOOL\n\t\trequire(workerPoolHub.isWorkerPoolRegistered(_workerpool));\n\n\t\trequire(lock(_requester, emitcost)); // Lock funds for app + dataset payment\n\n\t\treturn emitcost;\n\t}\n\n\t/**\n\t * WorkOrder life cycle\n\t */\n\n\tfunction claimFailedConsensus(address _woid)\n\tpublic onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\tWorkOrder workorder = WorkOrder(_woid);\n\t\trequire(workorder.m_requester() == msg.sender);\n\t\tWorkerPool workerpool = WorkerPool(workorder.m_workerpool());\n\n\t\tIexecLib.WorkOrderStatusEnum currentStatus = workorder.m_status();\n\t\trequire(currentStatus == IexecLib.WorkOrderStatusEnum.ACTIVE || currentStatus == IexecLib.WorkOrderStatusEnum.REVEALING);\n\t\t// Unlock stakes for all workers\n\t\trequire(workerpool.claimFailedConsensus(_woid));\n\t\tworkorder.claim(); // revert on error\n\n\t\t/* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */\n\t\t/* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */\n\t\tuint256 value;\n\t\taddress workerpoolOwner;\n\t\t(,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas\n\t\tuint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO());\n\n\t\trequire(unlock (workorder.m_requester(), value.add(workorder.m_emitcost()))); // UNLOCK THE FUNDS FOR REINBURSEMENT\n\t\trequire(seize (workerpoolOwner, workerpoolStake));\n\t\t// put workerpoolOwner stake seize into iexecHub address for bonus for scheduler on next well finalized Task\n\t\trequire(reward (this, workerpoolStake));\n\t\trequire(lock (this, workerpoolStake));\n\n\n\t\temit WorkOrderClaimed(_woid, workorder.m_workerpool());\n\t\treturn true;\n\t}\n\n\tfunction finalizeWorkOrder(\n\t\taddress _woid,\n\t\tstring _stdout,\n\t\tstring _stderr,\n\t\tstring _uri)\n\tpublic onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\tWorkOrder workorder = WorkOrder(_woid);\n\t\trequire(workorder.m_workerpool() == msg.sender);\n\t\trequire(workorder.m_status() == IexecLib.WorkOrderStatusEnum.REVEALING);\n\n\t\t// APP\n\t\tApp app = App(workorder.m_app());\n\t\tuint256 appPrice = app.m_appPrice();\n\t\tif (appPrice > 0)\n\t\t{\n\t\t\trequire(reward(app.m_owner(), appPrice));\n\t\t}\n\n\t\t// DATASET\n\t\tDataset dataset = Dataset(workorder.m_dataset());\n\t\tif (dataset != address(0))\n\t\t{\n\t\t\tuint256 datasetPrice = dataset.m_datasetPrice();\n\t\t\tif (datasetPrice > 0)\n\t\t\t{\n\t\t\t\trequire(reward(dataset.m_owner(), datasetPrice));\n\t\t\t}\n\t\t}\n\n\t\t// WORKERPOOL → rewarding done by the caller itself\n\n\t\t/**\n\t\t * seize stacked funds from requester.\n\t\t * reward = value: was locked at market making\n\t\t * emitcost: was locked at when emiting the workorder\n\t\t */\n\t\t/* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */\n\t\t/* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */\n\t\tuint256 value;\n\t\taddress workerpoolOwner;\n\t\t(,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas\n\t\tuint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO());\n\n\t\trequire(seize (workorder.m_requester(), value.add(workorder.m_emitcost()))); // seize funds for payment (market value + emitcost)\n\t\trequire(unlock(workerpoolOwner, workerpoolStake)); // unlock scheduler stake\n\n\t\t// write results\n\t\tworkorder.setResult(_stdout, _stderr, _uri); // revert on error\n\n\t\t// Rien ne se perd, rien ne se crée, tout se transfere\n\t\t// distribute bonus to scheduler. jackpot bonus come from scheduler stake loose on IexecHub contract\n\t\t// we reuse the varaible value for the kitty / fraction of the kitty (stack too deep)\n\t\t/* (,value) = checkBalance(this); // kitty is locked on `this` wallet */\n\t\tvalue = m_accounts[this].locked; // kitty is locked on `this` wallet\n\t\tif(value > 0)\n\t\t{\n\t\t\tvalue = value.min(value.percentage(STAKE_BONUS_RATIO).max(STAKE_BONUS_MIN_THRESHOLD));\n\t\t\trequire(seize(this, value));\n\t\t\trequire(reward(workerpoolOwner, value));\n\t\t}\n\n\t\temit WorkOrderCompleted(_woid, workorder.m_workerpool());\n\t\treturn true;\n\t}\n\n\t/**\n\t * Views\n\t */\n\tfunction getCategoryWorkClockTimeRef(uint256 _catId) public view returns (uint256 workClockTimeRef)\n\t{\n\t\trequire(existingCategory(_catId));\n\t\treturn m_categories[_catId].workClockTimeRef;\n\t}\n\n\tfunction existingCategory(uint256 _catId) public view returns (bool categoryExist)\n\t{\n\t\treturn m_categories[_catId].catid > 0;\n\t}\n\n\tfunction getCategory(uint256 _catId) public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef)\n\t{\n\t\trequire(existingCategory(_catId));\n\t\treturn (\n\t\t\tm_categories[_catId].catid,\n\t\t\tm_categories[_catId].name,\n\t\t\tm_categories[_catId].description,\n\t\t\tm_categories[_catId].workClockTimeRef\n\t\t);\n\t}\n\n\tfunction getWorkerStatus(address _worker) public view returns (address workerPool, uint256 workerScore)\n\t{\n\t\treturn (workerPoolHub.getWorkerAffectation(_worker), m_scores[_worker]);\n\t}\n\n\tfunction getWorkerScore(address _worker) public view returns (uint256 workerScore)\n\t{\n\t\treturn m_scores[_worker];\n\t}\n\n\t/**\n\t * Worker subscription\n\t */\n\tfunction registerToPool(address _worker) public returns (bool subscribed)\n\t// msg.sender = workerPool\n\t{\n\t\tWorkerPool workerpool = WorkerPool(msg.sender);\n\t\t// Check credentials\n\t\trequire(workerPoolHub.isWorkerPoolRegistered(msg.sender));\n\t\t// Lock worker deposit\n\t\trequire(lock(_worker, workerpool.m_subscriptionLockStakePolicy()));\n\t\t// Check subscription policy\n\t\trequire(m_accounts[_worker].stake >= workerpool.m_subscriptionMinimumStakePolicy());\n\t\trequire(m_scores[_worker] >= workerpool.m_subscriptionMinimumScorePolicy());\n\t\t// Update affectation\n\t\trequire(workerPoolHub.registerWorkerAffectation(msg.sender, _worker));\n\t\t// Trigger event notice\n\t\temit WorkerPoolSubscription(msg.sender, _worker);\n\t\treturn true;\n\t}\n\n\tfunction unregisterFromPool(address _worker) public returns (bool unsubscribed)\n\t// msg.sender = workerPool\n\t{\n\t\trequire(removeWorker(msg.sender, _worker));\n\t\t// Trigger event notice\n\t\temit WorkerPoolUnsubscription(msg.sender, _worker);\n\t\treturn true;\n\t}\n\n\tfunction evictWorker(address _worker) public returns (bool unsubscribed)\n\t// msg.sender = workerpool\n\t{\n\t\trequire(removeWorker(msg.sender, _worker));\n\t\t// Trigger event notice\n\t\temit WorkerPoolEviction(msg.sender, _worker);\n\t\treturn true;\n\t}\n\n\tfunction removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed)\n\t{\n\t\tWorkerPool workerpool = WorkerPool(_workerpool);\n\t\t// Check credentials\n\t\trequire(workerPoolHub.isWorkerPoolRegistered(_workerpool));\n\t\t// Unlick worker stake\n\t\trequire(unlock(_worker, workerpool.m_subscriptionLockStakePolicy()));\n\t\t// Update affectation\n\t\trequire(workerPoolHub.unregisterWorkerAffectation(_workerpool, _worker));\n\t\treturn true;\n\t}\n\n\t/**\n\t * Stake, reward and penalty functions\n\t */\n\t/* Marketplace */\n\tfunction lockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool)\n\t{\n\t\trequire(lock(_user, _amount));\n\t\treturn true;\n\t}\n\tfunction unlockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool)\n\t{\n\t\trequire(unlock(_user, _amount));\n\t\treturn true;\n\t}\n\t/* Work */\n\tfunction lockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(lock(_user, _amount));\n\t\treturn true;\n\t}\n\tfunction unlockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(unlock(_user, _amount));\n\t\treturn true;\n\t}\n\tfunction rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(reward(_worker, _amount));\n\t\tif (_reputation)\n\t\t{\n\t\t\tm_contributionHistory.success = m_contributionHistory.success.add(1);\n\t\t\tm_scores[_worker] = m_scores[_worker].add(1);\n\t\t\temit AccurateContribution(_woid, _worker);\n\t\t}\n\t\treturn true;\n\t}\n\tfunction seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(seize(_worker, _amount));\n\t\tif (_reputation)\n\t\t{\n\t\t\tm_contributionHistory.failed = m_contributionHistory.failed.add(1);\n\t\t\tm_scores[_worker] = m_scores[_worker].sub(m_scores[_worker].min(SCORE_UNITARY_SLASH));\n\t\t\temit FaultyContribution(_woid, _worker);\n\t\t}\n\t\treturn true;\n\t}\n\t/**\n\t * Wallet methods: public\n\t */\n\tfunction deposit(uint256 _amount) external returns (bool)\n\t{\n\t\trequire(rlc.transferFrom(msg.sender, address(this), _amount));\n\t\tm_accounts[msg.sender].stake = m_accounts[msg.sender].stake.add(_amount);\n\t\temit Deposit(msg.sender, _amount);\n\t\treturn true;\n\t}\n\tfunction withdraw(uint256 _amount) external returns (bool)\n\t{\n\t\tm_accounts[msg.sender].stake = m_accounts[msg.sender].stake.sub(_amount);\n\t\trequire(rlc.transfer(msg.sender, _amount));\n\t\temit Withdraw(msg.sender, _amount);\n\t\treturn true;\n\t}\n\tfunction checkBalance(address _owner) public view returns (uint256 stake, uint256 locked)\n\t{\n\t\treturn (m_accounts[_owner].stake, m_accounts[_owner].locked);\n\t}\n\t/**\n\t * Wallet methods: Internal\n\t */\n\tfunction reward(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].stake = m_accounts[_user].stake.add(_amount);\n\t\temit Reward(_user, _amount);\n\t\treturn true;\n\t}\n\tfunction seize(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].locked = m_accounts[_user].locked.sub(_amount);\n\t\temit Seize(_user, _amount);\n\t\treturn true;\n\t}\n\tfunction lock(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].stake = m_accounts[_user].stake.sub(_amount);\n\t\tm_accounts[_user].locked = m_accounts[_user].locked.add(_amount);\n\t\treturn true;\n\t}\n\tfunction unlock(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].locked = m_accounts[_user].locked.sub(_amount);\n\t\tm_accounts[_user].stake = m_accounts[_user].stake.add(_amount);\n\t\treturn true;\n\t}\n}\n", + "bytecode": "0x6060604052341561000f57600080fd5b60078054600160a060020a03191633600160a060020a0316179055614408806100396000396000f300606060405260043610620002155763ffffffff60e060020a6000350416630800b89e81146200021a5780630c91f2d0146200023e57806310793b5014620002825780631708d72514620002b05780631f87172614620002d2578063234a0ee714620002fd578063298503d9146200032f5780632e1a7d4d14620003c757806332baa8d914620003e057806332ca558714620003f957806339b73122146200041b5780634f73b8e6146200044c578063536e280014620004625780635f51522614620004ac57806366de5a4f14620004ce57806369e99b5c14620004f95780636b4f6865146200051b5780636e885bd71462000546578063747bcd72146200055c578063817e83321462000572578063835436b414620005885780638981d07714620005aa5780638986916314620005d55780638c0f8e1114620005f75780639fdf96251462000619578063a0efe2551462000649578063abc8c7af146200065f578063ac26109e1462000675578063b017c036146200069a578063b218cf1514620006b0578063b6b55f2514620006d2578063b6b57ebd14620006eb578063b6b8c3cd14620007d1578063b7b6e97814620007e7578063bc04d77b146200080c578063be02ee6e1462000822578063ddaeb6001462000844578063e760a11a1462000866578063eeeb2ba014620008a0578063f3052d2614620009ae578063f69f190c14620009c7578063fc06a8771462000a0b575b600080fd5b34156200022657600080fd5b6200023c600160a060020a036004351662000a3c565b005b34156200024a57600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562000a87565b604051901515815260200160405180910390f35b34156200028e57600080fd5b6200029862000bf4565b60405191825260208201526040908101905180910390f35b3415620002bc57600080fd5b6200026e600160a060020a036004351662000bfd565b3415620002de57600080fd5b620002eb60043562000c66565b60405190815260200160405180910390f35b34156200030957600080fd5b6200031362000c95565b604051600160a060020a03909116815260200160405180910390f35b34156200033b57600080fd5b620002eb60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650509335935062000ca492505050565b3415620003d357600080fd5b6200026e60043562000e52565b3415620003ec57600080fd5b6200026e60043562000f5a565b34156200040557600080fd5b6200026e600160a060020a036004351662000f6d565b34156200042757600080fd5b6200031360246004803582810192908201359181359160443590810191013562000f8b565b34156200045857600080fd5b620002eb620010c9565b34156200046e57600080fd5b620003136004803590600160a060020a03602480358216926044358316926064358116926084359081019201359060a43581169060c43516620010cf565b3415620004b857600080fd5b62000298600160a060020a0360043516620012f9565b3415620004da57600080fd5b620003136024600480358281019291013590356044356064356200131c565b34156200050557600080fd5b620002eb600160a060020a036004351662001449565b34156200052757600080fd5b6200026e600160a060020a03600435811690602435166044356200145b565b34156200055257600080fd5b620003136200151e565b34156200056857600080fd5b620002eb6200152d565b34156200057e57600080fd5b620002eb62001532565b34156200059457600080fd5b6200026e600160a060020a036004351662001537565b3415620005b657600080fd5b6200026e600160a060020a0360043581169060243516604435620015a0565b3415620005e157600080fd5b6200026e600160a060020a03600435166200164c565b34156200060357600080fd5b620002eb600160a060020a036004351662001bbd565b34156200062557600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562001bd8565b34156200065557600080fd5b620002eb62001d6f565b34156200066b57600080fd5b6200031362001d75565b34156200068157600080fd5b6200026e600160a060020a036004351660243562001d84565b3415620006a657600080fd5b6200031362001dc4565b3415620006bc57600080fd5b6200026e600160a060020a036004351662001dd3565b3415620006de57600080fd5b6200026e6004356200207d565b3415620006f757600080fd5b6200026e60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506200219b95505050505050565b3415620007dd57600080fd5b62000313620029e9565b3415620007f357600080fd5b6200026e600160a060020a0360043516602435620029f8565b34156200081857600080fd5b6200031362002a23565b34156200082e57600080fd5b62000298600160a060020a036004351662002a32565b34156200085057600080fd5b6200026e600160a060020a036004351662002a4b565b34156200087257600080fd5b6200023c600160a060020a036004358116906024358116906044358116906064358116906084351662002a60565b3415620008ac57600080fd5b620008b960043562002aff565b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000908578082015183820152602001620008ee565b50505050905090810190601f168015620009365780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156200096e57808201518382015260200162000954565b50505050905090810190601f1680156200099c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3415620009ba57600080fd5b620008b960043562002c67565b3415620009d357600080fd5b620009e9600160a060020a036004351662002e0d565b604051600160a060020a03909216825260208201526040908101905180910390f35b341562000a1757600080fd5b6200031360246004803582810192908201359181359160443590810191013562002e9c565b60075433600160a060020a0390811691161462000a5857600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038416600090815260096020526040812054859060ff16151562000ab157600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000af957600080fd5b5af1151562000b0757600080fd5b50505060405180519050600160a060020a031614151562000b2757600080fd5b62000b33858562002fda565b151562000b3f57600080fd5b821562000be857600b5462000b5c90600163ffffffff6200307116565b600b55600160a060020a0385166000908152600a602052604090205462000b8b90600163ffffffff6200307116565b600160a060020a0386166000818152600a60205260409081902092909255907f98b231d22df4a95e9d99b5d3f4d25fab5a821c22d7f517a522731c2892ed453590889051600160a060020a03909116815260200160405180910390a25b50600195945050505050565b600b54600c5482565b600062000c0b33836200308c565b151562000c1757600080fd5b33600160a060020a03167f9644170e77fec17243f5fdc3519cba6d2162d1dda59af75508fd9a2005aeb78483604051600160a060020a03909116815260200160405180910390a2506001919050565b600062000c738262000f5a565b151562000c7f57600080fd5b5060009081526005602052604090206003015490565b600154600160a060020a031681565b600754600090819033600160a060020a0390811691161462000cc557600080fd5b60065462000cdb90600163ffffffff6200307116565b6006819055600081815260056020526040902090815590506001810185805162000d0a929160200190620036ba565b506002810184805162000d22929160200190620036ba565b50600381018390556006547f62bf08360c9d561749c54eaf4f8bf8cb6c8b6f4f40607bcec39a8172e714d25c90868686604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000da157808201518382015260200162000d87565b50505050905090810190601f16801562000dcf5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101562000e0757808201518382015260200162000ded565b50505050905090810190601f16801562000e355780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a150506006549392505050565b600160a060020a03331660009081526008602052604081205462000e7d908363ffffffff620031fa16565b33600160a060020a038181166000908152600860205260408082209490945554169163a9059cbb919085905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000eea57600080fd5b5af1151562000ef857600080fd5b50505060405180519050151562000f0e57600080fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243643383604051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b6000908152600560205260408120541190565b600160a060020a031660009081526009602052604090205460ff1690565b6002546000908190600160a060020a03166339b7312288888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b15156200101c57600080fd5b5af115156200102a57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f49413c774d3fe9c92f6ada69299963d9b4b1c13a1f2a95a019188e2c161ed1438989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b6103e881565b600454600090339082908190600160a060020a03166302a63c288d858e60405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b15156200113957600080fd5b5af115156200114757600080fd5b5050506040518051905015156200115d57600080fd5b6200116b838c8c8c6200320d565b91508b838b8b8e868d8d8d8d620011816200373f565b8a8152600160a060020a03808b16602083015289811660408301528881166060830152878116608083015260a0820187905283811660e0830152821661010082015261012060c08201818152908201859052610140820186868082843782019150509b505050505050505050505050604051809103906000f08015156200120757600080fd5b600160a060020a0380821660009081526009602052604090819020805460ff191660011790559192508c1690637919233f9083908f905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200127f57600080fd5b5af115156200128d57600080fd5b505050604051805190501515620012a357600080fd5b8a600160a060020a03167f359f2105b31d71ee8e2315c3dc3427b3f7297dcc85dd3883d4554e67f1f22d0082604051600160a060020a03909116815260200160405180910390a29b9a5050505050505050505050565b600160a060020a0316600090815260086020526040902080546001909101549091565b6003546004546000918291600160a060020a039182169163215bd303918a918a918a918a918a91166040518763ffffffff1660e060020a028152600401808060200186815260200185815260200184815260200183600160a060020a0316600160a060020a0316815260200182810382528888828181526020019250808284378201915050975050505050505050602060405180830381600087803b1515620013c457600080fd5b5af11515620013d257600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f3c29f4ff1e741e465a1ad9cc4c0b8e51c046c021ca9e77172d812ae667f566f889896040516020808252810182905280604081018484808284378201915050935050505060405180910390a39695505050505050565b600a6020526000908152604090205481565b600160a060020a038316600090815260096020526040812054849060ff1615156200148557600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620014cd57600080fd5b5af11515620014db57600080fd5b50505060405180519050600160a060020a0316141515620014fb57600080fd5b6200150784846200346c565b15156200151357600080fd5b506001949350505050565b600354600160a060020a031681565b603281565b600a81565b60006200154533836200308c565b15156200155157600080fd5b33600160a060020a03167f5580db655b3146ef4d1fdba3305cf74dbc3f29126c7a3832533f84e00d149ee383604051600160a060020a03909116815260200160405180910390a2506001919050565b600160a060020a038316600090815260096020526040812054849060ff161515620015ca57600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200161257600080fd5b5af115156200162057600080fd5b50505060405180519050600160a060020a03161415156200164057600080fd5b620015078484620034ef565b600160a060020a038116600090815260096020526040812054819081908190819081908190889060ff1615156200168257600080fd5b88965033600160a060020a031687600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016cd57600080fd5b5af11515620016db57600080fd5b50505060405180519050600160a060020a0316141515620016fb57600080fd5b86600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173957600080fd5b5af115156200174757600080fd5b5050506040518051965050600160a060020a03871663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200179057600080fd5b5af115156200179e57600080fd5b5050506040518051955060019050856004811115620017b957fe5b1480620017d257506002856004811115620017d057fe5b145b1515620017de57600080fd5b85600160a060020a031663898691638a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200182d57600080fd5b5af115156200183b57600080fd5b5050506040518051905015156200185157600080fd5b86600160a060020a0316634e71d92d6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156200188f57600080fd5b5af115156200189d57600080fd5b5050600454600160a060020a03908116915063eb3721be90891663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620018eb57600080fd5b5af11515620018f957600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b15156200193b57600080fd5b5af115156200194957600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a50620019f6975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b5af11515620019df57600080fd5b505050604051805186915063ffffffff6200357416565b915062001abf87600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a3a57600080fd5b5af1151562001a4857600080fd5b5050506040518051905062001ab989600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b5af1151562001aa257600080fd5b505050604051805188915063ffffffff6200307116565b6200346c565b151562001acb57600080fd5b62001ad783836200358b565b151562001ae357600080fd5b62001aef308362002fda565b151562001afb57600080fd5b62001b073083620034ef565b151562001b1357600080fd5b7fb3cae8ec1c2754530963fb2e254826aae88dda74178f1a0c5656776941e604b88988600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001b7357600080fd5b5af1151562001b8157600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a150600198975050505050505050565b600160a060020a03166000908152600a602052604090205490565b600160a060020a038416600090815260096020526040812054859060ff16151562001c0257600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001c4a57600080fd5b5af1151562001c5857600080fd5b50505060405180519050600160a060020a031614151562001c7857600080fd5b62001c8485856200358b565b151562001c9057600080fd5b821562000be857600c5462001cad90600163ffffffff6200307116565b600c55600160a060020a0385166000908152600a602052604090205462001d079062001ce190603263ffffffff6200362816565b600160a060020a0387166000908152600a60205260409020549063ffffffff620031fa16565b600160a060020a0386166000818152600a60205260409081902092909255907fd21e70eb7104cb6f403402b79fe1c088dc56b69ecb7474ae68a3e861a5a6d49990889051600160a060020a03909116815260200160405180910390a250600195945050505050565b60065481565b600454600160a060020a031681565b60045460009033600160a060020a0390811691161462001da357600080fd5b62001daf8383620034ef565b151562001dbb57600080fd5b50600192915050565b600054600160a060020a031681565b6003546000903390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001e2957600080fd5b5af1151562001e3757600080fd5b50505060405180519050151562001e4d57600080fd5b62001eae8382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9057600080fd5b5af1151562001e9e57600080fd5b50505060405180519050620034ef565b151562001eba57600080fd5b80600160a060020a0316636ab6936a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001ef857600080fd5b5af1151562001f0657600080fd5b5050506040518051600160a060020a0385166000908152600860205260409020541015905062001f3557600080fd5b80600160a060020a031663cc6f06a36040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001f7357600080fd5b5af1151562001f8157600080fd5b5050506040518051600160a060020a0385166000908152600a60205260409020541015905062001fb057600080fd5b600354600160a060020a0316631884c517338560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156200200957600080fd5b5af115156200201757600080fd5b5050506040518051905015156200202d57600080fd5b33600160a060020a03167fd3548f8b6a2a11c4a35ef5a16dbf7142c9db5163c7d46e7f66482664277cff0784604051600160a060020a03909116815260200160405180910390a250600192915050565b60008054600160a060020a03166323b872dd33308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515620020e257600080fd5b5af11515620020f057600080fd5b5050506040518051905015156200210657600080fd5b600160a060020a03331660009081526008602052604090205462002131908363ffffffff6200307116565b33600160a060020a03811660009081526008602052604090819020929092557fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91849051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b600160a060020a038416600090815260096020526040812054819081908190819081908190819081908d9060ff161515620021d557600080fd5b8d985033600160a060020a031689600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200222057600080fd5b5af115156200222e57600080fd5b50505060405180519050600160a060020a03161415156200224e57600080fd5b600289600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200228e57600080fd5b5af115156200229c57600080fd5b505050604051805190506004811115620022b257fe5b14620022bd57600080fd5b88600160a060020a0316636946f6926040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620022fb57600080fd5b5af115156200230957600080fd5b5050506040518051985050600160a060020a0388166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200235257600080fd5b5af115156200236057600080fd5b50505060405180519750506000871115620023e257620023d688600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620023b757600080fd5b5af11515620023c557600080fd5b505050604051805190508862002fda565b1515620023e257600080fd5b88600160a060020a03166371a599ca6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200242057600080fd5b5af115156200242e57600080fd5b5050506040518051965050600160a060020a03861615620025175785600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200248757600080fd5b5af115156200249557600080fd5b5050506040518051955050600085111562002517576200250b86600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620024ec57600080fd5b5af11515620024fa57600080fd5b505050604051805190508662002fda565b15156200251757600080fd5b600454600160a060020a039081169063eb3721be908b1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200256257600080fd5b5af115156200257057600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b1515620025b257600080fd5b5af11515620025c057600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a5062002648975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b9150620026ec89600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200268c57600080fd5b5af115156200269a57600080fd5b50505060405180519050620026e68b600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b6200358b565b1515620026f857600080fd5b6200270483836200346c565b15156200271057600080fd5b88600160a060020a031663d5fdfdbc8e8e8e6040518463ffffffff1660e060020a02815260040180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156200277b57808201518382015260200162002761565b50505050905090810190601f168015620027a95780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015620027e1578082015183820152602001620027c7565b50505050905090810190601f1680156200280f5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015620028475780820151838201526020016200282d565b50505050905090810190601f168015620028755780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15156200289857600080fd5b5af11515620028a657600080fd5b505050600160a060020a03301660009081526008602052604081206001015494508411156200293a5762002908620028fa6103e8620028ed87600a63ffffffff6200357416565b9063ffffffff6200364016565b859063ffffffff6200362816565b93506200291630856200358b565b15156200292257600080fd5b6200292e838562002fda565b15156200293a57600080fd5b7fed236d0a24cb7a32c76960696e44bac711b80ef76780688405dc96c2495b75f98e8a600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200299a57600080fd5b5af11515620029a857600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a15060019d9c50505050505050505050505050565b600754600160a060020a031681565b60045460009033600160a060020a0390811691161462002a1757600080fd5b62001daf83836200346c565b600254600160a060020a031681565b6008602052600090815260409020805460019091015482565b60096020526000908152604090205460ff1681565b60075433600160a060020a0390811691161462002a7c57600080fd5b600054600160a060020a03161562002a9357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03978816179091556004805482169587169590951790945560038054851693861693909317909255600180548416918516919091179055600280549092169216919091179055565b6005602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002bb55780601f1062002b895761010080835404028352916020019162002bb5565b820191906000526020600020905b81548152906001019060200180831162002b9757829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002c575780601f1062002c2b5761010080835404028352916020019162002c57565b820191906000526020600020905b81548152906001019060200180831162002c3957829003601f168201915b5050505050908060030154905084565b600062002c7362003750565b62002c7d62003750565b600062002c8a8562000f5a565b151562002c9657600080fd5b60008581526005602090815260409182902080546003820154600180840180549396909560029586019593948794938116156101000260001901169290920491601f83018190048102019051908101604052809291908181526020018280546001816001161561010002031660029004801562002d575780601f1062002d2b5761010080835404028352916020019162002d57565b820191906000526020600020905b81548152906001019060200180831162002d3957829003601f168201915b50505050509250818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002df75780601f1062002dcb5761010080835404028352916020019162002df7565b820191906000526020600020905b81548152906001019060200180831162002dd957829003601f168201915b5050505050915093509350935093509193509193565b6003546000908190600160a060020a031663d440c6f38460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002e6357600080fd5b5af1151562002e7157600080fd5b5050506040518051600160a060020a03949094166000908152600a6020526040902054939492505050565b6001546000908190600160a060020a031663fc06a87788888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b151562002f2d57600080fd5b5af1151562002f3b57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f03d3b6187bbe7d21aa3cf229e292ba41fa8bca6ec2128c0f1625178b8191cdc28989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b600160a060020a03821660009081526008602052604081205462003005908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090819020919091557f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b6000828201838110156200308157fe5b8091505b5092915050565b6003546000908390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620030e257600080fd5b5af11515620030f057600080fd5b5050506040518051905015156200310657600080fd5b620031678382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200314957600080fd5b5af115156200315757600080fd5b505050604051805190506200346c565b15156200317357600080fd5b600354600160a060020a0316630b00de8d858560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515620031cc57600080fd5b5af11515620031da57600080fd5b505050604051805190501515620031f057600080fd5b5060019392505050565b6000828211156200320757fe5b50900390565b600154600090839082908190600160a060020a0316638403be918460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200326757600080fd5b5af115156200327557600080fd5b5050506040518051905015156200328b57600080fd5b82600160a060020a03166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620032c957600080fd5b5af11515620032d757600080fd5b5050506040518051925050600160a060020a03851615620033d457506002548490600160a060020a03166316265b4e8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200334657600080fd5b5af115156200335457600080fd5b5050506040518051905015156200336a57600080fd5b620033d181600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620033ac57600080fd5b5af11515620033ba57600080fd5b505050604051805184915063ffffffff6200307116565b91505b600354600160a060020a03166368c197dd8860405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200342557600080fd5b5af115156200343357600080fd5b5050506040518051905015156200344957600080fd5b620034558883620034ef565b15156200346157600080fd5b509695505050505050565b600160a060020a0382166000908152600860205260408120600101546200349a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020600181019190915554620034cd908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090205550600192915050565b600160a060020a0382166000908152600860205260408120546200351a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020908155600101546200354b908363ffffffff6200307116565b600160a060020a0384166000908152600860205260409020600190810191909155905092915050565b6000620035848383606462003652565b9392505050565b600160a060020a038216600090815260086020526040812060010154620035b9908363ffffffff620031fa16565b600160a060020a03841660009081526008602052604090819020600101919091557f4051ba94e08bb094159fc38391422b4b8ccfd2b1f8919c0eb37bb042d4b9cd8e908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b600081831062003639578162003584565b5090919050565b60008183101562003639578162003584565b60006200366b62003664858562003673565b83620036a2565b949350505050565b60008083151562003688576000915062003085565b508282028284828115156200369957fe5b04146200308157fe5b6000808284811515620036b157fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620036fd57805160ff19168380011785556200372d565b828001600101855582156200372d579182015b828111156200372d57825182559160200191906001019062003710565b506200373b92915062003762565b5090565b604051610c5a806200378383390190565b60206040519081016040526000815290565b6200377f91905b808211156200373b576000815560010162003769565b9056006060604052341561000f57600080fd5b604051610c5a380380610c5a8339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805182019190602001805191906020018051600e8054600160a060020a03191633600160a060020a039081169190911790915590925089161515905061009257600080fd5b6000805460ff1916600190811790915589905560028054600160a060020a0319908116600160a060020a038a81169190911790925560038054821689841617905560048054821688841617905560058054909116918a1691909117905560068490556007838051610107929160200190610141565b5060088054600160a060020a03938416600160a060020a03199182161790915560098054929093169116179055506101dc95505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061018257805160ff19168380011785556101af565b828001600101855582156101af579182015b828111156101af578251825591602001919060010190610194565b506101bb9291506101bf565b5090565b6101d991905b808211156101bb57600081556001016101c5565b90565b610a6f806101eb6000396000f3006060604052600436106101065763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630690e5b8811461010b57806315298c771461013a5780631a514d97146101c45780632d4d671f146101eb5780634e71d92d146101fe5780635f44910c146102135780636946f6921461022657806371a599ca146102395780638628aaff1461024c5780639c4a856114610271578063cc3a2dfa14610284578063d3281fd614610297578063d3a69e01146102aa578063d5fdfdbc146102bd578063da1fea2814610392578063e329c478146103a5578063ecc40f64146103dc578063f3859f57146103ef578063f6a5b13e14610402575b600080fd5b341561011657600080fd5b61011e610415565b604051600160a060020a03909116815260200160405180910390f35b341561014557600080fd5b61014d610424565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610189578082015183820152602001610171565b50505050905090810190601f1680156101b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101cf57600080fd5b6101d76104c2565b604051901515815260200160405180910390f35b34156101f657600080fd5b6101d761053d565b341561020957600080fd5b6102116105b7565b005b341561021e57600080fd5b61011e610647565b341561023157600080fd5b61011e610656565b341561024457600080fd5b61011e610665565b341561025757600080fd5b61025f610674565b60405190815260200160405180910390f35b341561027c57600080fd5b61014d61067a565b341561028f57600080fd5b61014d6106e5565b34156102a257600080fd5b61025f610750565b34156102b557600080fd5b61011e610756565b34156102c857600080fd5b61021160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061076595505050505050565b341561039d57600080fd5b61011e610913565b34156103b057600080fd5b6103b8610922565b604051808260048111156103c857fe5b60ff16815260200191505060405180910390f35b34156103e757600080fd5b61025f61092b565b34156103fa57600080fd5b61014d610931565b341561040d57600080fd5b61011e61099c565b600454600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b820191906000526020600020905b81548152906001019060200180831161049d57829003601f168201915b505050505081565b60045460009033600160a060020a039081169116146104e057600080fd5b600260005460ff1660048111156104f357fe5b146104fd57600080fd5b6000805460ff191660011790557f06c42818c4ab74dff6aec55942f601c2e9b7f2aa4321ee71690b125eacfe465460405160405180910390a15060015b90565b60045460009033600160a060020a0390811691161461055b57600080fd5b600160005460ff16600481111561056e57fe5b1461057857600080fd5b6000805460ff191660021790557f2b0cab0be6d82b2661b3b789c540ec9c7223aac635ac8e59a1e71e1137f2dd7760405160405180910390a150600190565b600e5433600160a060020a039081169116146105d257600080fd5b600160005460ff1660048111156105e557fe5b14806106015750600260005460ff1660048111156105ff57fe5b145b151561060c57600080fd5b6000805460ff191660031790557f1938697ee29e363ecda49e464c6d2aae25f0974bd1f2c81a91c21e13ad8dbf7760405160405180910390a1565b600554600160a060020a031681565b600254600160a060020a031681565b600354600160a060020a031681565b60065481565b600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600a5481565b600e54600160a060020a031681565b600e5433600160a060020a0390811691161461078057600080fd5b600260005460ff16600481111561079357fe5b1461079d57600080fd5b6000805460ff19166004179055600b8380516107bd9291602001906109ab565b50600c8280516107d19291602001906109ab565b50600d8180516107e59291602001906109ab565b508282826040518084805190602001908083835b602083106108185780518252601f1990920191602091820191016107f9565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b602083106108645780518252601f199092019160209182019101610845565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106108b05780518252601f199092019160209182019101610891565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600a557f777f59509d985349c80271b657d2649b218bc6f075a4625821b64448cc235b8660405160405180910390a1505050565b600854600160a060020a031681565b60005460ff1681565b60015481565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600954600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106109ec57805160ff1916838001178555610a19565b82800160010185558215610a19579182015b82811115610a195782518255916020019190600101906109fe565b50610a25929150610a29565b5090565b61053a91905b80821115610a255760008155600101610a2f5600a165627a7a72305820aab9d309bae837f3417f3dc81c0f650543365c210e440786b5dfc09f1981eba70029a165627a7a7230582046504159ab1dbf3323b50d5d77d2f716286b233fadce62375204e0fc7ad76d490029", + "deployedBytecode": "0x606060405260043610620002155763ffffffff60e060020a6000350416630800b89e81146200021a5780630c91f2d0146200023e57806310793b5014620002825780631708d72514620002b05780631f87172614620002d2578063234a0ee714620002fd578063298503d9146200032f5780632e1a7d4d14620003c757806332baa8d914620003e057806332ca558714620003f957806339b73122146200041b5780634f73b8e6146200044c578063536e280014620004625780635f51522614620004ac57806366de5a4f14620004ce57806369e99b5c14620004f95780636b4f6865146200051b5780636e885bd71462000546578063747bcd72146200055c578063817e83321462000572578063835436b414620005885780638981d07714620005aa5780638986916314620005d55780638c0f8e1114620005f75780639fdf96251462000619578063a0efe2551462000649578063abc8c7af146200065f578063ac26109e1462000675578063b017c036146200069a578063b218cf1514620006b0578063b6b55f2514620006d2578063b6b57ebd14620006eb578063b6b8c3cd14620007d1578063b7b6e97814620007e7578063bc04d77b146200080c578063be02ee6e1462000822578063ddaeb6001462000844578063e760a11a1462000866578063eeeb2ba014620008a0578063f3052d2614620009ae578063f69f190c14620009c7578063fc06a8771462000a0b575b600080fd5b34156200022657600080fd5b6200023c600160a060020a036004351662000a3c565b005b34156200024a57600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562000a87565b604051901515815260200160405180910390f35b34156200028e57600080fd5b6200029862000bf4565b60405191825260208201526040908101905180910390f35b3415620002bc57600080fd5b6200026e600160a060020a036004351662000bfd565b3415620002de57600080fd5b620002eb60043562000c66565b60405190815260200160405180910390f35b34156200030957600080fd5b6200031362000c95565b604051600160a060020a03909116815260200160405180910390f35b34156200033b57600080fd5b620002eb60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650509335935062000ca492505050565b3415620003d357600080fd5b6200026e60043562000e52565b3415620003ec57600080fd5b6200026e60043562000f5a565b34156200040557600080fd5b6200026e600160a060020a036004351662000f6d565b34156200042757600080fd5b6200031360246004803582810192908201359181359160443590810191013562000f8b565b34156200045857600080fd5b620002eb620010c9565b34156200046e57600080fd5b620003136004803590600160a060020a03602480358216926044358316926064358116926084359081019201359060a43581169060c43516620010cf565b3415620004b857600080fd5b62000298600160a060020a0360043516620012f9565b3415620004da57600080fd5b620003136024600480358281019291013590356044356064356200131c565b34156200050557600080fd5b620002eb600160a060020a036004351662001449565b34156200052757600080fd5b6200026e600160a060020a03600435811690602435166044356200145b565b34156200055257600080fd5b620003136200151e565b34156200056857600080fd5b620002eb6200152d565b34156200057e57600080fd5b620002eb62001532565b34156200059457600080fd5b6200026e600160a060020a036004351662001537565b3415620005b657600080fd5b6200026e600160a060020a0360043581169060243516604435620015a0565b3415620005e157600080fd5b6200026e600160a060020a03600435166200164c565b34156200060357600080fd5b620002eb600160a060020a036004351662001bbd565b34156200062557600080fd5b6200026e600160a060020a0360043581169060243516604435606435151562001bd8565b34156200065557600080fd5b620002eb62001d6f565b34156200066b57600080fd5b6200031362001d75565b34156200068157600080fd5b6200026e600160a060020a036004351660243562001d84565b3415620006a657600080fd5b6200031362001dc4565b3415620006bc57600080fd5b6200026e600160a060020a036004351662001dd3565b3415620006de57600080fd5b6200026e6004356200207d565b3415620006f757600080fd5b6200026e60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506200219b95505050505050565b3415620007dd57600080fd5b62000313620029e9565b3415620007f357600080fd5b6200026e600160a060020a0360043516602435620029f8565b34156200081857600080fd5b6200031362002a23565b34156200082e57600080fd5b62000298600160a060020a036004351662002a32565b34156200085057600080fd5b6200026e600160a060020a036004351662002a4b565b34156200087257600080fd5b6200023c600160a060020a036004358116906024358116906044358116906064358116906084351662002a60565b3415620008ac57600080fd5b620008b960043562002aff565b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000908578082015183820152602001620008ee565b50505050905090810190601f168015620009365780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156200096e57808201518382015260200162000954565b50505050905090810190601f1680156200099c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3415620009ba57600080fd5b620008b960043562002c67565b3415620009d357600080fd5b620009e9600160a060020a036004351662002e0d565b604051600160a060020a03909216825260208201526040908101905180910390f35b341562000a1757600080fd5b6200031360246004803582810192908201359181359160443590810191013562002e9c565b60075433600160a060020a0390811691161462000a5857600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038416600090815260096020526040812054859060ff16151562000ab157600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000af957600080fd5b5af1151562000b0757600080fd5b50505060405180519050600160a060020a031614151562000b2757600080fd5b62000b33858562002fda565b151562000b3f57600080fd5b821562000be857600b5462000b5c90600163ffffffff6200307116565b600b55600160a060020a0385166000908152600a602052604090205462000b8b90600163ffffffff6200307116565b600160a060020a0386166000818152600a60205260409081902092909255907f98b231d22df4a95e9d99b5d3f4d25fab5a821c22d7f517a522731c2892ed453590889051600160a060020a03909116815260200160405180910390a25b50600195945050505050565b600b54600c5482565b600062000c0b33836200308c565b151562000c1757600080fd5b33600160a060020a03167f9644170e77fec17243f5fdc3519cba6d2162d1dda59af75508fd9a2005aeb78483604051600160a060020a03909116815260200160405180910390a2506001919050565b600062000c738262000f5a565b151562000c7f57600080fd5b5060009081526005602052604090206003015490565b600154600160a060020a031681565b600754600090819033600160a060020a0390811691161462000cc557600080fd5b60065462000cdb90600163ffffffff6200307116565b6006819055600081815260056020526040902090815590506001810185805162000d0a929160200190620036ba565b506002810184805162000d22929160200190620036ba565b50600381018390556006547f62bf08360c9d561749c54eaf4f8bf8cb6c8b6f4f40607bcec39a8172e714d25c90868686604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101562000da157808201518382015260200162000d87565b50505050905090810190601f16801562000dcf5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101562000e0757808201518382015260200162000ded565b50505050905090810190601f16801562000e355780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a150506006549392505050565b600160a060020a03331660009081526008602052604081205462000e7d908363ffffffff620031fa16565b33600160a060020a038181166000908152600860205260408082209490945554169163a9059cbb919085905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000eea57600080fd5b5af1151562000ef857600080fd5b50505060405180519050151562000f0e57600080fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243643383604051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b6000908152600560205260408120541190565b600160a060020a031660009081526009602052604090205460ff1690565b6002546000908190600160a060020a03166339b7312288888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b15156200101c57600080fd5b5af115156200102a57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f49413c774d3fe9c92f6ada69299963d9b4b1c13a1f2a95a019188e2c161ed1438989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b6103e881565b600454600090339082908190600160a060020a03166302a63c288d858e60405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b15156200113957600080fd5b5af115156200114757600080fd5b5050506040518051905015156200115d57600080fd5b6200116b838c8c8c6200320d565b91508b838b8b8e868d8d8d8d620011816200373f565b8a8152600160a060020a03808b16602083015289811660408301528881166060830152878116608083015260a0820187905283811660e0830152821661010082015261012060c08201818152908201859052610140820186868082843782019150509b505050505050505050505050604051809103906000f08015156200120757600080fd5b600160a060020a0380821660009081526009602052604090819020805460ff191660011790559192508c1690637919233f9083908f905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200127f57600080fd5b5af115156200128d57600080fd5b505050604051805190501515620012a357600080fd5b8a600160a060020a03167f359f2105b31d71ee8e2315c3dc3427b3f7297dcc85dd3883d4554e67f1f22d0082604051600160a060020a03909116815260200160405180910390a29b9a5050505050505050505050565b600160a060020a0316600090815260086020526040902080546001909101549091565b6003546004546000918291600160a060020a039182169163215bd303918a918a918a918a918a91166040518763ffffffff1660e060020a028152600401808060200186815260200185815260200184815260200183600160a060020a0316600160a060020a0316815260200182810382528888828181526020019250808284378201915050975050505050505050602060405180830381600087803b1515620013c457600080fd5b5af11515620013d257600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f3c29f4ff1e741e465a1ad9cc4c0b8e51c046c021ca9e77172d812ae667f566f889896040516020808252810182905280604081018484808284378201915050935050505060405180910390a39695505050505050565b600a6020526000908152604090205481565b600160a060020a038316600090815260096020526040812054849060ff1615156200148557600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620014cd57600080fd5b5af11515620014db57600080fd5b50505060405180519050600160a060020a0316141515620014fb57600080fd5b6200150784846200346c565b15156200151357600080fd5b506001949350505050565b600354600160a060020a031681565b603281565b600a81565b60006200154533836200308c565b15156200155157600080fd5b33600160a060020a03167f5580db655b3146ef4d1fdba3305cf74dbc3f29126c7a3832533f84e00d149ee383604051600160a060020a03909116815260200160405180910390a2506001919050565b600160a060020a038316600090815260096020526040812054849060ff161515620015ca57600080fd5b33600160a060020a031685600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200161257600080fd5b5af115156200162057600080fd5b50505060405180519050600160a060020a03161415156200164057600080fd5b620015078484620034ef565b600160a060020a038116600090815260096020526040812054819081908190819081908190889060ff1615156200168257600080fd5b88965033600160a060020a031687600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016cd57600080fd5b5af11515620016db57600080fd5b50505060405180519050600160a060020a0316141515620016fb57600080fd5b86600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173957600080fd5b5af115156200174757600080fd5b5050506040518051965050600160a060020a03871663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200179057600080fd5b5af115156200179e57600080fd5b5050506040518051955060019050856004811115620017b957fe5b1480620017d257506002856004811115620017d057fe5b145b1515620017de57600080fd5b85600160a060020a031663898691638a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200182d57600080fd5b5af115156200183b57600080fd5b5050506040518051905015156200185157600080fd5b86600160a060020a0316634e71d92d6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156200188f57600080fd5b5af115156200189d57600080fd5b5050600454600160a060020a03908116915063eb3721be90891663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620018eb57600080fd5b5af11515620018f957600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b15156200193b57600080fd5b5af115156200194957600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a50620019f6975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b5af11515620019df57600080fd5b505050604051805186915063ffffffff6200357416565b915062001abf87600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a3a57600080fd5b5af1151562001a4857600080fd5b5050506040518051905062001ab989600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b5af1151562001aa257600080fd5b505050604051805188915063ffffffff6200307116565b6200346c565b151562001acb57600080fd5b62001ad783836200358b565b151562001ae357600080fd5b62001aef308362002fda565b151562001afb57600080fd5b62001b073083620034ef565b151562001b1357600080fd5b7fb3cae8ec1c2754530963fb2e254826aae88dda74178f1a0c5656776941e604b88988600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001b7357600080fd5b5af1151562001b8157600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a150600198975050505050505050565b600160a060020a03166000908152600a602052604090205490565b600160a060020a038416600090815260096020526040812054859060ff16151562001c0257600080fd5b33600160a060020a031686600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001c4a57600080fd5b5af1151562001c5857600080fd5b50505060405180519050600160a060020a031614151562001c7857600080fd5b62001c8485856200358b565b151562001c9057600080fd5b821562000be857600c5462001cad90600163ffffffff6200307116565b600c55600160a060020a0385166000908152600a602052604090205462001d079062001ce190603263ffffffff6200362816565b600160a060020a0387166000908152600a60205260409020549063ffffffff620031fa16565b600160a060020a0386166000818152600a60205260409081902092909255907fd21e70eb7104cb6f403402b79fe1c088dc56b69ecb7474ae68a3e861a5a6d49990889051600160a060020a03909116815260200160405180910390a250600195945050505050565b60065481565b600454600160a060020a031681565b60045460009033600160a060020a0390811691161462001da357600080fd5b62001daf8383620034ef565b151562001dbb57600080fd5b50600192915050565b600054600160a060020a031681565b6003546000903390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001e2957600080fd5b5af1151562001e3757600080fd5b50505060405180519050151562001e4d57600080fd5b62001eae8382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9057600080fd5b5af1151562001e9e57600080fd5b50505060405180519050620034ef565b151562001eba57600080fd5b80600160a060020a0316636ab6936a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001ef857600080fd5b5af1151562001f0657600080fd5b5050506040518051600160a060020a0385166000908152600860205260409020541015905062001f3557600080fd5b80600160a060020a031663cc6f06a36040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001f7357600080fd5b5af1151562001f8157600080fd5b5050506040518051600160a060020a0385166000908152600a60205260409020541015905062001fb057600080fd5b600354600160a060020a0316631884c517338560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156200200957600080fd5b5af115156200201757600080fd5b5050506040518051905015156200202d57600080fd5b33600160a060020a03167fd3548f8b6a2a11c4a35ef5a16dbf7142c9db5163c7d46e7f66482664277cff0784604051600160a060020a03909116815260200160405180910390a250600192915050565b60008054600160a060020a03166323b872dd33308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515620020e257600080fd5b5af11515620020f057600080fd5b5050506040518051905015156200210657600080fd5b600160a060020a03331660009081526008602052604090205462002131908363ffffffff6200307116565b33600160a060020a03811660009081526008602052604090819020929092557fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91849051600160a060020a03909216825260208201526040908101905180910390a1506001919050565b600160a060020a038416600090815260096020526040812054819081908190819081908190819081908d9060ff161515620021d557600080fd5b8d985033600160a060020a031689600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200222057600080fd5b5af115156200222e57600080fd5b50505060405180519050600160a060020a03161415156200224e57600080fd5b600289600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200228e57600080fd5b5af115156200229c57600080fd5b505050604051805190506004811115620022b257fe5b14620022bd57600080fd5b88600160a060020a0316636946f6926040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620022fb57600080fd5b5af115156200230957600080fd5b5050506040518051985050600160a060020a0388166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200235257600080fd5b5af115156200236057600080fd5b50505060405180519750506000871115620023e257620023d688600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620023b757600080fd5b5af11515620023c557600080fd5b505050604051805190508862002fda565b1515620023e257600080fd5b88600160a060020a03166371a599ca6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200242057600080fd5b5af115156200242e57600080fd5b5050506040518051965050600160a060020a03861615620025175785600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200248757600080fd5b5af115156200249557600080fd5b5050506040518051955050600085111562002517576200250b86600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620024ec57600080fd5b5af11515620024fa57600080fd5b505050604051805190508662002fda565b15156200251757600080fd5b600454600160a060020a039081169063eb3721be908b1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200256257600080fd5b5af115156200257057600080fd5b5050506040518051905060405160e060020a63ffffffff8416028152600481019190915260240161010060405180830381600087803b1515620025b257600080fd5b5af11515620025c057600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051906020018051906020018051600454959c509a5062002648975050600160a060020a039093169450636b14ea369350604092505050518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019d157600080fd5b9150620026ec89600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200268c57600080fd5b5af115156200269a57600080fd5b50505060405180519050620026e68b600160a060020a0316638628aaff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001a9457600080fd5b6200358b565b1515620026f857600080fd5b6200270483836200346c565b15156200271057600080fd5b88600160a060020a031663d5fdfdbc8e8e8e6040518463ffffffff1660e060020a02815260040180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156200277b57808201518382015260200162002761565b50505050905090810190601f168015620027a95780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015620027e1578082015183820152602001620027c7565b50505050905090810190601f1680156200280f5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015620028475780820151838201526020016200282d565b50505050905090810190601f168015620028755780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15156200289857600080fd5b5af11515620028a657600080fd5b505050600160a060020a03301660009081526008602052604081206001015494508411156200293a5762002908620028fa6103e8620028ed87600a63ffffffff6200357416565b9063ffffffff6200364016565b859063ffffffff6200362816565b93506200291630856200358b565b15156200292257600080fd5b6200292e838562002fda565b15156200293a57600080fd5b7fed236d0a24cb7a32c76960696e44bac711b80ef76780688405dc96c2495b75f98e8a600160a060020a0316630690e5b86040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200299a57600080fd5b5af11515620029a857600080fd5b50505060405180519050604051600160a060020a039283168152911660208201526040908101905180910390a15060019d9c50505050505050505050505050565b600754600160a060020a031681565b60045460009033600160a060020a0390811691161462002a1757600080fd5b62001daf83836200346c565b600254600160a060020a031681565b6008602052600090815260409020805460019091015482565b60096020526000908152604090205460ff1681565b60075433600160a060020a0390811691161462002a7c57600080fd5b600054600160a060020a03161562002a9357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03978816179091556004805482169587169590951790945560038054851693861693909317909255600180548416918516919091179055600280549092169216919091179055565b6005602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002bb55780601f1062002b895761010080835404028352916020019162002bb5565b820191906000526020600020905b81548152906001019060200180831162002b9757829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002c575780601f1062002c2b5761010080835404028352916020019162002c57565b820191906000526020600020905b81548152906001019060200180831162002c3957829003601f168201915b5050505050908060030154905084565b600062002c7362003750565b62002c7d62003750565b600062002c8a8562000f5a565b151562002c9657600080fd5b60008581526005602090815260409182902080546003820154600180840180549396909560029586019593948794938116156101000260001901169290920491601f83018190048102019051908101604052809291908181526020018280546001816001161561010002031660029004801562002d575780601f1062002d2b5761010080835404028352916020019162002d57565b820191906000526020600020905b81548152906001019060200180831162002d3957829003601f168201915b50505050509250818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562002df75780601f1062002dcb5761010080835404028352916020019162002df7565b820191906000526020600020905b81548152906001019060200180831162002dd957829003601f168201915b5050505050915093509350935093509193509193565b6003546000908190600160a060020a031663d440c6f38460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002e6357600080fd5b5af1151562002e7157600080fd5b5050506040518051600160a060020a03949094166000908152600a6020526040902054939492505050565b6001546000908190600160a060020a031663fc06a87788888888886040518663ffffffff1660e060020a0281526004018080602001858152602001806020018381038352888882818152602001925080828437909101848103835285815260200190508585808284378201915050975050505050505050602060405180830381600087803b151562002f2d57600080fd5b5af1151562002f3b57600080fd5b50505060405180519050905080600160a060020a031632600160a060020a03167f03d3b6187bbe7d21aa3cf229e292ba41fa8bca6ec2128c0f1625178b8191cdc28989898989604051602081018490526060808252810185905280604081016080820188888082843790910184810383528581526020019050858580828437820191505097505050505050505060405180910390a39695505050505050565b600160a060020a03821660009081526008602052604081205462003005908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090819020919091557f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b6000828201838110156200308157fe5b8091505b5092915050565b6003546000908390600160a060020a03166368c197dd8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620030e257600080fd5b5af11515620030f057600080fd5b5050506040518051905015156200310657600080fd5b620031678382600160a060020a031663e2d36ef56040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200314957600080fd5b5af115156200315757600080fd5b505050604051805190506200346c565b15156200317357600080fd5b600354600160a060020a0316630b00de8d858560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515620031cc57600080fd5b5af11515620031da57600080fd5b505050604051805190501515620031f057600080fd5b5060019392505050565b6000828211156200320757fe5b50900390565b600154600090839082908190600160a060020a0316638403be918460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200326757600080fd5b5af115156200327557600080fd5b5050506040518051905015156200328b57600080fd5b82600160a060020a03166326137e6b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620032c957600080fd5b5af11515620032d757600080fd5b5050506040518051925050600160a060020a03851615620033d457506002548490600160a060020a03166316265b4e8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200334657600080fd5b5af115156200335457600080fd5b5050506040518051905015156200336a57600080fd5b620033d181600160a060020a03166362d598eb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620033ac57600080fd5b5af11515620033ba57600080fd5b505050604051805184915063ffffffff6200307116565b91505b600354600160a060020a03166368c197dd8860405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200342557600080fd5b5af115156200343357600080fd5b5050506040518051905015156200344957600080fd5b620034558883620034ef565b15156200346157600080fd5b509695505050505050565b600160a060020a0382166000908152600860205260408120600101546200349a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020600181019190915554620034cd908363ffffffff6200307116565b600160a060020a03841660009081526008602052604090205550600192915050565b600160a060020a0382166000908152600860205260408120546200351a908363ffffffff620031fa16565b600160a060020a0384166000908152600860205260409020908155600101546200354b908363ffffffff6200307116565b600160a060020a0384166000908152600860205260409020600190810191909155905092915050565b6000620035848383606462003652565b9392505050565b600160a060020a038216600090815260086020526040812060010154620035b9908363ffffffff620031fa16565b600160a060020a03841660009081526008602052604090819020600101919091557f4051ba94e08bb094159fc38391422b4b8ccfd2b1f8919c0eb37bb042d4b9cd8e908490849051600160a060020a03909216825260208201526040908101905180910390a150600192915050565b600081831062003639578162003584565b5090919050565b60008183101562003639578162003584565b60006200366b62003664858562003673565b83620036a2565b949350505050565b60008083151562003688576000915062003085565b508282028284828115156200369957fe5b04146200308157fe5b6000808284811515620036b157fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620036fd57805160ff19168380011785556200372d565b828001600101855582156200372d579182015b828111156200372d57825182559160200191906001019062003710565b506200373b92915062003762565b5090565b604051610c5a806200378383390190565b60206040519081016040526000815290565b6200377f91905b808211156200373b576000815560010162003769565b9056006060604052341561000f57600080fd5b604051610c5a380380610c5a8339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805182019190602001805191906020018051600e8054600160a060020a03191633600160a060020a039081169190911790915590925089161515905061009257600080fd5b6000805460ff1916600190811790915589905560028054600160a060020a0319908116600160a060020a038a81169190911790925560038054821689841617905560048054821688841617905560058054909116918a1691909117905560068490556007838051610107929160200190610141565b5060088054600160a060020a03938416600160a060020a03199182161790915560098054929093169116179055506101dc95505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061018257805160ff19168380011785556101af565b828001600101855582156101af579182015b828111156101af578251825591602001919060010190610194565b506101bb9291506101bf565b5090565b6101d991905b808211156101bb57600081556001016101c5565b90565b610a6f806101eb6000396000f3006060604052600436106101065763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630690e5b8811461010b57806315298c771461013a5780631a514d97146101c45780632d4d671f146101eb5780634e71d92d146101fe5780635f44910c146102135780636946f6921461022657806371a599ca146102395780638628aaff1461024c5780639c4a856114610271578063cc3a2dfa14610284578063d3281fd614610297578063d3a69e01146102aa578063d5fdfdbc146102bd578063da1fea2814610392578063e329c478146103a5578063ecc40f64146103dc578063f3859f57146103ef578063f6a5b13e14610402575b600080fd5b341561011657600080fd5b61011e610415565b604051600160a060020a03909116815260200160405180910390f35b341561014557600080fd5b61014d610424565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610189578082015183820152602001610171565b50505050905090810190601f1680156101b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101cf57600080fd5b6101d76104c2565b604051901515815260200160405180910390f35b34156101f657600080fd5b6101d761053d565b341561020957600080fd5b6102116105b7565b005b341561021e57600080fd5b61011e610647565b341561023157600080fd5b61011e610656565b341561024457600080fd5b61011e610665565b341561025757600080fd5b61025f610674565b60405190815260200160405180910390f35b341561027c57600080fd5b61014d61067a565b341561028f57600080fd5b61014d6106e5565b34156102a257600080fd5b61025f610750565b34156102b557600080fd5b61011e610756565b34156102c857600080fd5b61021160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061076595505050505050565b341561039d57600080fd5b61011e610913565b34156103b057600080fd5b6103b8610922565b604051808260048111156103c857fe5b60ff16815260200191505060405180910390f35b34156103e757600080fd5b61025f61092b565b34156103fa57600080fd5b61014d610931565b341561040d57600080fd5b61011e61099c565b600454600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b820191906000526020600020905b81548152906001019060200180831161049d57829003601f168201915b505050505081565b60045460009033600160a060020a039081169116146104e057600080fd5b600260005460ff1660048111156104f357fe5b146104fd57600080fd5b6000805460ff191660011790557f06c42818c4ab74dff6aec55942f601c2e9b7f2aa4321ee71690b125eacfe465460405160405180910390a15060015b90565b60045460009033600160a060020a0390811691161461055b57600080fd5b600160005460ff16600481111561056e57fe5b1461057857600080fd5b6000805460ff191660021790557f2b0cab0be6d82b2661b3b789c540ec9c7223aac635ac8e59a1e71e1137f2dd7760405160405180910390a150600190565b600e5433600160a060020a039081169116146105d257600080fd5b600160005460ff1660048111156105e557fe5b14806106015750600260005460ff1660048111156105ff57fe5b145b151561060c57600080fd5b6000805460ff191660031790557f1938697ee29e363ecda49e464c6d2aae25f0974bd1f2c81a91c21e13ad8dbf7760405160405180910390a1565b600554600160a060020a031681565b600254600160a060020a031681565b600354600160a060020a031681565b60065481565b600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600a5481565b600e54600160a060020a031681565b600e5433600160a060020a0390811691161461078057600080fd5b600260005460ff16600481111561079357fe5b1461079d57600080fd5b6000805460ff19166004179055600b8380516107bd9291602001906109ab565b50600c8280516107d19291602001906109ab565b50600d8180516107e59291602001906109ab565b508282826040518084805190602001908083835b602083106108185780518252601f1990920191602091820191016107f9565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b602083106108645780518252601f199092019160209182019101610845565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106108b05780518252601f199092019160209182019101610891565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600a557f777f59509d985349c80271b657d2649b218bc6f075a4625821b64448cc235b8660405160405180910390a1505050565b600854600160a060020a031681565b60005460ff1681565b60015481565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104ba5780601f1061048f576101008083540402835291602001916104ba565b600954600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106109ec57805160ff1916838001178555610a19565b82800160010185558215610a19579182015b82811115610a195782518255916020019190600101906109fe565b50610a25929150610a29565b5090565b61053a91905b80821115610a255760008155600101610a2f5600a165627a7a72305820aab9d309bae837f3417f3dc81c0f650543365c210e440786b5dfc09f1981eba70029a165627a7a7230582046504159ab1dbf3323b50d5d77d2f716286b233fadce62375204e0fc7ad76d490029", + "sourceMap": "281:17079:6:-;;;2896:69;;;;;;;;2929:19;:32;;-1:-1:-1;;;;;;2929:32:6;2951:10;-1:-1:-1;;;;;2929:32:6;;;;281:17079;;;-1:-1:-1;281:17079:6;;", + "deployedSourceMap": "281:17079:6:-;;;;;;;;;-1:-1:-1;;;281:17079:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3522:137;;;;;;;;;;-1:-1:-1;;;;;3522:137:6;;;;;;;14851:448;;;;;;;;;;-1:-1:-1;;;;;14851:448:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1499:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13055:254;;;;;;;;;;-1:-1:-1;;;;;13055:254:6;;;;;11322:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;603:27:6;;;;;;;;;;;;;;3684:616;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3684:616:6;;-1:-1:-1;;3684:616:6;;;-1:-1:-1;3684:616:6;;-1:-1:-1;;;3684:616:6;16081:239;;;;;;;;;;;;;;11515:130;;;;;;;;;;;;;;6310:106;;;;;;;;;;-1:-1:-1;;;;;6310:106:6;;;;;5132:366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;455:56;;;;;;;;;;;;5534:773;;;;;;;;;;;;;;-1:-1:-1;;;;;5534:773:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16322:159;;;;;;;;;;-1:-1:-1;;;;;16322:159:6;;;;;4303:526;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1452:44;;;;;;;;;;-1:-1:-1;;;;;1452:44:6;;;;;14618:231;;;;;;;;;;-1:-1:-1;;;;;14618:231:6;;;;;;;;;;;;667:34;;;;;;;;;;;;514:54;;;;;;;;;;;;398;;;;;;;;;;;;13312:241;;;;;;;;;;-1:-1:-1;;;;;13312:241:6;;;;;14389:227;;;;;;;;;;-1:-1:-1;;;;;14389:227:6;;;;;;;;;;;;7306:1560;;;;;;;;;;-1:-1:-1;;;;;7306:1560:6;;;;;12168:116;;;;;;;;;;-1:-1:-1;;;;;12168:116:6;;;;;15301:483;;;;;;;;;;-1:-1:-1;;;;;15301:483:6;;;;;;;;;;;;;;;;936:62;;;;;;;;;;;;732:30;;;;;;;;;;;;14078:145;;;;;;;;;;-1:-1:-1;;;;;14078:145:6;;;;;;;380:14;;;;;;;;;;;;12321:731;;;;;;;;;;-1:-1:-1;;;;;12321:731:6;;;;;15823:256;;;;;;;;;;;;;;8869:2430;;;;;;;;;;;;;-1:-1:-1;;;;;8869:2430:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8869:2430:6;;-1:-1:-1;8869:2430:6;;-1:-1:-1;;;;;;8869:2430:6;1001:64;;;;;;;;;;;;14225:150;;;;;;;;;;-1:-1:-1;;;;;14225:150:6;;;;;;;633:31;;;;;;;;;;;;1181:54;;;;;;;;;;-1:-1:-1;;;;;1181:54:6;;;;;1275:48;;;;;;;;;;-1:-1:-1;;;;;1275:48:6;;;;;2968:551;;;;;;;;;;-1:-1:-1;;;;;2968:551:6;;;;;;;;;;;;;;;;;;;;;;;;;876:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;876:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;876:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11648:330;;;;;;;;;;;;;;11981:184;;;;;;;;;;-1:-1:-1;;;;;11981:184:6;;;;;;;;-1:-1:-1;;;;;11981:184:6;;;;;;;;;;;;;;;;;;;;4832:297;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3522:137;1128:19;;1114:10;-1:-1:-1;;;;;1114:33:6;;;1128:19;;1114:33;1106:42;;;;;;3615:19;:40;;-1:-1:-1;;3615:40:6;-1:-1:-1;;;;;3615:40:6;;;;;;;;;;3522:137::o;14851:448::-;-1:-1:-1;;;;;1382:23:6;;14983:4;1382:23;;;:16;:23;;;;;;14967:5;;1382:23;;1374:32;;;;;;;;15037:10;-1:-1:-1;;;;;15002:45:6;15012:5;-1:-1:-1;;;;;15002:29:6;;:31;;;;;-1:-1:-1;;;15002:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15002:45:6;;14994:54;;;;;;;;15060:24;15067:7;15076;15060:6;:24::i;:::-;15052:33;;;;;;;;15093:11;15089:192;;;15145:21;:29;:36;;15179:1;15145:36;:33;:36;:::i;:::-;15113:21;:68;-1:-1:-1;;;;;15206:17:6;;15113:29;15206:17;;;:8;:17;;;;;;:24;;15228:1;15206:24;:21;:24;:::i;:::-;-1:-1:-1;;;;;15186:17:6;;;;;;:8;:17;;;;;;;:44;;;;:17;15240:36;;15261:5;;15240:36;-1:-1:-1;;;;;15240:36:6;;;;;;;;;;;;;;15089:192;-1:-1:-1;15291:4:6;;14851:448;-1:-1:-1;;;;;14851:448:6:o;1499:57::-;;;;;;:::o;13055:254::-;13116:17;13176:33;13189:10;13201:7;13176:12;:33::i;:::-;13168:42;;;;;;;;13270:10;-1:-1:-1;;;;;13245:45:6;;13282:7;13245:45;;-1:-1:-1;;;;;13245:45:6;;;;;;;;;;;;;;-1:-1:-1;13301:4:6;13055:254;;;:::o;11322:190::-;11396:24;11435;11452:6;11435:16;:24::i;:::-;11427:33;;;;;;;;-1:-1:-1;11471:20:6;;;;:12;:20;;;;;:37;;;;11322:190::o;603:27::-;;;-1:-1:-1;;;;;603:27:6;;:::o;3684:616::-;1128:19;;3818:13;;;;1114:10;-1:-1:-1;;;;;1114:33:6;;;1128:19;;1114:33;1106:42;;;;;;3875:17;;:24;;3897:1;3875:24;:21;:24;:::i;:::-;3838:17;:61;;;3940:31;;;;:12;:31;;;;;3975:54;;;3940:31;-1:-1:-1;4033:13:6;;;4070:5;;4033:42;;;;;;;;:::i;:::-;-1:-1:-1;4079:20:6;;;4116:12;;4079:49;;;;;;;;:::i;:::-;-1:-1:-1;4132:25:6;;;:54;;;4210:17;;4195:73;;4229:5;4236:12;4169:17;4195:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4195:73:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4195:73:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4279:17:6;;;3684:616;-1:-1:-1;;;3684:616:6:o;16081:239::-;-1:-1:-1;;;;;16187:10:6;16176:22;16134:4;16176:22;;;:10;:22;;;;;:28;:41;;16209:7;16176:41;:32;:41;:::i;:::-;16156:10;-1:-1:-1;;;;;16145:22:6;;;;;;;:10;:22;;;;;;:72;;;;16229:3;;;:12;;16156:10;16254:7;;16229:33;-1:-1:-1;;;16229:33:6;;;;;;-1:-1:-1;;;;;16229:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16221:42;;;;;;;;16272:29;16281:10;16293:7;16272:29;;-1:-1:-1;;;;;16272:29:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16312:4:6;16081:239;;;:::o;11515:130::-;11579:18;11611:20;;;:12;:20;;;;;:26;:30;;11515:130::o;6310:106::-;-1:-1:-1;;;;;6389:23:6;6371:4;6389:23;;;:16;:23;;;;;;;;;6310:106::o;5132:366::-;5300:10;;5250:22;;;;-1:-1:-1;;;;;5300:10:6;:24;5329:12;;5346:13;5364:14;;5300:83;;;;;-1:-1:-1;;;5300:83:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5300:83:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5279:104;;5417:10;-1:-1:-1;;;;;5392:81:6;5406:9;-1:-1:-1;;;;;5392:81:6;;5429:12;;5443:13;5458:14;;5392:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5392:81:6;;;;;;;;;;;;;;;;;;;;;;;;;;;5484:10;5132:366;-1:-1:-1;;;;;;5132:366:6:o;455:56::-;507:4;455:56;:::o;5534:773::-;5785:11;;5729:7;;5763:10;;5729:7;;;;-1:-1:-1;;;;;5785:11:6;:33;5819:15;5763:10;5847:11;5785:74;;-1:-1:-1;;;5785:74:6;;;;;;;;;;;;;-1:-1:-1;;;;;5785:74:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5777:83;;;;;;;;5884:57;5902:9;5913:11;5926:4;5932:8;5884:17;:57::i;:::-;5865:76;;5986:15;6006:9;6020:4;6029:8;6042:11;6058:8;6071:7;;6083:9;6097:12;5968:145;;:::i;:::-;;;;-1:-1:-1;;;;;5968:145:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6118:27:6;;;;;;;:16;:27;;;;;;;:34;;-1:-1:-1;;6118:34:6;6148:4;6118:34;;;5946:167;;-1:-1:-1;6165:37:6;;;;;5946:167;;6214:15;;6165:65;-1:-1:-1;;;6165:65:6;;;;;;-1:-1:-1;;;;;6165:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6157:74;;;;;;;;6271:11;-1:-1:-1;;;;;6241:42:6;;6260:9;6241:42;;-1:-1:-1;;;;;6241:42:6;;;;;;;;;;;;;;6294:9;5534:773;-1:-1:-1;;;;;;;;;;;5534:773:6:o;16322:159::-;-1:-1:-1;;;;;16425:18:6;16381:13;16425:18;;;:10;:18;;;;;:24;;16451:25;;;;;16425:24;;16322:159::o;4303:526::-;4555:13;;4720:11;;4499:25;;;;-1:-1:-1;;;;;4555:13:6;;;;:30;;4590:12;;;;4607:28;;4640:31;;4676;;4720:11;4555:181;;;;;-1:-1:-1;;;4555:181:6;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4555:181:6;-1:-1:-1;;;;;4555:181:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4531:205;;4773:13;-1:-1:-1;;;;;4745:56:6;4762:9;-1:-1:-1;;;;;4745:56:6;;4788:12;;4745:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4812:13;4303:526;-1:-1:-1;;;;;;4303:526:6:o;1452:44::-;;;;;;;;;;;;;:::o;14618:231::-;-1:-1:-1;;;;;1382:23:6;;14730:4;1382:23;;;:16;:23;;;;;;14714:5;;1382:23;;1374:32;;;;;;;;14784:10;-1:-1:-1;;;;;14749:45:6;14759:5;-1:-1:-1;;;;;14749:29:6;;:31;;;;;-1:-1:-1;;;14749:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14749:45:6;;14741:54;;;;;;;;14807:22;14814:5;14821:7;14807:6;:22::i;:::-;14799:31;;;;;;;;-1:-1:-1;14841:4:6;;14618:231;-1:-1:-1;;;;14618:231:6:o;667:34::-;;;-1:-1:-1;;;;;667:34:6;;:::o;514:54::-;566:2;514:54;:::o;398:::-;450:2;398:54;:::o;13312:241::-;13366:17;13426:33;13439:10;13451:7;13426:12;:33::i;:::-;13418:42;;;;;;;;13514:10;-1:-1:-1;;;;;13495:39:6;;13526:7;13495:39;;-1:-1:-1;;;;;13495:39:6;;;;;;;;;;;;;;-1:-1:-1;13545:4:6;13312:241;;;:::o;14389:227::-;-1:-1:-1;;;;;1382:23:6;;14499:4;1382:23;;;:16;:23;;;;;;14483:5;;1382:23;;1374:32;;;;;;;;14553:10;-1:-1:-1;;;;;14518:45:6;14528:5;-1:-1:-1;;;;;14518:29:6;;:31;;;;;-1:-1:-1;;;14518:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14518:45:6;;14510:54;;;;;;;;14576:20;14581:5;14588:7;14576:4;:20::i;7306:1560::-;-1:-1:-1;;;;;1382:23:6;;7394:4;1382:23;;;:16;:23;;;;;;7394:4;;;;;;;;;;;;7378:5;;1382:23;;1374:32;;;;;;;;7439:5;7405:40;;7484:10;-1:-1:-1;;;;;7457:37:6;:9;-1:-1:-1;;;;;7457:21:6;;:23;;;;;-1:-1:-1;;;7457:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7457:37:6;;7449:46;;;;;;;;7534:9;-1:-1:-1;;;;;7534:22:6;;:24;;;;;-1:-1:-1;;;7534:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;7609:18:6;;;:20;;;;;-1:-1:-1;;;7609:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7658:35:6;;-1:-1:-1;7641:13:6;:52;;;;;;;;;:111;;;-1:-1:-1;7714:38:6;7697:13;:55;;;;;;;;;7641:111;7633:120;;;;;;;;7800:10;-1:-1:-1;;;;;7800:31:6;;7832:5;7800:38;;-1:-1:-1;;;7800:38:6;;;;;;-1:-1:-1;;;;;7800:38:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7792:47;;;;;;;;7843:9;-1:-1:-1;;;;;7843:15:6;;:17;;;;;-1:-1:-1;;;7843:17:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8210:11:6;;-1:-1:-1;;;;;8210:11:6;;;;-1:-1:-1;8210:26:6;;8237;;;:28;;;;;-1:-1:-1;;;8237:28:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8210:56;;-1:-1:-1;;;8210:56:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:11;;8178:88;;-1:-1:-1;8210:56:6;-1:-1:-1;8325:47:6;;-1:-1:-1;;;;;;;8342:11:6;;;;-1:-1:-1;8342:27:6;;-1:-1:-1;8342:29:6;;-1:-1:-1;;;8342:29:6;;;;-1:-1:-1;;;8342:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8325:5;;-1:-1:-1;8325:47:6;:16;:47;:::i;:::-;8299:73;;8385:67;8393:9;-1:-1:-1;;;;;8393:21:6;;:23;;;;;-1:-1:-1;;;8393:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8418:33;8428:9;-1:-1:-1;;;;;8428:20:6;;:22;;;;;-1:-1:-1;;;8428:22:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8418:5;;-1:-1:-1;8418:33:6;:9;:33;:::i;:::-;8385:6;:67::i;:::-;8377:76;;;;;;;;8503:49;8511:15;8536;8503:5;:49::i;:::-;8495:58;;;;;;;;8676:49;8684:4;8709:15;8676:6;:49::i;:::-;8668:58;;;;;;;;8738:49;8746:4;8771:15;8738:4;:49::i;:::-;8730:58;;;;;;;;8798:49;8815:5;8822:9;-1:-1:-1;;;;;8822:22:6;;:24;;;;;-1:-1:-1;;;8822:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8798:49;;-1:-1:-1;;;;;8798:49:6;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8858:4:6;;7306:1560;-1:-1:-1;;;;;;;;7306:1560:6:o;12168:116::-;-1:-1:-1;;;;;12263:17:6;12230:19;12263:17;;;:8;:17;;;;;;;12168:116::o;15301:483::-;-1:-1:-1;;;;;1382:23:6;;15432:4;1382:23;;;:16;:23;;;;;;15416:5;;1382:23;;1374:32;;;;;;;;15486:10;-1:-1:-1;;;;;15451:45:6;15461:5;-1:-1:-1;;;;;15451:29:6;;:31;;;;;-1:-1:-1;;;15451:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15451:45:6;;15443:54;;;;;;;;15509:23;15515:7;15524;15509:5;:23::i;:::-;15501:32;;;;;;;;15541:11;15537:229;;;15592:28;;:35;;15625:1;15592:35;:32;:35;:::i;:::-;15561:28;:66;-1:-1:-1;;;;;15674:17:6;;;;;;:8;:17;;;;;;15652:65;;15674:42;;566:2;15674:42;:21;:42;:::i;:::-;-1:-1:-1;;;;;15652:17:6;;;;;;:8;:17;;;;;;;:65;:21;:65;:::i;:::-;-1:-1:-1;;;;;15632:17:6;;;;;;:8;:17;;;;;;;:85;;;;:17;15727:34;;15746:5;;15727:34;-1:-1:-1;;;;;15727:34:6;;;;;;;;;;;;;;-1:-1:-1;15776:4:6;;15301:483;-1:-1:-1;;;;;15301:483:6:o;936:62::-;;;;:::o;732:30::-;;;-1:-1:-1;;;;;732:30:6;;:::o;14078:145::-;827:11;;14164:4;;805:10;-1:-1:-1;;;;;805:34:6;;;827:11;;805:34;797:43;;;;;;14183:20;14188:5;14195:7;14183:4;:20::i;:::-;14175:29;;;;;;;;-1:-1:-1;14215:4:6;14078:145;;;;:::o;380:14::-;;;-1:-1:-1;;;;;380:14:6;;:::o;12321:731::-;12509:13;;12378:15;;12463:10;;-1:-1:-1;;;;;12509:13:6;:36;12463:10;12509:48;;-1:-1:-1;;;12509:48:6;;;;;;-1:-1:-1;;;;;12509:48:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12501:57;;;;;;;;12595;12600:7;12609:10;-1:-1:-1;;;;;12609:40:6;;:42;;;;;-1:-1:-1;;;12609:42:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12595:4;:57::i;:::-;12587:66;;;;;;;;12725:10;-1:-1:-1;;;;;12725:43:6;;:45;;;;;-1:-1:-1;;;12725:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12696:19:6;;;;;;:10;:19;;;;;:25;:74;;;-1:-1:-1;12688:83:6;;;;;;12812:10;-1:-1:-1;;;;;12812:43:6;;:45;;;;;-1:-1:-1;;;12812:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12783:17:6;;;;;;:8;:17;;;;;;:74;;;-1:-1:-1;12775:83:6;;;;;;12894:13;;-1:-1:-1;;;;;12894:13:6;:39;12934:10;12946:7;12894:60;;-1:-1:-1;;;12894:60:6;;;;;;-1:-1:-1;;;;;12894:60:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12886:69;;;;;;;;13013:10;-1:-1:-1;;;;;12990:43:6;;13025:7;12990:43;;-1:-1:-1;;;;;12990:43:6;;;;;;;;;;;;;;-1:-1:-1;13044:4:6;;12321:731;-1:-1:-1;;12321:731:6:o;15823:256::-;15875:4;15894:3;;-1:-1:-1;;;;;15894:3:6;:16;15911:10;15931:4;15938:7;15894:52;;-1:-1:-1;;;15894:52:6;;;;;;-1:-1:-1;;;;;15894:52:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15886:61;;;;;;;;-1:-1:-1;;;;;15993:10:6;15982:22;;;;;:10;:22;;;;;:28;:41;;16015:7;15982:41;:32;:41;:::i;:::-;15962:10;-1:-1:-1;;;;;15951:22:6;;;;;;:10;:22;;;;;;;:72;;;;16032:28;;16052:7;;16032:28;-1:-1:-1;;;;;16032:28:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16071:4:6;15823:256;;;:::o;8869:2430::-;-1:-1:-1;;;;;1382:23:6;;9011:4;1382:23;;;:16;:23;;;;;;9011:4;;;;;;;;;;;;;;;;8995:5;;1382:23;;1374:32;;;;;;;;9054:5;9022:38;;9100:10;-1:-1:-1;;;;;9072:38:6;:9;-1:-1:-1;;;;;9072:22:6;;:24;;;;;-1:-1:-1;;;9072:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9072:38:6;;9064:47;;;;;;;;9151:38;9123:9;-1:-1:-1;;;;;9123:18:6;;:20;;;;;-1:-1:-1;;;9123:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;;;;;9115:75;;;;;;9227:9;-1:-1:-1;;;;;9227:15:6;;:17;;;;;-1:-1:-1;;;9227:17:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;9268:14:6;;;:16;;;;;-1:-1:-1;;;9268:16:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9303:1:6;9292:12;;9288:70;;;9321:31;9328:3;-1:-1:-1;;;;;9328:11:6;;:13;;;;;-1:-1:-1;;;9328:13:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9343:8;9321:6;:31::i;:::-;9313:40;;;;;;;;9401:9;-1:-1:-1;;;;;9401:19:6;;:21;;;;;-1:-1:-1;;;9401:21:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;9431:21:6;;;9427:175;;9484:7;-1:-1:-1;;;;;9484:22:6;;:24;;;;;-1:-1:-1;;;9484:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9532:1:6;9517:16;;9513:85;;;9552:39;9559:7;-1:-1:-1;;;;;9559:15:6;;:17;;;;;-1:-1:-1;;;9559:17:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9578:12;9552:6;:39::i;:::-;9544:48;;;;;;;;10147:11;;-1:-1:-1;;;;;10147:11:6;;;;:26;;10174;;;:28;;;;;-1:-1:-1;;;10174:28:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10147:56;;-1:-1:-1;;;10147:56:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10285:11;;10115:88;;-1:-1:-1;10147:56:6;-1:-1:-1;10268:47:6;;-1:-1:-1;;;;;;;10285:11:6;;;;-1:-1:-1;10285:27:6;;-1:-1:-1;10285:29:6;;-1:-1:-1;;;10285:29:6;;;;-1:-1:-1;;;10285:29:6;;;;;;;;;;;;;;;;;;;;;;;10268:47;10236:79;;10328:66;10335:9;-1:-1:-1;;;;;10335:21:6;;:23;;;;;-1:-1:-1;;;10335:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10360:33;10370:9;-1:-1:-1;;;;;10370:20:6;;:22;;;;;-1:-1:-1;;;10370:22:6;;;;;;;;;;;;;;;;;;;;;;;10360:33;10328:5;:66::i;:::-;10320:75;;;;;;;;10460:48;10467:15;10492;10460:6;:48::i;:::-;10452:57;;;;;;;;10559:9;-1:-1:-1;;;;;10559:19:6;;10579:7;10588;10597:4;10559:43;;;;;-1:-1:-1;;;10559:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10559:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10559:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10559:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;10969:4:6;10958:16;;;;;:10;:16;;;;;:23;;;;-1:-1:-1;11024:9:6;;11021:199;;;11050:77;11060:66;507:4;11060:35;:5;450:2;11060:35;:16;:35;:::i;:::-;:39;:66;:39;:66;:::i;:::-;11050:5;;:77;:9;:77;:::i;:::-;11042:85;;11140:30;11146:4;11164:5;11140;:30::i;:::-;11132:39;;;;;;;;11184:30;11191:15;11208:5;11184:6;:30::i;:::-;11176:39;;;;;;;;11229:51;11248:5;11255:9;-1:-1:-1;;;;;11255:22:6;;:24;;;;;-1:-1:-1;;;11255:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11229:51;;-1:-1:-1;;;;;11229:51:6;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11291:4:6;;8869:2430;-1:-1:-1;;;;;;;;;;;;;8869:2430:6:o;1001:64::-;;;-1:-1:-1;;;;;1001:64:6;;:::o;14225:150::-;827:11;;14314:4;;805:10;-1:-1:-1;;;;;805:34:6;;;827:11;;805:34;797:43;;;;;;14333:22;14340:5;14347:7;14333:6;:22::i;633:31::-;;;-1:-1:-1;;;;;633:31:6;;:::o;1181:54::-;;;;;;;;;;;;;;;;;;;:::o;1275:48::-;;;;;;;;;;;;;;;:::o;2968:551::-;1128:19;;1114:10;-1:-1:-1;;;;;1114:33:6;;;1128:19;;1114:33;1106:42;;;;;;3206:1;3190:3;-1:-1:-1;;;;;3190:3:6;3182:26;3174:35;;;;;;3213:3;:57;;-1:-1:-1;;3213:57:6;;;-1:-1:-1;;;;;3213:57:6;;;;;;;3274:11;:57;;;;;;;;;;;;;;3335:13;:57;;;;;;;;;;;;;;-1:-1:-1;3396:57:6;;;;;;;;;;;;;-1:-1:-1;3457:57:6;;;;;;;;;;;;;2968:551::o;876:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11648:330::-;11706:13;11721:11;;:::i;:::-;11734:19;;:::i;:::-;11755:24;11794;11811:6;11794:16;:24::i;:::-;11786:33;;;;;;;;11835:20;;;;:12;:20;;;;;;;;;:26;;11933:37;;;;11866:25;;;;11823:151;;11835:26;;11866:25;;11896:32;;;;;11933:37;;11866:25;;11823:151;;;;;;-1:-1:-1;;11823:151:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11648:330;;;;;:::o;11981:184::-;12098:13;;12044:18;;;;-1:-1:-1;;;;;12098:13:6;:34;12133:7;12098:43;;-1:-1:-1;;;12098:43:6;;;;;;-1:-1:-1;;;;;12098:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12143:17:6;;;;;;;;:8;:17;;;;;;12098:43;;11981:184;-1:-1:-1;;;11981:184:6:o;4832:297::-;4976:6;;4934:18;;;;-1:-1:-1;;;;;4976:6:6;:16;4997:8;;5010:9;5024:10;;4976:62;;;;;-1:-1:-1;;;4976:62:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4976:62:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4959:79;;5068:6;-1:-1:-1;;;;;5047:61:6;5057:9;-1:-1:-1;;;;;5047:61:6;;5076:8;;5086:9;5097:10;;5047:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5047:61:6;;;;;;;;;;;;;;;;;;;;;;;;;;;5119:6;4832:297;-1:-1:-1;;;;;;4832:297:6:o;16522:189::-;-1:-1:-1;;;;;16625:17:6;;16588:4;16625:17;;;:10;:17;;;;;:23;:36;;16653:7;16625:36;:27;:36;:::i;:::-;-1:-1:-1;;;;;16599:17:6;;;;;;:10;:17;;;;;;;:62;;;;16670:22;;16610:5;;16684:7;;16670:22;-1:-1:-1;;;;;16670:22:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16703:4:6;16522:189;;;;:::o;405:123:15:-;463:7;489:5;;;505:6;;;;498:14;;;;523:1;516:8;;405:123;;;;;;:::o;13556:450:6:-;13740:13;;13634:17;;13693:11;;-1:-1:-1;;;;;13740:13:6;:36;13693:11;13740:49;;-1:-1:-1;;;13740:49:6;;;;;;-1:-1:-1;;;;;13740:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13732:58;;;;;;;;13827:59;13834:7;13843:10;-1:-1:-1;;;;;13843:40:6;;:42;;;;;-1:-1:-1;;;13843:42:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13827:6;:59::i;:::-;13819:68;;;;;;;;13923:13;;-1:-1:-1;;;;;13923:13:6;:41;13965:11;13978:7;13923:63;;-1:-1:-1;;;13923:63:6;;;;;;-1:-1:-1;;;;;13923:63:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13915:72;;;;;;;;-1:-1:-1;13998:4:6;;13556:450;-1:-1:-1;;;13556:450:6:o;531:106:15:-;589:7;610:6;;;;603:14;;;;-1:-1:-1;628:5:15;;;531:106::o;6419:848:6:-;6701:6;;6647:7;;6684:4;;6647:7;;;;-1:-1:-1;;;;;6701:6:6;:22;6684:4;6701:29;;-1:-1:-1;;;6701:29:6;;;;;;-1:-1:-1;;;;;6701:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6693:38;;;;;;;;6795:3;-1:-1:-1;;;;;6795:14:6;;:16;;;;;-1:-1:-1;;;6795:16:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;6833:22:6;;;6829:256;;-1:-1:-1;6941:10:6;;6919:8;;-1:-1:-1;;;;;6941:10:6;:29;6919:8;6941:39;;-1:-1:-1;;;6941:39:6;;;;;;-1:-1:-1;;;;;6941:39:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6933:48;;;;;;;;7042:38;7055:7;-1:-1:-1;;;;;7055:22:6;;:24;;;;;-1:-1:-1;;;7055:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7042:8;;-1:-1:-1;7042:38:6;:12;:38;:::i;:::-;7031:49;;6829:256;7113:13;;-1:-1:-1;;;;;7113:13:6;:36;7150:11;7113:49;;-1:-1:-1;;;7113:49:6;;;;;;-1:-1:-1;;;;;7113:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7105:58;;;;;;;;7176:26;7181:10;7193:8;7176:4;:26::i;:::-;7168:35;;;;;;;;-1:-1:-1;7255:8:6;6419:848;-1:-1:-1;;;;;;6419:848:6:o;17131:227::-;-1:-1:-1;;;;;17235:17:6;;17197:4;17235:17;;;:10;:17;;;;;:24;;;:37;;17264:7;17235:37;:28;:37;:::i;:::-;-1:-1:-1;;;;;17208:17:6;;;;;;:10;:17;;;;;:24;;;:64;;;;17303:23;:36;;17331:7;17303:36;:27;:36;:::i;:::-;-1:-1:-1;;;;;17276:17:6;;;;;;:10;:17;;;;;:63;-1:-1:-1;17350:4:6;17131:227;;;;:::o;16904:225::-;-1:-1:-1;;;;;17006:17:6;;16968:4;17006:17;;;:10;:17;;;;;:23;:36;;17034:7;17006:36;:27;:36;:::i;:::-;-1:-1:-1;;;;;16979:17:6;;;;;;:10;:17;;;;;:63;;;17073:24;;;:37;;17102:7;17073:37;:28;:37;:::i;:::-;-1:-1:-1;;;;;17046:17:6;;;;;;:10;:17;;;;;:24;;;;:64;;;;:24;-1:-1:-1;16904:225:6;;;;:::o;1388:114:15:-;1453:7;1474:24;1488:1;1491;1494:3;1474:13;:24::i;:::-;1467:31;1388:114;-1:-1:-1;;;1388:114:15:o;16713:189:6:-;-1:-1:-1;;;;;16816:17:6;;16778:4;16816:17;;;:10;:17;;;;;:24;;;:37;;16845:7;16816:37;:28;:37;:::i;:::-;-1:-1:-1;;;;;16789:17:6;;;;;;:10;:17;;;;;;;:24;;:64;;;;16862:21;;16800:5;;16875:7;;16862:21;-1:-1:-1;;;;;16862:21:6;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16894:4:6;16713:189;;;;:::o;1165:96:15:-;1223:7;1248:1;1244;:5;:13;;1256:1;1244:13;;;-1:-1:-1;1252:1:15;;1165:96;-1:-1:-1;1165:96:15:o;1065:97::-;1123:7;1149:1;1144;:6;;:14;;1157:1;1144:14;;1264:121;1343:7;1364:17;1368:9;1372:1;1375;1368:3;:9::i;:::-;1379:1;1364:3;:17::i;:::-;1357:24;1264:121;-1:-1:-1;;;;1264:121:15:o;640:162::-;698:7;;716:6;;712:32;;;738:1;731:8;;;;712:32;-1:-1:-1;759:5:15;;;763:1;759;:5;775;;;;;;;;:10;768:18;;;805:257;863:7;949:9;965:1;961;:5;;;;;;;;;805:257;-1:-1:-1;;;;805:257:15:o;281:17079:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;281:17079:6;;;-1:-1:-1;281:17079:6;:::i;:::-;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o", + "source": "pragma solidity ^0.4.21;\n\nimport \"rlc-token/contracts/RLC.sol\";\n\nimport './WorkOrder.sol';\nimport './Marketplace.sol';\nimport './AppHub.sol';\nimport './DatasetHub.sol';\nimport './WorkerPoolHub.sol';\nimport \"./SafeMathOZ.sol\";\nimport './IexecLib.sol';\n\n\n/**\n * @title IexecHub\n */\n\ncontract IexecHub\n{\n\tusing SafeMathOZ for uint256;\n\n\t/**\n\t* RLC contract for token transfers.\n\t*/\n\tRLC public rlc;\n\n\tuint256 public constant STAKE_BONUS_RATIO = 10;\n\tuint256 public constant STAKE_BONUS_MIN_THRESHOLD = 1000;\n\tuint256 public constant SCORE_UNITARY_SLASH = 50;\n\n\t/**\n\t * Slaves contracts\n\t */\n\tAppHub public appHub;\n\tDatasetHub public datasetHub;\n\tWorkerPoolHub public workerPoolHub;\n\n\t/**\n\t * Market place\n\t */\n\tMarketplace public marketplace;\n\tmodifier onlyMarketplace()\n\t{\n\t\trequire(msg.sender == address(marketplace));\n\t\t_;\n\t}\n\t/**\n\t * Categories\n\t */\n\tmapping(uint256 => IexecLib.Category) public m_categories;\n\tuint256 public m_categoriesCount;\n\taddress public m_categoriesCreator;\n\tmodifier onlyCategoriesCreator()\n\t{\n\t\trequire(msg.sender == m_categoriesCreator);\n\t\t_;\n\t}\n\n\t/**\n\t * Escrow\n\t */\n\tmapping(address => IexecLib.Account) public m_accounts;\n\n\n\t/**\n\t * workOrder Registered\n\t */\n\tmapping(address => bool) public m_woidRegistered;\n\tmodifier onlyRegisteredWoid(address _woid)\n\t{\n\t\trequire(m_woidRegistered[_woid]);\n\t\t_;\n\t}\n\n\t/**\n\t * Reputation for PoCo\n\t */\n\tmapping(address => uint256) public m_scores;\n\tIexecLib.ContributionHistory public m_contributionHistory;\n\n\n\tevent WorkOrderActivated(address woid, address indexed workerPool);\n\tevent WorkOrderClaimed (address woid, address workerPool);\n\tevent WorkOrderCompleted(address woid, address workerPool);\n\n\tevent CreateApp (address indexed appOwner, address indexed app, string appName, uint256 appPrice, string appParams );\n\tevent CreateDataset (address indexed datasetOwner, address indexed dataset, string datasetName, uint256 datasetPrice, string datasetParams);\n\tevent CreateWorkerPool(address indexed workerPoolOwner, address indexed workerPool, string workerPoolDescription );\n\n\tevent CreateCategory (uint256 catid, string name, string description, uint256 workClockTimeRef);\n\n\tevent WorkerPoolSubscription (address indexed workerPool, address worker);\n\tevent WorkerPoolUnsubscription(address indexed workerPool, address worker);\n\tevent WorkerPoolEviction (address indexed workerPool, address worker);\n\n\tevent AccurateContribution(address woid, address indexed worker);\n\tevent FaultyContribution (address woid, address indexed worker);\n\n\tevent Deposit (address owner, uint256 amount);\n\tevent Withdraw(address owner, uint256 amount);\n\tevent Reward (address user, uint256 amount);\n\tevent Seize (address user, uint256 amount);\n\n\t/**\n\t * Constructor\n\t */\n\tfunction IexecHub()\n\tpublic\n\t{\n\t\tm_categoriesCreator = msg.sender;\n\t}\n\n\tfunction attachContracts(\n\t\taddress _tokenAddress,\n\t\taddress _marketplaceAddress,\n\t\taddress _workerPoolHubAddress,\n\t\taddress _appHubAddress,\n\t\taddress _datasetHubAddress)\n\tpublic onlyCategoriesCreator\n\t{\n\t\trequire(address(rlc) == address(0));\n\t\trlc = RLC (_tokenAddress );\n\t\tmarketplace = Marketplace (_marketplaceAddress );\n\t\tworkerPoolHub = WorkerPoolHub(_workerPoolHubAddress);\n\t\tappHub = AppHub (_appHubAddress );\n\t\tdatasetHub = DatasetHub (_datasetHubAddress );\n\n\t}\n\n\tfunction setCategoriesCreator(address _categoriesCreator)\n\tpublic onlyCategoriesCreator\n\t{\n\t\tm_categoriesCreator = _categoriesCreator;\n\t}\n\t/**\n\t * Factory\n\t */\n\n\tfunction createCategory(\n\t\tstring _name,\n\t\tstring _description,\n\t\tuint256 _workClockTimeRef)\n\tpublic onlyCategoriesCreator returns (uint256 catid)\n\t{\n\t\tm_categoriesCount = m_categoriesCount.add(1);\n\t\tIexecLib.Category storage category = m_categories[m_categoriesCount];\n\t\tcategory.catid = m_categoriesCount;\n\t\tcategory.name = _name;\n\t\tcategory.description = _description;\n\t\tcategory.workClockTimeRef = _workClockTimeRef;\n\t\temit CreateCategory(m_categoriesCount, _name, _description, _workClockTimeRef);\n\t\treturn m_categoriesCount;\n\t}\n\n\tfunction createWorkerPool(\n\t\tstring _description,\n\t\tuint256 _subscriptionLockStakePolicy,\n\t\tuint256 _subscriptionMinimumStakePolicy,\n\t\tuint256 _subscriptionMinimumScorePolicy)\n\texternal returns (address createdWorkerPool)\n\t{\n\t\taddress newWorkerPool = workerPoolHub.createWorkerPool(\n\t\t\t_description,\n\t\t\t_subscriptionLockStakePolicy,\n\t\t\t_subscriptionMinimumStakePolicy,\n\t\t\t_subscriptionMinimumScorePolicy,\n\t\t\taddress(marketplace)\n\t\t);\n\t\temit CreateWorkerPool(tx.origin, newWorkerPool, _description);\n\t\treturn newWorkerPool;\n\t}\n\n\tfunction createApp(\n\t\tstring _appName,\n\t\tuint256 _appPrice,\n\t\tstring _appParams)\n\texternal returns (address createdApp)\n\t{\n\t\taddress newApp = appHub.createApp(\n\t\t\t_appName,\n\t\t\t_appPrice,\n\t\t\t_appParams\n\t\t);\n\t\temit CreateApp(tx.origin, newApp, _appName, _appPrice, _appParams);\n\t\treturn newApp;\n\t}\n\n\tfunction createDataset(\n\t\tstring _datasetName,\n\t\tuint256 _datasetPrice,\n\t\tstring _datasetParams)\n\texternal returns (address createdDataset)\n\t{\n\t\taddress newDataset = datasetHub.createDataset(\n\t\t\t_datasetName,\n\t\t\t_datasetPrice,\n\t\t\t_datasetParams\n\t\t\t);\n\t\temit CreateDataset(tx.origin, newDataset, _datasetName, _datasetPrice, _datasetParams);\n\t\treturn newDataset;\n\t}\n\n\t/**\n\t * WorkOrder Emission\n\t */\n\tfunction buyForWorkOrder(\n\t\tuint256 _marketorderIdx,\n\t\taddress _workerpool,\n\t\taddress _app,\n\t\taddress _dataset,\n\t\tstring _params,\n\t\taddress _callback,\n\t\taddress _beneficiary)\n\texternal returns (address)\n\t{\n\t\taddress requester = msg.sender;\n\t\trequire(marketplace.consumeMarketOrderAsk(_marketorderIdx, requester, _workerpool));\n\n\t\tuint256 emitcost = lockWorkOrderCost(requester, _workerpool, _app, _dataset);\n\n\t\tWorkOrder workorder = new WorkOrder(\n\t\t\t_marketorderIdx,\n\t\t\trequester,\n\t\t\t_app,\n\t\t\t_dataset,\n\t\t\t_workerpool,\n\t\t\temitcost,\n\t\t\t_params,\n\t\t\t_callback,\n\t\t\t_beneficiary\n\t\t);\n\n\t\tm_woidRegistered[workorder] = true;\n\n\t\trequire(WorkerPool(_workerpool).emitWorkOrder(workorder, _marketorderIdx));\n\n\t\temit WorkOrderActivated(workorder, _workerpool);\n\t\treturn workorder;\n\t}\n\n\tfunction isWoidRegistred(address _woid) public view returns (bool)\n\t{\n\t\treturn m_woidRegistered[_woid];\n\t}\n\n\tfunction lockWorkOrderCost(\n\t\taddress _requester,\n\t\taddress _workerpool, // Address of a smartcontract\n\t\taddress _app, // Address of a smartcontract\n\t\taddress _dataset) // Address of a smartcontract\n\tinternal returns (uint256)\n\t{\n\t\t// APP\n\t\tApp app = App(_app);\n\t\trequire(appHub.isAppRegistered (_app));\n\t\t// initialize usercost with dapp price\n\t\tuint256 emitcost = app.m_appPrice();\n\n\t\t// DATASET\n\t\tif (_dataset != address(0)) // address(0) → no dataset\n\t\t{\n\t\t\tDataset dataset = Dataset(_dataset);\n\t\t\trequire(datasetHub.isDatasetRegistred(_dataset));\n\t\t\t// add optional datasetPrice for userCost\n\t\t\temitcost = emitcost.add(dataset.m_datasetPrice());\n\t\t}\n\n\t\t// WORKERPOOL\n\t\trequire(workerPoolHub.isWorkerPoolRegistered(_workerpool));\n\n\t\trequire(lock(_requester, emitcost)); // Lock funds for app + dataset payment\n\n\t\treturn emitcost;\n\t}\n\n\t/**\n\t * WorkOrder life cycle\n\t */\n\n\tfunction claimFailedConsensus(address _woid)\n\tpublic onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\tWorkOrder workorder = WorkOrder(_woid);\n\t\trequire(workorder.m_requester() == msg.sender);\n\t\tWorkerPool workerpool = WorkerPool(workorder.m_workerpool());\n\n\t\tIexecLib.WorkOrderStatusEnum currentStatus = workorder.m_status();\n\t\trequire(currentStatus == IexecLib.WorkOrderStatusEnum.ACTIVE || currentStatus == IexecLib.WorkOrderStatusEnum.REVEALING);\n\t\t// Unlock stakes for all workers\n\t\trequire(workerpool.claimFailedConsensus(_woid));\n\t\tworkorder.claim(); // revert on error\n\n\t\t/* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */\n\t\t/* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */\n\t\tuint256 value;\n\t\taddress workerpoolOwner;\n\t\t(,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas\n\t\tuint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO());\n\n\t\trequire(unlock (workorder.m_requester(), value.add(workorder.m_emitcost()))); // UNLOCK THE FUNDS FOR REINBURSEMENT\n\t\trequire(seize (workerpoolOwner, workerpoolStake));\n\t\t// put workerpoolOwner stake seize into iexecHub address for bonus for scheduler on next well finalized Task\n\t\trequire(reward (this, workerpoolStake));\n\t\trequire(lock (this, workerpoolStake));\n\n\t\temit WorkOrderClaimed(_woid, workorder.m_workerpool());\n\t\treturn true;\n\t}\n\n\tfunction finalizeWorkOrder(\n\t\taddress _woid,\n\t\tstring _stdout,\n\t\tstring _stderr,\n\t\tstring _uri)\n\tpublic onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\tWorkOrder workorder = WorkOrder(_woid);\n\t\trequire(workorder.m_workerpool() == msg.sender);\n\t\trequire(workorder.m_status() == IexecLib.WorkOrderStatusEnum.REVEALING);\n\n\t\t// APP\n\t\tApp app = App(workorder.m_app());\n\t\tuint256 appPrice = app.m_appPrice();\n\t\tif (appPrice > 0)\n\t\t{\n\t\t\trequire(reward(app.m_owner(), appPrice));\n\t\t}\n\n\t\t// DATASET\n\t\tDataset dataset = Dataset(workorder.m_dataset());\n\t\tif (dataset != address(0))\n\t\t{\n\t\t\tuint256 datasetPrice = dataset.m_datasetPrice();\n\t\t\tif (datasetPrice > 0)\n\t\t\t{\n\t\t\t\trequire(reward(dataset.m_owner(), datasetPrice));\n\t\t\t}\n\t\t}\n\n\t\t// WORKERPOOL → rewarding done by the caller itself\n\n\t\t/**\n\t\t * seize stacked funds from requester.\n\t\t * reward = value: was locked at market making\n\t\t * emitcost: was locked at when emiting the workorder\n\t\t */\n\t\t/* uint256 value = marketplace.getMarketOrderValue(workorder.m_marketorderIdx()); // revert if not exist */\n\t\t/* address workerpoolOwner = marketplace.getMarketOrderWorkerpoolOwner(workorder.m_marketorderIdx()); // revert if not exist */\n\t\tuint256 value;\n\t\taddress workerpoolOwner;\n\t\t(,,,value,,,,workerpoolOwner) = marketplace.getMarketOrder(workorder.m_marketorderIdx()); // Single call cost less gas\n\t\tuint256 workerpoolStake = value.percentage(marketplace.ASK_STAKE_RATIO());\n\n\t\trequire(seize (workorder.m_requester(), value.add(workorder.m_emitcost()))); // seize funds for payment (market value + emitcost)\n\t\trequire(unlock(workerpoolOwner, workerpoolStake)); // unlock scheduler stake\n\n\t\t// write results\n\t\tworkorder.setResult(_stdout, _stderr, _uri); // revert on error\n\n\t\t// Rien ne se perd, rien ne se crée, tout se transfere\n\t\t// distribute bonus to scheduler. jackpot bonus come from scheduler stake loose on IexecHub contract\n\t\t// we reuse the varaible value for the kitty / fraction of the kitty (stack too deep)\n\t\t/* (,value) = checkBalance(this); // kitty is locked on `this` wallet */\n\t\tvalue = m_accounts[this].locked; // kitty is locked on `this` wallet\n\t\tif(value > 0)\n\t\t{\n\t\t\tvalue = value.min(value.percentage(STAKE_BONUS_RATIO).max(STAKE_BONUS_MIN_THRESHOLD));\n\t\t\trequire(seize(this, value));\n\t\t\trequire(reward(workerpoolOwner, value));\n\t\t}\n\n\t\temit WorkOrderCompleted(_woid, workorder.m_workerpool());\n\t\treturn true;\n\t}\n\n\t/**\n\t * Views\n\t */\n\tfunction getCategoryWorkClockTimeRef(uint256 _catId) public view returns (uint256 workClockTimeRef)\n\t{\n\t\trequire(existingCategory(_catId));\n\t\treturn m_categories[_catId].workClockTimeRef;\n\t}\n\n\tfunction existingCategory(uint256 _catId) public view returns (bool categoryExist)\n\t{\n\t\treturn m_categories[_catId].catid > 0;\n\t}\n\n\tfunction getCategory(uint256 _catId) public view returns (uint256 catid, string name, string description, uint256 workClockTimeRef)\n\t{\n\t\trequire(existingCategory(_catId));\n\t\treturn (\n\t\t\tm_categories[_catId].catid,\n\t\t\tm_categories[_catId].name,\n\t\t\tm_categories[_catId].description,\n\t\t\tm_categories[_catId].workClockTimeRef\n\t\t);\n\t}\n\n\tfunction getWorkerStatus(address _worker) public view returns (address workerPool, uint256 workerScore)\n\t{\n\t\treturn (workerPoolHub.getWorkerAffectation(_worker), m_scores[_worker]);\n\t}\n\n\tfunction getWorkerScore(address _worker) public view returns (uint256 workerScore)\n\t{\n\t\treturn m_scores[_worker];\n\t}\n\n\t/**\n\t * Worker subscription\n\t */\n\tfunction registerToPool(address _worker) public returns (bool subscribed)\n\t// msg.sender = workerPool\n\t{\n\t\tWorkerPool workerpool = WorkerPool(msg.sender);\n\t\t// Check credentials\n\t\trequire(workerPoolHub.isWorkerPoolRegistered(msg.sender));\n\t\t// Lock worker deposit\n\t\trequire(lock(_worker, workerpool.m_subscriptionLockStakePolicy()));\n\t\t// Check subscription policy\n\t\trequire(m_accounts[_worker].stake >= workerpool.m_subscriptionMinimumStakePolicy());\n\t\trequire(m_scores[_worker] >= workerpool.m_subscriptionMinimumScorePolicy());\n\t\t// Update affectation\n\t\trequire(workerPoolHub.registerWorkerAffectation(msg.sender, _worker));\n\t\t// Trigger event notice\n\t\temit WorkerPoolSubscription(msg.sender, _worker);\n\t\treturn true;\n\t}\n\n\tfunction unregisterFromPool(address _worker) public returns (bool unsubscribed)\n\t// msg.sender = workerPool\n\t{\n\t\trequire(removeWorker(msg.sender, _worker));\n\t\t// Trigger event notice\n\t\temit WorkerPoolUnsubscription(msg.sender, _worker);\n\t\treturn true;\n\t}\n\n\tfunction evictWorker(address _worker) public returns (bool unsubscribed)\n\t// msg.sender = workerpool\n\t{\n\t\trequire(removeWorker(msg.sender, _worker));\n\t\t// Trigger event notice\n\t\temit WorkerPoolEviction(msg.sender, _worker);\n\t\treturn true;\n\t}\n\n\tfunction removeWorker(address _workerpool, address _worker) internal returns (bool unsubscribed)\n\t{\n\t\tWorkerPool workerpool = WorkerPool(_workerpool);\n\t\t// Check credentials\n\t\trequire(workerPoolHub.isWorkerPoolRegistered(_workerpool));\n\t\t// Unlick worker stake\n\t\trequire(unlock(_worker, workerpool.m_subscriptionLockStakePolicy()));\n\t\t// Update affectation\n\t\trequire(workerPoolHub.unregisterWorkerAffectation(_workerpool, _worker));\n\t\treturn true;\n\t}\n\n\t/**\n\t * Stake, reward and penalty functions\n\t */\n\t/* Marketplace */\n\tfunction lockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool)\n\t{\n\t\trequire(lock(_user, _amount));\n\t\treturn true;\n\t}\n\tfunction unlockForOrder(address _user, uint256 _amount) public onlyMarketplace returns (bool)\n\t{\n\t\trequire(unlock(_user, _amount));\n\t\treturn true;\n\t}\n\t/* Work */\n\tfunction lockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(lock(_user, _amount));\n\t\treturn true;\n\t}\n\tfunction unlockForWork(address _woid, address _user, uint256 _amount) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(unlock(_user, _amount));\n\t\treturn true;\n\t}\n\tfunction rewardForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(reward(_worker, _amount));\n\t\tif (_reputation)\n\t\t{\n\t\t\tm_contributionHistory.success = m_contributionHistory.success.add(1);\n\t\t\tm_scores[_worker] = m_scores[_worker].add(1);\n\t\t\temit AccurateContribution(_woid, _worker);\n\t\t}\n\t\treturn true;\n\t}\n\tfunction seizeForWork(address _woid, address _worker, uint256 _amount, bool _reputation) public onlyRegisteredWoid(_woid) returns (bool)\n\t{\n\t\trequire(WorkOrder(_woid).m_workerpool() == msg.sender);\n\t\trequire(seize(_worker, _amount));\n\t\tif (_reputation)\n\t\t{\n\t\t\tm_contributionHistory.failed = m_contributionHistory.failed.add(1);\n\t\t\tm_scores[_worker] = m_scores[_worker].sub(m_scores[_worker].min(SCORE_UNITARY_SLASH));\n\t\t\temit FaultyContribution(_woid, _worker);\n\t\t}\n\t\treturn true;\n\t}\n\t/**\n\t * Wallet methods: public\n\t */\n\tfunction deposit(uint256 _amount) external returns (bool)\n\t{\n\t\trequire(rlc.transferFrom(msg.sender, address(this), _amount));\n\t\tm_accounts[msg.sender].stake = m_accounts[msg.sender].stake.add(_amount);\n\t\temit Deposit(msg.sender, _amount);\n\t\treturn true;\n\t}\n\tfunction withdraw(uint256 _amount) external returns (bool)\n\t{\n\t\tm_accounts[msg.sender].stake = m_accounts[msg.sender].stake.sub(_amount);\n\t\trequire(rlc.transfer(msg.sender, _amount));\n\t\temit Withdraw(msg.sender, _amount);\n\t\treturn true;\n\t}\n\tfunction checkBalance(address _owner) public view returns (uint256 stake, uint256 locked)\n\t{\n\t\treturn (m_accounts[_owner].stake, m_accounts[_owner].locked);\n\t}\n\t/**\n\t * Wallet methods: Internal\n\t */\n\tfunction reward(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].stake = m_accounts[_user].stake.add(_amount);\n\t\temit Reward(_user, _amount);\n\t\treturn true;\n\t}\n\tfunction seize(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].locked = m_accounts[_user].locked.sub(_amount);\n\t\temit Seize(_user, _amount);\n\t\treturn true;\n\t}\n\tfunction lock(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].stake = m_accounts[_user].stake.sub(_amount);\n\t\tm_accounts[_user].locked = m_accounts[_user].locked.add(_amount);\n\t\treturn true;\n\t}\n\tfunction unlock(address _user, uint256 _amount) internal returns (bool)\n\t{\n\t\tm_accounts[_user].locked = m_accounts[_user].locked.sub(_amount);\n\t\tm_accounts[_user].stake = m_accounts[_user].stake.add(_amount);\n\t\treturn true;\n\t}\n}\n", "sourcePath": "/Users/fbranci/iexecdev/PoCo/contracts/IexecHub.sol", "ast": { "absolutePath": "/Users/fbranci/iexecdev/PoCo/contracts/IexecHub.sol", @@ -9151,7 +9151,7 @@ "body": { "id": 1475, "nodeType": "Block", - "src": "7401:1466:6", + "src": "7401:1465:6", "statements": [ { "assignments": [ @@ -10878,7 +10878,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1340, - "src": "8816:5:6", + "src": "8815:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10896,7 +10896,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1349, - "src": "8823:9:6", + "src": "8822:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -10910,7 +10910,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "8823:22:6", + "src": "8822:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -10924,7 +10924,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8823:24:6", + "src": "8822:24:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10947,7 +10947,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 826, - "src": "8799:16:6", + "src": "8798:16:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -10961,7 +10961,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8799:49:6", + "src": "8798:49:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -10969,7 +10969,7 @@ }, "id": 1472, "nodeType": "EmitStatement", - "src": "8794:54:6" + "src": "8793:54:6" }, { "expression": { @@ -10982,7 +10982,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8859:4:6", + "src": "8858:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -10993,7 +10993,7 @@ "functionReturnParameters": 1347, "id": 1474, "nodeType": "Return", - "src": "8852:11:6" + "src": "8851:11:6" } ] }, @@ -11107,7 +11107,7 @@ "src": "7393:6:6" }, "scope": 2436, - "src": "7306:1561:6", + "src": "7306:1560:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -11116,7 +11116,7 @@ "body": { "id": 1683, "nodeType": "Block", - "src": "9019:2281:6", + "src": "9018:2281:6", "statements": [ { "assignments": [ @@ -11129,7 +11129,7 @@ "name": "workorder", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9023:19:6", + "src": "9022:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11142,7 +11142,7 @@ "name": "WorkOrder", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 4299, - "src": "9023:9:6", + "src": "9022:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -11163,7 +11163,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1478, - "src": "9055:5:6", + "src": "9054:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11182,7 +11182,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "9045:9:6", + "src": "9044:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -11196,14 +11196,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9045:16:6", + "src": "9044:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" } }, "nodeType": "VariableDeclarationStatement", - "src": "9023:38:6" + "src": "9022:38:6" }, { "expression": { @@ -11232,7 +11232,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9073:9:6", + "src": "9072:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -11246,7 +11246,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "9073:22:6", + "src": "9072:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -11260,7 +11260,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9073:24:6", + "src": "9072:24:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11277,7 +11277,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "9101:3:6", + "src": "9100:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -11291,13 +11291,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9101:10:6", + "src": "9100:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "9073:38:6", + "src": "9072:38:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11316,7 +11316,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9065:7:6", + "src": "9064:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -11330,7 +11330,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9065:47:6", + "src": "9064:47:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -11338,7 +11338,7 @@ }, "id": 1506, "nodeType": "ExpressionStatement", - "src": "9065:47:6" + "src": "9064:47:6" }, { "expression": { @@ -11367,7 +11367,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9124:9:6", + "src": "9123:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -11381,7 +11381,7 @@ "memberName": "m_status", "nodeType": "MemberAccess", "referencedDeclaration": 4040, - "src": "9124:18:6", + "src": "9123:18:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_enum$_WorkOrderStatusEnum_$2832_$", "typeString": "function () view external returns (enum IexecLib.WorkOrderStatusEnum)" @@ -11395,7 +11395,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9124:20:6", + "src": "9123:20:6", "typeDescriptions": { "typeIdentifier": "t_enum$_WorkOrderStatusEnum_$2832", "typeString": "enum IexecLib.WorkOrderStatusEnum" @@ -11414,7 +11414,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2893, - "src": "9152:8:6", + "src": "9151:8:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_IexecLib_$2893_$", "typeString": "type(library IexecLib)" @@ -11428,7 +11428,7 @@ "memberName": "WorkOrderStatusEnum", "nodeType": "MemberAccess", "referencedDeclaration": 2832, - "src": "9152:28:6", + "src": "9151:28:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_WorkOrderStatusEnum_$2832_$", "typeString": "type(enum IexecLib.WorkOrderStatusEnum)" @@ -11442,13 +11442,13 @@ "memberName": "REVEALING", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9152:38:6", + "src": "9151:38:6", "typeDescriptions": { "typeIdentifier": "t_enum$_WorkOrderStatusEnum_$2832", "typeString": "enum IexecLib.WorkOrderStatusEnum" } }, - "src": "9124:66:6", + "src": "9123:66:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11467,7 +11467,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9116:7:6", + "src": "9115:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -11481,7 +11481,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9116:75:6", + "src": "9115:75:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -11489,7 +11489,7 @@ }, "id": 1516, "nodeType": "ExpressionStatement", - "src": "9116:75:6" + "src": "9115:75:6" }, { "assignments": [ @@ -11502,7 +11502,7 @@ "name": "app", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9205:11:6", + "src": "9204:11:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11515,7 +11515,7 @@ "name": "App", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 54, - "src": "9205:3:6", + "src": "9204:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" @@ -11541,7 +11541,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9228:9:6", + "src": "9227:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -11555,7 +11555,7 @@ "memberName": "m_app", "nodeType": "MemberAccess", "referencedDeclaration": 4044, - "src": "9228:15:6", + "src": "9227:15:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -11569,7 +11569,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9228:17:6", + "src": "9227:17:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11588,7 +11588,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 54, - "src": "9224:3:6", + "src": "9223:3:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_App_$54_$", "typeString": "type(contract App)" @@ -11602,14 +11602,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9224:22:6", + "src": "9223:22:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" } }, "nodeType": "VariableDeclarationStatement", - "src": "9205:41:6" + "src": "9204:41:6" }, { "assignments": [ @@ -11622,7 +11622,7 @@ "name": "appPrice", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9250:16:6", + "src": "9249:16:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11633,7 +11633,7 @@ "id": 1525, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9250:7:6", + "src": "9249:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11656,7 +11656,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1518, - "src": "9269:3:6", + "src": "9268:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" @@ -11670,7 +11670,7 @@ "memberName": "m_appPrice", "nodeType": "MemberAccess", "referencedDeclaration": 11, - "src": "9269:14:6", + "src": "9268:14:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -11684,14 +11684,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9269:16:6", + "src": "9268:16:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "9250:35:6" + "src": "9249:35:6" }, { "condition": { @@ -11712,7 +11712,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1526, - "src": "9293:8:6", + "src": "9292:8:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11730,7 +11730,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9304:1:6", + "src": "9303:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -11738,7 +11738,7 @@ }, "value": "0" }, - "src": "9293:12:6", + "src": "9292:12:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11747,11 +11747,11 @@ "falseBody": null, "id": 1544, "nodeType": "IfStatement", - "src": "9289:70:6", + "src": "9288:70:6", "trueBody": { "id": 1543, "nodeType": "Block", - "src": "9309:50:6", + "src": "9308:50:6", "statements": [ { "expression": { @@ -11772,7 +11772,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1518, - "src": "9329:3:6", + "src": "9328:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" @@ -11786,7 +11786,7 @@ "memberName": "m_owner", "nodeType": "MemberAccess", "referencedDeclaration": 3681, - "src": "9329:11:6", + "src": "9328:11:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -11800,7 +11800,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9329:13:6", + "src": "9328:13:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11813,7 +11813,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1526, - "src": "9344:8:6", + "src": "9343:8:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11836,7 +11836,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "9322:6:6", + "src": "9321:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -11850,7 +11850,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9322:31:6", + "src": "9321:31:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11869,7 +11869,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9314:7:6", + "src": "9313:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -11883,7 +11883,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9314:40:6", + "src": "9313:40:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -11891,7 +11891,7 @@ }, "id": 1542, "nodeType": "ExpressionStatement", - "src": "9314:40:6" + "src": "9313:40:6" } ] } @@ -11907,7 +11907,7 @@ "name": "dataset", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9376:15:6", + "src": "9375:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11920,7 +11920,7 @@ "name": "Dataset", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 279, - "src": "9376:7:6", + "src": "9375:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -11946,7 +11946,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9402:9:6", + "src": "9401:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -11960,7 +11960,7 @@ "memberName": "m_dataset", "nodeType": "MemberAccess", "referencedDeclaration": 4046, - "src": "9402:19:6", + "src": "9401:19:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -11974,7 +11974,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9402:21:6", + "src": "9401:21:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11993,7 +11993,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 279, - "src": "9394:7:6", + "src": "9393:7:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_Dataset_$279_$", "typeString": "type(contract Dataset)" @@ -12007,14 +12007,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9394:30:6", + "src": "9393:30:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" } }, "nodeType": "VariableDeclarationStatement", - "src": "9376:48:6" + "src": "9375:48:6" }, { "condition": { @@ -12035,7 +12035,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1546, - "src": "9432:7:6", + "src": "9431:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -12056,7 +12056,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9451:1:6", + "src": "9450:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -12078,7 +12078,7 @@ "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9443:7:6", + "src": "9442:7:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" @@ -12093,13 +12093,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9443:10:6", + "src": "9442:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "9432:21:6", + "src": "9431:21:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12108,11 +12108,11 @@ "falseBody": null, "id": 1579, "nodeType": "IfStatement", - "src": "9428:175:6", + "src": "9427:175:6", "trueBody": { "id": 1578, "nodeType": "Block", - "src": "9457:146:6", + "src": "9456:146:6", "statements": [ { "assignments": [ @@ -12125,7 +12125,7 @@ "name": "datasetPrice", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9462:20:6", + "src": "9461:20:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12136,7 +12136,7 @@ "id": 1558, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9462:7:6", + "src": "9461:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12159,7 +12159,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1546, - "src": "9485:7:6", + "src": "9484:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -12173,7 +12173,7 @@ "memberName": "m_datasetPrice", "nodeType": "MemberAccess", "referencedDeclaration": 236, - "src": "9485:22:6", + "src": "9484:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -12187,14 +12187,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9485:24:6", + "src": "9484:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "9462:47:6" + "src": "9461:47:6" }, { "condition": { @@ -12215,7 +12215,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1559, - "src": "9518:12:6", + "src": "9517:12:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12233,7 +12233,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9533:1:6", + "src": "9532:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -12241,7 +12241,7 @@ }, "value": "0" }, - "src": "9518:16:6", + "src": "9517:16:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12250,11 +12250,11 @@ "falseBody": null, "id": 1577, "nodeType": "IfStatement", - "src": "9514:85:6", + "src": "9513:85:6", "trueBody": { "id": 1576, "nodeType": "Block", - "src": "9539:60:6", + "src": "9538:60:6", "statements": [ { "expression": { @@ -12275,7 +12275,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1546, - "src": "9560:7:6", + "src": "9559:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -12289,7 +12289,7 @@ "memberName": "m_owner", "nodeType": "MemberAccess", "referencedDeclaration": 3681, - "src": "9560:15:6", + "src": "9559:15:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -12303,7 +12303,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9560:17:6", + "src": "9559:17:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12316,7 +12316,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1559, - "src": "9579:12:6", + "src": "9578:12:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12339,7 +12339,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "9553:6:6", + "src": "9552:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -12353,7 +12353,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9553:39:6", + "src": "9552:39:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12372,7 +12372,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9545:7:6", + "src": "9544:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -12386,7 +12386,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9545:48:6", + "src": "9544:48:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -12394,7 +12394,7 @@ }, "id": 1575, "nodeType": "ExpressionStatement", - "src": "9545:48:6" + "src": "9544:48:6" } ] } @@ -12411,7 +12411,7 @@ "name": "value", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "10072:13:6", + "src": "10071:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12422,7 +12422,7 @@ "id": 1580, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "10072:7:6", + "src": "10071:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12435,7 +12435,7 @@ "id": 1582, "initialValue": null, "nodeType": "VariableDeclarationStatement", - "src": "10072:13:6" + "src": "10071:13:6" }, { "assignments": [], @@ -12446,7 +12446,7 @@ "name": "workerpoolOwner", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "10089:23:6", + "src": "10088:23:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12457,7 +12457,7 @@ "id": 1583, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10089:7:6", + "src": "10088:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12470,7 +12470,7 @@ "id": 1585, "initialValue": null, "nodeType": "VariableDeclarationStatement", - "src": "10089:23:6" + "src": "10088:23:6" }, { "expression": { @@ -12493,7 +12493,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10120:5:6", + "src": "10119:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12509,7 +12509,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1584, - "src": "10129:15:6", + "src": "10128:15:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12523,7 +12523,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "TupleExpression", - "src": "10116:29:6", + "src": "10115:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$__$__$_t_uint256_$__$__$__$_t_address_$", "typeString": "tuple(,,,uint256,,,,address)" @@ -12546,7 +12546,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10175:9:6", + "src": "10174:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -12560,7 +12560,7 @@ "memberName": "m_marketorderIdx", "nodeType": "MemberAccess", "referencedDeclaration": 4042, - "src": "10175:26:6", + "src": "10174:26:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -12574,7 +12574,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10175:28:6", + "src": "10174:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12595,7 +12595,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 756, - "src": "10148:11:6", + "src": "10147:11:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Marketplace_$3513", "typeString": "contract Marketplace" @@ -12609,7 +12609,7 @@ "memberName": "getMarketOrder", "nodeType": "MemberAccess", "referencedDeclaration": 3372, - "src": "10148:26:6", + "src": "10147:26:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_enum$_MarketOrderDirectionEnum_$2809_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$", "typeString": "function (uint256) view external returns (enum IexecLib.MarketOrderDirectionEnum,uint256,uint256,uint256,uint256,uint256,address,address)" @@ -12623,13 +12623,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10148:56:6", + "src": "10147:56:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_enum$_MarketOrderDirectionEnum_$2809_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$", "typeString": "tuple(enum IexecLib.MarketOrderDirectionEnum,uint256,uint256,uint256,uint256,uint256,address,address)" } }, - "src": "10116:88:6", + "src": "10115:88:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -12637,7 +12637,7 @@ }, "id": 1596, "nodeType": "ExpressionStatement", - "src": "10116:88:6" + "src": "10115:88:6" }, { "assignments": [ @@ -12650,7 +12650,7 @@ "name": "workerpoolStake", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "10237:23:6", + "src": "10236:23:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12661,7 +12661,7 @@ "id": 1597, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "10237:7:6", + "src": "10236:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12687,7 +12687,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 756, - "src": "10286:11:6", + "src": "10285:11:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Marketplace_$3513", "typeString": "contract Marketplace" @@ -12701,7 +12701,7 @@ "memberName": "ASK_STAKE_RATIO", "nodeType": "MemberAccess", "referencedDeclaration": 2914, - "src": "10286:27:6", + "src": "10285:27:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -12715,7 +12715,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10286:29:6", + "src": "10285:29:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12736,7 +12736,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10269:5:6", + "src": "10268:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12750,7 +12750,7 @@ "memberName": "percentage", "nodeType": "MemberAccess", "referencedDeclaration": 3914, - "src": "10269:16:6", + "src": "10268:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -12764,14 +12764,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10269:47:6", + "src": "10268:47:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10237:79:6" + "src": "10236:79:6" }, { "expression": { @@ -12792,7 +12792,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10336:9:6", + "src": "10335:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -12806,7 +12806,7 @@ "memberName": "m_requester", "nodeType": "MemberAccess", "referencedDeclaration": 4050, - "src": "10336:21:6", + "src": "10335:21:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -12820,7 +12820,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10336:23:6", + "src": "10335:23:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12841,7 +12841,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10371:9:6", + "src": "10370:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -12855,7 +12855,7 @@ "memberName": "m_emitcost", "nodeType": "MemberAccess", "referencedDeclaration": 4052, - "src": "10371:20:6", + "src": "10370:20:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -12869,7 +12869,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10371:22:6", + "src": "10370:22:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12890,7 +12890,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10361:5:6", + "src": "10360:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12904,7 +12904,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "10361:9:6", + "src": "10360:9:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -12918,7 +12918,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10361:33:6", + "src": "10360:33:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12941,7 +12941,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2359, - "src": "10329:5:6", + "src": "10328:5:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -12955,7 +12955,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10329:66:6", + "src": "10328:66:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12974,7 +12974,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "10321:7:6", + "src": "10320:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -12988,7 +12988,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10321:75:6", + "src": "10320:75:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -12996,7 +12996,7 @@ }, "id": 1619, "nodeType": "ExpressionStatement", - "src": "10321:75:6" + "src": "10320:75:6" }, { "expression": { @@ -13012,7 +13012,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1584, - "src": "10468:15:6", + "src": "10467:15:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13025,7 +13025,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1598, - "src": "10493:15:6", + "src": "10492:15:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13048,7 +13048,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "10461:6:6", + "src": "10460:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -13062,7 +13062,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10461:48:6", + "src": "10460:48:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13081,7 +13081,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "10453:7:6", + "src": "10452:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -13095,7 +13095,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:57:6", + "src": "10452:57:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -13103,7 +13103,7 @@ }, "id": 1626, "nodeType": "ExpressionStatement", - "src": "10453:57:6" + "src": "10452:57:6" }, { "expression": { @@ -13116,7 +13116,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1480, - "src": "10580:7:6", + "src": "10579:7:6", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" @@ -13129,7 +13129,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1482, - "src": "10589:7:6", + "src": "10588:7:6", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" @@ -13142,7 +13142,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1484, - "src": "10598:4:6", + "src": "10597:4:6", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" @@ -13171,7 +13171,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10560:9:6", + "src": "10559:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -13185,7 +13185,7 @@ "memberName": "setResult", "nodeType": "MemberAccess", "referencedDeclaration": 4298, - "src": "10560:19:6", + "src": "10559:19:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory,string memory,string memory) external" @@ -13199,7 +13199,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10560:43:6", + "src": "10559:43:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -13207,7 +13207,7 @@ }, "id": 1634, "nodeType": "ExpressionStatement", - "src": "10560:43:6" + "src": "10559:43:6" }, { "expression": { @@ -13224,7 +13224,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10951:5:6", + "src": "10950:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13243,7 +13243,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "10959:10:6", + "src": "10958:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -13257,7 +13257,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7063, - "src": "10970:4:6", + "src": "10969:4:6", "typeDescriptions": { "typeIdentifier": "t_contract$_IexecHub_$2436", "typeString": "contract IexecHub" @@ -13268,7 +13268,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10959:16:6", + "src": "10958:16:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -13282,13 +13282,13 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "10959:23:6", + "src": "10958:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10951:31:6", + "src": "10950:31:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13296,7 +13296,7 @@ }, "id": 1641, "nodeType": "ExpressionStatement", - "src": "10951:31:6" + "src": "10950:31:6" }, { "condition": { @@ -13317,7 +13317,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11025:5:6", + "src": "11024:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13335,7 +13335,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11033:1:6", + "src": "11032:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -13343,7 +13343,7 @@ }, "value": "0" }, - "src": "11025:9:6", + "src": "11024:9:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13352,11 +13352,11 @@ "falseBody": null, "id": 1673, "nodeType": "IfStatement", - "src": "11022:199:6", + "src": "11021:199:6", "trueBody": { "id": 1672, "nodeType": "Block", - "src": "11038:183:6", + "src": "11037:183:6", "statements": [ { "expression": { @@ -13373,7 +13373,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11043:5:6", + "src": "11042:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13394,7 +13394,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 745, - "src": "11101:25:6", + "src": "11100:25:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13418,7 +13418,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 742, - "src": "11078:17:6", + "src": "11077:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13439,7 +13439,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11061:5:6", + "src": "11060:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13453,7 +13453,7 @@ "memberName": "percentage", "nodeType": "MemberAccess", "referencedDeclaration": 3914, - "src": "11061:16:6", + "src": "11060:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -13467,7 +13467,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11061:35:6", + "src": "11060:35:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13481,7 +13481,7 @@ "memberName": "max", "nodeType": "MemberAccess", "referencedDeclaration": 3861, - "src": "11061:39:6", + "src": "11060:39:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -13495,7 +13495,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11061:66:6", + "src": "11060:66:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13516,7 +13516,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11051:5:6", + "src": "11050:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13530,7 +13530,7 @@ "memberName": "min", "nodeType": "MemberAccess", "referencedDeclaration": 3878, - "src": "11051:9:6", + "src": "11050:9:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -13544,13 +13544,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11051:77:6", + "src": "11050:77:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11043:85:6", + "src": "11042:85:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13558,7 +13558,7 @@ }, "id": 1657, "nodeType": "ExpressionStatement", - "src": "11043:85:6" + "src": "11042:85:6" }, { "expression": { @@ -13574,7 +13574,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7063, - "src": "11147:4:6", + "src": "11146:4:6", "typeDescriptions": { "typeIdentifier": "t_contract$_IexecHub_$2436", "typeString": "contract IexecHub" @@ -13587,7 +13587,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11165:5:6", + "src": "11164:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13610,7 +13610,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2359, - "src": "11141:5:6", + "src": "11140:5:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -13624,7 +13624,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11141:30:6", + "src": "11140:30:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13643,7 +13643,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11133:7:6", + "src": "11132:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -13657,7 +13657,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11133:39:6", + "src": "11132:39:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -13665,7 +13665,7 @@ }, "id": 1664, "nodeType": "ExpressionStatement", - "src": "11133:39:6" + "src": "11132:39:6" }, { "expression": { @@ -13681,7 +13681,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1584, - "src": "11192:15:6", + "src": "11191:15:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13694,7 +13694,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11209:5:6", + "src": "11208:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13717,7 +13717,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "11185:6:6", + "src": "11184:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -13731,7 +13731,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11185:30:6", + "src": "11184:30:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13750,7 +13750,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11177:7:6", + "src": "11176:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -13764,7 +13764,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11177:39:6", + "src": "11176:39:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -13772,7 +13772,7 @@ }, "id": 1671, "nodeType": "ExpressionStatement", - "src": "11177:39:6" + "src": "11176:39:6" } ] } @@ -13788,7 +13788,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1478, - "src": "11249:5:6", + "src": "11248:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13806,7 +13806,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "11256:9:6", + "src": "11255:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -13820,7 +13820,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "11256:22:6", + "src": "11255:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -13834,7 +13834,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11256:24:6", + "src": "11255:24:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13857,7 +13857,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 832, - "src": "11230:18:6", + "src": "11229:18:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -13871,7 +13871,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11230:51:6", + "src": "11229:51:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -13879,7 +13879,7 @@ }, "id": 1680, "nodeType": "EmitStatement", - "src": "11225:56:6" + "src": "11224:56:6" }, { "expression": { @@ -13892,7 +13892,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11292:4:6", + "src": "11291:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -13903,7 +13903,7 @@ "functionReturnParameters": 1491, "id": 1682, "nodeType": "Return", - "src": "11285:11:6" + "src": "11284:11:6" } ] }, @@ -13922,7 +13922,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1478, - "src": "8996:5:6", + "src": "8995:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13937,14 +13937,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "8977:18:6", + "src": "8976:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "8977:25:6" + "src": "8976:25:6" } ], "name": "finalizeWorkOrder", @@ -13959,7 +13959,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8900:13:6", + "src": "8899:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13970,7 +13970,7 @@ "id": 1477, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8900:7:6", + "src": "8899:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13985,7 +13985,7 @@ "name": "_stdout", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8917:15:6", + "src": "8916:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13996,7 +13996,7 @@ "id": 1479, "name": "string", "nodeType": "ElementaryTypeName", - "src": "8917:6:6", + "src": "8916:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -14011,7 +14011,7 @@ "name": "_stderr", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8936:15:6", + "src": "8935:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14022,7 +14022,7 @@ "id": 1481, "name": "string", "nodeType": "ElementaryTypeName", - "src": "8936:6:6", + "src": "8935:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -14037,7 +14037,7 @@ "name": "_uri", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8955:12:6", + "src": "8954:12:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14048,7 +14048,7 @@ "id": 1483, "name": "string", "nodeType": "ElementaryTypeName", - "src": "8955:6:6", + "src": "8954:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -14058,7 +14058,7 @@ "visibility": "internal" } ], - "src": "8896:72:6" + "src": "8895:72:6" }, "payable": false, "returnParameters": { @@ -14071,7 +14071,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9012:4:6", + "src": "9011:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14082,7 +14082,7 @@ "id": 1489, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9012:4:6", + "src": "9011:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14092,10 +14092,10 @@ "visibility": "internal" } ], - "src": "9011:6:6" + "src": "9010:6:6" }, "scope": 2436, - "src": "8870:2430:6", + "src": "8869:2430:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -14104,7 +14104,7 @@ "body": { "id": 1702, "nodeType": "Block", - "src": "11424:89:6", + "src": "11423:89:6", "statements": [ { "expression": { @@ -14120,7 +14120,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1686, - "src": "11453:6:6", + "src": "11452:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14139,7 +14139,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1718, - "src": "11436:16:6", + "src": "11435:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" @@ -14153,7 +14153,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11436:24:6", + "src": "11435:24:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14172,7 +14172,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11428:7:6", + "src": "11427:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -14186,7 +14186,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11428:33:6", + "src": "11427:33:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -14194,7 +14194,7 @@ }, "id": 1696, "nodeType": "ExpressionStatement", - "src": "11428:33:6" + "src": "11427:33:6" }, { "expression": { @@ -14208,7 +14208,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11472:12:6", + "src": "11471:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -14222,7 +14222,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1686, - "src": "11485:6:6", + "src": "11484:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14233,7 +14233,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11472:20:6", + "src": "11471:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -14247,7 +14247,7 @@ "memberName": "workClockTimeRef", "nodeType": "MemberAccess", "referencedDeclaration": 2891, - "src": "11472:37:6", + "src": "11471:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14256,7 +14256,7 @@ "functionReturnParameters": 1690, "id": 1701, "nodeType": "Return", - "src": "11465:44:6" + "src": "11464:44:6" } ] }, @@ -14278,7 +14278,7 @@ "name": "_catId", "nodeType": "VariableDeclaration", "scope": 1703, - "src": "11360:14:6", + "src": "11359:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14289,7 +14289,7 @@ "id": 1685, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11360:7:6", + "src": "11359:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14299,7 +14299,7 @@ "visibility": "internal" } ], - "src": "11359:16:6" + "src": "11358:16:6" }, "payable": false, "returnParameters": { @@ -14312,7 +14312,7 @@ "name": "workClockTimeRef", "nodeType": "VariableDeclaration", "scope": 1703, - "src": "11397:24:6", + "src": "11396:24:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14323,7 +14323,7 @@ "id": 1688, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11397:7:6", + "src": "11396:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14333,10 +14333,10 @@ "visibility": "internal" } ], - "src": "11396:26:6" + "src": "11395:26:6" }, "scope": 2436, - "src": "11323:190:6", + "src": "11322:190:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -14345,7 +14345,7 @@ "body": { "id": 1717, "nodeType": "Block", - "src": "11601:45:6", + "src": "11600:45:6", "statements": [ { "expression": { @@ -14370,7 +14370,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11612:12:6", + "src": "11611:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -14384,7 +14384,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1705, - "src": "11625:6:6", + "src": "11624:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14395,7 +14395,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11612:20:6", + "src": "11611:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -14409,7 +14409,7 @@ "memberName": "catid", "nodeType": "MemberAccess", "referencedDeclaration": 2885, - "src": "11612:26:6", + "src": "11611:26:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14427,7 +14427,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11641:1:6", + "src": "11640:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -14435,7 +14435,7 @@ }, "value": "0" }, - "src": "11612:30:6", + "src": "11611:30:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14444,7 +14444,7 @@ "functionReturnParameters": 1709, "id": 1716, "nodeType": "Return", - "src": "11605:37:6" + "src": "11604:37:6" } ] }, @@ -14466,7 +14466,7 @@ "name": "_catId", "nodeType": "VariableDeclaration", "scope": 1718, - "src": "11542:14:6", + "src": "11541:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14477,7 +14477,7 @@ "id": 1704, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11542:7:6", + "src": "11541:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14487,7 +14487,7 @@ "visibility": "internal" } ], - "src": "11541:16:6" + "src": "11540:16:6" }, "payable": false, "returnParameters": { @@ -14500,7 +14500,7 @@ "name": "categoryExist", "nodeType": "VariableDeclaration", "scope": 1718, - "src": "11580:18:6", + "src": "11579:18:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14511,7 +14511,7 @@ "id": 1707, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11580:4:6", + "src": "11579:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14521,10 +14521,10 @@ "visibility": "internal" } ], - "src": "11579:20:6" + "src": "11578:20:6" }, "scope": 2436, - "src": "11516:130:6", + "src": "11515:130:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -14533,7 +14533,7 @@ "body": { "id": 1755, "nodeType": "Block", - "src": "11783:196:6", + "src": "11782:196:6", "statements": [ { "expression": { @@ -14549,7 +14549,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11812:6:6", + "src": "11811:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14568,7 +14568,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1718, - "src": "11795:16:6", + "src": "11794:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" @@ -14582,7 +14582,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11795:24:6", + "src": "11794:24:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14601,7 +14601,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11787:7:6", + "src": "11786:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -14615,7 +14615,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11787:33:6", + "src": "11786:33:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -14623,7 +14623,7 @@ }, "id": 1736, "nodeType": "ExpressionStatement", - "src": "11787:33:6" + "src": "11786:33:6" }, { "expression": { @@ -14640,7 +14640,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11836:12:6", + "src": "11835:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -14654,7 +14654,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11849:6:6", + "src": "11848:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14665,7 +14665,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11836:20:6", + "src": "11835:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -14679,7 +14679,7 @@ "memberName": "catid", "nodeType": "MemberAccess", "referencedDeclaration": 2885, - "src": "11836:26:6", + "src": "11835:26:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14696,7 +14696,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11867:12:6", + "src": "11866:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -14710,7 +14710,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11880:6:6", + "src": "11879:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14721,7 +14721,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11867:20:6", + "src": "11866:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -14735,7 +14735,7 @@ "memberName": "name", "nodeType": "MemberAccess", "referencedDeclaration": 2887, - "src": "11867:25:6", + "src": "11866:25:6", "typeDescriptions": { "typeIdentifier": "t_string_storage", "typeString": "string storage ref" @@ -14752,7 +14752,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11897:12:6", + "src": "11896:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -14766,7 +14766,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11910:6:6", + "src": "11909:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14777,7 +14777,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11897:20:6", + "src": "11896:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -14791,7 +14791,7 @@ "memberName": "description", "nodeType": "MemberAccess", "referencedDeclaration": 2889, - "src": "11897:32:6", + "src": "11896:32:6", "typeDescriptions": { "typeIdentifier": "t_string_storage", "typeString": "string storage ref" @@ -14808,7 +14808,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11934:12:6", + "src": "11933:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -14822,7 +14822,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11947:6:6", + "src": "11946:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14833,7 +14833,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11934:20:6", + "src": "11933:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -14847,7 +14847,7 @@ "memberName": "workClockTimeRef", "nodeType": "MemberAccess", "referencedDeclaration": 2891, - "src": "11934:37:6", + "src": "11933:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14861,7 +14861,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "11831:144:6", + "src": "11830:144:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint256_$_t_string_storage_$_t_string_storage_$_t_uint256_$", "typeString": "tuple(uint256,string storage ref,string storage ref,uint256)" @@ -14870,7 +14870,7 @@ "functionReturnParameters": 1730, "id": 1754, "nodeType": "Return", - "src": "11824:151:6" + "src": "11823:151:6" } ] }, @@ -14892,7 +14892,7 @@ "name": "_catId", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11670:14:6", + "src": "11669:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14903,7 +14903,7 @@ "id": 1719, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11670:7:6", + "src": "11669:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14913,7 +14913,7 @@ "visibility": "internal" } ], - "src": "11669:16:6" + "src": "11668:16:6" }, "payable": false, "returnParameters": { @@ -14926,7 +14926,7 @@ "name": "catid", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11707:13:6", + "src": "11706:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14937,7 +14937,7 @@ "id": 1722, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11707:7:6", + "src": "11706:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14952,7 +14952,7 @@ "name": "name", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11722:11:6", + "src": "11721:11:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14963,7 +14963,7 @@ "id": 1724, "name": "string", "nodeType": "ElementaryTypeName", - "src": "11722:6:6", + "src": "11721:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -14978,7 +14978,7 @@ "name": "description", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11735:19:6", + "src": "11734:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14989,7 +14989,7 @@ "id": 1726, "name": "string", "nodeType": "ElementaryTypeName", - "src": "11735:6:6", + "src": "11734:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -15004,7 +15004,7 @@ "name": "workClockTimeRef", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11756:24:6", + "src": "11755:24:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15015,7 +15015,7 @@ "id": 1728, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11756:7:6", + "src": "11755:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15025,10 +15025,10 @@ "visibility": "internal" } ], - "src": "11706:75:6" + "src": "11705:75:6" }, "scope": 2436, - "src": "11649:330:6", + "src": "11648:330:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -15037,7 +15037,7 @@ "body": { "id": 1774, "nodeType": "Block", - "src": "12087:79:6", + "src": "12086:79:6", "statements": [ { "expression": { @@ -15053,7 +15053,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1758, - "src": "12134:7:6", + "src": "12133:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15074,7 +15074,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "12099:13:6", + "src": "12098:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -15088,7 +15088,7 @@ "memberName": "getWorkerAffectation", "nodeType": "MemberAccess", "referencedDeclaration": 6199, - "src": "12099:34:6", + "src": "12098:34:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", "typeString": "function (address) view external returns (address)" @@ -15102,7 +15102,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12099:43:6", + "src": "12098:43:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15117,7 +15117,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "12144:8:6", + "src": "12143:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -15131,7 +15131,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1758, - "src": "12153:7:6", + "src": "12152:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15142,7 +15142,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12144:17:6", + "src": "12143:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15156,7 +15156,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "12098:64:6", + "src": "12097:64:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$", "typeString": "tuple(address,uint256)" @@ -15165,7 +15165,7 @@ "functionReturnParameters": 1764, "id": 1773, "nodeType": "Return", - "src": "12091:71:6" + "src": "12090:71:6" } ] }, @@ -15187,7 +15187,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1775, - "src": "12007:15:6", + "src": "12006:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15198,7 +15198,7 @@ "id": 1757, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12007:7:6", + "src": "12006:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15208,7 +15208,7 @@ "visibility": "internal" } ], - "src": "12006:17:6" + "src": "12005:17:6" }, "payable": false, "returnParameters": { @@ -15221,7 +15221,7 @@ "name": "workerPool", "nodeType": "VariableDeclaration", "scope": 1775, - "src": "12045:18:6", + "src": "12044:18:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15232,7 +15232,7 @@ "id": 1760, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12045:7:6", + "src": "12044:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15247,7 +15247,7 @@ "name": "workerScore", "nodeType": "VariableDeclaration", "scope": 1775, - "src": "12065:19:6", + "src": "12064:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15258,7 +15258,7 @@ "id": 1762, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "12065:7:6", + "src": "12064:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15268,10 +15268,10 @@ "visibility": "internal" } ], - "src": "12044:41:6" + "src": "12043:41:6" }, "scope": 2436, - "src": "11982:184:6", + "src": "11981:184:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -15280,7 +15280,7 @@ "body": { "id": 1786, "nodeType": "Block", - "src": "12253:32:6", + "src": "12252:32:6", "statements": [ { "expression": { @@ -15292,7 +15292,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "12264:8:6", + "src": "12263:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -15306,7 +15306,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1777, - "src": "12273:7:6", + "src": "12272:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15317,7 +15317,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12264:17:6", + "src": "12263:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15326,7 +15326,7 @@ "functionReturnParameters": 1781, "id": 1785, "nodeType": "Return", - "src": "12257:24:6" + "src": "12256:24:6" } ] }, @@ -15348,7 +15348,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1787, - "src": "12193:15:6", + "src": "12192:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15359,7 +15359,7 @@ "id": 1776, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12193:7:6", + "src": "12192:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15369,7 +15369,7 @@ "visibility": "internal" } ], - "src": "12192:17:6" + "src": "12191:17:6" }, "payable": false, "returnParameters": { @@ -15382,7 +15382,7 @@ "name": "workerScore", "nodeType": "VariableDeclaration", "scope": 1787, - "src": "12231:19:6", + "src": "12230:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15393,7 +15393,7 @@ "id": 1779, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "12231:7:6", + "src": "12230:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15403,10 +15403,10 @@ "visibility": "internal" } ], - "src": "12230:21:6" + "src": "12229:21:6" }, "scope": 2436, - "src": "12169:116:6", + "src": "12168:116:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -15415,7 +15415,7 @@ "body": { "id": 1856, "nodeType": "Block", - "src": "12425:628:6", + "src": "12424:628:6", "statements": [ { "assignments": [ @@ -15428,7 +15428,7 @@ "name": "workerpool", "nodeType": "VariableDeclaration", "scope": 1857, - "src": "12429:21:6", + "src": "12428:21:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15441,7 +15441,7 @@ "name": "WorkerPool", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 6097, - "src": "12429:10:6", + "src": "12428:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -15464,7 +15464,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "12464:3:6", + "src": "12463:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -15478,7 +15478,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12464:10:6", + "src": "12463:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15497,7 +15497,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6097, - "src": "12453:10:6", + "src": "12452:10:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkerPool_$6097_$", "typeString": "type(contract WorkerPool)" @@ -15511,14 +15511,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12453:22:6", + "src": "12452:22:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" } }, "nodeType": "VariableDeclarationStatement", - "src": "12429:46:6" + "src": "12428:46:6" }, { "expression": { @@ -15536,7 +15536,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "12547:3:6", + "src": "12546:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -15550,7 +15550,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12547:10:6", + "src": "12546:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15571,7 +15571,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "12510:13:6", + "src": "12509:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -15585,7 +15585,7 @@ "memberName": "isWorkerPoolRegistered", "nodeType": "MemberAccess", "referencedDeclaration": 6147, - "src": "12510:36:6", + "src": "12509:36:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", "typeString": "function (address) view external returns (bool)" @@ -15599,7 +15599,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12510:48:6", + "src": "12509:48:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15618,7 +15618,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12502:7:6", + "src": "12501:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -15632,7 +15632,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12502:57:6", + "src": "12501:57:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -15640,7 +15640,7 @@ }, "id": 1808, "nodeType": "ExpressionStatement", - "src": "12502:57:6" + "src": "12501:57:6" }, { "expression": { @@ -15656,7 +15656,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12601:7:6", + "src": "12600:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15674,7 +15674,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1795, - "src": "12610:10:6", + "src": "12609:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -15688,7 +15688,7 @@ "memberName": "m_subscriptionLockStakePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4326, - "src": "12610:40:6", + "src": "12609:40:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -15702,7 +15702,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12610:42:6", + "src": "12609:42:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15725,7 +15725,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2397, - "src": "12596:4:6", + "src": "12595:4:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -15739,7 +15739,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12596:57:6", + "src": "12595:57:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15758,7 +15758,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12588:7:6", + "src": "12587:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -15772,7 +15772,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12588:66:6", + "src": "12587:66:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -15780,7 +15780,7 @@ }, "id": 1817, "nodeType": "ExpressionStatement", - "src": "12588:66:6" + "src": "12587:66:6" }, { "expression": { @@ -15808,7 +15808,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "12697:10:6", + "src": "12696:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -15822,7 +15822,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12708:7:6", + "src": "12707:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15833,7 +15833,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12697:19:6", + "src": "12696:19:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -15847,7 +15847,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "12697:25:6", + "src": "12696:25:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15867,7 +15867,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1795, - "src": "12726:10:6", + "src": "12725:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -15881,7 +15881,7 @@ "memberName": "m_subscriptionMinimumStakePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4328, - "src": "12726:43:6", + "src": "12725:43:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -15895,13 +15895,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12726:45:6", + "src": "12725:45:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12697:74:6", + "src": "12696:74:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15920,7 +15920,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12689:7:6", + "src": "12688:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -15934,7 +15934,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12689:83:6", + "src": "12688:83:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -15942,7 +15942,7 @@ }, "id": 1828, "nodeType": "ExpressionStatement", - "src": "12689:83:6" + "src": "12688:83:6" }, { "expression": { @@ -15968,7 +15968,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "12784:8:6", + "src": "12783:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -15982,7 +15982,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12793:7:6", + "src": "12792:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15993,7 +15993,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12784:17:6", + "src": "12783:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16013,7 +16013,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1795, - "src": "12813:10:6", + "src": "12812:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -16027,7 +16027,7 @@ "memberName": "m_subscriptionMinimumScorePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4330, - "src": "12813:43:6", + "src": "12812:43:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -16041,13 +16041,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12813:45:6", + "src": "12812:45:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12784:74:6", + "src": "12783:74:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16066,7 +16066,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12776:7:6", + "src": "12775:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -16080,7 +16080,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12776:83:6", + "src": "12775:83:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -16088,7 +16088,7 @@ }, "id": 1838, "nodeType": "ExpressionStatement", - "src": "12776:83:6" + "src": "12775:83:6" }, { "expression": { @@ -16106,7 +16106,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "12935:3:6", + "src": "12934:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -16120,7 +16120,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12935:10:6", + "src": "12934:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16133,7 +16133,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12947:7:6", + "src": "12946:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16158,7 +16158,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "12895:13:6", + "src": "12894:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -16172,7 +16172,7 @@ "memberName": "registerWorkerAffectation", "nodeType": "MemberAccess", "referencedDeclaration": 6318, - "src": "12895:39:6", + "src": "12894:39:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) external returns (bool)" @@ -16186,7 +16186,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12895:60:6", + "src": "12894:60:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16205,7 +16205,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12887:7:6", + "src": "12886:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -16219,7 +16219,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12887:69:6", + "src": "12886:69:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -16227,7 +16227,7 @@ }, "id": 1847, "nodeType": "ExpressionStatement", - "src": "12887:69:6" + "src": "12886:69:6" }, { "eventCall": { @@ -16242,7 +16242,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13014:3:6", + "src": "13013:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -16256,7 +16256,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13014:10:6", + "src": "13013:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16269,7 +16269,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "13026:7:6", + "src": "13025:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16292,7 +16292,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 880, - "src": "12991:22:6", + "src": "12990:22:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -16306,7 +16306,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12991:43:6", + "src": "12990:43:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -16314,7 +16314,7 @@ }, "id": 1853, "nodeType": "EmitStatement", - "src": "12986:48:6" + "src": "12985:48:6" }, { "expression": { @@ -16327,7 +16327,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13045:4:6", + "src": "13044:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -16338,7 +16338,7 @@ "functionReturnParameters": 1793, "id": 1855, "nodeType": "Return", - "src": "13038:11:6" + "src": "13037:11:6" } ] }, @@ -16360,7 +16360,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1857, - "src": "12346:15:6", + "src": "12345:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16371,7 +16371,7 @@ "id": 1788, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12346:7:6", + "src": "12345:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16381,7 +16381,7 @@ "visibility": "internal" } ], - "src": "12345:17:6" + "src": "12344:17:6" }, "payable": false, "returnParameters": { @@ -16394,7 +16394,7 @@ "name": "subscribed", "nodeType": "VariableDeclaration", "scope": 1857, - "src": "12379:15:6", + "src": "12378:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16405,7 +16405,7 @@ "id": 1791, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "12379:4:6", + "src": "12378:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16415,10 +16415,10 @@ "visibility": "internal" } ], - "src": "12378:17:6" + "src": "12377:17:6" }, "scope": 2436, - "src": "12322:731:6", + "src": "12321:731:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -16427,7 +16427,7 @@ "body": { "id": 1880, "nodeType": "Block", - "src": "13165:145:6", + "src": "13164:145:6", "statements": [ { "expression": { @@ -16445,7 +16445,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13190:3:6", + "src": "13189:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -16459,7 +16459,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13190:10:6", + "src": "13189:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16472,7 +16472,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1859, - "src": "13202:7:6", + "src": "13201:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16495,7 +16495,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1947, - "src": "13177:12:6", + "src": "13176:12:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) returns (bool)" @@ -16509,7 +16509,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13177:33:6", + "src": "13176:33:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16528,7 +16528,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13169:7:6", + "src": "13168:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -16542,7 +16542,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13169:42:6", + "src": "13168:42:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -16550,7 +16550,7 @@ }, "id": 1871, "nodeType": "ExpressionStatement", - "src": "13169:42:6" + "src": "13168:42:6" }, { "eventCall": { @@ -16565,7 +16565,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13271:3:6", + "src": "13270:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -16579,7 +16579,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13271:10:6", + "src": "13270:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16592,7 +16592,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1859, - "src": "13283:7:6", + "src": "13282:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16615,7 +16615,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 886, - "src": "13246:24:6", + "src": "13245:24:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -16629,7 +16629,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13246:45:6", + "src": "13245:45:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -16637,7 +16637,7 @@ }, "id": 1877, "nodeType": "EmitStatement", - "src": "13241:50:6" + "src": "13240:50:6" }, { "expression": { @@ -16650,7 +16650,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13302:4:6", + "src": "13301:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -16661,7 +16661,7 @@ "functionReturnParameters": 1863, "id": 1879, "nodeType": "Return", - "src": "13295:11:6" + "src": "13294:11:6" } ] }, @@ -16683,7 +16683,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1881, - "src": "13084:15:6", + "src": "13083:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16694,7 +16694,7 @@ "id": 1858, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13084:7:6", + "src": "13083:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16704,7 +16704,7 @@ "visibility": "internal" } ], - "src": "13083:17:6" + "src": "13082:17:6" }, "payable": false, "returnParameters": { @@ -16717,7 +16717,7 @@ "name": "unsubscribed", "nodeType": "VariableDeclaration", "scope": 1881, - "src": "13117:17:6", + "src": "13116:17:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16728,7 +16728,7 @@ "id": 1861, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13117:4:6", + "src": "13116:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16738,10 +16738,10 @@ "visibility": "internal" } ], - "src": "13116:19:6" + "src": "13115:19:6" }, "scope": 2436, - "src": "13056:254:6", + "src": "13055:254:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -16750,7 +16750,7 @@ "body": { "id": 1904, "nodeType": "Block", - "src": "13415:139:6", + "src": "13414:139:6", "statements": [ { "expression": { @@ -16768,7 +16768,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13440:3:6", + "src": "13439:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -16782,7 +16782,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13440:10:6", + "src": "13439:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16795,7 +16795,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1883, - "src": "13452:7:6", + "src": "13451:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16818,7 +16818,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1947, - "src": "13427:12:6", + "src": "13426:12:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) returns (bool)" @@ -16832,7 +16832,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13427:33:6", + "src": "13426:33:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16851,7 +16851,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13419:7:6", + "src": "13418:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -16865,7 +16865,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13419:42:6", + "src": "13418:42:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -16873,7 +16873,7 @@ }, "id": 1895, "nodeType": "ExpressionStatement", - "src": "13419:42:6" + "src": "13418:42:6" }, { "eventCall": { @@ -16888,7 +16888,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13515:3:6", + "src": "13514:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -16902,7 +16902,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13515:10:6", + "src": "13514:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16915,7 +16915,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1883, - "src": "13527:7:6", + "src": "13526:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16938,7 +16938,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 892, - "src": "13496:18:6", + "src": "13495:18:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -16952,7 +16952,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13496:39:6", + "src": "13495:39:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -16960,7 +16960,7 @@ }, "id": 1901, "nodeType": "EmitStatement", - "src": "13491:44:6" + "src": "13490:44:6" }, { "expression": { @@ -16973,7 +16973,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13546:4:6", + "src": "13545:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -16984,7 +16984,7 @@ "functionReturnParameters": 1887, "id": 1903, "nodeType": "Return", - "src": "13539:11:6" + "src": "13538:11:6" } ] }, @@ -17006,7 +17006,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1905, - "src": "13334:15:6", + "src": "13333:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17017,7 +17017,7 @@ "id": 1882, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13334:7:6", + "src": "13333:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17027,7 +17027,7 @@ "visibility": "internal" } ], - "src": "13333:17:6" + "src": "13332:17:6" }, "payable": false, "returnParameters": { @@ -17040,7 +17040,7 @@ "name": "unsubscribed", "nodeType": "VariableDeclaration", "scope": 1905, - "src": "13367:17:6", + "src": "13366:17:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17051,7 +17051,7 @@ "id": 1885, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13367:4:6", + "src": "13366:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17061,10 +17061,10 @@ "visibility": "internal" } ], - "src": "13366:19:6" + "src": "13365:19:6" }, "scope": 2436, - "src": "13313:241:6", + "src": "13312:241:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -17073,7 +17073,7 @@ "body": { "id": 1946, "nodeType": "Block", - "src": "13655:352:6", + "src": "13654:352:6", "statements": [ { "assignments": [ @@ -17086,7 +17086,7 @@ "name": "workerpool", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13659:21:6", + "src": "13658:21:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17099,7 +17099,7 @@ "name": "WorkerPool", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 6097, - "src": "13659:10:6", + "src": "13658:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -17120,7 +17120,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1907, - "src": "13694:11:6", + "src": "13693:11:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17139,7 +17139,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6097, - "src": "13683:10:6", + "src": "13682:10:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkerPool_$6097_$", "typeString": "type(contract WorkerPool)" @@ -17153,14 +17153,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13683:23:6", + "src": "13682:23:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" } }, "nodeType": "VariableDeclarationStatement", - "src": "13659:47:6" + "src": "13658:47:6" }, { "expression": { @@ -17176,7 +17176,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1907, - "src": "13778:11:6", + "src": "13777:11:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17197,7 +17197,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "13741:13:6", + "src": "13740:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -17211,7 +17211,7 @@ "memberName": "isWorkerPoolRegistered", "nodeType": "MemberAccess", "referencedDeclaration": 6147, - "src": "13741:36:6", + "src": "13740:36:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", "typeString": "function (address) view external returns (bool)" @@ -17225,7 +17225,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13741:49:6", + "src": "13740:49:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17244,7 +17244,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13733:7:6", + "src": "13732:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -17258,7 +17258,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13733:58:6", + "src": "13732:58:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -17266,7 +17266,7 @@ }, "id": 1926, "nodeType": "ExpressionStatement", - "src": "13733:58:6" + "src": "13732:58:6" }, { "expression": { @@ -17282,7 +17282,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1909, - "src": "13835:7:6", + "src": "13834:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17300,7 +17300,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1915, - "src": "13844:10:6", + "src": "13843:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -17314,7 +17314,7 @@ "memberName": "m_subscriptionLockStakePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4326, - "src": "13844:40:6", + "src": "13843:40:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -17328,7 +17328,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13844:42:6", + "src": "13843:42:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17351,7 +17351,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "13828:6:6", + "src": "13827:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -17365,7 +17365,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13828:59:6", + "src": "13827:59:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17384,7 +17384,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13820:7:6", + "src": "13819:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -17398,7 +17398,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13820:68:6", + "src": "13819:68:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -17406,7 +17406,7 @@ }, "id": 1935, "nodeType": "ExpressionStatement", - "src": "13820:68:6" + "src": "13819:68:6" }, { "expression": { @@ -17422,7 +17422,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1907, - "src": "13966:11:6", + "src": "13965:11:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17435,7 +17435,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1909, - "src": "13979:7:6", + "src": "13978:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17460,7 +17460,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "13924:13:6", + "src": "13923:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -17474,7 +17474,7 @@ "memberName": "unregisterWorkerAffectation", "nodeType": "MemberAccess", "referencedDeclaration": 6348, - "src": "13924:41:6", + "src": "13923:41:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) external returns (bool)" @@ -17488,7 +17488,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13924:63:6", + "src": "13923:63:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17507,7 +17507,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13916:7:6", + "src": "13915:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -17521,7 +17521,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13916:72:6", + "src": "13915:72:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -17529,7 +17529,7 @@ }, "id": 1943, "nodeType": "ExpressionStatement", - "src": "13916:72:6" + "src": "13915:72:6" }, { "expression": { @@ -17542,7 +17542,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13999:4:6", + "src": "13998:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -17553,7 +17553,7 @@ "functionReturnParameters": 1913, "id": 1945, "nodeType": "Return", - "src": "13992:11:6" + "src": "13991:11:6" } ] }, @@ -17575,7 +17575,7 @@ "name": "_workerpool", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13579:19:6", + "src": "13578:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17586,7 +17586,7 @@ "id": 1906, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13579:7:6", + "src": "13578:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17601,7 +17601,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13600:15:6", + "src": "13599:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17612,7 +17612,7 @@ "id": 1908, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13600:7:6", + "src": "13599:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17622,7 +17622,7 @@ "visibility": "internal" } ], - "src": "13578:38:6" + "src": "13577:38:6" }, "payable": false, "returnParameters": { @@ -17635,7 +17635,7 @@ "name": "unsubscribed", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13635:17:6", + "src": "13634:17:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17646,7 +17646,7 @@ "id": 1911, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13635:4:6", + "src": "13634:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17656,10 +17656,10 @@ "visibility": "internal" } ], - "src": "13634:19:6" + "src": "13633:19:6" }, "scope": 2436, - "src": "13557:450:6", + "src": "13556:450:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -17668,7 +17668,7 @@ "body": { "id": 1967, "nodeType": "Block", - "src": "14172:52:6", + "src": "14171:52:6", "statements": [ { "expression": { @@ -17684,7 +17684,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1949, - "src": "14189:5:6", + "src": "14188:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17697,7 +17697,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1951, - "src": "14196:7:6", + "src": "14195:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17720,7 +17720,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2397, - "src": "14184:4:6", + "src": "14183:4:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -17734,7 +17734,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14184:20:6", + "src": "14183:20:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17753,7 +17753,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14176:7:6", + "src": "14175:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -17767,7 +17767,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14176:29:6", + "src": "14175:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -17775,7 +17775,7 @@ }, "id": 1964, "nodeType": "ExpressionStatement", - "src": "14176:29:6" + "src": "14175:29:6" }, { "expression": { @@ -17788,7 +17788,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14216:4:6", + "src": "14215:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -17799,7 +17799,7 @@ "functionReturnParameters": 1957, "id": 1966, "nodeType": "Return", - "src": "14209:11:6" + "src": "14208:11:6" } ] }, @@ -17819,14 +17819,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 769, - "src": "14140:15:6", + "src": "14139:15:6", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "14140:15:6" + "src": "14139:15:6" } ], "name": "lockForOrder", @@ -17841,7 +17841,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 1968, - "src": "14101:13:6", + "src": "14100:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17852,7 +17852,7 @@ "id": 1948, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14101:7:6", + "src": "14100:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17867,7 +17867,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 1968, - "src": "14116:15:6", + "src": "14115:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17878,7 +17878,7 @@ "id": 1950, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14116:7:6", + "src": "14115:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17888,7 +17888,7 @@ "visibility": "internal" } ], - "src": "14100:32:6" + "src": "14099:32:6" }, "payable": false, "returnParameters": { @@ -17901,7 +17901,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 1968, - "src": "14165:4:6", + "src": "14164:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17912,7 +17912,7 @@ "id": 1955, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14165:4:6", + "src": "14164:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17922,10 +17922,10 @@ "visibility": "internal" } ], - "src": "14164:6:6" + "src": "14163:6:6" }, "scope": 2436, - "src": "14079:145:6", + "src": "14078:145:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -17934,7 +17934,7 @@ "body": { "id": 1988, "nodeType": "Block", - "src": "14322:54:6", + "src": "14321:54:6", "statements": [ { "expression": { @@ -17950,7 +17950,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1970, - "src": "14341:5:6", + "src": "14340:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17963,7 +17963,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1972, - "src": "14348:7:6", + "src": "14347:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17986,7 +17986,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "14334:6:6", + "src": "14333:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -18000,7 +18000,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14334:22:6", + "src": "14333:22:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -18019,7 +18019,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14326:7:6", + "src": "14325:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -18033,7 +18033,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14326:31:6", + "src": "14325:31:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -18041,7 +18041,7 @@ }, "id": 1985, "nodeType": "ExpressionStatement", - "src": "14326:31:6" + "src": "14325:31:6" }, { "expression": { @@ -18054,7 +18054,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14368:4:6", + "src": "14367:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -18065,7 +18065,7 @@ "functionReturnParameters": 1978, "id": 1987, "nodeType": "Return", - "src": "14361:11:6" + "src": "14360:11:6" } ] }, @@ -18085,14 +18085,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 769, - "src": "14290:15:6", + "src": "14289:15:6", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "14290:15:6" + "src": "14289:15:6" } ], "name": "unlockForOrder", @@ -18107,7 +18107,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 1989, - "src": "14250:13:6", + "src": "14249:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18118,7 +18118,7 @@ "id": 1969, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14250:7:6", + "src": "14249:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18133,7 +18133,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 1989, - "src": "14265:15:6", + "src": "14264:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18144,7 +18144,7 @@ "id": 1971, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14265:7:6", + "src": "14264:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18154,7 +18154,7 @@ "visibility": "internal" } ], - "src": "14249:32:6" + "src": "14248:32:6" }, "payable": false, "returnParameters": { @@ -18167,7 +18167,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 1989, - "src": "14315:4:6", + "src": "14314:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18178,7 +18178,7 @@ "id": 1976, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14315:4:6", + "src": "14314:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -18188,10 +18188,10 @@ "visibility": "internal" } ], - "src": "14314:6:6" + "src": "14313:6:6" }, "scope": 2436, - "src": "14226:150:6", + "src": "14225:150:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -18200,7 +18200,7 @@ "body": { "id": 2023, "nodeType": "Block", - "src": "14507:110:6", + "src": "14506:110:6", "statements": [ { "expression": { @@ -18232,7 +18232,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1991, - "src": "14529:5:6", + "src": "14528:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18251,7 +18251,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "14519:9:6", + "src": "14518:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -18265,7 +18265,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14519:16:6", + "src": "14518:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -18279,7 +18279,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "14519:29:6", + "src": "14518:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -18293,7 +18293,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14519:31:6", + "src": "14518:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18310,7 +18310,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "14554:3:6", + "src": "14553:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -18324,13 +18324,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "14554:10:6", + "src": "14553:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "14519:45:6", + "src": "14518:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -18349,7 +18349,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14511:7:6", + "src": "14510:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -18363,7 +18363,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14511:54:6", + "src": "14510:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -18371,7 +18371,7 @@ }, "id": 2013, "nodeType": "ExpressionStatement", - "src": "14511:54:6" + "src": "14510:54:6" }, { "expression": { @@ -18387,7 +18387,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1993, - "src": "14582:5:6", + "src": "14581:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18400,7 +18400,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1995, - "src": "14589:7:6", + "src": "14588:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18423,7 +18423,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2397, - "src": "14577:4:6", + "src": "14576:4:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -18437,7 +18437,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14577:20:6", + "src": "14576:20:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -18456,7 +18456,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14569:7:6", + "src": "14568:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -18470,7 +18470,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14569:29:6", + "src": "14568:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -18478,7 +18478,7 @@ }, "id": 2020, "nodeType": "ExpressionStatement", - "src": "14569:29:6" + "src": "14568:29:6" }, { "expression": { @@ -18491,7 +18491,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14609:4:6", + "src": "14608:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -18502,7 +18502,7 @@ "functionReturnParameters": 2002, "id": 2022, "nodeType": "Return", - "src": "14602:11:6" + "src": "14601:11:6" } ] }, @@ -18521,7 +18521,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1991, - "src": "14484:5:6", + "src": "14483:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18536,14 +18536,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "14465:18:6", + "src": "14464:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "14465:25:6" + "src": "14464:25:6" } ], "name": "lockForWork", @@ -18558,7 +18558,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14411:13:6", + "src": "14410:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18569,7 +18569,7 @@ "id": 1990, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14411:7:6", + "src": "14410:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18584,7 +18584,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14426:13:6", + "src": "14425:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18595,7 +18595,7 @@ "id": 1992, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14426:7:6", + "src": "14425:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18610,7 +18610,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14441:15:6", + "src": "14440:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18621,7 +18621,7 @@ "id": 1994, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14441:7:6", + "src": "14440:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18631,7 +18631,7 @@ "visibility": "internal" } ], - "src": "14410:47:6" + "src": "14409:47:6" }, "payable": false, "returnParameters": { @@ -18644,7 +18644,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14500:4:6", + "src": "14499:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18655,7 +18655,7 @@ "id": 2000, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14500:4:6", + "src": "14499:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -18665,10 +18665,10 @@ "visibility": "internal" } ], - "src": "14499:6:6" + "src": "14498:6:6" }, "scope": 2436, - "src": "14390:227:6", + "src": "14389:227:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -18677,7 +18677,7 @@ "body": { "id": 2058, "nodeType": "Block", - "src": "14738:112:6", + "src": "14737:112:6", "statements": [ { "expression": { @@ -18709,7 +18709,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2026, - "src": "14760:5:6", + "src": "14759:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18728,7 +18728,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "14750:9:6", + "src": "14749:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -18742,7 +18742,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14750:16:6", + "src": "14749:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -18756,7 +18756,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "14750:29:6", + "src": "14749:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -18770,7 +18770,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14750:31:6", + "src": "14749:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18787,7 +18787,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "14785:3:6", + "src": "14784:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -18801,13 +18801,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "14785:10:6", + "src": "14784:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "14750:45:6", + "src": "14749:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -18826,7 +18826,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14742:7:6", + "src": "14741:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -18840,7 +18840,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14742:54:6", + "src": "14741:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -18848,7 +18848,7 @@ }, "id": 2048, "nodeType": "ExpressionStatement", - "src": "14742:54:6" + "src": "14741:54:6" }, { "expression": { @@ -18864,7 +18864,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2028, - "src": "14815:5:6", + "src": "14814:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18877,7 +18877,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2030, - "src": "14822:7:6", + "src": "14821:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18900,7 +18900,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "14808:6:6", + "src": "14807:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -18914,7 +18914,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14808:22:6", + "src": "14807:22:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -18933,7 +18933,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14800:7:6", + "src": "14799:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -18947,7 +18947,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14800:31:6", + "src": "14799:31:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -18955,7 +18955,7 @@ }, "id": 2055, "nodeType": "ExpressionStatement", - "src": "14800:31:6" + "src": "14799:31:6" }, { "expression": { @@ -18968,7 +18968,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14842:4:6", + "src": "14841:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -18979,7 +18979,7 @@ "functionReturnParameters": 2037, "id": 2057, "nodeType": "Return", - "src": "14835:11:6" + "src": "14834:11:6" } ] }, @@ -18998,7 +18998,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2026, - "src": "14715:5:6", + "src": "14714:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19013,14 +19013,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "14696:18:6", + "src": "14695:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "14696:25:6" + "src": "14695:25:6" } ], "name": "unlockForWork", @@ -19035,7 +19035,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14642:13:6", + "src": "14641:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19046,7 +19046,7 @@ "id": 2025, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14642:7:6", + "src": "14641:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19061,7 +19061,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14657:13:6", + "src": "14656:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19072,7 +19072,7 @@ "id": 2027, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14657:7:6", + "src": "14656:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19087,7 +19087,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14672:15:6", + "src": "14671:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19098,7 +19098,7 @@ "id": 2029, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14672:7:6", + "src": "14671:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19108,7 +19108,7 @@ "visibility": "internal" } ], - "src": "14641:47:6" + "src": "14640:47:6" }, "payable": false, "returnParameters": { @@ -19121,7 +19121,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14731:4:6", + "src": "14730:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19132,7 +19132,7 @@ "id": 2035, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14731:4:6", + "src": "14730:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -19142,10 +19142,10 @@ "visibility": "internal" } ], - "src": "14730:6:6" + "src": "14729:6:6" }, "scope": 2436, - "src": "14619:231:6", + "src": "14618:231:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -19154,7 +19154,7 @@ "body": { "id": 2124, "nodeType": "Block", - "src": "14991:309:6", + "src": "14990:309:6", "statements": [ { "expression": { @@ -19186,7 +19186,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2061, - "src": "15013:5:6", + "src": "15012:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19205,7 +19205,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "15003:9:6", + "src": "15002:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -19219,7 +19219,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15003:16:6", + "src": "15002:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -19233,7 +19233,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "15003:29:6", + "src": "15002:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -19247,7 +19247,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15003:31:6", + "src": "15002:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19264,7 +19264,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15038:3:6", + "src": "15037:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -19278,13 +19278,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15038:10:6", + "src": "15037:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "15003:45:6", + "src": "15002:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -19303,7 +19303,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14995:7:6", + "src": "14994:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -19317,7 +19317,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14995:54:6", + "src": "14994:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -19325,7 +19325,7 @@ }, "id": 2085, "nodeType": "ExpressionStatement", - "src": "14995:54:6" + "src": "14994:54:6" }, { "expression": { @@ -19341,7 +19341,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15068:7:6", + "src": "15067:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19354,7 +19354,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2065, - "src": "15077:7:6", + "src": "15076:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19377,7 +19377,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "15061:6:6", + "src": "15060:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -19391,7 +19391,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15061:24:6", + "src": "15060:24:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -19410,7 +19410,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15053:7:6", + "src": "15052:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -19424,7 +19424,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15053:33:6", + "src": "15052:33:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -19432,7 +19432,7 @@ }, "id": 2092, "nodeType": "ExpressionStatement", - "src": "15053:33:6" + "src": "15052:33:6" }, { "condition": { @@ -19442,7 +19442,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2067, - "src": "15094:11:6", + "src": "15093:11:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -19451,11 +19451,11 @@ "falseBody": null, "id": 2121, "nodeType": "IfStatement", - "src": "15090:192:6", + "src": "15089:192:6", "trueBody": { "id": 2120, "nodeType": "Block", - "src": "15109:173:6", + "src": "15108:173:6", "statements": [ { "expression": { @@ -19474,7 +19474,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15114:21:6", + "src": "15113:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -19488,7 +19488,7 @@ "memberName": "success", "nodeType": "MemberAccess", "referencedDeclaration": 2880, - "src": "15114:29:6", + "src": "15113:29:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19509,7 +19509,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "15180:1:6", + "src": "15179:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -19534,7 +19534,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15146:21:6", + "src": "15145:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -19548,7 +19548,7 @@ "memberName": "success", "nodeType": "MemberAccess", "referencedDeclaration": 2880, - "src": "15146:29:6", + "src": "15145:29:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19562,7 +19562,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15146:33:6", + "src": "15145:33:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -19576,13 +19576,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15146:36:6", + "src": "15145:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15114:68:6", + "src": "15113:68:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19590,7 +19590,7 @@ }, "id": 2103, "nodeType": "ExpressionStatement", - "src": "15114:68:6" + "src": "15113:68:6" }, { "expression": { @@ -19609,7 +19609,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15187:8:6", + "src": "15186:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -19623,7 +19623,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15196:7:6", + "src": "15195:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19634,7 +19634,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "15187:17:6", + "src": "15186:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19655,7 +19655,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "15229:1:6", + "src": "15228:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -19680,7 +19680,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15207:8:6", + "src": "15206:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -19694,7 +19694,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15216:7:6", + "src": "15215:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19705,7 +19705,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15207:17:6", + "src": "15206:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19719,7 +19719,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15207:21:6", + "src": "15206:21:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -19733,13 +19733,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15207:24:6", + "src": "15206:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15187:44:6", + "src": "15186:44:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19747,7 +19747,7 @@ }, "id": 2114, "nodeType": "ExpressionStatement", - "src": "15187:44:6" + "src": "15186:44:6" }, { "eventCall": { @@ -19760,7 +19760,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2061, - "src": "15262:5:6", + "src": "15261:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19773,7 +19773,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15269:7:6", + "src": "15268:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19796,7 +19796,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 898, - "src": "15241:20:6", + "src": "15240:20:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -19810,7 +19810,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15241:36:6", + "src": "15240:36:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -19818,7 +19818,7 @@ }, "id": 2119, "nodeType": "EmitStatement", - "src": "15236:41:6" + "src": "15235:41:6" } ] } @@ -19834,7 +19834,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "15292:4:6", + "src": "15291:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -19845,7 +19845,7 @@ "functionReturnParameters": 2074, "id": 2123, "nodeType": "Return", - "src": "15285:11:6" + "src": "15284:11:6" } ] }, @@ -19864,7 +19864,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2061, - "src": "14968:5:6", + "src": "14967:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19879,14 +19879,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "14949:18:6", + "src": "14948:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "14949:25:6" + "src": "14948:25:6" } ], "name": "rewardForWork", @@ -19901,7 +19901,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14875:13:6", + "src": "14874:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19912,7 +19912,7 @@ "id": 2060, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14875:7:6", + "src": "14874:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19927,7 +19927,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14890:15:6", + "src": "14889:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19938,7 +19938,7 @@ "id": 2062, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14890:7:6", + "src": "14889:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -19953,7 +19953,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14907:15:6", + "src": "14906:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19964,7 +19964,7 @@ "id": 2064, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14907:7:6", + "src": "14906:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19979,7 +19979,7 @@ "name": "_reputation", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14924:16:6", + "src": "14923:16:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19990,7 +19990,7 @@ "id": 2066, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14924:4:6", + "src": "14923:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -20000,7 +20000,7 @@ "visibility": "internal" } ], - "src": "14874:67:6" + "src": "14873:67:6" }, "payable": false, "returnParameters": { @@ -20013,7 +20013,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14984:4:6", + "src": "14983:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20024,7 +20024,7 @@ "id": 2072, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14984:4:6", + "src": "14983:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -20034,10 +20034,10 @@ "visibility": "internal" } ], - "src": "14983:6:6" + "src": "14982:6:6" }, "scope": 2436, - "src": "14852:448:6", + "src": "14851:448:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -20046,7 +20046,7 @@ "body": { "id": 2195, "nodeType": "Block", - "src": "15440:345:6", + "src": "15439:345:6", "statements": [ { "expression": { @@ -20078,7 +20078,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2127, - "src": "15462:5:6", + "src": "15461:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20097,7 +20097,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "15452:9:6", + "src": "15451:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -20111,7 +20111,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15452:16:6", + "src": "15451:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -20125,7 +20125,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "15452:29:6", + "src": "15451:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -20139,7 +20139,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15452:31:6", + "src": "15451:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20156,7 +20156,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15487:3:6", + "src": "15486:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -20170,13 +20170,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15487:10:6", + "src": "15486:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "15452:45:6", + "src": "15451:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -20195,7 +20195,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15444:7:6", + "src": "15443:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -20209,7 +20209,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15444:54:6", + "src": "15443:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -20217,7 +20217,7 @@ }, "id": 2151, "nodeType": "ExpressionStatement", - "src": "15444:54:6" + "src": "15443:54:6" }, { "expression": { @@ -20233,7 +20233,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15516:7:6", + "src": "15515:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20246,7 +20246,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2131, - "src": "15525:7:6", + "src": "15524:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20269,7 +20269,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2359, - "src": "15510:5:6", + "src": "15509:5:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -20283,7 +20283,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15510:23:6", + "src": "15509:23:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -20302,7 +20302,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15502:7:6", + "src": "15501:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -20316,7 +20316,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15502:32:6", + "src": "15501:32:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -20324,7 +20324,7 @@ }, "id": 2158, "nodeType": "ExpressionStatement", - "src": "15502:32:6" + "src": "15501:32:6" }, { "condition": { @@ -20334,7 +20334,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2133, - "src": "15542:11:6", + "src": "15541:11:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -20343,11 +20343,11 @@ "falseBody": null, "id": 2192, "nodeType": "IfStatement", - "src": "15538:229:6", + "src": "15537:229:6", "trueBody": { "id": 2191, "nodeType": "Block", - "src": "15557:210:6", + "src": "15556:210:6", "statements": [ { "expression": { @@ -20366,7 +20366,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15562:21:6", + "src": "15561:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -20380,7 +20380,7 @@ "memberName": "failed", "nodeType": "MemberAccess", "referencedDeclaration": 2882, - "src": "15562:28:6", + "src": "15561:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20401,7 +20401,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "15626:1:6", + "src": "15625:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -20426,7 +20426,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15593:21:6", + "src": "15592:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -20440,7 +20440,7 @@ "memberName": "failed", "nodeType": "MemberAccess", "referencedDeclaration": 2882, - "src": "15593:28:6", + "src": "15592:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20454,7 +20454,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15593:32:6", + "src": "15592:32:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -20468,13 +20468,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15593:35:6", + "src": "15592:35:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15562:66:6", + "src": "15561:66:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20482,7 +20482,7 @@ }, "id": 2169, "nodeType": "ExpressionStatement", - "src": "15562:66:6" + "src": "15561:66:6" }, { "expression": { @@ -20501,7 +20501,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15633:8:6", + "src": "15632:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -20515,7 +20515,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15642:7:6", + "src": "15641:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20526,7 +20526,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "15633:17:6", + "src": "15632:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20547,7 +20547,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 748, - "src": "15697:19:6", + "src": "15696:19:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20570,7 +20570,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15675:8:6", + "src": "15674:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -20584,7 +20584,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15684:7:6", + "src": "15683:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20595,7 +20595,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15675:17:6", + "src": "15674:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20609,7 +20609,7 @@ "memberName": "min", "nodeType": "MemberAccess", "referencedDeclaration": 3878, - "src": "15675:21:6", + "src": "15674:21:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -20623,7 +20623,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15675:42:6", + "src": "15674:42:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20646,7 +20646,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15653:8:6", + "src": "15652:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -20660,7 +20660,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15662:7:6", + "src": "15661:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20671,7 +20671,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15653:17:6", + "src": "15652:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20685,7 +20685,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "15653:21:6", + "src": "15652:21:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -20699,13 +20699,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15653:65:6", + "src": "15652:65:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15633:85:6", + "src": "15632:85:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20713,7 +20713,7 @@ }, "id": 2185, "nodeType": "ExpressionStatement", - "src": "15633:85:6" + "src": "15632:85:6" }, { "eventCall": { @@ -20726,7 +20726,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2127, - "src": "15747:5:6", + "src": "15746:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20739,7 +20739,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15754:7:6", + "src": "15753:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20762,7 +20762,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 904, - "src": "15728:18:6", + "src": "15727:18:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -20776,7 +20776,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15728:34:6", + "src": "15727:34:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -20784,7 +20784,7 @@ }, "id": 2190, "nodeType": "EmitStatement", - "src": "15723:39:6" + "src": "15722:39:6" } ] } @@ -20800,7 +20800,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "15777:4:6", + "src": "15776:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -20811,7 +20811,7 @@ "functionReturnParameters": 2140, "id": 2194, "nodeType": "Return", - "src": "15770:11:6" + "src": "15769:11:6" } ] }, @@ -20830,7 +20830,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2127, - "src": "15417:5:6", + "src": "15416:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20845,14 +20845,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "15398:18:6", + "src": "15397:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "15398:25:6" + "src": "15397:25:6" } ], "name": "seizeForWork", @@ -20867,7 +20867,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15324:13:6", + "src": "15323:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20878,7 +20878,7 @@ "id": 2126, "name": "address", "nodeType": "ElementaryTypeName", - "src": "15324:7:6", + "src": "15323:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20893,7 +20893,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15339:15:6", + "src": "15338:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20904,7 +20904,7 @@ "id": 2128, "name": "address", "nodeType": "ElementaryTypeName", - "src": "15339:7:6", + "src": "15338:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20919,7 +20919,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15356:15:6", + "src": "15355:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20930,7 +20930,7 @@ "id": 2130, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "15356:7:6", + "src": "15355:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20945,7 +20945,7 @@ "name": "_reputation", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15373:16:6", + "src": "15372:16:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20956,7 +20956,7 @@ "id": 2132, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "15373:4:6", + "src": "15372:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -20966,7 +20966,7 @@ "visibility": "internal" } ], - "src": "15323:67:6" + "src": "15322:67:6" }, "payable": false, "returnParameters": { @@ -20979,7 +20979,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15433:4:6", + "src": "15432:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20990,7 +20990,7 @@ "id": 2138, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "15433:4:6", + "src": "15432:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -21000,10 +21000,10 @@ "visibility": "internal" } ], - "src": "15432:6:6" + "src": "15431:6:6" }, "scope": 2436, - "src": "15302:483:6", + "src": "15301:483:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -21012,7 +21012,7 @@ "body": { "id": 2238, "nodeType": "Block", - "src": "15883:197:6", + "src": "15882:197:6", "statements": [ { "expression": { @@ -21030,7 +21030,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15912:3:6", + "src": "15911:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -21044,7 +21044,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15912:10:6", + "src": "15911:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21060,7 +21060,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7063, - "src": "15932:4:6", + "src": "15931:4:6", "typeDescriptions": { "typeIdentifier": "t_contract$_IexecHub_$2436", "typeString": "contract IexecHub" @@ -21080,7 +21080,7 @@ "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "15924:7:6", + "src": "15923:7:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" @@ -21095,7 +21095,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15924:13:6", + "src": "15923:13:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21108,7 +21108,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2198, - "src": "15939:7:6", + "src": "15938:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21137,7 +21137,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 739, - "src": "15895:3:6", + "src": "15894:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_RLC_$6785", "typeString": "contract RLC" @@ -21151,7 +21151,7 @@ "memberName": "transferFrom", "nodeType": "MemberAccess", "referencedDeclaration": 6696, - "src": "15895:16:6", + "src": "15894:16:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)" @@ -21165,7 +21165,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15895:52:6", + "src": "15894:52:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -21184,7 +21184,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15887:7:6", + "src": "15886:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -21198,7 +21198,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15887:61:6", + "src": "15886:61:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -21206,7 +21206,7 @@ }, "id": 2214, "nodeType": "ExpressionStatement", - "src": "15887:61:6" + "src": "15886:61:6" }, { "expression": { @@ -21227,7 +21227,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "15952:10:6", + "src": "15951:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -21243,7 +21243,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15963:3:6", + "src": "15962:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -21257,7 +21257,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15963:10:6", + "src": "15962:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21268,7 +21268,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15952:22:6", + "src": "15951:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -21282,7 +21282,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "15952:28:6", + "src": "15951:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21300,7 +21300,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2198, - "src": "16016:7:6", + "src": "16015:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21325,7 +21325,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "15983:10:6", + "src": "15982:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -21341,7 +21341,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15994:3:6", + "src": "15993:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -21355,7 +21355,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15994:10:6", + "src": "15993:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21366,7 +21366,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15983:22:6", + "src": "15982:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -21380,7 +21380,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "15983:28:6", + "src": "15982:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21394,7 +21394,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15983:32:6", + "src": "15982:32:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -21408,13 +21408,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15983:41:6", + "src": "15982:41:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15952:72:6", + "src": "15951:72:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21422,7 +21422,7 @@ }, "id": 2229, "nodeType": "ExpressionStatement", - "src": "15952:72:6" + "src": "15951:72:6" }, { "eventCall": { @@ -21437,7 +21437,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16041:3:6", + "src": "16040:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -21451,7 +21451,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16041:10:6", + "src": "16040:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21464,7 +21464,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2198, - "src": "16053:7:6", + "src": "16052:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21487,7 +21487,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 910, - "src": "16033:7:6", + "src": "16032:7:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -21501,7 +21501,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16033:28:6", + "src": "16032:28:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -21509,7 +21509,7 @@ }, "id": 2235, "nodeType": "EmitStatement", - "src": "16028:33:6" + "src": "16027:33:6" }, { "expression": { @@ -21522,7 +21522,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16072:4:6", + "src": "16071:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -21533,7 +21533,7 @@ "functionReturnParameters": 2202, "id": 2237, "nodeType": "Return", - "src": "16065:11:6" + "src": "16064:11:6" } ] }, @@ -21555,7 +21555,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2239, - "src": "15841:15:6", + "src": "15840:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -21566,7 +21566,7 @@ "id": 2197, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "15841:7:6", + "src": "15840:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21576,7 +21576,7 @@ "visibility": "internal" } ], - "src": "15840:17:6" + "src": "15839:17:6" }, "payable": false, "returnParameters": { @@ -21589,7 +21589,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2239, - "src": "15876:4:6", + "src": "15875:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -21600,7 +21600,7 @@ "id": 2200, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "15876:4:6", + "src": "15875:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -21610,10 +21610,10 @@ "visibility": "internal" } ], - "src": "15875:6:6" + "src": "15874:6:6" }, "scope": 2436, - "src": "15824:256:6", + "src": "15823:256:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "external" @@ -21622,7 +21622,7 @@ "body": { "id": 2278, "nodeType": "Block", - "src": "16142:179:6", + "src": "16141:179:6", "statements": [ { "expression": { @@ -21643,7 +21643,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16146:10:6", + "src": "16145:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -21659,7 +21659,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16157:3:6", + "src": "16156:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -21673,7 +21673,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16157:10:6", + "src": "16156:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21684,7 +21684,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16146:22:6", + "src": "16145:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -21698,7 +21698,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16146:28:6", + "src": "16145:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21716,7 +21716,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2241, - "src": "16210:7:6", + "src": "16209:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21741,7 +21741,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16177:10:6", + "src": "16176:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -21757,7 +21757,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16188:3:6", + "src": "16187:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -21771,7 +21771,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16188:10:6", + "src": "16187:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21782,7 +21782,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16177:22:6", + "src": "16176:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -21796,7 +21796,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16177:28:6", + "src": "16176:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21810,7 +21810,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "16177:32:6", + "src": "16176:32:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -21824,13 +21824,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16177:41:6", + "src": "16176:41:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16146:72:6", + "src": "16145:72:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21838,7 +21838,7 @@ }, "id": 2260, "nodeType": "ExpressionStatement", - "src": "16146:72:6" + "src": "16145:72:6" }, { "expression": { @@ -21856,7 +21856,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16243:3:6", + "src": "16242:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -21870,7 +21870,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16243:10:6", + "src": "16242:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21883,7 +21883,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2241, - "src": "16255:7:6", + "src": "16254:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21908,7 +21908,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 739, - "src": "16230:3:6", + "src": "16229:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_RLC_$6785", "typeString": "contract RLC" @@ -21922,7 +21922,7 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": 6632, - "src": "16230:12:6", + "src": "16229:12:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) external returns (bool)" @@ -21936,7 +21936,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16230:33:6", + "src": "16229:33:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -21955,7 +21955,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "16222:7:6", + "src": "16221:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -21969,7 +21969,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16222:42:6", + "src": "16221:42:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -21977,7 +21977,7 @@ }, "id": 2269, "nodeType": "ExpressionStatement", - "src": "16222:42:6" + "src": "16221:42:6" }, { "eventCall": { @@ -21992,7 +21992,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16282:3:6", + "src": "16281:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -22006,7 +22006,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16282:10:6", + "src": "16281:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22019,7 +22019,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2241, - "src": "16294:7:6", + "src": "16293:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22042,7 +22042,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 916, - "src": "16273:8:6", + "src": "16272:8:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -22056,7 +22056,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16273:29:6", + "src": "16272:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -22064,7 +22064,7 @@ }, "id": 2275, "nodeType": "EmitStatement", - "src": "16268:34:6" + "src": "16267:34:6" }, { "expression": { @@ -22077,7 +22077,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16313:4:6", + "src": "16312:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -22088,7 +22088,7 @@ "functionReturnParameters": 2245, "id": 2277, "nodeType": "Return", - "src": "16306:11:6" + "src": "16305:11:6" } ] }, @@ -22110,7 +22110,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2279, - "src": "16100:15:6", + "src": "16099:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22121,7 +22121,7 @@ "id": 2240, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16100:7:6", + "src": "16099:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22131,7 +22131,7 @@ "visibility": "internal" } ], - "src": "16099:17:6" + "src": "16098:17:6" }, "payable": false, "returnParameters": { @@ -22144,7 +22144,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2279, - "src": "16135:4:6", + "src": "16134:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22155,7 +22155,7 @@ "id": 2243, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16135:4:6", + "src": "16134:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22165,10 +22165,10 @@ "visibility": "internal" } ], - "src": "16134:6:6" + "src": "16133:6:6" }, "scope": 2436, - "src": "16082:239:6", + "src": "16081:239:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "external" @@ -22177,7 +22177,7 @@ "body": { "id": 2298, "nodeType": "Block", - "src": "16414:68:6", + "src": "16413:68:6", "statements": [ { "expression": { @@ -22194,7 +22194,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16426:10:6", + "src": "16425:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -22208,7 +22208,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2281, - "src": "16437:6:6", + "src": "16436:6:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22219,7 +22219,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16426:18:6", + "src": "16425:18:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -22233,7 +22233,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16426:24:6", + "src": "16425:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22250,7 +22250,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16452:10:6", + "src": "16451:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -22264,7 +22264,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2281, - "src": "16463:6:6", + "src": "16462:6:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22275,7 +22275,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16452:18:6", + "src": "16451:18:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -22289,7 +22289,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "16452:25:6", + "src": "16451:25:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22303,7 +22303,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "16425:53:6", + "src": "16424:53:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)" @@ -22312,7 +22312,7 @@ "functionReturnParameters": 2287, "id": 2297, "nodeType": "Return", - "src": "16418:60:6" + "src": "16417:60:6" } ] }, @@ -22334,7 +22334,7 @@ "name": "_owner", "nodeType": "VariableDeclaration", "scope": 2299, - "src": "16345:14:6", + "src": "16344:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22345,7 +22345,7 @@ "id": 2280, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16345:7:6", + "src": "16344:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22355,7 +22355,7 @@ "visibility": "internal" } ], - "src": "16344:16:6" + "src": "16343:16:6" }, "payable": false, "returnParameters": { @@ -22368,7 +22368,7 @@ "name": "stake", "nodeType": "VariableDeclaration", "scope": 2299, - "src": "16382:13:6", + "src": "16381:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22379,7 +22379,7 @@ "id": 2283, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16382:7:6", + "src": "16381:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22394,7 +22394,7 @@ "name": "locked", "nodeType": "VariableDeclaration", "scope": 2299, - "src": "16397:14:6", + "src": "16396:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22405,7 +22405,7 @@ "id": 2285, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16397:7:6", + "src": "16396:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22415,10 +22415,10 @@ "visibility": "internal" } ], - "src": "16381:31:6" + "src": "16380:31:6" }, "scope": 2436, - "src": "16323:159:6", + "src": "16322:159:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -22427,7 +22427,7 @@ "body": { "id": 2328, "nodeType": "Block", - "src": "16596:116:6", + "src": "16595:116:6", "statements": [ { "expression": { @@ -22448,7 +22448,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16600:10:6", + "src": "16599:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -22462,7 +22462,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2301, - "src": "16611:5:6", + "src": "16610:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22473,7 +22473,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16600:17:6", + "src": "16599:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -22487,7 +22487,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16600:23:6", + "src": "16599:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22505,7 +22505,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2303, - "src": "16654:7:6", + "src": "16653:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22530,7 +22530,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16626:10:6", + "src": "16625:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -22544,7 +22544,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2301, - "src": "16637:5:6", + "src": "16636:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22555,7 +22555,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16626:17:6", + "src": "16625:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -22569,7 +22569,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16626:23:6", + "src": "16625:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22583,7 +22583,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "16626:27:6", + "src": "16625:27:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -22597,13 +22597,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16626:36:6", + "src": "16625:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16600:62:6", + "src": "16599:62:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22611,7 +22611,7 @@ }, "id": 2320, "nodeType": "ExpressionStatement", - "src": "16600:62:6" + "src": "16599:62:6" }, { "eventCall": { @@ -22624,7 +22624,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2301, - "src": "16678:5:6", + "src": "16677:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22637,7 +22637,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2303, - "src": "16685:7:6", + "src": "16684:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22660,7 +22660,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 922, - "src": "16671:6:6", + "src": "16670:6:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -22674,7 +22674,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16671:22:6", + "src": "16670:22:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -22682,7 +22682,7 @@ }, "id": 2325, "nodeType": "EmitStatement", - "src": "16666:27:6" + "src": "16665:27:6" }, { "expression": { @@ -22695,7 +22695,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16704:4:6", + "src": "16703:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -22706,7 +22706,7 @@ "functionReturnParameters": 2307, "id": 2327, "nodeType": "Return", - "src": "16697:11:6" + "src": "16696:11:6" } ] }, @@ -22728,7 +22728,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2329, - "src": "16539:13:6", + "src": "16538:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22739,7 +22739,7 @@ "id": 2300, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16539:7:6", + "src": "16538:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22754,7 +22754,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2329, - "src": "16554:15:6", + "src": "16553:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22765,7 +22765,7 @@ "id": 2302, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16554:7:6", + "src": "16553:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22775,7 +22775,7 @@ "visibility": "internal" } ], - "src": "16538:32:6" + "src": "16537:32:6" }, "payable": false, "returnParameters": { @@ -22788,7 +22788,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2329, - "src": "16589:4:6", + "src": "16588:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22799,7 +22799,7 @@ "id": 2305, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16589:4:6", + "src": "16588:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22809,10 +22809,10 @@ "visibility": "internal" } ], - "src": "16588:6:6" + "src": "16587:6:6" }, "scope": 2436, - "src": "16523:189:6", + "src": "16522:189:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -22821,7 +22821,7 @@ "body": { "id": 2358, "nodeType": "Block", - "src": "16786:117:6", + "src": "16785:117:6", "statements": [ { "expression": { @@ -22842,7 +22842,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16790:10:6", + "src": "16789:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -22856,7 +22856,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2331, - "src": "16801:5:6", + "src": "16800:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22867,7 +22867,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16790:17:6", + "src": "16789:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -22881,7 +22881,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "16790:24:6", + "src": "16789:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22899,7 +22899,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2333, - "src": "16846:7:6", + "src": "16845:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22924,7 +22924,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16817:10:6", + "src": "16816:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -22938,7 +22938,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2331, - "src": "16828:5:6", + "src": "16827:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22949,7 +22949,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16817:17:6", + "src": "16816:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -22963,7 +22963,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "16817:24:6", + "src": "16816:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22977,7 +22977,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "16817:28:6", + "src": "16816:28:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -22991,13 +22991,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16817:37:6", + "src": "16816:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16790:64:6", + "src": "16789:64:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23005,7 +23005,7 @@ }, "id": 2350, "nodeType": "ExpressionStatement", - "src": "16790:64:6" + "src": "16789:64:6" }, { "eventCall": { @@ -23018,7 +23018,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2331, - "src": "16869:5:6", + "src": "16868:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23031,7 +23031,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2333, - "src": "16876:7:6", + "src": "16875:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23054,7 +23054,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 928, - "src": "16863:5:6", + "src": "16862:5:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -23068,7 +23068,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16863:21:6", + "src": "16862:21:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -23076,7 +23076,7 @@ }, "id": 2355, "nodeType": "EmitStatement", - "src": "16858:26:6" + "src": "16857:26:6" }, { "expression": { @@ -23089,7 +23089,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16895:4:6", + "src": "16894:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -23100,7 +23100,7 @@ "functionReturnParameters": 2337, "id": 2357, "nodeType": "Return", - "src": "16888:11:6" + "src": "16887:11:6" } ] }, @@ -23122,7 +23122,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2359, - "src": "16729:13:6", + "src": "16728:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23133,7 +23133,7 @@ "id": 2330, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16729:7:6", + "src": "16728:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23148,7 +23148,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2359, - "src": "16744:15:6", + "src": "16743:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23159,7 +23159,7 @@ "id": 2332, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16744:7:6", + "src": "16743:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23169,7 +23169,7 @@ "visibility": "internal" } ], - "src": "16728:32:6" + "src": "16727:32:6" }, "payable": false, "returnParameters": { @@ -23182,7 +23182,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2359, - "src": "16779:4:6", + "src": "16778:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23193,7 +23193,7 @@ "id": 2335, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16779:4:6", + "src": "16778:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23203,10 +23203,10 @@ "visibility": "internal" } ], - "src": "16778:6:6" + "src": "16777:6:6" }, "scope": 2436, - "src": "16714:189:6", + "src": "16713:189:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -23215,7 +23215,7 @@ "body": { "id": 2396, "nodeType": "Block", - "src": "16976:154:6", + "src": "16975:154:6", "statements": [ { "expression": { @@ -23236,7 +23236,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16980:10:6", + "src": "16979:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -23250,7 +23250,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "16991:5:6", + "src": "16990:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23261,7 +23261,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16980:17:6", + "src": "16979:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -23275,7 +23275,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16980:23:6", + "src": "16979:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23293,7 +23293,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2363, - "src": "17035:7:6", + "src": "17034:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23318,7 +23318,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17007:10:6", + "src": "17006:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -23332,7 +23332,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "17018:5:6", + "src": "17017:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23343,7 +23343,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17007:17:6", + "src": "17006:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -23357,7 +23357,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "17007:23:6", + "src": "17006:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23371,7 +23371,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "17007:27:6", + "src": "17006:27:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -23385,13 +23385,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17007:36:6", + "src": "17006:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16980:63:6", + "src": "16979:63:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23399,7 +23399,7 @@ }, "id": 2380, "nodeType": "ExpressionStatement", - "src": "16980:63:6" + "src": "16979:63:6" }, { "expression": { @@ -23420,7 +23420,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17047:10:6", + "src": "17046:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -23434,7 +23434,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "17058:5:6", + "src": "17057:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23445,7 +23445,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17047:17:6", + "src": "17046:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -23459,7 +23459,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17047:24:6", + "src": "17046:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23477,7 +23477,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2363, - "src": "17103:7:6", + "src": "17102:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23502,7 +23502,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17074:10:6", + "src": "17073:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -23516,7 +23516,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "17085:5:6", + "src": "17084:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23527,7 +23527,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17074:17:6", + "src": "17073:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -23541,7 +23541,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17074:24:6", + "src": "17073:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23555,7 +23555,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "17074:28:6", + "src": "17073:28:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -23569,13 +23569,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17074:37:6", + "src": "17073:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "17047:64:6", + "src": "17046:64:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23583,7 +23583,7 @@ }, "id": 2393, "nodeType": "ExpressionStatement", - "src": "17047:64:6" + "src": "17046:64:6" }, { "expression": { @@ -23596,7 +23596,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "17122:4:6", + "src": "17121:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -23607,7 +23607,7 @@ "functionReturnParameters": 2367, "id": 2395, "nodeType": "Return", - "src": "17115:11:6" + "src": "17114:11:6" } ] }, @@ -23629,7 +23629,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2397, - "src": "16919:13:6", + "src": "16918:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23640,7 +23640,7 @@ "id": 2360, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16919:7:6", + "src": "16918:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23655,7 +23655,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2397, - "src": "16934:15:6", + "src": "16933:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23666,7 +23666,7 @@ "id": 2362, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16934:7:6", + "src": "16933:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23676,7 +23676,7 @@ "visibility": "internal" } ], - "src": "16918:32:6" + "src": "16917:32:6" }, "payable": false, "returnParameters": { @@ -23689,7 +23689,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2397, - "src": "16969:4:6", + "src": "16968:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23700,7 +23700,7 @@ "id": 2365, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16969:4:6", + "src": "16968:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23710,10 +23710,10 @@ "visibility": "internal" } ], - "src": "16968:6:6" + "src": "16967:6:6" }, "scope": 2436, - "src": "16905:225:6", + "src": "16904:225:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -23722,7 +23722,7 @@ "body": { "id": 2434, "nodeType": "Block", - "src": "17205:154:6", + "src": "17204:154:6", "statements": [ { "expression": { @@ -23743,7 +23743,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17209:10:6", + "src": "17208:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -23757,7 +23757,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17220:5:6", + "src": "17219:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23768,7 +23768,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17209:17:6", + "src": "17208:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -23782,7 +23782,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17209:24:6", + "src": "17208:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23800,7 +23800,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2401, - "src": "17265:7:6", + "src": "17264:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23825,7 +23825,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17236:10:6", + "src": "17235:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -23839,7 +23839,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17247:5:6", + "src": "17246:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23850,7 +23850,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17236:17:6", + "src": "17235:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -23864,7 +23864,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17236:24:6", + "src": "17235:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23878,7 +23878,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "17236:28:6", + "src": "17235:28:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -23892,13 +23892,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17236:37:6", + "src": "17235:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "17209:64:6", + "src": "17208:64:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23906,7 +23906,7 @@ }, "id": 2418, "nodeType": "ExpressionStatement", - "src": "17209:64:6" + "src": "17208:64:6" }, { "expression": { @@ -23927,7 +23927,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17277:10:6", + "src": "17276:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -23941,7 +23941,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17288:5:6", + "src": "17287:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23952,7 +23952,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17277:17:6", + "src": "17276:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -23966,7 +23966,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "17277:23:6", + "src": "17276:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23984,7 +23984,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2401, - "src": "17332:7:6", + "src": "17331:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24009,7 +24009,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17304:10:6", + "src": "17303:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -24023,7 +24023,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17315:5:6", + "src": "17314:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24034,7 +24034,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17304:17:6", + "src": "17303:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -24048,7 +24048,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "17304:23:6", + "src": "17303:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24062,7 +24062,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "17304:27:6", + "src": "17303:27:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -24076,13 +24076,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17304:36:6", + "src": "17303:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "17277:63:6", + "src": "17276:63:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24090,7 +24090,7 @@ }, "id": 2431, "nodeType": "ExpressionStatement", - "src": "17277:63:6" + "src": "17276:63:6" }, { "expression": { @@ -24103,7 +24103,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "17351:4:6", + "src": "17350:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -24114,7 +24114,7 @@ "functionReturnParameters": 2405, "id": 2433, "nodeType": "Return", - "src": "17344:11:6" + "src": "17343:11:6" } ] }, @@ -24136,7 +24136,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2435, - "src": "17148:13:6", + "src": "17147:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24147,7 +24147,7 @@ "id": 2398, "name": "address", "nodeType": "ElementaryTypeName", - "src": "17148:7:6", + "src": "17147:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24162,7 +24162,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2435, - "src": "17163:15:6", + "src": "17162:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24173,7 +24173,7 @@ "id": 2400, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "17163:7:6", + "src": "17162:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24183,7 +24183,7 @@ "visibility": "internal" } ], - "src": "17147:32:6" + "src": "17146:32:6" }, "payable": false, "returnParameters": { @@ -24196,7 +24196,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2435, - "src": "17198:4:6", + "src": "17197:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24207,7 +24207,7 @@ "id": 2403, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "17198:4:6", + "src": "17197:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24217,20 +24217,20 @@ "visibility": "internal" } ], - "src": "17197:6:6" + "src": "17196:6:6" }, "scope": 2436, - "src": "17132:227:6", + "src": "17131:227:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" } ], "scope": 2437, - "src": "281:17080:6" + "src": "281:17079:6" } ], - "src": "0:17362:6" + "src": "0:17361:6" }, "legacyAST": { "absolutePath": "/Users/fbranci/iexecdev/PoCo/contracts/IexecHub.sol", @@ -32143,7 +32143,7 @@ "body": { "id": 1475, "nodeType": "Block", - "src": "7401:1466:6", + "src": "7401:1465:6", "statements": [ { "assignments": [ @@ -33870,7 +33870,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1340, - "src": "8816:5:6", + "src": "8815:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -33888,7 +33888,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1349, - "src": "8823:9:6", + "src": "8822:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -33902,7 +33902,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "8823:22:6", + "src": "8822:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -33916,7 +33916,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8823:24:6", + "src": "8822:24:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -33939,7 +33939,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 826, - "src": "8799:16:6", + "src": "8798:16:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -33953,7 +33953,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8799:49:6", + "src": "8798:49:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -33961,7 +33961,7 @@ }, "id": 1472, "nodeType": "EmitStatement", - "src": "8794:54:6" + "src": "8793:54:6" }, { "expression": { @@ -33974,7 +33974,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8859:4:6", + "src": "8858:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -33985,7 +33985,7 @@ "functionReturnParameters": 1347, "id": 1474, "nodeType": "Return", - "src": "8852:11:6" + "src": "8851:11:6" } ] }, @@ -34099,7 +34099,7 @@ "src": "7393:6:6" }, "scope": 2436, - "src": "7306:1561:6", + "src": "7306:1560:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -34108,7 +34108,7 @@ "body": { "id": 1683, "nodeType": "Block", - "src": "9019:2281:6", + "src": "9018:2281:6", "statements": [ { "assignments": [ @@ -34121,7 +34121,7 @@ "name": "workorder", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9023:19:6", + "src": "9022:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34134,7 +34134,7 @@ "name": "WorkOrder", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 4299, - "src": "9023:9:6", + "src": "9022:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -34155,7 +34155,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1478, - "src": "9055:5:6", + "src": "9054:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34174,7 +34174,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "9045:9:6", + "src": "9044:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -34188,14 +34188,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9045:16:6", + "src": "9044:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" } }, "nodeType": "VariableDeclarationStatement", - "src": "9023:38:6" + "src": "9022:38:6" }, { "expression": { @@ -34224,7 +34224,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9073:9:6", + "src": "9072:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -34238,7 +34238,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "9073:22:6", + "src": "9072:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -34252,7 +34252,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9073:24:6", + "src": "9072:24:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34269,7 +34269,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "9101:3:6", + "src": "9100:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -34283,13 +34283,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9101:10:6", + "src": "9100:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "9073:38:6", + "src": "9072:38:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34308,7 +34308,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9065:7:6", + "src": "9064:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -34322,7 +34322,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9065:47:6", + "src": "9064:47:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -34330,7 +34330,7 @@ }, "id": 1506, "nodeType": "ExpressionStatement", - "src": "9065:47:6" + "src": "9064:47:6" }, { "expression": { @@ -34359,7 +34359,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9124:9:6", + "src": "9123:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -34373,7 +34373,7 @@ "memberName": "m_status", "nodeType": "MemberAccess", "referencedDeclaration": 4040, - "src": "9124:18:6", + "src": "9123:18:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_enum$_WorkOrderStatusEnum_$2832_$", "typeString": "function () view external returns (enum IexecLib.WorkOrderStatusEnum)" @@ -34387,7 +34387,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9124:20:6", + "src": "9123:20:6", "typeDescriptions": { "typeIdentifier": "t_enum$_WorkOrderStatusEnum_$2832", "typeString": "enum IexecLib.WorkOrderStatusEnum" @@ -34406,7 +34406,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2893, - "src": "9152:8:6", + "src": "9151:8:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_IexecLib_$2893_$", "typeString": "type(library IexecLib)" @@ -34420,7 +34420,7 @@ "memberName": "WorkOrderStatusEnum", "nodeType": "MemberAccess", "referencedDeclaration": 2832, - "src": "9152:28:6", + "src": "9151:28:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_WorkOrderStatusEnum_$2832_$", "typeString": "type(enum IexecLib.WorkOrderStatusEnum)" @@ -34434,13 +34434,13 @@ "memberName": "REVEALING", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9152:38:6", + "src": "9151:38:6", "typeDescriptions": { "typeIdentifier": "t_enum$_WorkOrderStatusEnum_$2832", "typeString": "enum IexecLib.WorkOrderStatusEnum" } }, - "src": "9124:66:6", + "src": "9123:66:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34459,7 +34459,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9116:7:6", + "src": "9115:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -34473,7 +34473,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9116:75:6", + "src": "9115:75:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -34481,7 +34481,7 @@ }, "id": 1516, "nodeType": "ExpressionStatement", - "src": "9116:75:6" + "src": "9115:75:6" }, { "assignments": [ @@ -34494,7 +34494,7 @@ "name": "app", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9205:11:6", + "src": "9204:11:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34507,7 +34507,7 @@ "name": "App", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 54, - "src": "9205:3:6", + "src": "9204:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" @@ -34533,7 +34533,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9228:9:6", + "src": "9227:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -34547,7 +34547,7 @@ "memberName": "m_app", "nodeType": "MemberAccess", "referencedDeclaration": 4044, - "src": "9228:15:6", + "src": "9227:15:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -34561,7 +34561,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9228:17:6", + "src": "9227:17:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34580,7 +34580,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 54, - "src": "9224:3:6", + "src": "9223:3:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_App_$54_$", "typeString": "type(contract App)" @@ -34594,14 +34594,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9224:22:6", + "src": "9223:22:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" } }, "nodeType": "VariableDeclarationStatement", - "src": "9205:41:6" + "src": "9204:41:6" }, { "assignments": [ @@ -34614,7 +34614,7 @@ "name": "appPrice", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9250:16:6", + "src": "9249:16:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34625,7 +34625,7 @@ "id": 1525, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9250:7:6", + "src": "9249:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34648,7 +34648,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1518, - "src": "9269:3:6", + "src": "9268:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" @@ -34662,7 +34662,7 @@ "memberName": "m_appPrice", "nodeType": "MemberAccess", "referencedDeclaration": 11, - "src": "9269:14:6", + "src": "9268:14:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -34676,14 +34676,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9269:16:6", + "src": "9268:16:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "9250:35:6" + "src": "9249:35:6" }, { "condition": { @@ -34704,7 +34704,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1526, - "src": "9293:8:6", + "src": "9292:8:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34722,7 +34722,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9304:1:6", + "src": "9303:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -34730,7 +34730,7 @@ }, "value": "0" }, - "src": "9293:12:6", + "src": "9292:12:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34739,11 +34739,11 @@ "falseBody": null, "id": 1544, "nodeType": "IfStatement", - "src": "9289:70:6", + "src": "9288:70:6", "trueBody": { "id": 1543, "nodeType": "Block", - "src": "9309:50:6", + "src": "9308:50:6", "statements": [ { "expression": { @@ -34764,7 +34764,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1518, - "src": "9329:3:6", + "src": "9328:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_App_$54", "typeString": "contract App" @@ -34778,7 +34778,7 @@ "memberName": "m_owner", "nodeType": "MemberAccess", "referencedDeclaration": 3681, - "src": "9329:11:6", + "src": "9328:11:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -34792,7 +34792,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9329:13:6", + "src": "9328:13:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34805,7 +34805,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1526, - "src": "9344:8:6", + "src": "9343:8:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34828,7 +34828,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "9322:6:6", + "src": "9321:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -34842,7 +34842,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9322:31:6", + "src": "9321:31:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34861,7 +34861,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9314:7:6", + "src": "9313:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -34875,7 +34875,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9314:40:6", + "src": "9313:40:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -34883,7 +34883,7 @@ }, "id": 1542, "nodeType": "ExpressionStatement", - "src": "9314:40:6" + "src": "9313:40:6" } ] } @@ -34899,7 +34899,7 @@ "name": "dataset", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9376:15:6", + "src": "9375:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34912,7 +34912,7 @@ "name": "Dataset", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 279, - "src": "9376:7:6", + "src": "9375:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -34938,7 +34938,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "9402:9:6", + "src": "9401:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -34952,7 +34952,7 @@ "memberName": "m_dataset", "nodeType": "MemberAccess", "referencedDeclaration": 4046, - "src": "9402:19:6", + "src": "9401:19:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -34966,7 +34966,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9402:21:6", + "src": "9401:21:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34985,7 +34985,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 279, - "src": "9394:7:6", + "src": "9393:7:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_Dataset_$279_$", "typeString": "type(contract Dataset)" @@ -34999,14 +34999,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9394:30:6", + "src": "9393:30:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" } }, "nodeType": "VariableDeclarationStatement", - "src": "9376:48:6" + "src": "9375:48:6" }, { "condition": { @@ -35027,7 +35027,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1546, - "src": "9432:7:6", + "src": "9431:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -35048,7 +35048,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9451:1:6", + "src": "9450:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -35070,7 +35070,7 @@ "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9443:7:6", + "src": "9442:7:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" @@ -35085,13 +35085,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9443:10:6", + "src": "9442:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "9432:21:6", + "src": "9431:21:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -35100,11 +35100,11 @@ "falseBody": null, "id": 1579, "nodeType": "IfStatement", - "src": "9428:175:6", + "src": "9427:175:6", "trueBody": { "id": 1578, "nodeType": "Block", - "src": "9457:146:6", + "src": "9456:146:6", "statements": [ { "assignments": [ @@ -35117,7 +35117,7 @@ "name": "datasetPrice", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9462:20:6", + "src": "9461:20:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -35128,7 +35128,7 @@ "id": 1558, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9462:7:6", + "src": "9461:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35151,7 +35151,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1546, - "src": "9485:7:6", + "src": "9484:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -35165,7 +35165,7 @@ "memberName": "m_datasetPrice", "nodeType": "MemberAccess", "referencedDeclaration": 236, - "src": "9485:22:6", + "src": "9484:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -35179,14 +35179,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9485:24:6", + "src": "9484:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "9462:47:6" + "src": "9461:47:6" }, { "condition": { @@ -35207,7 +35207,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1559, - "src": "9518:12:6", + "src": "9517:12:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35225,7 +35225,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9533:1:6", + "src": "9532:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -35233,7 +35233,7 @@ }, "value": "0" }, - "src": "9518:16:6", + "src": "9517:16:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -35242,11 +35242,11 @@ "falseBody": null, "id": 1577, "nodeType": "IfStatement", - "src": "9514:85:6", + "src": "9513:85:6", "trueBody": { "id": 1576, "nodeType": "Block", - "src": "9539:60:6", + "src": "9538:60:6", "statements": [ { "expression": { @@ -35267,7 +35267,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1546, - "src": "9560:7:6", + "src": "9559:7:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Dataset_$279", "typeString": "contract Dataset" @@ -35281,7 +35281,7 @@ "memberName": "m_owner", "nodeType": "MemberAccess", "referencedDeclaration": 3681, - "src": "9560:15:6", + "src": "9559:15:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -35295,7 +35295,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9560:17:6", + "src": "9559:17:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -35308,7 +35308,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1559, - "src": "9579:12:6", + "src": "9578:12:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35331,7 +35331,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "9553:6:6", + "src": "9552:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -35345,7 +35345,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9553:39:6", + "src": "9552:39:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -35364,7 +35364,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "9545:7:6", + "src": "9544:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -35378,7 +35378,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9545:48:6", + "src": "9544:48:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -35386,7 +35386,7 @@ }, "id": 1575, "nodeType": "ExpressionStatement", - "src": "9545:48:6" + "src": "9544:48:6" } ] } @@ -35403,7 +35403,7 @@ "name": "value", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "10072:13:6", + "src": "10071:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -35414,7 +35414,7 @@ "id": 1580, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "10072:7:6", + "src": "10071:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35427,7 +35427,7 @@ "id": 1582, "initialValue": null, "nodeType": "VariableDeclarationStatement", - "src": "10072:13:6" + "src": "10071:13:6" }, { "assignments": [], @@ -35438,7 +35438,7 @@ "name": "workerpoolOwner", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "10089:23:6", + "src": "10088:23:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -35449,7 +35449,7 @@ "id": 1583, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10089:7:6", + "src": "10088:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -35462,7 +35462,7 @@ "id": 1585, "initialValue": null, "nodeType": "VariableDeclarationStatement", - "src": "10089:23:6" + "src": "10088:23:6" }, { "expression": { @@ -35485,7 +35485,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10120:5:6", + "src": "10119:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35501,7 +35501,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1584, - "src": "10129:15:6", + "src": "10128:15:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -35515,7 +35515,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "TupleExpression", - "src": "10116:29:6", + "src": "10115:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$__$__$_t_uint256_$__$__$__$_t_address_$", "typeString": "tuple(,,,uint256,,,,address)" @@ -35538,7 +35538,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10175:9:6", + "src": "10174:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -35552,7 +35552,7 @@ "memberName": "m_marketorderIdx", "nodeType": "MemberAccess", "referencedDeclaration": 4042, - "src": "10175:26:6", + "src": "10174:26:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -35566,7 +35566,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10175:28:6", + "src": "10174:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35587,7 +35587,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 756, - "src": "10148:11:6", + "src": "10147:11:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Marketplace_$3513", "typeString": "contract Marketplace" @@ -35601,7 +35601,7 @@ "memberName": "getMarketOrder", "nodeType": "MemberAccess", "referencedDeclaration": 3372, - "src": "10148:26:6", + "src": "10147:26:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_enum$_MarketOrderDirectionEnum_$2809_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$", "typeString": "function (uint256) view external returns (enum IexecLib.MarketOrderDirectionEnum,uint256,uint256,uint256,uint256,uint256,address,address)" @@ -35615,13 +35615,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10148:56:6", + "src": "10147:56:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_enum$_MarketOrderDirectionEnum_$2809_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$", "typeString": "tuple(enum IexecLib.MarketOrderDirectionEnum,uint256,uint256,uint256,uint256,uint256,address,address)" } }, - "src": "10116:88:6", + "src": "10115:88:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -35629,7 +35629,7 @@ }, "id": 1596, "nodeType": "ExpressionStatement", - "src": "10116:88:6" + "src": "10115:88:6" }, { "assignments": [ @@ -35642,7 +35642,7 @@ "name": "workerpoolStake", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "10237:23:6", + "src": "10236:23:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -35653,7 +35653,7 @@ "id": 1597, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "10237:7:6", + "src": "10236:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35679,7 +35679,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 756, - "src": "10286:11:6", + "src": "10285:11:6", "typeDescriptions": { "typeIdentifier": "t_contract$_Marketplace_$3513", "typeString": "contract Marketplace" @@ -35693,7 +35693,7 @@ "memberName": "ASK_STAKE_RATIO", "nodeType": "MemberAccess", "referencedDeclaration": 2914, - "src": "10286:27:6", + "src": "10285:27:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -35707,7 +35707,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10286:29:6", + "src": "10285:29:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35728,7 +35728,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10269:5:6", + "src": "10268:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35742,7 +35742,7 @@ "memberName": "percentage", "nodeType": "MemberAccess", "referencedDeclaration": 3914, - "src": "10269:16:6", + "src": "10268:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -35756,14 +35756,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10269:47:6", + "src": "10268:47:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10237:79:6" + "src": "10236:79:6" }, { "expression": { @@ -35784,7 +35784,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10336:9:6", + "src": "10335:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -35798,7 +35798,7 @@ "memberName": "m_requester", "nodeType": "MemberAccess", "referencedDeclaration": 4050, - "src": "10336:21:6", + "src": "10335:21:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -35812,7 +35812,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10336:23:6", + "src": "10335:23:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -35833,7 +35833,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10371:9:6", + "src": "10370:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -35847,7 +35847,7 @@ "memberName": "m_emitcost", "nodeType": "MemberAccess", "referencedDeclaration": 4052, - "src": "10371:20:6", + "src": "10370:20:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -35861,7 +35861,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10371:22:6", + "src": "10370:22:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35882,7 +35882,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10361:5:6", + "src": "10360:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35896,7 +35896,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "10361:9:6", + "src": "10360:9:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -35910,7 +35910,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10361:33:6", + "src": "10360:33:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -35933,7 +35933,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2359, - "src": "10329:5:6", + "src": "10328:5:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -35947,7 +35947,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10329:66:6", + "src": "10328:66:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -35966,7 +35966,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "10321:7:6", + "src": "10320:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -35980,7 +35980,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10321:75:6", + "src": "10320:75:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -35988,7 +35988,7 @@ }, "id": 1619, "nodeType": "ExpressionStatement", - "src": "10321:75:6" + "src": "10320:75:6" }, { "expression": { @@ -36004,7 +36004,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1584, - "src": "10468:15:6", + "src": "10467:15:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -36017,7 +36017,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1598, - "src": "10493:15:6", + "src": "10492:15:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36040,7 +36040,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "10461:6:6", + "src": "10460:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -36054,7 +36054,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10461:48:6", + "src": "10460:48:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -36073,7 +36073,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "10453:7:6", + "src": "10452:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -36087,7 +36087,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:57:6", + "src": "10452:57:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -36095,7 +36095,7 @@ }, "id": 1626, "nodeType": "ExpressionStatement", - "src": "10453:57:6" + "src": "10452:57:6" }, { "expression": { @@ -36108,7 +36108,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1480, - "src": "10580:7:6", + "src": "10579:7:6", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" @@ -36121,7 +36121,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1482, - "src": "10589:7:6", + "src": "10588:7:6", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" @@ -36134,7 +36134,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1484, - "src": "10598:4:6", + "src": "10597:4:6", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" @@ -36163,7 +36163,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "10560:9:6", + "src": "10559:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -36177,7 +36177,7 @@ "memberName": "setResult", "nodeType": "MemberAccess", "referencedDeclaration": 4298, - "src": "10560:19:6", + "src": "10559:19:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory,string memory,string memory) external" @@ -36191,7 +36191,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10560:43:6", + "src": "10559:43:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -36199,7 +36199,7 @@ }, "id": 1634, "nodeType": "ExpressionStatement", - "src": "10560:43:6" + "src": "10559:43:6" }, { "expression": { @@ -36216,7 +36216,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "10951:5:6", + "src": "10950:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36235,7 +36235,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "10959:10:6", + "src": "10958:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -36249,7 +36249,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7063, - "src": "10970:4:6", + "src": "10969:4:6", "typeDescriptions": { "typeIdentifier": "t_contract$_IexecHub_$2436", "typeString": "contract IexecHub" @@ -36260,7 +36260,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10959:16:6", + "src": "10958:16:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -36274,13 +36274,13 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "10959:23:6", + "src": "10958:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10951:31:6", + "src": "10950:31:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36288,7 +36288,7 @@ }, "id": 1641, "nodeType": "ExpressionStatement", - "src": "10951:31:6" + "src": "10950:31:6" }, { "condition": { @@ -36309,7 +36309,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11025:5:6", + "src": "11024:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36327,7 +36327,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11033:1:6", + "src": "11032:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -36335,7 +36335,7 @@ }, "value": "0" }, - "src": "11025:9:6", + "src": "11024:9:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -36344,11 +36344,11 @@ "falseBody": null, "id": 1673, "nodeType": "IfStatement", - "src": "11022:199:6", + "src": "11021:199:6", "trueBody": { "id": 1672, "nodeType": "Block", - "src": "11038:183:6", + "src": "11037:183:6", "statements": [ { "expression": { @@ -36365,7 +36365,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11043:5:6", + "src": "11042:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36386,7 +36386,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 745, - "src": "11101:25:6", + "src": "11100:25:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36410,7 +36410,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 742, - "src": "11078:17:6", + "src": "11077:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36431,7 +36431,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11061:5:6", + "src": "11060:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36445,7 +36445,7 @@ "memberName": "percentage", "nodeType": "MemberAccess", "referencedDeclaration": 3914, - "src": "11061:16:6", + "src": "11060:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -36459,7 +36459,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11061:35:6", + "src": "11060:35:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36473,7 +36473,7 @@ "memberName": "max", "nodeType": "MemberAccess", "referencedDeclaration": 3861, - "src": "11061:39:6", + "src": "11060:39:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -36487,7 +36487,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11061:66:6", + "src": "11060:66:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36508,7 +36508,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11051:5:6", + "src": "11050:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36522,7 +36522,7 @@ "memberName": "min", "nodeType": "MemberAccess", "referencedDeclaration": 3878, - "src": "11051:9:6", + "src": "11050:9:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -36536,13 +36536,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11051:77:6", + "src": "11050:77:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11043:85:6", + "src": "11042:85:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36550,7 +36550,7 @@ }, "id": 1657, "nodeType": "ExpressionStatement", - "src": "11043:85:6" + "src": "11042:85:6" }, { "expression": { @@ -36566,7 +36566,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7063, - "src": "11147:4:6", + "src": "11146:4:6", "typeDescriptions": { "typeIdentifier": "t_contract$_IexecHub_$2436", "typeString": "contract IexecHub" @@ -36579,7 +36579,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11165:5:6", + "src": "11164:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36602,7 +36602,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2359, - "src": "11141:5:6", + "src": "11140:5:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -36616,7 +36616,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11141:30:6", + "src": "11140:30:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -36635,7 +36635,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11133:7:6", + "src": "11132:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -36649,7 +36649,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11133:39:6", + "src": "11132:39:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -36657,7 +36657,7 @@ }, "id": 1664, "nodeType": "ExpressionStatement", - "src": "11133:39:6" + "src": "11132:39:6" }, { "expression": { @@ -36673,7 +36673,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1584, - "src": "11192:15:6", + "src": "11191:15:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -36686,7 +36686,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1581, - "src": "11209:5:6", + "src": "11208:5:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -36709,7 +36709,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "11185:6:6", + "src": "11184:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -36723,7 +36723,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11185:30:6", + "src": "11184:30:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -36742,7 +36742,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11177:7:6", + "src": "11176:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -36756,7 +36756,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11177:39:6", + "src": "11176:39:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -36764,7 +36764,7 @@ }, "id": 1671, "nodeType": "ExpressionStatement", - "src": "11177:39:6" + "src": "11176:39:6" } ] } @@ -36780,7 +36780,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1478, - "src": "11249:5:6", + "src": "11248:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -36798,7 +36798,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1493, - "src": "11256:9:6", + "src": "11255:9:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -36812,7 +36812,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "11256:22:6", + "src": "11255:22:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -36826,7 +36826,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11256:24:6", + "src": "11255:24:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -36849,7 +36849,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 832, - "src": "11230:18:6", + "src": "11229:18:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -36863,7 +36863,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11230:51:6", + "src": "11229:51:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -36871,7 +36871,7 @@ }, "id": 1680, "nodeType": "EmitStatement", - "src": "11225:56:6" + "src": "11224:56:6" }, { "expression": { @@ -36884,7 +36884,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11292:4:6", + "src": "11291:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -36895,7 +36895,7 @@ "functionReturnParameters": 1491, "id": 1682, "nodeType": "Return", - "src": "11285:11:6" + "src": "11284:11:6" } ] }, @@ -36914,7 +36914,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1478, - "src": "8996:5:6", + "src": "8995:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -36929,14 +36929,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "8977:18:6", + "src": "8976:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "8977:25:6" + "src": "8976:25:6" } ], "name": "finalizeWorkOrder", @@ -36951,7 +36951,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8900:13:6", + "src": "8899:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -36962,7 +36962,7 @@ "id": 1477, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8900:7:6", + "src": "8899:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -36977,7 +36977,7 @@ "name": "_stdout", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8917:15:6", + "src": "8916:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -36988,7 +36988,7 @@ "id": 1479, "name": "string", "nodeType": "ElementaryTypeName", - "src": "8917:6:6", + "src": "8916:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -37003,7 +37003,7 @@ "name": "_stderr", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8936:15:6", + "src": "8935:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37014,7 +37014,7 @@ "id": 1481, "name": "string", "nodeType": "ElementaryTypeName", - "src": "8936:6:6", + "src": "8935:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -37029,7 +37029,7 @@ "name": "_uri", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "8955:12:6", + "src": "8954:12:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37040,7 +37040,7 @@ "id": 1483, "name": "string", "nodeType": "ElementaryTypeName", - "src": "8955:6:6", + "src": "8954:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -37050,7 +37050,7 @@ "visibility": "internal" } ], - "src": "8896:72:6" + "src": "8895:72:6" }, "payable": false, "returnParameters": { @@ -37063,7 +37063,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 1684, - "src": "9012:4:6", + "src": "9011:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37074,7 +37074,7 @@ "id": 1489, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9012:4:6", + "src": "9011:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -37084,10 +37084,10 @@ "visibility": "internal" } ], - "src": "9011:6:6" + "src": "9010:6:6" }, "scope": 2436, - "src": "8870:2430:6", + "src": "8869:2430:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -37096,7 +37096,7 @@ "body": { "id": 1702, "nodeType": "Block", - "src": "11424:89:6", + "src": "11423:89:6", "statements": [ { "expression": { @@ -37112,7 +37112,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1686, - "src": "11453:6:6", + "src": "11452:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37131,7 +37131,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1718, - "src": "11436:16:6", + "src": "11435:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" @@ -37145,7 +37145,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11436:24:6", + "src": "11435:24:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -37164,7 +37164,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11428:7:6", + "src": "11427:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -37178,7 +37178,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11428:33:6", + "src": "11427:33:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -37186,7 +37186,7 @@ }, "id": 1696, "nodeType": "ExpressionStatement", - "src": "11428:33:6" + "src": "11427:33:6" }, { "expression": { @@ -37200,7 +37200,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11472:12:6", + "src": "11471:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -37214,7 +37214,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1686, - "src": "11485:6:6", + "src": "11484:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37225,7 +37225,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11472:20:6", + "src": "11471:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -37239,7 +37239,7 @@ "memberName": "workClockTimeRef", "nodeType": "MemberAccess", "referencedDeclaration": 2891, - "src": "11472:37:6", + "src": "11471:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37248,7 +37248,7 @@ "functionReturnParameters": 1690, "id": 1701, "nodeType": "Return", - "src": "11465:44:6" + "src": "11464:44:6" } ] }, @@ -37270,7 +37270,7 @@ "name": "_catId", "nodeType": "VariableDeclaration", "scope": 1703, - "src": "11360:14:6", + "src": "11359:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37281,7 +37281,7 @@ "id": 1685, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11360:7:6", + "src": "11359:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37291,7 +37291,7 @@ "visibility": "internal" } ], - "src": "11359:16:6" + "src": "11358:16:6" }, "payable": false, "returnParameters": { @@ -37304,7 +37304,7 @@ "name": "workClockTimeRef", "nodeType": "VariableDeclaration", "scope": 1703, - "src": "11397:24:6", + "src": "11396:24:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37315,7 +37315,7 @@ "id": 1688, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11397:7:6", + "src": "11396:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37325,10 +37325,10 @@ "visibility": "internal" } ], - "src": "11396:26:6" + "src": "11395:26:6" }, "scope": 2436, - "src": "11323:190:6", + "src": "11322:190:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -37337,7 +37337,7 @@ "body": { "id": 1717, "nodeType": "Block", - "src": "11601:45:6", + "src": "11600:45:6", "statements": [ { "expression": { @@ -37362,7 +37362,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11612:12:6", + "src": "11611:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -37376,7 +37376,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1705, - "src": "11625:6:6", + "src": "11624:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37387,7 +37387,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11612:20:6", + "src": "11611:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -37401,7 +37401,7 @@ "memberName": "catid", "nodeType": "MemberAccess", "referencedDeclaration": 2885, - "src": "11612:26:6", + "src": "11611:26:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37419,7 +37419,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11641:1:6", + "src": "11640:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -37427,7 +37427,7 @@ }, "value": "0" }, - "src": "11612:30:6", + "src": "11611:30:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -37436,7 +37436,7 @@ "functionReturnParameters": 1709, "id": 1716, "nodeType": "Return", - "src": "11605:37:6" + "src": "11604:37:6" } ] }, @@ -37458,7 +37458,7 @@ "name": "_catId", "nodeType": "VariableDeclaration", "scope": 1718, - "src": "11542:14:6", + "src": "11541:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37469,7 +37469,7 @@ "id": 1704, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11542:7:6", + "src": "11541:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37479,7 +37479,7 @@ "visibility": "internal" } ], - "src": "11541:16:6" + "src": "11540:16:6" }, "payable": false, "returnParameters": { @@ -37492,7 +37492,7 @@ "name": "categoryExist", "nodeType": "VariableDeclaration", "scope": 1718, - "src": "11580:18:6", + "src": "11579:18:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37503,7 +37503,7 @@ "id": 1707, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11580:4:6", + "src": "11579:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -37513,10 +37513,10 @@ "visibility": "internal" } ], - "src": "11579:20:6" + "src": "11578:20:6" }, "scope": 2436, - "src": "11516:130:6", + "src": "11515:130:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -37525,7 +37525,7 @@ "body": { "id": 1755, "nodeType": "Block", - "src": "11783:196:6", + "src": "11782:196:6", "statements": [ { "expression": { @@ -37541,7 +37541,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11812:6:6", + "src": "11811:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37560,7 +37560,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1718, - "src": "11795:16:6", + "src": "11794:16:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" @@ -37574,7 +37574,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11795:24:6", + "src": "11794:24:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -37593,7 +37593,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "11787:7:6", + "src": "11786:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -37607,7 +37607,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11787:33:6", + "src": "11786:33:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -37615,7 +37615,7 @@ }, "id": 1736, "nodeType": "ExpressionStatement", - "src": "11787:33:6" + "src": "11786:33:6" }, { "expression": { @@ -37632,7 +37632,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11836:12:6", + "src": "11835:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -37646,7 +37646,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11849:6:6", + "src": "11848:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37657,7 +37657,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11836:20:6", + "src": "11835:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -37671,7 +37671,7 @@ "memberName": "catid", "nodeType": "MemberAccess", "referencedDeclaration": 2885, - "src": "11836:26:6", + "src": "11835:26:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37688,7 +37688,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11867:12:6", + "src": "11866:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -37702,7 +37702,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11880:6:6", + "src": "11879:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37713,7 +37713,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11867:20:6", + "src": "11866:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -37727,7 +37727,7 @@ "memberName": "name", "nodeType": "MemberAccess", "referencedDeclaration": 2887, - "src": "11867:25:6", + "src": "11866:25:6", "typeDescriptions": { "typeIdentifier": "t_string_storage", "typeString": "string storage ref" @@ -37744,7 +37744,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11897:12:6", + "src": "11896:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -37758,7 +37758,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11910:6:6", + "src": "11909:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37769,7 +37769,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11897:20:6", + "src": "11896:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -37783,7 +37783,7 @@ "memberName": "description", "nodeType": "MemberAccess", "referencedDeclaration": 2889, - "src": "11897:32:6", + "src": "11896:32:6", "typeDescriptions": { "typeIdentifier": "t_string_storage", "typeString": "string storage ref" @@ -37800,7 +37800,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 773, - "src": "11934:12:6", + "src": "11933:12:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Category_$2892_storage_$", "typeString": "mapping(uint256 => struct IexecLib.Category storage ref)" @@ -37814,7 +37814,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1720, - "src": "11947:6:6", + "src": "11946:6:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37825,7 +37825,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11934:20:6", + "src": "11933:20:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Category_$2892_storage", "typeString": "struct IexecLib.Category storage ref" @@ -37839,7 +37839,7 @@ "memberName": "workClockTimeRef", "nodeType": "MemberAccess", "referencedDeclaration": 2891, - "src": "11934:37:6", + "src": "11933:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37853,7 +37853,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "11831:144:6", + "src": "11830:144:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint256_$_t_string_storage_$_t_string_storage_$_t_uint256_$", "typeString": "tuple(uint256,string storage ref,string storage ref,uint256)" @@ -37862,7 +37862,7 @@ "functionReturnParameters": 1730, "id": 1754, "nodeType": "Return", - "src": "11824:151:6" + "src": "11823:151:6" } ] }, @@ -37884,7 +37884,7 @@ "name": "_catId", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11670:14:6", + "src": "11669:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37895,7 +37895,7 @@ "id": 1719, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11670:7:6", + "src": "11669:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37905,7 +37905,7 @@ "visibility": "internal" } ], - "src": "11669:16:6" + "src": "11668:16:6" }, "payable": false, "returnParameters": { @@ -37918,7 +37918,7 @@ "name": "catid", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11707:13:6", + "src": "11706:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37929,7 +37929,7 @@ "id": 1722, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11707:7:6", + "src": "11706:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -37944,7 +37944,7 @@ "name": "name", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11722:11:6", + "src": "11721:11:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37955,7 +37955,7 @@ "id": 1724, "name": "string", "nodeType": "ElementaryTypeName", - "src": "11722:6:6", + "src": "11721:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -37970,7 +37970,7 @@ "name": "description", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11735:19:6", + "src": "11734:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -37981,7 +37981,7 @@ "id": 1726, "name": "string", "nodeType": "ElementaryTypeName", - "src": "11735:6:6", + "src": "11734:6:6", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string storage pointer" @@ -37996,7 +37996,7 @@ "name": "workClockTimeRef", "nodeType": "VariableDeclaration", "scope": 1756, - "src": "11756:24:6", + "src": "11755:24:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -38007,7 +38007,7 @@ "id": 1728, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11756:7:6", + "src": "11755:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -38017,10 +38017,10 @@ "visibility": "internal" } ], - "src": "11706:75:6" + "src": "11705:75:6" }, "scope": 2436, - "src": "11649:330:6", + "src": "11648:330:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -38029,7 +38029,7 @@ "body": { "id": 1774, "nodeType": "Block", - "src": "12087:79:6", + "src": "12086:79:6", "statements": [ { "expression": { @@ -38045,7 +38045,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1758, - "src": "12134:7:6", + "src": "12133:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38066,7 +38066,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "12099:13:6", + "src": "12098:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -38080,7 +38080,7 @@ "memberName": "getWorkerAffectation", "nodeType": "MemberAccess", "referencedDeclaration": 6199, - "src": "12099:34:6", + "src": "12098:34:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", "typeString": "function (address) view external returns (address)" @@ -38094,7 +38094,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12099:43:6", + "src": "12098:43:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38109,7 +38109,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "12144:8:6", + "src": "12143:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -38123,7 +38123,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1758, - "src": "12153:7:6", + "src": "12152:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38134,7 +38134,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12144:17:6", + "src": "12143:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -38148,7 +38148,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "12098:64:6", + "src": "12097:64:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$", "typeString": "tuple(address,uint256)" @@ -38157,7 +38157,7 @@ "functionReturnParameters": 1764, "id": 1773, "nodeType": "Return", - "src": "12091:71:6" + "src": "12090:71:6" } ] }, @@ -38179,7 +38179,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1775, - "src": "12007:15:6", + "src": "12006:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -38190,7 +38190,7 @@ "id": 1757, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12007:7:6", + "src": "12006:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38200,7 +38200,7 @@ "visibility": "internal" } ], - "src": "12006:17:6" + "src": "12005:17:6" }, "payable": false, "returnParameters": { @@ -38213,7 +38213,7 @@ "name": "workerPool", "nodeType": "VariableDeclaration", "scope": 1775, - "src": "12045:18:6", + "src": "12044:18:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -38224,7 +38224,7 @@ "id": 1760, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12045:7:6", + "src": "12044:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38239,7 +38239,7 @@ "name": "workerScore", "nodeType": "VariableDeclaration", "scope": 1775, - "src": "12065:19:6", + "src": "12064:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -38250,7 +38250,7 @@ "id": 1762, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "12065:7:6", + "src": "12064:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -38260,10 +38260,10 @@ "visibility": "internal" } ], - "src": "12044:41:6" + "src": "12043:41:6" }, "scope": 2436, - "src": "11982:184:6", + "src": "11981:184:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -38272,7 +38272,7 @@ "body": { "id": 1786, "nodeType": "Block", - "src": "12253:32:6", + "src": "12252:32:6", "statements": [ { "expression": { @@ -38284,7 +38284,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "12264:8:6", + "src": "12263:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -38298,7 +38298,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1777, - "src": "12273:7:6", + "src": "12272:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38309,7 +38309,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12264:17:6", + "src": "12263:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -38318,7 +38318,7 @@ "functionReturnParameters": 1781, "id": 1785, "nodeType": "Return", - "src": "12257:24:6" + "src": "12256:24:6" } ] }, @@ -38340,7 +38340,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1787, - "src": "12193:15:6", + "src": "12192:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -38351,7 +38351,7 @@ "id": 1776, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12193:7:6", + "src": "12192:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38361,7 +38361,7 @@ "visibility": "internal" } ], - "src": "12192:17:6" + "src": "12191:17:6" }, "payable": false, "returnParameters": { @@ -38374,7 +38374,7 @@ "name": "workerScore", "nodeType": "VariableDeclaration", "scope": 1787, - "src": "12231:19:6", + "src": "12230:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -38385,7 +38385,7 @@ "id": 1779, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "12231:7:6", + "src": "12230:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -38395,10 +38395,10 @@ "visibility": "internal" } ], - "src": "12230:21:6" + "src": "12229:21:6" }, "scope": 2436, - "src": "12169:116:6", + "src": "12168:116:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -38407,7 +38407,7 @@ "body": { "id": 1856, "nodeType": "Block", - "src": "12425:628:6", + "src": "12424:628:6", "statements": [ { "assignments": [ @@ -38420,7 +38420,7 @@ "name": "workerpool", "nodeType": "VariableDeclaration", "scope": 1857, - "src": "12429:21:6", + "src": "12428:21:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -38433,7 +38433,7 @@ "name": "WorkerPool", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 6097, - "src": "12429:10:6", + "src": "12428:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -38456,7 +38456,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "12464:3:6", + "src": "12463:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -38470,7 +38470,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12464:10:6", + "src": "12463:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38489,7 +38489,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6097, - "src": "12453:10:6", + "src": "12452:10:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkerPool_$6097_$", "typeString": "type(contract WorkerPool)" @@ -38503,14 +38503,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12453:22:6", + "src": "12452:22:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" } }, "nodeType": "VariableDeclarationStatement", - "src": "12429:46:6" + "src": "12428:46:6" }, { "expression": { @@ -38528,7 +38528,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "12547:3:6", + "src": "12546:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -38542,7 +38542,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12547:10:6", + "src": "12546:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38563,7 +38563,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "12510:13:6", + "src": "12509:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -38577,7 +38577,7 @@ "memberName": "isWorkerPoolRegistered", "nodeType": "MemberAccess", "referencedDeclaration": 6147, - "src": "12510:36:6", + "src": "12509:36:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", "typeString": "function (address) view external returns (bool)" @@ -38591,7 +38591,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12510:48:6", + "src": "12509:48:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -38610,7 +38610,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12502:7:6", + "src": "12501:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -38624,7 +38624,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12502:57:6", + "src": "12501:57:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -38632,7 +38632,7 @@ }, "id": 1808, "nodeType": "ExpressionStatement", - "src": "12502:57:6" + "src": "12501:57:6" }, { "expression": { @@ -38648,7 +38648,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12601:7:6", + "src": "12600:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38666,7 +38666,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1795, - "src": "12610:10:6", + "src": "12609:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -38680,7 +38680,7 @@ "memberName": "m_subscriptionLockStakePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4326, - "src": "12610:40:6", + "src": "12609:40:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -38694,7 +38694,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12610:42:6", + "src": "12609:42:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -38717,7 +38717,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2397, - "src": "12596:4:6", + "src": "12595:4:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -38731,7 +38731,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12596:57:6", + "src": "12595:57:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -38750,7 +38750,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12588:7:6", + "src": "12587:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -38764,7 +38764,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12588:66:6", + "src": "12587:66:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -38772,7 +38772,7 @@ }, "id": 1817, "nodeType": "ExpressionStatement", - "src": "12588:66:6" + "src": "12587:66:6" }, { "expression": { @@ -38800,7 +38800,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "12697:10:6", + "src": "12696:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -38814,7 +38814,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12708:7:6", + "src": "12707:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38825,7 +38825,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12697:19:6", + "src": "12696:19:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -38839,7 +38839,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "12697:25:6", + "src": "12696:25:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -38859,7 +38859,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1795, - "src": "12726:10:6", + "src": "12725:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -38873,7 +38873,7 @@ "memberName": "m_subscriptionMinimumStakePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4328, - "src": "12726:43:6", + "src": "12725:43:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -38887,13 +38887,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12726:45:6", + "src": "12725:45:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12697:74:6", + "src": "12696:74:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -38912,7 +38912,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12689:7:6", + "src": "12688:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -38926,7 +38926,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12689:83:6", + "src": "12688:83:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -38934,7 +38934,7 @@ }, "id": 1828, "nodeType": "ExpressionStatement", - "src": "12689:83:6" + "src": "12688:83:6" }, { "expression": { @@ -38960,7 +38960,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "12784:8:6", + "src": "12783:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -38974,7 +38974,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12793:7:6", + "src": "12792:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -38985,7 +38985,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12784:17:6", + "src": "12783:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -39005,7 +39005,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1795, - "src": "12813:10:6", + "src": "12812:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -39019,7 +39019,7 @@ "memberName": "m_subscriptionMinimumScorePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4330, - "src": "12813:43:6", + "src": "12812:43:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -39033,13 +39033,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12813:45:6", + "src": "12812:45:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12784:74:6", + "src": "12783:74:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -39058,7 +39058,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12776:7:6", + "src": "12775:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -39072,7 +39072,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12776:83:6", + "src": "12775:83:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -39080,7 +39080,7 @@ }, "id": 1838, "nodeType": "ExpressionStatement", - "src": "12776:83:6" + "src": "12775:83:6" }, { "expression": { @@ -39098,7 +39098,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "12935:3:6", + "src": "12934:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -39112,7 +39112,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12935:10:6", + "src": "12934:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39125,7 +39125,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "12947:7:6", + "src": "12946:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39150,7 +39150,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "12895:13:6", + "src": "12894:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -39164,7 +39164,7 @@ "memberName": "registerWorkerAffectation", "nodeType": "MemberAccess", "referencedDeclaration": 6318, - "src": "12895:39:6", + "src": "12894:39:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) external returns (bool)" @@ -39178,7 +39178,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12895:60:6", + "src": "12894:60:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -39197,7 +39197,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "12887:7:6", + "src": "12886:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -39211,7 +39211,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12887:69:6", + "src": "12886:69:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -39219,7 +39219,7 @@ }, "id": 1847, "nodeType": "ExpressionStatement", - "src": "12887:69:6" + "src": "12886:69:6" }, { "eventCall": { @@ -39234,7 +39234,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13014:3:6", + "src": "13013:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -39248,7 +39248,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13014:10:6", + "src": "13013:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39261,7 +39261,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "13026:7:6", + "src": "13025:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39284,7 +39284,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 880, - "src": "12991:22:6", + "src": "12990:22:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -39298,7 +39298,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12991:43:6", + "src": "12990:43:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -39306,7 +39306,7 @@ }, "id": 1853, "nodeType": "EmitStatement", - "src": "12986:48:6" + "src": "12985:48:6" }, { "expression": { @@ -39319,7 +39319,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13045:4:6", + "src": "13044:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -39330,7 +39330,7 @@ "functionReturnParameters": 1793, "id": 1855, "nodeType": "Return", - "src": "13038:11:6" + "src": "13037:11:6" } ] }, @@ -39352,7 +39352,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1857, - "src": "12346:15:6", + "src": "12345:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -39363,7 +39363,7 @@ "id": 1788, "name": "address", "nodeType": "ElementaryTypeName", - "src": "12346:7:6", + "src": "12345:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39373,7 +39373,7 @@ "visibility": "internal" } ], - "src": "12345:17:6" + "src": "12344:17:6" }, "payable": false, "returnParameters": { @@ -39386,7 +39386,7 @@ "name": "subscribed", "nodeType": "VariableDeclaration", "scope": 1857, - "src": "12379:15:6", + "src": "12378:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -39397,7 +39397,7 @@ "id": 1791, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "12379:4:6", + "src": "12378:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -39407,10 +39407,10 @@ "visibility": "internal" } ], - "src": "12378:17:6" + "src": "12377:17:6" }, "scope": 2436, - "src": "12322:731:6", + "src": "12321:731:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -39419,7 +39419,7 @@ "body": { "id": 1880, "nodeType": "Block", - "src": "13165:145:6", + "src": "13164:145:6", "statements": [ { "expression": { @@ -39437,7 +39437,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13190:3:6", + "src": "13189:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -39451,7 +39451,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13190:10:6", + "src": "13189:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39464,7 +39464,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1859, - "src": "13202:7:6", + "src": "13201:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39487,7 +39487,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1947, - "src": "13177:12:6", + "src": "13176:12:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) returns (bool)" @@ -39501,7 +39501,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13177:33:6", + "src": "13176:33:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -39520,7 +39520,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13169:7:6", + "src": "13168:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -39534,7 +39534,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13169:42:6", + "src": "13168:42:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -39542,7 +39542,7 @@ }, "id": 1871, "nodeType": "ExpressionStatement", - "src": "13169:42:6" + "src": "13168:42:6" }, { "eventCall": { @@ -39557,7 +39557,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13271:3:6", + "src": "13270:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -39571,7 +39571,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13271:10:6", + "src": "13270:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39584,7 +39584,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1859, - "src": "13283:7:6", + "src": "13282:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39607,7 +39607,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 886, - "src": "13246:24:6", + "src": "13245:24:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -39621,7 +39621,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13246:45:6", + "src": "13245:45:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -39629,7 +39629,7 @@ }, "id": 1877, "nodeType": "EmitStatement", - "src": "13241:50:6" + "src": "13240:50:6" }, { "expression": { @@ -39642,7 +39642,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13302:4:6", + "src": "13301:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -39653,7 +39653,7 @@ "functionReturnParameters": 1863, "id": 1879, "nodeType": "Return", - "src": "13295:11:6" + "src": "13294:11:6" } ] }, @@ -39675,7 +39675,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1881, - "src": "13084:15:6", + "src": "13083:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -39686,7 +39686,7 @@ "id": 1858, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13084:7:6", + "src": "13083:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39696,7 +39696,7 @@ "visibility": "internal" } ], - "src": "13083:17:6" + "src": "13082:17:6" }, "payable": false, "returnParameters": { @@ -39709,7 +39709,7 @@ "name": "unsubscribed", "nodeType": "VariableDeclaration", "scope": 1881, - "src": "13117:17:6", + "src": "13116:17:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -39720,7 +39720,7 @@ "id": 1861, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13117:4:6", + "src": "13116:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -39730,10 +39730,10 @@ "visibility": "internal" } ], - "src": "13116:19:6" + "src": "13115:19:6" }, "scope": 2436, - "src": "13056:254:6", + "src": "13055:254:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -39742,7 +39742,7 @@ "body": { "id": 1904, "nodeType": "Block", - "src": "13415:139:6", + "src": "13414:139:6", "statements": [ { "expression": { @@ -39760,7 +39760,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13440:3:6", + "src": "13439:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -39774,7 +39774,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13440:10:6", + "src": "13439:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39787,7 +39787,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1883, - "src": "13452:7:6", + "src": "13451:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39810,7 +39810,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1947, - "src": "13427:12:6", + "src": "13426:12:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) returns (bool)" @@ -39824,7 +39824,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13427:33:6", + "src": "13426:33:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -39843,7 +39843,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13419:7:6", + "src": "13418:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -39857,7 +39857,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13419:42:6", + "src": "13418:42:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -39865,7 +39865,7 @@ }, "id": 1895, "nodeType": "ExpressionStatement", - "src": "13419:42:6" + "src": "13418:42:6" }, { "eventCall": { @@ -39880,7 +39880,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "13515:3:6", + "src": "13514:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -39894,7 +39894,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "13515:10:6", + "src": "13514:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39907,7 +39907,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1883, - "src": "13527:7:6", + "src": "13526:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -39930,7 +39930,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 892, - "src": "13496:18:6", + "src": "13495:18:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -39944,7 +39944,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13496:39:6", + "src": "13495:39:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -39952,7 +39952,7 @@ }, "id": 1901, "nodeType": "EmitStatement", - "src": "13491:44:6" + "src": "13490:44:6" }, { "expression": { @@ -39965,7 +39965,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13546:4:6", + "src": "13545:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -39976,7 +39976,7 @@ "functionReturnParameters": 1887, "id": 1903, "nodeType": "Return", - "src": "13539:11:6" + "src": "13538:11:6" } ] }, @@ -39998,7 +39998,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1905, - "src": "13334:15:6", + "src": "13333:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40009,7 +40009,7 @@ "id": 1882, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13334:7:6", + "src": "13333:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40019,7 +40019,7 @@ "visibility": "internal" } ], - "src": "13333:17:6" + "src": "13332:17:6" }, "payable": false, "returnParameters": { @@ -40032,7 +40032,7 @@ "name": "unsubscribed", "nodeType": "VariableDeclaration", "scope": 1905, - "src": "13367:17:6", + "src": "13366:17:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40043,7 +40043,7 @@ "id": 1885, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13367:4:6", + "src": "13366:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -40053,10 +40053,10 @@ "visibility": "internal" } ], - "src": "13366:19:6" + "src": "13365:19:6" }, "scope": 2436, - "src": "13313:241:6", + "src": "13312:241:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -40065,7 +40065,7 @@ "body": { "id": 1946, "nodeType": "Block", - "src": "13655:352:6", + "src": "13654:352:6", "statements": [ { "assignments": [ @@ -40078,7 +40078,7 @@ "name": "workerpool", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13659:21:6", + "src": "13658:21:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40091,7 +40091,7 @@ "name": "WorkerPool", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 6097, - "src": "13659:10:6", + "src": "13658:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -40112,7 +40112,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1907, - "src": "13694:11:6", + "src": "13693:11:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40131,7 +40131,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 6097, - "src": "13683:10:6", + "src": "13682:10:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkerPool_$6097_$", "typeString": "type(contract WorkerPool)" @@ -40145,14 +40145,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13683:23:6", + "src": "13682:23:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" } }, "nodeType": "VariableDeclarationStatement", - "src": "13659:47:6" + "src": "13658:47:6" }, { "expression": { @@ -40168,7 +40168,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1907, - "src": "13778:11:6", + "src": "13777:11:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40189,7 +40189,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "13741:13:6", + "src": "13740:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -40203,7 +40203,7 @@ "memberName": "isWorkerPoolRegistered", "nodeType": "MemberAccess", "referencedDeclaration": 6147, - "src": "13741:36:6", + "src": "13740:36:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", "typeString": "function (address) view external returns (bool)" @@ -40217,7 +40217,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13741:49:6", + "src": "13740:49:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -40236,7 +40236,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13733:7:6", + "src": "13732:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -40250,7 +40250,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13733:58:6", + "src": "13732:58:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -40258,7 +40258,7 @@ }, "id": 1926, "nodeType": "ExpressionStatement", - "src": "13733:58:6" + "src": "13732:58:6" }, { "expression": { @@ -40274,7 +40274,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1909, - "src": "13835:7:6", + "src": "13834:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40292,7 +40292,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1915, - "src": "13844:10:6", + "src": "13843:10:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPool_$6097", "typeString": "contract WorkerPool" @@ -40306,7 +40306,7 @@ "memberName": "m_subscriptionLockStakePolicy", "nodeType": "MemberAccess", "referencedDeclaration": 4326, - "src": "13844:40:6", + "src": "13843:40:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)" @@ -40320,7 +40320,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13844:42:6", + "src": "13843:42:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -40343,7 +40343,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "13828:6:6", + "src": "13827:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -40357,7 +40357,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13828:59:6", + "src": "13827:59:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -40376,7 +40376,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13820:7:6", + "src": "13819:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -40390,7 +40390,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13820:68:6", + "src": "13819:68:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -40398,7 +40398,7 @@ }, "id": 1935, "nodeType": "ExpressionStatement", - "src": "13820:68:6" + "src": "13819:68:6" }, { "expression": { @@ -40414,7 +40414,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1907, - "src": "13966:11:6", + "src": "13965:11:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40427,7 +40427,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1909, - "src": "13979:7:6", + "src": "13978:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40452,7 +40452,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 754, - "src": "13924:13:6", + "src": "13923:13:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkerPoolHub_$6349", "typeString": "contract WorkerPoolHub" @@ -40466,7 +40466,7 @@ "memberName": "unregisterWorkerAffectation", "nodeType": "MemberAccess", "referencedDeclaration": 6348, - "src": "13924:41:6", + "src": "13923:41:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", "typeString": "function (address,address) external returns (bool)" @@ -40480,7 +40480,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13924:63:6", + "src": "13923:63:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -40499,7 +40499,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "13916:7:6", + "src": "13915:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -40513,7 +40513,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "13916:72:6", + "src": "13915:72:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -40521,7 +40521,7 @@ }, "id": 1943, "nodeType": "ExpressionStatement", - "src": "13916:72:6" + "src": "13915:72:6" }, { "expression": { @@ -40534,7 +40534,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "13999:4:6", + "src": "13998:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -40545,7 +40545,7 @@ "functionReturnParameters": 1913, "id": 1945, "nodeType": "Return", - "src": "13992:11:6" + "src": "13991:11:6" } ] }, @@ -40567,7 +40567,7 @@ "name": "_workerpool", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13579:19:6", + "src": "13578:19:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40578,7 +40578,7 @@ "id": 1906, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13579:7:6", + "src": "13578:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40593,7 +40593,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13600:15:6", + "src": "13599:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40604,7 +40604,7 @@ "id": 1908, "name": "address", "nodeType": "ElementaryTypeName", - "src": "13600:7:6", + "src": "13599:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40614,7 +40614,7 @@ "visibility": "internal" } ], - "src": "13578:38:6" + "src": "13577:38:6" }, "payable": false, "returnParameters": { @@ -40627,7 +40627,7 @@ "name": "unsubscribed", "nodeType": "VariableDeclaration", "scope": 1947, - "src": "13635:17:6", + "src": "13634:17:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40638,7 +40638,7 @@ "id": 1911, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13635:4:6", + "src": "13634:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -40648,10 +40648,10 @@ "visibility": "internal" } ], - "src": "13634:19:6" + "src": "13633:19:6" }, "scope": 2436, - "src": "13557:450:6", + "src": "13556:450:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -40660,7 +40660,7 @@ "body": { "id": 1967, "nodeType": "Block", - "src": "14172:52:6", + "src": "14171:52:6", "statements": [ { "expression": { @@ -40676,7 +40676,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1949, - "src": "14189:5:6", + "src": "14188:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40689,7 +40689,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1951, - "src": "14196:7:6", + "src": "14195:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -40712,7 +40712,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2397, - "src": "14184:4:6", + "src": "14183:4:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -40726,7 +40726,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14184:20:6", + "src": "14183:20:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -40745,7 +40745,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14176:7:6", + "src": "14175:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -40759,7 +40759,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14176:29:6", + "src": "14175:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -40767,7 +40767,7 @@ }, "id": 1964, "nodeType": "ExpressionStatement", - "src": "14176:29:6" + "src": "14175:29:6" }, { "expression": { @@ -40780,7 +40780,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14216:4:6", + "src": "14215:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -40791,7 +40791,7 @@ "functionReturnParameters": 1957, "id": 1966, "nodeType": "Return", - "src": "14209:11:6" + "src": "14208:11:6" } ] }, @@ -40811,14 +40811,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 769, - "src": "14140:15:6", + "src": "14139:15:6", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "14140:15:6" + "src": "14139:15:6" } ], "name": "lockForOrder", @@ -40833,7 +40833,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 1968, - "src": "14101:13:6", + "src": "14100:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40844,7 +40844,7 @@ "id": 1948, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14101:7:6", + "src": "14100:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40859,7 +40859,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 1968, - "src": "14116:15:6", + "src": "14115:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40870,7 +40870,7 @@ "id": 1950, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14116:7:6", + "src": "14115:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -40880,7 +40880,7 @@ "visibility": "internal" } ], - "src": "14100:32:6" + "src": "14099:32:6" }, "payable": false, "returnParameters": { @@ -40893,7 +40893,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 1968, - "src": "14165:4:6", + "src": "14164:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -40904,7 +40904,7 @@ "id": 1955, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14165:4:6", + "src": "14164:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -40914,10 +40914,10 @@ "visibility": "internal" } ], - "src": "14164:6:6" + "src": "14163:6:6" }, "scope": 2436, - "src": "14079:145:6", + "src": "14078:145:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -40926,7 +40926,7 @@ "body": { "id": 1988, "nodeType": "Block", - "src": "14322:54:6", + "src": "14321:54:6", "statements": [ { "expression": { @@ -40942,7 +40942,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1970, - "src": "14341:5:6", + "src": "14340:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -40955,7 +40955,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1972, - "src": "14348:7:6", + "src": "14347:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -40978,7 +40978,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "14334:6:6", + "src": "14333:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -40992,7 +40992,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14334:22:6", + "src": "14333:22:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -41011,7 +41011,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14326:7:6", + "src": "14325:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -41025,7 +41025,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14326:31:6", + "src": "14325:31:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -41033,7 +41033,7 @@ }, "id": 1985, "nodeType": "ExpressionStatement", - "src": "14326:31:6" + "src": "14325:31:6" }, { "expression": { @@ -41046,7 +41046,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14368:4:6", + "src": "14367:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -41057,7 +41057,7 @@ "functionReturnParameters": 1978, "id": 1987, "nodeType": "Return", - "src": "14361:11:6" + "src": "14360:11:6" } ] }, @@ -41077,14 +41077,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 769, - "src": "14290:15:6", + "src": "14289:15:6", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "14290:15:6" + "src": "14289:15:6" } ], "name": "unlockForOrder", @@ -41099,7 +41099,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 1989, - "src": "14250:13:6", + "src": "14249:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -41110,7 +41110,7 @@ "id": 1969, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14250:7:6", + "src": "14249:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41125,7 +41125,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 1989, - "src": "14265:15:6", + "src": "14264:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -41136,7 +41136,7 @@ "id": 1971, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14265:7:6", + "src": "14264:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -41146,7 +41146,7 @@ "visibility": "internal" } ], - "src": "14249:32:6" + "src": "14248:32:6" }, "payable": false, "returnParameters": { @@ -41159,7 +41159,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 1989, - "src": "14315:4:6", + "src": "14314:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -41170,7 +41170,7 @@ "id": 1976, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14315:4:6", + "src": "14314:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -41180,10 +41180,10 @@ "visibility": "internal" } ], - "src": "14314:6:6" + "src": "14313:6:6" }, "scope": 2436, - "src": "14226:150:6", + "src": "14225:150:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -41192,7 +41192,7 @@ "body": { "id": 2023, "nodeType": "Block", - "src": "14507:110:6", + "src": "14506:110:6", "statements": [ { "expression": { @@ -41224,7 +41224,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1991, - "src": "14529:5:6", + "src": "14528:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41243,7 +41243,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "14519:9:6", + "src": "14518:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -41257,7 +41257,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14519:16:6", + "src": "14518:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -41271,7 +41271,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "14519:29:6", + "src": "14518:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -41285,7 +41285,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14519:31:6", + "src": "14518:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41302,7 +41302,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "14554:3:6", + "src": "14553:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -41316,13 +41316,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "14554:10:6", + "src": "14553:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "14519:45:6", + "src": "14518:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -41341,7 +41341,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14511:7:6", + "src": "14510:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -41355,7 +41355,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14511:54:6", + "src": "14510:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -41363,7 +41363,7 @@ }, "id": 2013, "nodeType": "ExpressionStatement", - "src": "14511:54:6" + "src": "14510:54:6" }, { "expression": { @@ -41379,7 +41379,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1993, - "src": "14582:5:6", + "src": "14581:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41392,7 +41392,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1995, - "src": "14589:7:6", + "src": "14588:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -41415,7 +41415,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2397, - "src": "14577:4:6", + "src": "14576:4:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -41429,7 +41429,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14577:20:6", + "src": "14576:20:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -41448,7 +41448,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14569:7:6", + "src": "14568:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -41462,7 +41462,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14569:29:6", + "src": "14568:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -41470,7 +41470,7 @@ }, "id": 2020, "nodeType": "ExpressionStatement", - "src": "14569:29:6" + "src": "14568:29:6" }, { "expression": { @@ -41483,7 +41483,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14609:4:6", + "src": "14608:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -41494,7 +41494,7 @@ "functionReturnParameters": 2002, "id": 2022, "nodeType": "Return", - "src": "14602:11:6" + "src": "14601:11:6" } ] }, @@ -41513,7 +41513,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1991, - "src": "14484:5:6", + "src": "14483:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41528,14 +41528,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "14465:18:6", + "src": "14464:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "14465:25:6" + "src": "14464:25:6" } ], "name": "lockForWork", @@ -41550,7 +41550,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14411:13:6", + "src": "14410:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -41561,7 +41561,7 @@ "id": 1990, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14411:7:6", + "src": "14410:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41576,7 +41576,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14426:13:6", + "src": "14425:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -41587,7 +41587,7 @@ "id": 1992, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14426:7:6", + "src": "14425:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41602,7 +41602,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14441:15:6", + "src": "14440:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -41613,7 +41613,7 @@ "id": 1994, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14441:7:6", + "src": "14440:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -41623,7 +41623,7 @@ "visibility": "internal" } ], - "src": "14410:47:6" + "src": "14409:47:6" }, "payable": false, "returnParameters": { @@ -41636,7 +41636,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2024, - "src": "14500:4:6", + "src": "14499:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -41647,7 +41647,7 @@ "id": 2000, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14500:4:6", + "src": "14499:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -41657,10 +41657,10 @@ "visibility": "internal" } ], - "src": "14499:6:6" + "src": "14498:6:6" }, "scope": 2436, - "src": "14390:227:6", + "src": "14389:227:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -41669,7 +41669,7 @@ "body": { "id": 2058, "nodeType": "Block", - "src": "14738:112:6", + "src": "14737:112:6", "statements": [ { "expression": { @@ -41701,7 +41701,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2026, - "src": "14760:5:6", + "src": "14759:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41720,7 +41720,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "14750:9:6", + "src": "14749:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -41734,7 +41734,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14750:16:6", + "src": "14749:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -41748,7 +41748,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "14750:29:6", + "src": "14749:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -41762,7 +41762,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14750:31:6", + "src": "14749:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41779,7 +41779,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "14785:3:6", + "src": "14784:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -41793,13 +41793,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "14785:10:6", + "src": "14784:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "14750:45:6", + "src": "14749:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -41818,7 +41818,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14742:7:6", + "src": "14741:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -41832,7 +41832,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14742:54:6", + "src": "14741:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -41840,7 +41840,7 @@ }, "id": 2048, "nodeType": "ExpressionStatement", - "src": "14742:54:6" + "src": "14741:54:6" }, { "expression": { @@ -41856,7 +41856,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2028, - "src": "14815:5:6", + "src": "14814:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -41869,7 +41869,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2030, - "src": "14822:7:6", + "src": "14821:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -41892,7 +41892,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2435, - "src": "14808:6:6", + "src": "14807:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -41906,7 +41906,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14808:22:6", + "src": "14807:22:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -41925,7 +41925,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14800:7:6", + "src": "14799:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -41939,7 +41939,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14800:31:6", + "src": "14799:31:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -41947,7 +41947,7 @@ }, "id": 2055, "nodeType": "ExpressionStatement", - "src": "14800:31:6" + "src": "14799:31:6" }, { "expression": { @@ -41960,7 +41960,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "14842:4:6", + "src": "14841:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -41971,7 +41971,7 @@ "functionReturnParameters": 2037, "id": 2057, "nodeType": "Return", - "src": "14835:11:6" + "src": "14834:11:6" } ] }, @@ -41990,7 +41990,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2026, - "src": "14715:5:6", + "src": "14714:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42005,14 +42005,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "14696:18:6", + "src": "14695:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "14696:25:6" + "src": "14695:25:6" } ], "name": "unlockForWork", @@ -42027,7 +42027,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14642:13:6", + "src": "14641:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42038,7 +42038,7 @@ "id": 2025, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14642:7:6", + "src": "14641:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42053,7 +42053,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14657:13:6", + "src": "14656:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42064,7 +42064,7 @@ "id": 2027, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14657:7:6", + "src": "14656:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42079,7 +42079,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14672:15:6", + "src": "14671:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42090,7 +42090,7 @@ "id": 2029, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14672:7:6", + "src": "14671:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42100,7 +42100,7 @@ "visibility": "internal" } ], - "src": "14641:47:6" + "src": "14640:47:6" }, "payable": false, "returnParameters": { @@ -42113,7 +42113,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2059, - "src": "14731:4:6", + "src": "14730:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42124,7 +42124,7 @@ "id": 2035, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14731:4:6", + "src": "14730:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -42134,10 +42134,10 @@ "visibility": "internal" } ], - "src": "14730:6:6" + "src": "14729:6:6" }, "scope": 2436, - "src": "14619:231:6", + "src": "14618:231:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -42146,7 +42146,7 @@ "body": { "id": 2124, "nodeType": "Block", - "src": "14991:309:6", + "src": "14990:309:6", "statements": [ { "expression": { @@ -42178,7 +42178,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2061, - "src": "15013:5:6", + "src": "15012:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42197,7 +42197,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "15003:9:6", + "src": "15002:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -42211,7 +42211,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15003:16:6", + "src": "15002:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -42225,7 +42225,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "15003:29:6", + "src": "15002:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -42239,7 +42239,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15003:31:6", + "src": "15002:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42256,7 +42256,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15038:3:6", + "src": "15037:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -42270,13 +42270,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15038:10:6", + "src": "15037:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "15003:45:6", + "src": "15002:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -42295,7 +42295,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "14995:7:6", + "src": "14994:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -42309,7 +42309,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14995:54:6", + "src": "14994:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -42317,7 +42317,7 @@ }, "id": 2085, "nodeType": "ExpressionStatement", - "src": "14995:54:6" + "src": "14994:54:6" }, { "expression": { @@ -42333,7 +42333,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15068:7:6", + "src": "15067:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42346,7 +42346,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2065, - "src": "15077:7:6", + "src": "15076:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42369,7 +42369,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2329, - "src": "15061:6:6", + "src": "15060:6:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -42383,7 +42383,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15061:24:6", + "src": "15060:24:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -42402,7 +42402,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15053:7:6", + "src": "15052:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -42416,7 +42416,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15053:33:6", + "src": "15052:33:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -42424,7 +42424,7 @@ }, "id": 2092, "nodeType": "ExpressionStatement", - "src": "15053:33:6" + "src": "15052:33:6" }, { "condition": { @@ -42434,7 +42434,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2067, - "src": "15094:11:6", + "src": "15093:11:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -42443,11 +42443,11 @@ "falseBody": null, "id": 2121, "nodeType": "IfStatement", - "src": "15090:192:6", + "src": "15089:192:6", "trueBody": { "id": 2120, "nodeType": "Block", - "src": "15109:173:6", + "src": "15108:173:6", "statements": [ { "expression": { @@ -42466,7 +42466,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15114:21:6", + "src": "15113:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -42480,7 +42480,7 @@ "memberName": "success", "nodeType": "MemberAccess", "referencedDeclaration": 2880, - "src": "15114:29:6", + "src": "15113:29:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42501,7 +42501,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "15180:1:6", + "src": "15179:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -42526,7 +42526,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15146:21:6", + "src": "15145:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -42540,7 +42540,7 @@ "memberName": "success", "nodeType": "MemberAccess", "referencedDeclaration": 2880, - "src": "15146:29:6", + "src": "15145:29:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42554,7 +42554,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15146:33:6", + "src": "15145:33:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -42568,13 +42568,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15146:36:6", + "src": "15145:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15114:68:6", + "src": "15113:68:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42582,7 +42582,7 @@ }, "id": 2103, "nodeType": "ExpressionStatement", - "src": "15114:68:6" + "src": "15113:68:6" }, { "expression": { @@ -42601,7 +42601,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15187:8:6", + "src": "15186:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -42615,7 +42615,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15196:7:6", + "src": "15195:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42626,7 +42626,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "15187:17:6", + "src": "15186:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42647,7 +42647,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "15229:1:6", + "src": "15228:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -42672,7 +42672,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15207:8:6", + "src": "15206:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -42686,7 +42686,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15216:7:6", + "src": "15215:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42697,7 +42697,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15207:17:6", + "src": "15206:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42711,7 +42711,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15207:21:6", + "src": "15206:21:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -42725,13 +42725,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15207:24:6", + "src": "15206:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15187:44:6", + "src": "15186:44:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42739,7 +42739,7 @@ }, "id": 2114, "nodeType": "ExpressionStatement", - "src": "15187:44:6" + "src": "15186:44:6" }, { "eventCall": { @@ -42752,7 +42752,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2061, - "src": "15262:5:6", + "src": "15261:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42765,7 +42765,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2063, - "src": "15269:7:6", + "src": "15268:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42788,7 +42788,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 898, - "src": "15241:20:6", + "src": "15240:20:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -42802,7 +42802,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15241:36:6", + "src": "15240:36:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -42810,7 +42810,7 @@ }, "id": 2119, "nodeType": "EmitStatement", - "src": "15236:41:6" + "src": "15235:41:6" } ] } @@ -42826,7 +42826,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "15292:4:6", + "src": "15291:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -42837,7 +42837,7 @@ "functionReturnParameters": 2074, "id": 2123, "nodeType": "Return", - "src": "15285:11:6" + "src": "15284:11:6" } ] }, @@ -42856,7 +42856,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2061, - "src": "14968:5:6", + "src": "14967:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42871,14 +42871,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "14949:18:6", + "src": "14948:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "14949:25:6" + "src": "14948:25:6" } ], "name": "rewardForWork", @@ -42893,7 +42893,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14875:13:6", + "src": "14874:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42904,7 +42904,7 @@ "id": 2060, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14875:7:6", + "src": "14874:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42919,7 +42919,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14890:15:6", + "src": "14889:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42930,7 +42930,7 @@ "id": 2062, "name": "address", "nodeType": "ElementaryTypeName", - "src": "14890:7:6", + "src": "14889:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -42945,7 +42945,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14907:15:6", + "src": "14906:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42956,7 +42956,7 @@ "id": 2064, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "14907:7:6", + "src": "14906:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -42971,7 +42971,7 @@ "name": "_reputation", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14924:16:6", + "src": "14923:16:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -42982,7 +42982,7 @@ "id": 2066, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14924:4:6", + "src": "14923:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -42992,7 +42992,7 @@ "visibility": "internal" } ], - "src": "14874:67:6" + "src": "14873:67:6" }, "payable": false, "returnParameters": { @@ -43005,7 +43005,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "14984:4:6", + "src": "14983:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -43016,7 +43016,7 @@ "id": 2072, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "14984:4:6", + "src": "14983:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -43026,10 +43026,10 @@ "visibility": "internal" } ], - "src": "14983:6:6" + "src": "14982:6:6" }, "scope": 2436, - "src": "14852:448:6", + "src": "14851:448:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -43038,7 +43038,7 @@ "body": { "id": 2195, "nodeType": "Block", - "src": "15440:345:6", + "src": "15439:345:6", "statements": [ { "expression": { @@ -43070,7 +43070,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2127, - "src": "15462:5:6", + "src": "15461:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43089,7 +43089,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4299, - "src": "15452:9:6", + "src": "15451:9:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_WorkOrder_$4299_$", "typeString": "type(contract WorkOrder)" @@ -43103,7 +43103,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15452:16:6", + "src": "15451:16:6", "typeDescriptions": { "typeIdentifier": "t_contract$_WorkOrder_$4299", "typeString": "contract WorkOrder" @@ -43117,7 +43117,7 @@ "memberName": "m_workerpool", "nodeType": "MemberAccess", "referencedDeclaration": 4048, - "src": "15452:29:6", + "src": "15451:29:6", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", "typeString": "function () view external returns (address)" @@ -43131,7 +43131,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15452:31:6", + "src": "15451:31:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43148,7 +43148,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15487:3:6", + "src": "15486:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -43162,13 +43162,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15487:10:6", + "src": "15486:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "15452:45:6", + "src": "15451:45:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -43187,7 +43187,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15444:7:6", + "src": "15443:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -43201,7 +43201,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15444:54:6", + "src": "15443:54:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -43209,7 +43209,7 @@ }, "id": 2151, "nodeType": "ExpressionStatement", - "src": "15444:54:6" + "src": "15443:54:6" }, { "expression": { @@ -43225,7 +43225,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15516:7:6", + "src": "15515:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43238,7 +43238,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2131, - "src": "15525:7:6", + "src": "15524:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43261,7 +43261,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2359, - "src": "15510:5:6", + "src": "15509:5:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) returns (bool)" @@ -43275,7 +43275,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15510:23:6", + "src": "15509:23:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -43294,7 +43294,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15502:7:6", + "src": "15501:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -43308,7 +43308,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15502:32:6", + "src": "15501:32:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -43316,7 +43316,7 @@ }, "id": 2158, "nodeType": "ExpressionStatement", - "src": "15502:32:6" + "src": "15501:32:6" }, { "condition": { @@ -43326,7 +43326,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2133, - "src": "15542:11:6", + "src": "15541:11:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -43335,11 +43335,11 @@ "falseBody": null, "id": 2192, "nodeType": "IfStatement", - "src": "15538:229:6", + "src": "15537:229:6", "trueBody": { "id": 2191, "nodeType": "Block", - "src": "15557:210:6", + "src": "15556:210:6", "statements": [ { "expression": { @@ -43358,7 +43358,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15562:21:6", + "src": "15561:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -43372,7 +43372,7 @@ "memberName": "failed", "nodeType": "MemberAccess", "referencedDeclaration": 2882, - "src": "15562:28:6", + "src": "15561:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43393,7 +43393,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "15626:1:6", + "src": "15625:1:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -43418,7 +43418,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 814, - "src": "15593:21:6", + "src": "15592:21:6", "typeDescriptions": { "typeIdentifier": "t_struct$_ContributionHistory_$2883_storage", "typeString": "struct IexecLib.ContributionHistory storage ref" @@ -43432,7 +43432,7 @@ "memberName": "failed", "nodeType": "MemberAccess", "referencedDeclaration": 2882, - "src": "15593:28:6", + "src": "15592:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43446,7 +43446,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15593:32:6", + "src": "15592:32:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -43460,13 +43460,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15593:35:6", + "src": "15592:35:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15562:66:6", + "src": "15561:66:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43474,7 +43474,7 @@ }, "id": 2169, "nodeType": "ExpressionStatement", - "src": "15562:66:6" + "src": "15561:66:6" }, { "expression": { @@ -43493,7 +43493,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15633:8:6", + "src": "15632:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -43507,7 +43507,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15642:7:6", + "src": "15641:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43518,7 +43518,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "15633:17:6", + "src": "15632:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43539,7 +43539,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 748, - "src": "15697:19:6", + "src": "15696:19:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43562,7 +43562,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15675:8:6", + "src": "15674:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -43576,7 +43576,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15684:7:6", + "src": "15683:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43587,7 +43587,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15675:17:6", + "src": "15674:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43601,7 +43601,7 @@ "memberName": "min", "nodeType": "MemberAccess", "referencedDeclaration": 3878, - "src": "15675:21:6", + "src": "15674:21:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -43615,7 +43615,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15675:42:6", + "src": "15674:42:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43638,7 +43638,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 812, - "src": "15653:8:6", + "src": "15652:8:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -43652,7 +43652,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15662:7:6", + "src": "15661:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43663,7 +43663,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15653:17:6", + "src": "15652:17:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43677,7 +43677,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "15653:21:6", + "src": "15652:21:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -43691,13 +43691,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15653:65:6", + "src": "15652:65:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15633:85:6", + "src": "15632:85:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43705,7 +43705,7 @@ }, "id": 2185, "nodeType": "ExpressionStatement", - "src": "15633:85:6" + "src": "15632:85:6" }, { "eventCall": { @@ -43718,7 +43718,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2127, - "src": "15747:5:6", + "src": "15746:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43731,7 +43731,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2129, - "src": "15754:7:6", + "src": "15753:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43754,7 +43754,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 904, - "src": "15728:18:6", + "src": "15727:18:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)" @@ -43768,7 +43768,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15728:34:6", + "src": "15727:34:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -43776,7 +43776,7 @@ }, "id": 2190, "nodeType": "EmitStatement", - "src": "15723:39:6" + "src": "15722:39:6" } ] } @@ -43792,7 +43792,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "15777:4:6", + "src": "15776:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -43803,7 +43803,7 @@ "functionReturnParameters": 2140, "id": 2194, "nodeType": "Return", - "src": "15770:11:6" + "src": "15769:11:6" } ] }, @@ -43822,7 +43822,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2127, - "src": "15417:5:6", + "src": "15416:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43837,14 +43837,14 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 808, - "src": "15398:18:6", + "src": "15397:18:6", "typeDescriptions": { "typeIdentifier": "t_modifier$_t_address_$", "typeString": "modifier (address)" } }, "nodeType": "ModifierInvocation", - "src": "15398:25:6" + "src": "15397:25:6" } ], "name": "seizeForWork", @@ -43859,7 +43859,7 @@ "name": "_woid", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15324:13:6", + "src": "15323:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -43870,7 +43870,7 @@ "id": 2126, "name": "address", "nodeType": "ElementaryTypeName", - "src": "15324:7:6", + "src": "15323:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43885,7 +43885,7 @@ "name": "_worker", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15339:15:6", + "src": "15338:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -43896,7 +43896,7 @@ "id": 2128, "name": "address", "nodeType": "ElementaryTypeName", - "src": "15339:7:6", + "src": "15338:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -43911,7 +43911,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15356:15:6", + "src": "15355:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -43922,7 +43922,7 @@ "id": 2130, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "15356:7:6", + "src": "15355:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -43937,7 +43937,7 @@ "name": "_reputation", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15373:16:6", + "src": "15372:16:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -43948,7 +43948,7 @@ "id": 2132, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "15373:4:6", + "src": "15372:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -43958,7 +43958,7 @@ "visibility": "internal" } ], - "src": "15323:67:6" + "src": "15322:67:6" }, "payable": false, "returnParameters": { @@ -43971,7 +43971,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "15433:4:6", + "src": "15432:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -43982,7 +43982,7 @@ "id": 2138, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "15433:4:6", + "src": "15432:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -43992,10 +43992,10 @@ "visibility": "internal" } ], - "src": "15432:6:6" + "src": "15431:6:6" }, "scope": 2436, - "src": "15302:483:6", + "src": "15301:483:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -44004,7 +44004,7 @@ "body": { "id": 2238, "nodeType": "Block", - "src": "15883:197:6", + "src": "15882:197:6", "statements": [ { "expression": { @@ -44022,7 +44022,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15912:3:6", + "src": "15911:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44036,7 +44036,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15912:10:6", + "src": "15911:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44052,7 +44052,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7063, - "src": "15932:4:6", + "src": "15931:4:6", "typeDescriptions": { "typeIdentifier": "t_contract$_IexecHub_$2436", "typeString": "contract IexecHub" @@ -44072,7 +44072,7 @@ "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "15924:7:6", + "src": "15923:7:6", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" @@ -44087,7 +44087,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15924:13:6", + "src": "15923:13:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44100,7 +44100,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2198, - "src": "15939:7:6", + "src": "15938:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44129,7 +44129,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 739, - "src": "15895:3:6", + "src": "15894:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_RLC_$6785", "typeString": "contract RLC" @@ -44143,7 +44143,7 @@ "memberName": "transferFrom", "nodeType": "MemberAccess", "referencedDeclaration": 6696, - "src": "15895:16:6", + "src": "15894:16:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)" @@ -44157,7 +44157,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15895:52:6", + "src": "15894:52:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -44176,7 +44176,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "15887:7:6", + "src": "15886:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -44190,7 +44190,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15887:61:6", + "src": "15886:61:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -44198,7 +44198,7 @@ }, "id": 2214, "nodeType": "ExpressionStatement", - "src": "15887:61:6" + "src": "15886:61:6" }, { "expression": { @@ -44219,7 +44219,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "15952:10:6", + "src": "15951:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -44235,7 +44235,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15963:3:6", + "src": "15962:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44249,7 +44249,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15963:10:6", + "src": "15962:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44260,7 +44260,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15952:22:6", + "src": "15951:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -44274,7 +44274,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "15952:28:6", + "src": "15951:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44292,7 +44292,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2198, - "src": "16016:7:6", + "src": "16015:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44317,7 +44317,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "15983:10:6", + "src": "15982:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -44333,7 +44333,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "15994:3:6", + "src": "15993:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44347,7 +44347,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "15994:10:6", + "src": "15993:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44358,7 +44358,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "15983:22:6", + "src": "15982:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -44372,7 +44372,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "15983:28:6", + "src": "15982:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44386,7 +44386,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "15983:32:6", + "src": "15982:32:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -44400,13 +44400,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "15983:41:6", + "src": "15982:41:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "15952:72:6", + "src": "15951:72:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44414,7 +44414,7 @@ }, "id": 2229, "nodeType": "ExpressionStatement", - "src": "15952:72:6" + "src": "15951:72:6" }, { "eventCall": { @@ -44429,7 +44429,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16041:3:6", + "src": "16040:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44443,7 +44443,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16041:10:6", + "src": "16040:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44456,7 +44456,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2198, - "src": "16053:7:6", + "src": "16052:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44479,7 +44479,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 910, - "src": "16033:7:6", + "src": "16032:7:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -44493,7 +44493,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16033:28:6", + "src": "16032:28:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -44501,7 +44501,7 @@ }, "id": 2235, "nodeType": "EmitStatement", - "src": "16028:33:6" + "src": "16027:33:6" }, { "expression": { @@ -44514,7 +44514,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16072:4:6", + "src": "16071:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -44525,7 +44525,7 @@ "functionReturnParameters": 2202, "id": 2237, "nodeType": "Return", - "src": "16065:11:6" + "src": "16064:11:6" } ] }, @@ -44547,7 +44547,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2239, - "src": "15841:15:6", + "src": "15840:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -44558,7 +44558,7 @@ "id": 2197, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "15841:7:6", + "src": "15840:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44568,7 +44568,7 @@ "visibility": "internal" } ], - "src": "15840:17:6" + "src": "15839:17:6" }, "payable": false, "returnParameters": { @@ -44581,7 +44581,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2239, - "src": "15876:4:6", + "src": "15875:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -44592,7 +44592,7 @@ "id": 2200, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "15876:4:6", + "src": "15875:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -44602,10 +44602,10 @@ "visibility": "internal" } ], - "src": "15875:6:6" + "src": "15874:6:6" }, "scope": 2436, - "src": "15824:256:6", + "src": "15823:256:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "external" @@ -44614,7 +44614,7 @@ "body": { "id": 2278, "nodeType": "Block", - "src": "16142:179:6", + "src": "16141:179:6", "statements": [ { "expression": { @@ -44635,7 +44635,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16146:10:6", + "src": "16145:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -44651,7 +44651,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16157:3:6", + "src": "16156:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44665,7 +44665,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16157:10:6", + "src": "16156:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44676,7 +44676,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16146:22:6", + "src": "16145:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -44690,7 +44690,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16146:28:6", + "src": "16145:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44708,7 +44708,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2241, - "src": "16210:7:6", + "src": "16209:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44733,7 +44733,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16177:10:6", + "src": "16176:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -44749,7 +44749,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16188:3:6", + "src": "16187:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44763,7 +44763,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16188:10:6", + "src": "16187:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44774,7 +44774,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16177:22:6", + "src": "16176:22:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -44788,7 +44788,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16177:28:6", + "src": "16176:28:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44802,7 +44802,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "16177:32:6", + "src": "16176:32:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -44816,13 +44816,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16177:41:6", + "src": "16176:41:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16146:72:6", + "src": "16145:72:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44830,7 +44830,7 @@ }, "id": 2260, "nodeType": "ExpressionStatement", - "src": "16146:72:6" + "src": "16145:72:6" }, { "expression": { @@ -44848,7 +44848,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16243:3:6", + "src": "16242:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44862,7 +44862,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16243:10:6", + "src": "16242:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -44875,7 +44875,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2241, - "src": "16255:7:6", + "src": "16254:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -44900,7 +44900,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 739, - "src": "16230:3:6", + "src": "16229:3:6", "typeDescriptions": { "typeIdentifier": "t_contract$_RLC_$6785", "typeString": "contract RLC" @@ -44914,7 +44914,7 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": 6632, - "src": "16230:12:6", + "src": "16229:12:6", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) external returns (bool)" @@ -44928,7 +44928,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16230:33:6", + "src": "16229:33:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -44947,7 +44947,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7011, - "src": "16222:7:6", + "src": "16221:7:6", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" @@ -44961,7 +44961,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16222:42:6", + "src": "16221:42:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -44969,7 +44969,7 @@ }, "id": 2269, "nodeType": "ExpressionStatement", - "src": "16222:42:6" + "src": "16221:42:6" }, { "eventCall": { @@ -44984,7 +44984,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 7008, - "src": "16282:3:6", + "src": "16281:3:6", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" @@ -44998,7 +44998,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "16282:10:6", + "src": "16281:10:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45011,7 +45011,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2241, - "src": "16294:7:6", + "src": "16293:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45034,7 +45034,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 916, - "src": "16273:8:6", + "src": "16272:8:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -45048,7 +45048,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16273:29:6", + "src": "16272:29:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -45056,7 +45056,7 @@ }, "id": 2275, "nodeType": "EmitStatement", - "src": "16268:34:6" + "src": "16267:34:6" }, { "expression": { @@ -45069,7 +45069,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16313:4:6", + "src": "16312:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -45080,7 +45080,7 @@ "functionReturnParameters": 2245, "id": 2277, "nodeType": "Return", - "src": "16306:11:6" + "src": "16305:11:6" } ] }, @@ -45102,7 +45102,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2279, - "src": "16100:15:6", + "src": "16099:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45113,7 +45113,7 @@ "id": 2240, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16100:7:6", + "src": "16099:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45123,7 +45123,7 @@ "visibility": "internal" } ], - "src": "16099:17:6" + "src": "16098:17:6" }, "payable": false, "returnParameters": { @@ -45136,7 +45136,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2279, - "src": "16135:4:6", + "src": "16134:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45147,7 +45147,7 @@ "id": 2243, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16135:4:6", + "src": "16134:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -45157,10 +45157,10 @@ "visibility": "internal" } ], - "src": "16134:6:6" + "src": "16133:6:6" }, "scope": 2436, - "src": "16082:239:6", + "src": "16081:239:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "external" @@ -45169,7 +45169,7 @@ "body": { "id": 2298, "nodeType": "Block", - "src": "16414:68:6", + "src": "16413:68:6", "statements": [ { "expression": { @@ -45186,7 +45186,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16426:10:6", + "src": "16425:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -45200,7 +45200,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2281, - "src": "16437:6:6", + "src": "16436:6:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45211,7 +45211,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16426:18:6", + "src": "16425:18:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -45225,7 +45225,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16426:24:6", + "src": "16425:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45242,7 +45242,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16452:10:6", + "src": "16451:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -45256,7 +45256,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2281, - "src": "16463:6:6", + "src": "16462:6:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45267,7 +45267,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16452:18:6", + "src": "16451:18:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -45281,7 +45281,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "16452:25:6", + "src": "16451:25:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45295,7 +45295,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "16425:53:6", + "src": "16424:53:6", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)" @@ -45304,7 +45304,7 @@ "functionReturnParameters": 2287, "id": 2297, "nodeType": "Return", - "src": "16418:60:6" + "src": "16417:60:6" } ] }, @@ -45326,7 +45326,7 @@ "name": "_owner", "nodeType": "VariableDeclaration", "scope": 2299, - "src": "16345:14:6", + "src": "16344:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45337,7 +45337,7 @@ "id": 2280, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16345:7:6", + "src": "16344:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45347,7 +45347,7 @@ "visibility": "internal" } ], - "src": "16344:16:6" + "src": "16343:16:6" }, "payable": false, "returnParameters": { @@ -45360,7 +45360,7 @@ "name": "stake", "nodeType": "VariableDeclaration", "scope": 2299, - "src": "16382:13:6", + "src": "16381:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45371,7 +45371,7 @@ "id": 2283, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16382:7:6", + "src": "16381:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45386,7 +45386,7 @@ "name": "locked", "nodeType": "VariableDeclaration", "scope": 2299, - "src": "16397:14:6", + "src": "16396:14:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45397,7 +45397,7 @@ "id": 2285, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16397:7:6", + "src": "16396:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45407,10 +45407,10 @@ "visibility": "internal" } ], - "src": "16381:31:6" + "src": "16380:31:6" }, "scope": 2436, - "src": "16323:159:6", + "src": "16322:159:6", "stateMutability": "view", "superFunction": null, "visibility": "public" @@ -45419,7 +45419,7 @@ "body": { "id": 2328, "nodeType": "Block", - "src": "16596:116:6", + "src": "16595:116:6", "statements": [ { "expression": { @@ -45440,7 +45440,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16600:10:6", + "src": "16599:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -45454,7 +45454,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2301, - "src": "16611:5:6", + "src": "16610:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45465,7 +45465,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16600:17:6", + "src": "16599:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -45479,7 +45479,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16600:23:6", + "src": "16599:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45497,7 +45497,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2303, - "src": "16654:7:6", + "src": "16653:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45522,7 +45522,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16626:10:6", + "src": "16625:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -45536,7 +45536,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2301, - "src": "16637:5:6", + "src": "16636:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45547,7 +45547,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16626:17:6", + "src": "16625:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -45561,7 +45561,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16626:23:6", + "src": "16625:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45575,7 +45575,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "16626:27:6", + "src": "16625:27:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -45589,13 +45589,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16626:36:6", + "src": "16625:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16600:62:6", + "src": "16599:62:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45603,7 +45603,7 @@ }, "id": 2320, "nodeType": "ExpressionStatement", - "src": "16600:62:6" + "src": "16599:62:6" }, { "eventCall": { @@ -45616,7 +45616,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2301, - "src": "16678:5:6", + "src": "16677:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45629,7 +45629,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2303, - "src": "16685:7:6", + "src": "16684:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45652,7 +45652,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 922, - "src": "16671:6:6", + "src": "16670:6:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -45666,7 +45666,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16671:22:6", + "src": "16670:22:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -45674,7 +45674,7 @@ }, "id": 2325, "nodeType": "EmitStatement", - "src": "16666:27:6" + "src": "16665:27:6" }, { "expression": { @@ -45687,7 +45687,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16704:4:6", + "src": "16703:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -45698,7 +45698,7 @@ "functionReturnParameters": 2307, "id": 2327, "nodeType": "Return", - "src": "16697:11:6" + "src": "16696:11:6" } ] }, @@ -45720,7 +45720,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2329, - "src": "16539:13:6", + "src": "16538:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45731,7 +45731,7 @@ "id": 2300, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16539:7:6", + "src": "16538:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45746,7 +45746,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2329, - "src": "16554:15:6", + "src": "16553:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45757,7 +45757,7 @@ "id": 2302, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16554:7:6", + "src": "16553:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45767,7 +45767,7 @@ "visibility": "internal" } ], - "src": "16538:32:6" + "src": "16537:32:6" }, "payable": false, "returnParameters": { @@ -45780,7 +45780,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2329, - "src": "16589:4:6", + "src": "16588:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -45791,7 +45791,7 @@ "id": 2305, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16589:4:6", + "src": "16588:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -45801,10 +45801,10 @@ "visibility": "internal" } ], - "src": "16588:6:6" + "src": "16587:6:6" }, "scope": 2436, - "src": "16523:189:6", + "src": "16522:189:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -45813,7 +45813,7 @@ "body": { "id": 2358, "nodeType": "Block", - "src": "16786:117:6", + "src": "16785:117:6", "statements": [ { "expression": { @@ -45834,7 +45834,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16790:10:6", + "src": "16789:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -45848,7 +45848,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2331, - "src": "16801:5:6", + "src": "16800:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45859,7 +45859,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16790:17:6", + "src": "16789:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -45873,7 +45873,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "16790:24:6", + "src": "16789:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45891,7 +45891,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2333, - "src": "16846:7:6", + "src": "16845:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45916,7 +45916,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16817:10:6", + "src": "16816:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -45930,7 +45930,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2331, - "src": "16828:5:6", + "src": "16827:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -45941,7 +45941,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16817:17:6", + "src": "16816:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -45955,7 +45955,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "16817:24:6", + "src": "16816:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45969,7 +45969,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "16817:28:6", + "src": "16816:28:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -45983,13 +45983,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16817:37:6", + "src": "16816:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16790:64:6", + "src": "16789:64:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -45997,7 +45997,7 @@ }, "id": 2350, "nodeType": "ExpressionStatement", - "src": "16790:64:6" + "src": "16789:64:6" }, { "eventCall": { @@ -46010,7 +46010,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2331, - "src": "16869:5:6", + "src": "16868:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46023,7 +46023,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2333, - "src": "16876:7:6", + "src": "16875:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46046,7 +46046,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 928, - "src": "16863:5:6", + "src": "16862:5:6", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" @@ -46060,7 +46060,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "16863:21:6", + "src": "16862:21:6", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" @@ -46068,7 +46068,7 @@ }, "id": 2355, "nodeType": "EmitStatement", - "src": "16858:26:6" + "src": "16857:26:6" }, { "expression": { @@ -46081,7 +46081,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "16895:4:6", + "src": "16894:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -46092,7 +46092,7 @@ "functionReturnParameters": 2337, "id": 2357, "nodeType": "Return", - "src": "16888:11:6" + "src": "16887:11:6" } ] }, @@ -46114,7 +46114,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2359, - "src": "16729:13:6", + "src": "16728:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -46125,7 +46125,7 @@ "id": 2330, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16729:7:6", + "src": "16728:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46140,7 +46140,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2359, - "src": "16744:15:6", + "src": "16743:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -46151,7 +46151,7 @@ "id": 2332, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16744:7:6", + "src": "16743:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46161,7 +46161,7 @@ "visibility": "internal" } ], - "src": "16728:32:6" + "src": "16727:32:6" }, "payable": false, "returnParameters": { @@ -46174,7 +46174,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2359, - "src": "16779:4:6", + "src": "16778:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -46185,7 +46185,7 @@ "id": 2335, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16779:4:6", + "src": "16778:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -46195,10 +46195,10 @@ "visibility": "internal" } ], - "src": "16778:6:6" + "src": "16777:6:6" }, "scope": 2436, - "src": "16714:189:6", + "src": "16713:189:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -46207,7 +46207,7 @@ "body": { "id": 2396, "nodeType": "Block", - "src": "16976:154:6", + "src": "16975:154:6", "statements": [ { "expression": { @@ -46228,7 +46228,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "16980:10:6", + "src": "16979:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -46242,7 +46242,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "16991:5:6", + "src": "16990:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46253,7 +46253,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "16980:17:6", + "src": "16979:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -46267,7 +46267,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "16980:23:6", + "src": "16979:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46285,7 +46285,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2363, - "src": "17035:7:6", + "src": "17034:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46310,7 +46310,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17007:10:6", + "src": "17006:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -46324,7 +46324,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "17018:5:6", + "src": "17017:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46335,7 +46335,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17007:17:6", + "src": "17006:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -46349,7 +46349,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "17007:23:6", + "src": "17006:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46363,7 +46363,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "17007:27:6", + "src": "17006:27:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -46377,13 +46377,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17007:36:6", + "src": "17006:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "16980:63:6", + "src": "16979:63:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46391,7 +46391,7 @@ }, "id": 2380, "nodeType": "ExpressionStatement", - "src": "16980:63:6" + "src": "16979:63:6" }, { "expression": { @@ -46412,7 +46412,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17047:10:6", + "src": "17046:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -46426,7 +46426,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "17058:5:6", + "src": "17057:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46437,7 +46437,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17047:17:6", + "src": "17046:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -46451,7 +46451,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17047:24:6", + "src": "17046:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46469,7 +46469,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2363, - "src": "17103:7:6", + "src": "17102:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46494,7 +46494,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17074:10:6", + "src": "17073:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -46508,7 +46508,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2361, - "src": "17085:5:6", + "src": "17084:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46519,7 +46519,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17074:17:6", + "src": "17073:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -46533,7 +46533,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17074:24:6", + "src": "17073:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46547,7 +46547,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "17074:28:6", + "src": "17073:28:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -46561,13 +46561,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17074:37:6", + "src": "17073:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "17047:64:6", + "src": "17046:64:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46575,7 +46575,7 @@ }, "id": 2393, "nodeType": "ExpressionStatement", - "src": "17047:64:6" + "src": "17046:64:6" }, { "expression": { @@ -46588,7 +46588,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "17122:4:6", + "src": "17121:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -46599,7 +46599,7 @@ "functionReturnParameters": 2367, "id": 2395, "nodeType": "Return", - "src": "17115:11:6" + "src": "17114:11:6" } ] }, @@ -46621,7 +46621,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2397, - "src": "16919:13:6", + "src": "16918:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -46632,7 +46632,7 @@ "id": 2360, "name": "address", "nodeType": "ElementaryTypeName", - "src": "16919:7:6", + "src": "16918:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46647,7 +46647,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2397, - "src": "16934:15:6", + "src": "16933:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -46658,7 +46658,7 @@ "id": 2362, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "16934:7:6", + "src": "16933:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46668,7 +46668,7 @@ "visibility": "internal" } ], - "src": "16918:32:6" + "src": "16917:32:6" }, "payable": false, "returnParameters": { @@ -46681,7 +46681,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2397, - "src": "16969:4:6", + "src": "16968:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -46692,7 +46692,7 @@ "id": 2365, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "16969:4:6", + "src": "16968:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -46702,10 +46702,10 @@ "visibility": "internal" } ], - "src": "16968:6:6" + "src": "16967:6:6" }, "scope": 2436, - "src": "16905:225:6", + "src": "16904:225:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" @@ -46714,7 +46714,7 @@ "body": { "id": 2434, "nodeType": "Block", - "src": "17205:154:6", + "src": "17204:154:6", "statements": [ { "expression": { @@ -46735,7 +46735,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17209:10:6", + "src": "17208:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -46749,7 +46749,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17220:5:6", + "src": "17219:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46760,7 +46760,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17209:17:6", + "src": "17208:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -46774,7 +46774,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17209:24:6", + "src": "17208:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46792,7 +46792,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2401, - "src": "17265:7:6", + "src": "17264:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46817,7 +46817,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17236:10:6", + "src": "17235:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -46831,7 +46831,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17247:5:6", + "src": "17246:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46842,7 +46842,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17236:17:6", + "src": "17235:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -46856,7 +46856,7 @@ "memberName": "locked", "nodeType": "MemberAccess", "referencedDeclaration": 2877, - "src": "17236:24:6", + "src": "17235:24:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46870,7 +46870,7 @@ "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 3793, - "src": "17236:28:6", + "src": "17235:28:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -46884,13 +46884,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17236:37:6", + "src": "17235:37:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "17209:64:6", + "src": "17208:64:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46898,7 +46898,7 @@ }, "id": 2418, "nodeType": "ExpressionStatement", - "src": "17209:64:6" + "src": "17208:64:6" }, { "expression": { @@ -46919,7 +46919,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17277:10:6", + "src": "17276:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -46933,7 +46933,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17288:5:6", + "src": "17287:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -46944,7 +46944,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17277:17:6", + "src": "17276:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -46958,7 +46958,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "17277:23:6", + "src": "17276:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -46976,7 +46976,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2401, - "src": "17332:7:6", + "src": "17331:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -47001,7 +47001,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 792, - "src": "17304:10:6", + "src": "17303:10:6", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$2878_storage_$", "typeString": "mapping(address => struct IexecLib.Account storage ref)" @@ -47015,7 +47015,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, - "src": "17315:5:6", + "src": "17314:5:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -47026,7 +47026,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "17304:17:6", + "src": "17303:17:6", "typeDescriptions": { "typeIdentifier": "t_struct$_Account_$2878_storage", "typeString": "struct IexecLib.Account storage ref" @@ -47040,7 +47040,7 @@ "memberName": "stake", "nodeType": "MemberAccess", "referencedDeclaration": 2875, - "src": "17304:23:6", + "src": "17303:23:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -47054,7 +47054,7 @@ "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3773, - "src": "17304:27:6", + "src": "17303:27:6", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" @@ -47068,13 +47068,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "17304:36:6", + "src": "17303:36:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "17277:63:6", + "src": "17276:63:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -47082,7 +47082,7 @@ }, "id": 2431, "nodeType": "ExpressionStatement", - "src": "17277:63:6" + "src": "17276:63:6" }, { "expression": { @@ -47095,7 +47095,7 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "17351:4:6", + "src": "17350:4:6", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -47106,7 +47106,7 @@ "functionReturnParameters": 2405, "id": 2433, "nodeType": "Return", - "src": "17344:11:6" + "src": "17343:11:6" } ] }, @@ -47128,7 +47128,7 @@ "name": "_user", "nodeType": "VariableDeclaration", "scope": 2435, - "src": "17148:13:6", + "src": "17147:13:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -47139,7 +47139,7 @@ "id": 2398, "name": "address", "nodeType": "ElementaryTypeName", - "src": "17148:7:6", + "src": "17147:7:6", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -47154,7 +47154,7 @@ "name": "_amount", "nodeType": "VariableDeclaration", "scope": 2435, - "src": "17163:15:6", + "src": "17162:15:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -47165,7 +47165,7 @@ "id": 2400, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "17163:7:6", + "src": "17162:7:6", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -47175,7 +47175,7 @@ "visibility": "internal" } ], - "src": "17147:32:6" + "src": "17146:32:6" }, "payable": false, "returnParameters": { @@ -47188,7 +47188,7 @@ "name": "", "nodeType": "VariableDeclaration", "scope": 2435, - "src": "17198:4:6", + "src": "17197:4:6", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -47199,7 +47199,7 @@ "id": 2403, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "17198:4:6", + "src": "17197:4:6", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -47209,26 +47209,350 @@ "visibility": "internal" } ], - "src": "17197:6:6" + "src": "17196:6:6" }, "scope": 2436, - "src": "17132:227:6", + "src": "17131:227:6", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" } ], "scope": 2437, - "src": "281:17080:6" + "src": "281:17079:6" } ], - "src": "0:17362:6" + "src": "0:17361:6" }, "compiler": { "name": "solc", "version": "0.4.21+commit.dfe3193c.Emscripten.clang" }, "networks": { + "1": { + "events": { + "0x359f2105b31d71ee8e2315c3dc3427b3f7297dcc85dd3883d4554e67f1f22d00": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "woid", + "type": "address" + }, + { + "indexed": true, + "name": "workerPool", + "type": "address" + } + ], + "name": "WorkOrderActivated", + "type": "event" + }, + "0xb3cae8ec1c2754530963fb2e254826aae88dda74178f1a0c5656776941e604b8": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "woid", + "type": "address" + }, + { + "indexed": false, + "name": "workerPool", + "type": "address" + } + ], + "name": "WorkOrderClaimed", + "type": "event" + }, + "0xed236d0a24cb7a32c76960696e44bac711b80ef76780688405dc96c2495b75f9": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "woid", + "type": "address" + }, + { + "indexed": false, + "name": "workerPool", + "type": "address" + } + ], + "name": "WorkOrderCompleted", + "type": "event" + }, + "0x03d3b6187bbe7d21aa3cf229e292ba41fa8bca6ec2128c0f1625178b8191cdc2": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "appOwner", + "type": "address" + }, + { + "indexed": true, + "name": "app", + "type": "address" + }, + { + "indexed": false, + "name": "appName", + "type": "string" + }, + { + "indexed": false, + "name": "appPrice", + "type": "uint256" + }, + { + "indexed": false, + "name": "appParams", + "type": "string" + } + ], + "name": "CreateApp", + "type": "event" + }, + "0x49413c774d3fe9c92f6ada69299963d9b4b1c13a1f2a95a019188e2c161ed143": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "datasetOwner", + "type": "address" + }, + { + "indexed": true, + "name": "dataset", + "type": "address" + }, + { + "indexed": false, + "name": "datasetName", + "type": "string" + }, + { + "indexed": false, + "name": "datasetPrice", + "type": "uint256" + }, + { + "indexed": false, + "name": "datasetParams", + "type": "string" + } + ], + "name": "CreateDataset", + "type": "event" + }, + "0x3c29f4ff1e741e465a1ad9cc4c0b8e51c046c021ca9e77172d812ae667f566f8": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "workerPoolOwner", + "type": "address" + }, + { + "indexed": true, + "name": "workerPool", + "type": "address" + }, + { + "indexed": false, + "name": "workerPoolDescription", + "type": "string" + } + ], + "name": "CreateWorkerPool", + "type": "event" + }, + "0x62bf08360c9d561749c54eaf4f8bf8cb6c8b6f4f40607bcec39a8172e714d25c": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "catid", + "type": "uint256" + }, + { + "indexed": false, + "name": "name", + "type": "string" + }, + { + "indexed": false, + "name": "description", + "type": "string" + }, + { + "indexed": false, + "name": "workClockTimeRef", + "type": "uint256" + } + ], + "name": "CreateCategory", + "type": "event" + }, + "0xd3548f8b6a2a11c4a35ef5a16dbf7142c9db5163c7d46e7f66482664277cff07": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "workerPool", + "type": "address" + }, + { + "indexed": false, + "name": "worker", + "type": "address" + } + ], + "name": "WorkerPoolSubscription", + "type": "event" + }, + "0x9644170e77fec17243f5fdc3519cba6d2162d1dda59af75508fd9a2005aeb784": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "workerPool", + "type": "address" + }, + { + "indexed": false, + "name": "worker", + "type": "address" + } + ], + "name": "WorkerPoolUnsubscription", + "type": "event" + }, + "0x5580db655b3146ef4d1fdba3305cf74dbc3f29126c7a3832533f84e00d149ee3": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "workerPool", + "type": "address" + }, + { + "indexed": false, + "name": "worker", + "type": "address" + } + ], + "name": "WorkerPoolEviction", + "type": "event" + }, + "0x98b231d22df4a95e9d99b5d3f4d25fab5a821c22d7f517a522731c2892ed4535": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "woid", + "type": "address" + }, + { + "indexed": true, + "name": "worker", + "type": "address" + } + ], + "name": "AccurateContribution", + "type": "event" + }, + "0xd21e70eb7104cb6f403402b79fe1c088dc56b69ecb7474ae68a3e861a5a6d499": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "woid", + "type": "address" + }, + { + "indexed": true, + "name": "worker", + "type": "address" + } + ], + "name": "FaultyContribution", + "type": "event" + }, + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + "0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + "0x619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "user", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "Reward", + "type": "event" + }, + "0x4051ba94e08bb094159fc38391422b4b8ccfd2b1f8919c0eb37bb042d4b9cd8e": { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "user", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "Seize", + "type": "event" + } + }, + "links": {}, + "address": "0x0d5ef019ca4c5cc413ee892ced89d7107c5f424d", + "transactionHash": "0x931349936f3b358dc84c873e30d76258cf67ac64c953d11335211234b5ceee43" + }, "3": { "events": { "0x359f2105b31d71ee8e2315c3dc3427b3f7297dcc85dd3883d4554e67f1f22d00": { @@ -48203,5 +48527,5 @@ } }, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-21T11:48:56.503Z" + "updatedAt": "2018-06-12T15:21:39.663Z" } diff --git a/build/contracts/IexecHubAccessor.json b/deployed/contracts/IexecHubAccessor.json similarity index 99% rename from build/contracts/IexecHubAccessor.json rename to deployed/contracts/IexecHubAccessor.json index 6020ce24..cc5b18dc 100644 --- a/build/contracts/IexecHubAccessor.json +++ b/deployed/contracts/IexecHubAccessor.json @@ -1063,5 +1063,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.553Z" -} + "updatedAt": "2018-06-12T14:56:21.145Z" +} \ No newline at end of file diff --git a/build/contracts/IexecHubInterface.json b/deployed/contracts/IexecHubInterface.json similarity index 99% rename from build/contracts/IexecHubInterface.json rename to deployed/contracts/IexecHubInterface.json index 572bc113..02ffdee2 100644 --- a/build/contracts/IexecHubInterface.json +++ b/deployed/contracts/IexecHubInterface.json @@ -8661,5 +8661,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.553Z" -} + "updatedAt": "2018-06-12T14:56:21.145Z" +} \ No newline at end of file diff --git a/build/contracts/IexecLib.json b/deployed/contracts/IexecLib.json similarity index 99% rename from build/contracts/IexecLib.json rename to deployed/contracts/IexecLib.json index 05deb840..31c48704 100644 --- a/build/contracts/IexecLib.json +++ b/deployed/contracts/IexecLib.json @@ -2141,9 +2141,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", -<<<<<<< Updated upstream - "updatedAt": "2018-05-19T20:49:59.814Z" -======= - "updatedAt": "2018-05-20T20:12:33.554Z" ->>>>>>> Stashed changes + "updatedAt": "2018-06-12T14:56:21.146Z" } \ No newline at end of file diff --git a/build/contracts/Marketplace.json b/deployed/contracts/Marketplace.json similarity index 99% rename from build/contracts/Marketplace.json rename to deployed/contracts/Marketplace.json index 9529d8e5..66010144 100644 --- a/build/contracts/Marketplace.json +++ b/deployed/contracts/Marketplace.json @@ -448,8 +448,8 @@ "type": "function" } ], - "bytecode": "0x6060604052341561000f57600080fd5b6040516020806112a6833981016040528080519150819050600160a060020a038116151561003c57600080fd5b60008054600160a060020a03909216600160a060020a0319909216919091179055506112398061006d6000396000f3006060604052600436106100b65763ffffffff60e060020a60003504166302a63c2881146100bb57806324026bfb146100f7578063270a8ef71461011f57806338c4090b146101355780633ab679561461014b5780634cfddcfb146101c2578063514d7067146101d857806355d66c3e146102bd57806360f75f3b146102ef57806369c7c180146103055780636b14ea361461031857806397e645f31461032b578063ea0b25901461034a578063eb3721be1461037b575b600080fd5b34156100c657600080fd5b6100e3600435600160a060020a0360243581169060443516610391565b604051901515815260200160405180910390f35b341561010257600080fd5b61010d600435610508565b60405190815260200160405180910390f35b341561012a57600080fd5b6100e3600435610535565b341561014057600080fd5b61010d60043561054b565b341561015657600080fd5b610161600435610577565b6040518089600381111561017157fe5b60ff1681526020810198909852506040808801969096526060870194909452608086019290925260a0850152600160a060020a0390811660c08501521660e083015261010090910191505180910390f35b34156101cd57600080fd5b61010d6004356105cc565b34156101e357600080fd5b6102bb60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506105f895505050505050565b005b34156102c857600080fd5b6102d3600435610cde565b604051600160a060020a03909116815260200160405180910390f35b34156102fa57600080fd5b6100e3600435610d13565b341561031057600080fd5b61010d610e4a565b341561032357600080fd5b61010d610e50565b341561033657600080fd5b6100e3600160a060020a0360043516610e55565b341561035557600080fd5b61010d60ff60043516602435604435606435600160a060020a036084351660a435610e73565b341561038657600080fd5b6101616004356110ee565b60008054819033600160a060020a039081169116146103af57600080fd5b50600084815260026020819052604090912090815460ff1660038111156103d257fe5b146103dc57600080fd5b6005810154600090116103ee57600080fd5b6006810154600160a060020a0384811691161461040a57600080fd5b600581015461042090600163ffffffff61116d16565b60058201819055151561043957805460ff191660031781555b6000546003820154600160a060020a039091169063ac26109e90869060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561049857600080fd5b5af115156104a557600080fd5b5050506040518051905015156104ba57600080fd5b7fe15b7f1dd90867f2f9084033184322ae15a1572828d3d2a5a2dca5f6038332ba8585604051918252600160a060020a031660208201526040908101905180910390a1506001949350505050565b600061051382610535565b151561051e57600080fd5b506000908152600260208190526040909120015490565b6000908152600260205260408120600101541190565b600061055682610535565b151561056157600080fd5b5060009081526002602052604090206003015490565b60026020819052600091825260409091208054600182015492820154600383015460048401546005850154600686015460079096015460ff90951696959394929391929091600160a060020a03908116911688565b60006105d782610535565b15156105e257600080fd5b5060009081526002602052604090206001015490565b60008054600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064957600080fd5b5af1151561065657600080fd5b50505060405180519050151561066b57600080fd5b61067485610e55565b1561067e57600080fd5b600160a060020a0385166000908152600360205260409020805460ff19166001179055600485600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156106e057600080fd5b5af115156106ed57600080fd5b50505060405180519050600481111561070257fe5b1461070c57600080fd5b8383836040518084805190602001908083835b6020831061073e5780518252601f19909201916020918201910161071f565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b6020831061078a5780518252601f19909201916020918201910161076b565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106107d65780518252601f1990920191602091820191016107b7565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600160a060020a03861663d3281fd66040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561084257600080fd5b5af1151561084f57600080fd5b505050604051805191909114905061086657600080fd5b84600160a060020a031663da1fea286040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156108a357600080fd5b5af115156108b057600080fd5b5050506040518051915050600160a060020a03811615156108d057600080fd5b80600160a060020a031663514d7067868686866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561095257808201518382015260200161093a565b50505050905090810190601f16801561097f5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156109b557808201518382015260200161099d565b50505050905090810190601f1680156109e25780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610a18578082015183820152602001610a00565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610a6857600080fd5b5af11515610a7557600080fd5b505050604051805190501515610a8a57600080fd5b32600160a060020a031681600160a060020a031686600160a060020a03167ffaa5bd626c00cd99117399c04259a0d49a005fdde47f67ed013a1f473a49587088600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b0657600080fd5b5af11515610b1357600080fd5b5050506040518051905089600160a060020a031663f6a5b13e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b5a57600080fd5b5af11515610b6757600080fd5b50505060405180519050898989604051600160a060020a0380871682528516602082015260a0604082018181529060608301906080840190840187818151815260200191508051906020019080838360005b83811015610bd1578082015183820152602001610bb9565b50505050905090810190601f168015610bfe5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610c34578082015183820152602001610c1c565b50505050905090810190601f168015610c615780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610c97578082015183820152602001610c7f565b50505050905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a45050505050565b6000610ce982610535565b1515610cf457600080fd5b50600090815260026020526040902060070154600160a060020a031690565b6000818152600260208190526040822090815460ff166003811115610d3457fe5b14156100b657600781015433600160a060020a03908116911614610d5757600080fd5b600054600782015460058301546003840154600160a060020a039384169363b7b6e978931691610d9e91610d9290601e63ffffffff61117f16565b9063ffffffff61119416565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de157600080fd5b5af11515610dee57600080fd5b505050604051805190501515610e0357600080fd5b805460ff191660031781557f9a05087bc2e92d4e31e031af3ffb9da7e4dffd4be5573811330541cc559315fe8360405190815260200160405180910390a150600192915050565b60015481565b601e81565b600160a060020a031660009081526003602052604090205460ff1690565b600080548190600160a060020a03166332baa8d98860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ebe57600080fd5b5af11515610ecb57600080fd5b505050604051805190501515610ee057600080fd5b60008311610eed57600080fd5b60018054610f009163ffffffff6111ca16565b600181815560009182526002602052604090912080549092508991839160ff191690836003811115610f2e57fe5b0217905550600181018790556002808201879055600382018690556004820184905560058201849055886003811115610f6357fe5b14156100b65733600160a060020a031684600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fb057600080fd5b5af11515610fbd57600080fd5b50505060405180519050600160a060020a0316141515610fdc57600080fd5b600054600160a060020a031663ac26109e3361100386610d928a601e63ffffffff61117f16565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104657600080fd5b5af1151561105357600080fd5b50505060405180519050151561106857600080fd5b600681018054600160a060020a0380871673ffffffffffffffffffffffffffffffffffffffff199283161790925560078301805433909316929091169190911790557fb0be9c5566c7b426b2e5378a75c24af27818f33e0b6aa5ea6208562c144c98f160015460405190815260200160405180910390a150506001549695505050505050565b60008060008060008060008060006111058a610535565b151561111057600080fd5b505050600096875250506002602081905260409095208054600182015496820154600383015460048401546005850154600686015460079096015460ff9095169b93995091975095509350600160a060020a039283169290911690565b60008282111561117957fe5b50900390565b600061118d838360646111d9565b9392505050565b6000808315156111a757600091506111c3565b508282028284828115156111b757fe5b04146111bf57fe5b8091505b5092915050565b6000828201838110156111bf57fe5b60006111ee6111e88585611194565b836111f6565b949350505050565b600080828481151561120457fe5b049493505050505600a165627a7a7230582075dcfabfde764e93018eaac638dc74dedd59ef66f96328a13c847da8170908140029", - "deployedBytecode": "0x6060604052600436106100b65763ffffffff60e060020a60003504166302a63c2881146100bb57806324026bfb146100f7578063270a8ef71461011f57806338c4090b146101355780633ab679561461014b5780634cfddcfb146101c2578063514d7067146101d857806355d66c3e146102bd57806360f75f3b146102ef57806369c7c180146103055780636b14ea361461031857806397e645f31461032b578063ea0b25901461034a578063eb3721be1461037b575b600080fd5b34156100c657600080fd5b6100e3600435600160a060020a0360243581169060443516610391565b604051901515815260200160405180910390f35b341561010257600080fd5b61010d600435610508565b60405190815260200160405180910390f35b341561012a57600080fd5b6100e3600435610535565b341561014057600080fd5b61010d60043561054b565b341561015657600080fd5b610161600435610577565b6040518089600381111561017157fe5b60ff1681526020810198909852506040808801969096526060870194909452608086019290925260a0850152600160a060020a0390811660c08501521660e083015261010090910191505180910390f35b34156101cd57600080fd5b61010d6004356105cc565b34156101e357600080fd5b6102bb60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506105f895505050505050565b005b34156102c857600080fd5b6102d3600435610cde565b604051600160a060020a03909116815260200160405180910390f35b34156102fa57600080fd5b6100e3600435610d13565b341561031057600080fd5b61010d610e4a565b341561032357600080fd5b61010d610e50565b341561033657600080fd5b6100e3600160a060020a0360043516610e55565b341561035557600080fd5b61010d60ff60043516602435604435606435600160a060020a036084351660a435610e73565b341561038657600080fd5b6101616004356110ee565b60008054819033600160a060020a039081169116146103af57600080fd5b50600084815260026020819052604090912090815460ff1660038111156103d257fe5b146103dc57600080fd5b6005810154600090116103ee57600080fd5b6006810154600160a060020a0384811691161461040a57600080fd5b600581015461042090600163ffffffff61116d16565b60058201819055151561043957805460ff191660031781555b6000546003820154600160a060020a039091169063ac26109e90869060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561049857600080fd5b5af115156104a557600080fd5b5050506040518051905015156104ba57600080fd5b7fe15b7f1dd90867f2f9084033184322ae15a1572828d3d2a5a2dca5f6038332ba8585604051918252600160a060020a031660208201526040908101905180910390a1506001949350505050565b600061051382610535565b151561051e57600080fd5b506000908152600260208190526040909120015490565b6000908152600260205260408120600101541190565b600061055682610535565b151561056157600080fd5b5060009081526002602052604090206003015490565b60026020819052600091825260409091208054600182015492820154600383015460048401546005850154600686015460079096015460ff90951696959394929391929091600160a060020a03908116911688565b60006105d782610535565b15156105e257600080fd5b5060009081526002602052604090206001015490565b60008054600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064957600080fd5b5af1151561065657600080fd5b50505060405180519050151561066b57600080fd5b61067485610e55565b1561067e57600080fd5b600160a060020a0385166000908152600360205260409020805460ff19166001179055600485600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156106e057600080fd5b5af115156106ed57600080fd5b50505060405180519050600481111561070257fe5b1461070c57600080fd5b8383836040518084805190602001908083835b6020831061073e5780518252601f19909201916020918201910161071f565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b6020831061078a5780518252601f19909201916020918201910161076b565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106107d65780518252601f1990920191602091820191016107b7565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600160a060020a03861663d3281fd66040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561084257600080fd5b5af1151561084f57600080fd5b505050604051805191909114905061086657600080fd5b84600160a060020a031663da1fea286040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156108a357600080fd5b5af115156108b057600080fd5b5050506040518051915050600160a060020a03811615156108d057600080fd5b80600160a060020a031663514d7067868686866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561095257808201518382015260200161093a565b50505050905090810190601f16801561097f5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156109b557808201518382015260200161099d565b50505050905090810190601f1680156109e25780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610a18578082015183820152602001610a00565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610a6857600080fd5b5af11515610a7557600080fd5b505050604051805190501515610a8a57600080fd5b32600160a060020a031681600160a060020a031686600160a060020a03167ffaa5bd626c00cd99117399c04259a0d49a005fdde47f67ed013a1f473a49587088600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b0657600080fd5b5af11515610b1357600080fd5b5050506040518051905089600160a060020a031663f6a5b13e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b5a57600080fd5b5af11515610b6757600080fd5b50505060405180519050898989604051600160a060020a0380871682528516602082015260a0604082018181529060608301906080840190840187818151815260200191508051906020019080838360005b83811015610bd1578082015183820152602001610bb9565b50505050905090810190601f168015610bfe5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610c34578082015183820152602001610c1c565b50505050905090810190601f168015610c615780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610c97578082015183820152602001610c7f565b50505050905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a45050505050565b6000610ce982610535565b1515610cf457600080fd5b50600090815260026020526040902060070154600160a060020a031690565b6000818152600260208190526040822090815460ff166003811115610d3457fe5b14156100b657600781015433600160a060020a03908116911614610d5757600080fd5b600054600782015460058301546003840154600160a060020a039384169363b7b6e978931691610d9e91610d9290601e63ffffffff61117f16565b9063ffffffff61119416565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de157600080fd5b5af11515610dee57600080fd5b505050604051805190501515610e0357600080fd5b805460ff191660031781557f9a05087bc2e92d4e31e031af3ffb9da7e4dffd4be5573811330541cc559315fe8360405190815260200160405180910390a150600192915050565b60015481565b601e81565b600160a060020a031660009081526003602052604090205460ff1690565b600080548190600160a060020a03166332baa8d98860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ebe57600080fd5b5af11515610ecb57600080fd5b505050604051805190501515610ee057600080fd5b60008311610eed57600080fd5b60018054610f009163ffffffff6111ca16565b600181815560009182526002602052604090912080549092508991839160ff191690836003811115610f2e57fe5b0217905550600181018790556002808201879055600382018690556004820184905560058201849055886003811115610f6357fe5b14156100b65733600160a060020a031684600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fb057600080fd5b5af11515610fbd57600080fd5b50505060405180519050600160a060020a0316141515610fdc57600080fd5b600054600160a060020a031663ac26109e3361100386610d928a601e63ffffffff61117f16565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104657600080fd5b5af1151561105357600080fd5b50505060405180519050151561106857600080fd5b600681018054600160a060020a0380871673ffffffffffffffffffffffffffffffffffffffff199283161790925560078301805433909316929091169190911790557fb0be9c5566c7b426b2e5378a75c24af27818f33e0b6aa5ea6208562c144c98f160015460405190815260200160405180910390a150506001549695505050505050565b60008060008060008060008060006111058a610535565b151561111057600080fd5b505050600096875250506002602081905260409095208054600182015496820154600383015460048401546005850154600686015460079096015460ff9095169b93995091975095509350600160a060020a039283169290911690565b60008282111561117957fe5b50900390565b600061118d838360646111d9565b9392505050565b6000808315156111a757600091506111c3565b508282028284828115156111b757fe5b04146111bf57fe5b8091505b5092915050565b6000828201838110156111bf57fe5b60006111ee6111e88585611194565b836111f6565b949350505050565b600080828481151561120457fe5b049493505050505600a165627a7a7230582075dcfabfde764e93018eaac638dc74dedd59ef66f96328a13c847da8170908140029", + "bytecode": "0x6060604052341561000f57600080fd5b6040516020806112a6833981016040528080519150819050600160a060020a038116151561003c57600080fd5b60008054600160a060020a03909216600160a060020a0319909216919091179055506112398061006d6000396000f3006060604052600436106100b65763ffffffff60e060020a60003504166302a63c2881146100bb57806324026bfb146100f7578063270a8ef71461011f57806338c4090b146101355780633ab679561461014b5780634cfddcfb146101c2578063514d7067146101d857806355d66c3e146102bd57806360f75f3b146102ef57806369c7c180146103055780636b14ea361461031857806397e645f31461032b578063ea0b25901461034a578063eb3721be1461037b575b600080fd5b34156100c657600080fd5b6100e3600435600160a060020a0360243581169060443516610391565b604051901515815260200160405180910390f35b341561010257600080fd5b61010d600435610508565b60405190815260200160405180910390f35b341561012a57600080fd5b6100e3600435610535565b341561014057600080fd5b61010d60043561054b565b341561015657600080fd5b610161600435610577565b6040518089600381111561017157fe5b60ff1681526020810198909852506040808801969096526060870194909452608086019290925260a0850152600160a060020a0390811660c08501521660e083015261010090910191505180910390f35b34156101cd57600080fd5b61010d6004356105cc565b34156101e357600080fd5b6102bb60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506105f895505050505050565b005b34156102c857600080fd5b6102d3600435610cde565b604051600160a060020a03909116815260200160405180910390f35b34156102fa57600080fd5b6100e3600435610d13565b341561031057600080fd5b61010d610e4a565b341561032357600080fd5b61010d610e50565b341561033657600080fd5b6100e3600160a060020a0360043516610e55565b341561035557600080fd5b61010d60ff60043516602435604435606435600160a060020a036084351660a435610e73565b341561038657600080fd5b6101616004356110ee565b60008054819033600160a060020a039081169116146103af57600080fd5b50600084815260026020819052604090912090815460ff1660038111156103d257fe5b146103dc57600080fd5b6005810154600090116103ee57600080fd5b6006810154600160a060020a0384811691161461040a57600080fd5b600581015461042090600163ffffffff61116d16565b60058201819055151561043957805460ff191660031781555b6000546003820154600160a060020a039091169063ac26109e90869060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561049857600080fd5b5af115156104a557600080fd5b5050506040518051905015156104ba57600080fd5b7fe15b7f1dd90867f2f9084033184322ae15a1572828d3d2a5a2dca5f6038332ba8585604051918252600160a060020a031660208201526040908101905180910390a1506001949350505050565b600061051382610535565b151561051e57600080fd5b506000908152600260208190526040909120015490565b6000908152600260205260408120600101541190565b600061055682610535565b151561056157600080fd5b5060009081526002602052604090206003015490565b60026020819052600091825260409091208054600182015492820154600383015460048401546005850154600686015460079096015460ff90951696959394929391929091600160a060020a03908116911688565b60006105d782610535565b15156105e257600080fd5b5060009081526002602052604090206001015490565b60008054600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064957600080fd5b5af1151561065657600080fd5b50505060405180519050151561066b57600080fd5b61067485610e55565b1561067e57600080fd5b600160a060020a0385166000908152600360205260409020805460ff19166001179055600485600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156106e057600080fd5b5af115156106ed57600080fd5b50505060405180519050600481111561070257fe5b1461070c57600080fd5b8383836040518084805190602001908083835b6020831061073e5780518252601f19909201916020918201910161071f565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b6020831061078a5780518252601f19909201916020918201910161076b565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106107d65780518252601f1990920191602091820191016107b7565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600160a060020a03861663d3281fd66040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561084257600080fd5b5af1151561084f57600080fd5b505050604051805191909114905061086657600080fd5b84600160a060020a031663da1fea286040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156108a357600080fd5b5af115156108b057600080fd5b5050506040518051915050600160a060020a03811615156108d057600080fd5b80600160a060020a031663514d7067868686866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561095257808201518382015260200161093a565b50505050905090810190601f16801561097f5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156109b557808201518382015260200161099d565b50505050905090810190601f1680156109e25780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610a18578082015183820152602001610a00565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610a6857600080fd5b5af11515610a7557600080fd5b505050604051805190501515610a8a57600080fd5b32600160a060020a031681600160a060020a031686600160a060020a03167ffaa5bd626c00cd99117399c04259a0d49a005fdde47f67ed013a1f473a49587088600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b0657600080fd5b5af11515610b1357600080fd5b5050506040518051905089600160a060020a031663f6a5b13e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b5a57600080fd5b5af11515610b6757600080fd5b50505060405180519050898989604051600160a060020a0380871682528516602082015260a0604082018181529060608301906080840190840187818151815260200191508051906020019080838360005b83811015610bd1578082015183820152602001610bb9565b50505050905090810190601f168015610bfe5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610c34578082015183820152602001610c1c565b50505050905090810190601f168015610c615780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610c97578082015183820152602001610c7f565b50505050905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a45050505050565b6000610ce982610535565b1515610cf457600080fd5b50600090815260026020526040902060070154600160a060020a031690565b6000818152600260208190526040822090815460ff166003811115610d3457fe5b14156100b657600781015433600160a060020a03908116911614610d5757600080fd5b600054600782015460058301546003840154600160a060020a039384169363b7b6e978931691610d9e91610d9290601e63ffffffff61117f16565b9063ffffffff61119416565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de157600080fd5b5af11515610dee57600080fd5b505050604051805190501515610e0357600080fd5b805460ff191660031781557f9a05087bc2e92d4e31e031af3ffb9da7e4dffd4be5573811330541cc559315fe8360405190815260200160405180910390a150600192915050565b60015481565b601e81565b600160a060020a031660009081526003602052604090205460ff1690565b600080548190600160a060020a03166332baa8d98860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ebe57600080fd5b5af11515610ecb57600080fd5b505050604051805190501515610ee057600080fd5b60008311610eed57600080fd5b60018054610f009163ffffffff6111ca16565b600181815560009182526002602052604090912080549092508991839160ff191690836003811115610f2e57fe5b0217905550600181018790556002808201879055600382018690556004820184905560058201849055886003811115610f6357fe5b14156100b65733600160a060020a031684600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fb057600080fd5b5af11515610fbd57600080fd5b50505060405180519050600160a060020a0316141515610fdc57600080fd5b600054600160a060020a031663ac26109e3361100386610d928a601e63ffffffff61117f16565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104657600080fd5b5af1151561105357600080fd5b50505060405180519050151561106857600080fd5b600681018054600160a060020a0380871673ffffffffffffffffffffffffffffffffffffffff199283161790925560078301805433909316929091169190911790557fb0be9c5566c7b426b2e5378a75c24af27818f33e0b6aa5ea6208562c144c98f160015460405190815260200160405180910390a150506001549695505050505050565b60008060008060008060008060006111058a610535565b151561111057600080fd5b505050600096875250506002602081905260409095208054600182015496820154600383015460048401546005850154600686015460079096015460ff9095169b93995091975095509350600160a060020a039283169290911690565b60008282111561117957fe5b50900390565b600061118d838360646111d9565b9392505050565b6000808315156111a757600091506111c3565b508282028284828115156111b757fe5b04146111bf57fe5b8091505b5092915050565b6000828201838110156111bf57fe5b60006111ee6111e88585611194565b836111f6565b949350505050565b600080828481151561120457fe5b049493505050505600a165627a7a72305820b668c5108a5814f2559e74c0479fac009c4511209da1afccf95c8e16c36ab40e0029", + "deployedBytecode": "0x6060604052600436106100b65763ffffffff60e060020a60003504166302a63c2881146100bb57806324026bfb146100f7578063270a8ef71461011f57806338c4090b146101355780633ab679561461014b5780634cfddcfb146101c2578063514d7067146101d857806355d66c3e146102bd57806360f75f3b146102ef57806369c7c180146103055780636b14ea361461031857806397e645f31461032b578063ea0b25901461034a578063eb3721be1461037b575b600080fd5b34156100c657600080fd5b6100e3600435600160a060020a0360243581169060443516610391565b604051901515815260200160405180910390f35b341561010257600080fd5b61010d600435610508565b60405190815260200160405180910390f35b341561012a57600080fd5b6100e3600435610535565b341561014057600080fd5b61010d60043561054b565b341561015657600080fd5b610161600435610577565b6040518089600381111561017157fe5b60ff1681526020810198909852506040808801969096526060870194909452608086019290925260a0850152600160a060020a0390811660c08501521660e083015261010090910191505180910390f35b34156101cd57600080fd5b61010d6004356105cc565b34156101e357600080fd5b6102bb60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506105f895505050505050565b005b34156102c857600080fd5b6102d3600435610cde565b604051600160a060020a03909116815260200160405180910390f35b34156102fa57600080fd5b6100e3600435610d13565b341561031057600080fd5b61010d610e4a565b341561032357600080fd5b61010d610e50565b341561033657600080fd5b6100e3600160a060020a0360043516610e55565b341561035557600080fd5b61010d60ff60043516602435604435606435600160a060020a036084351660a435610e73565b341561038657600080fd5b6101616004356110ee565b60008054819033600160a060020a039081169116146103af57600080fd5b50600084815260026020819052604090912090815460ff1660038111156103d257fe5b146103dc57600080fd5b6005810154600090116103ee57600080fd5b6006810154600160a060020a0384811691161461040a57600080fd5b600581015461042090600163ffffffff61116d16565b60058201819055151561043957805460ff191660031781555b6000546003820154600160a060020a039091169063ac26109e90869060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561049857600080fd5b5af115156104a557600080fd5b5050506040518051905015156104ba57600080fd5b7fe15b7f1dd90867f2f9084033184322ae15a1572828d3d2a5a2dca5f6038332ba8585604051918252600160a060020a031660208201526040908101905180910390a1506001949350505050565b600061051382610535565b151561051e57600080fd5b506000908152600260208190526040909120015490565b6000908152600260205260408120600101541190565b600061055682610535565b151561056157600080fd5b5060009081526002602052604090206003015490565b60026020819052600091825260409091208054600182015492820154600383015460048401546005850154600686015460079096015460ff90951696959394929391929091600160a060020a03908116911688565b60006105d782610535565b15156105e257600080fd5b5060009081526002602052604090206001015490565b60008054600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064957600080fd5b5af1151561065657600080fd5b50505060405180519050151561066b57600080fd5b61067485610e55565b1561067e57600080fd5b600160a060020a0385166000908152600360205260409020805460ff19166001179055600485600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156106e057600080fd5b5af115156106ed57600080fd5b50505060405180519050600481111561070257fe5b1461070c57600080fd5b8383836040518084805190602001908083835b6020831061073e5780518252601f19909201916020918201910161071f565b6001836020036101000a038019825116818451161790925250505091909101905083805190602001908083835b6020831061078a5780518252601f19909201916020918201910161076b565b6001836020036101000a038019825116818451161790925250505091909101905082805190602001908083835b602083106107d65780518252601f1990920191602091820191016107b7565b6001836020036101000a03801982511681845116179092525050509190910194506040935050505051908190039020600160a060020a03861663d3281fd66040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561084257600080fd5b5af1151561084f57600080fd5b505050604051805191909114905061086657600080fd5b84600160a060020a031663da1fea286040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156108a357600080fd5b5af115156108b057600080fd5b5050506040518051915050600160a060020a03811615156108d057600080fd5b80600160a060020a031663514d7067868686866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561095257808201518382015260200161093a565b50505050905090810190601f16801561097f5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156109b557808201518382015260200161099d565b50505050905090810190601f1680156109e25780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610a18578082015183820152602001610a00565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610a6857600080fd5b5af11515610a7557600080fd5b505050604051805190501515610a8a57600080fd5b32600160a060020a031681600160a060020a031686600160a060020a03167ffaa5bd626c00cd99117399c04259a0d49a005fdde47f67ed013a1f473a49587088600160a060020a0316635f44910c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b0657600080fd5b5af11515610b1357600080fd5b5050506040518051905089600160a060020a031663f6a5b13e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b5a57600080fd5b5af11515610b6757600080fd5b50505060405180519050898989604051600160a060020a0380871682528516602082015260a0604082018181529060608301906080840190840187818151815260200191508051906020019080838360005b83811015610bd1578082015183820152602001610bb9565b50505050905090810190601f168015610bfe5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610c34578082015183820152602001610c1c565b50505050905090810190601f168015610c615780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610c97578082015183820152602001610c7f565b50505050905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a45050505050565b6000610ce982610535565b1515610cf457600080fd5b50600090815260026020526040902060070154600160a060020a031690565b6000818152600260208190526040822090815460ff166003811115610d3457fe5b14156100b657600781015433600160a060020a03908116911614610d5757600080fd5b600054600782015460058301546003840154600160a060020a039384169363b7b6e978931691610d9e91610d9290601e63ffffffff61117f16565b9063ffffffff61119416565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de157600080fd5b5af11515610dee57600080fd5b505050604051805190501515610e0357600080fd5b805460ff191660031781557f9a05087bc2e92d4e31e031af3ffb9da7e4dffd4be5573811330541cc559315fe8360405190815260200160405180910390a150600192915050565b60015481565b601e81565b600160a060020a031660009081526003602052604090205460ff1690565b600080548190600160a060020a03166332baa8d98860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ebe57600080fd5b5af11515610ecb57600080fd5b505050604051805190501515610ee057600080fd5b60008311610eed57600080fd5b60018054610f009163ffffffff6111ca16565b600181815560009182526002602052604090912080549092508991839160ff191690836003811115610f2e57fe5b0217905550600181018790556002808201879055600382018690556004820184905560058201849055886003811115610f6357fe5b14156100b65733600160a060020a031684600160a060020a031663deff41c16040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fb057600080fd5b5af11515610fbd57600080fd5b50505060405180519050600160a060020a0316141515610fdc57600080fd5b600054600160a060020a031663ac26109e3361100386610d928a601e63ffffffff61117f16565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104657600080fd5b5af1151561105357600080fd5b50505060405180519050151561106857600080fd5b600681018054600160a060020a0380871673ffffffffffffffffffffffffffffffffffffffff199283161790925560078301805433909316929091169190911790557fb0be9c5566c7b426b2e5378a75c24af27818f33e0b6aa5ea6208562c144c98f160015460405190815260200160405180910390a150506001549695505050505050565b60008060008060008060008060006111058a610535565b151561111057600080fd5b505050600096875250506002602081905260409095208054600182015496820154600383015460048401546005850154600686015460079096015460ff9095169b93995091975095509350600160a060020a039283169290911690565b60008282111561117957fe5b50900390565b600061118d838360646111d9565b9392505050565b6000808315156111a757600091506111c3565b508282028284828115156111b757fe5b04146111bf57fe5b8091505b5092915050565b6000828201838110156111bf57fe5b60006111ee6111e88585611194565b836111f6565b949350505050565b600080828481151561120457fe5b049493505050505600a165627a7a72305820b668c5108a5814f2559e74c0479fac009c4511209da1afccf95c8e16c36ab40e0029", "sourceMap": "177:6254:10:-;;;666:96;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:96:10;;-1:-1:-1;;;;;;300:30:7;;;;292:39;;;;;;335:17;:55;;-1:-1:-1;;;;;335:55:7;;;-1:-1:-1;;;;;;335:55:7;;;;;;;;;-1:-1:-1;177:6254:10;;;;;;", "deployedSourceMap": "177:6254:10:-;;;;;;;;;-1:-1:-1;;;177:6254:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2660:702;;;;;;;;;;;;-1:-1:-1;;;;;2660:702:10;;;;;;;;;;;;;;;;;;;;;;;;;;;4209:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3365:156;;;;;;;;;;;;;;3544:211;;;;;;;;;;;;;;338:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;338:55:10;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;338:55:10;;;;;;;;;;;;;;;;;-1:-1:-1;338:55:10;;;;;;3990:217;;;;;;;;;;;;;;5678:750;;;;;;;;;;;;;-1:-1:-1;;;;;5678:750:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5678:750:10;;-1:-1:-1;5678:750:10;;-1:-1:-1;;;;;;5678:750:10;;;3757:231;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3757:231:10;;;;;;;;;;;;;;1944:679;;;;;;;;;;;;;;279:56;;;;;;;;;;;;397:45;;;;;;;;;;;;5554:120;;;;;;;;;;-1:-1:-1;;;;;5554:120:10;;;;;793:1148;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;793:1148:10;;;;;;;4422:814;;;;;;;;;;;;;;2660:702;2794:4;197:17:7;;2794:4:10;;175:10:7;-1:-1:-1;;;;;175:40:7;;;197:17;;175:40;167:49;;;;;;-1:-1:-1;2848:28:10;;;;:11;:28;;;;;;;;;2888:21;;;;:63;;;;;;;;;2880:72;;;;;;2964:21;;;;2990:1;2964:27;;2956:36;;;;;;3004:22;;;;-1:-1:-1;;;;;3004:37:10;;;:22;;:37;2996:46;;;;;;3071:21;;;;:28;;3097:1;3071:28;:25;:28;:::i;:::-;3047:21;;;:52;;;3107:26;3103:108;;;3142:64;;-1:-1:-1;;3142:64:10;3166:40;3142:64;;;3103:108;3222:17;;3265;;;;-1:-1:-1;;;;;3222:17:10;;;;:30;;3253:10;;3222:61;;-1:-1:-1;;;3222:61:10;;;;;;-1:-1:-1;;;;;3222:61:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3214:70;;;;;;;;3293:50;3315:15;3332:10;3293:50;;;;;-1:-1:-1;;;;;3293:50:10;;;;;;;;;;;;;;;;-1:-1:-1;3354:4:10;;2660:702;-1:-1:-1;;;;2660:702:10:o;4209:211::-;4284:7;4306:36;4326:15;4306:19;:36::i;:::-;4298:45;;;;;;;;-1:-1:-1;4382:28:10;;;;:11;:28;;;;;;;;:34;;;4209:211::o;3365:156::-;3441:21;3476:28;;;:11;:28;;;;;:37;;;:41;;3365:156::o;3544:211::-;3619:7;3641:36;3661:15;3641:19;:36::i;:::-;3633:45;;;;;;;;-1:-1:-1;3717:28:10;;;;:11;:28;;;;;:34;;;;3544:211::o;338:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;338:55:10;;;;;;:::o;3990:217::-;4068:7;4090:36;4110:15;4090:19;:36::i;:::-;4082:45;;;;;;;;-1:-1:-1;4166:28:10;;;;:11;:28;;;;;:37;;;;3990:217::o;5678:750::-;6073:18;5786:17;;-1:-1:-1;;;;;5786:17:10;:33;5820:5;5786:40;;-1:-1:-1;;;5786:40:10;;;;;;-1:-1:-1;;;;;5786:40:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5778:49;;;;;;;;5841:21;5856:5;5841:14;:21::i;:::-;5840:22;5832:31;;;;;;-1:-1:-1;;;;;5868:21:10;;;;;;:14;:21;;;;;:28;;-1:-1:-1;;5868:28:10;5892:4;5868:28;;;5940:38;5919:5;-1:-1:-1;;;;;5909:25:10;;:27;;;;;-1:-1:-1;;;5909:27:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;;;;;;5901:78;;;;;;6046:7;6054;6062:4;6036:31;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;182:3;176:10;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;377:20;365:33;;;-1:-1;;;6036:31:10;;;;;-1:-1:-1;6036:31:10;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;182:3;176:10;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;377:20;365:33;;;-1:-1;;;6036:31:10;;;;;-1:-1:-1;6036:31:10;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;182:3;176:10;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;377:20;365:33;;;-1:-1;;;6036:31:10;;;;;-1:-1:-1;6036:31:10;;-1:-1:-1;;;;6036:31:10;;;;;;;-1:-1:-1;;;;;5992:38:10;;;:40;;;;;-1:-1:-1;;;5992:40:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:75;;;;;-1:-1:-1;5984:84:10;;;;;;6103:5;-1:-1:-1;;;;;6093:27:10;;:29;;;;;-1:-1:-1;;;6093:29:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;6135:24:10;;;;6127:33;;;;;;6196:10;-1:-1:-1;;;;;6173:52:10;;6231:5;6242:7;6255;6268:4;6173:104;;;;;-1:-1:-1;;;6173:104:10;;;;;;;-1:-1:-1;;;;;6173:104:10;-1:-1:-1;;;;;6173:104:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6173:104:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6173:104:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6173:104:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6165:113;;;;;;;;6392:9;-1:-1:-1;;;;;6288:135:10;6381:10;-1:-1:-1;;;;;6288:135:10;6311:5;-1:-1:-1;;;;;6288:135:10;;6327:5;-1:-1:-1;;;;;6317:28:10;;:30;;;;;-1:-1:-1;;;6317:30:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6358:5;-1:-1:-1;;;;;6348:30:10;;:32;;;;;-1:-1:-1;;;6348:32:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6402:7;6410;6418:4;6288:135;;-1:-1:-1;;;;;6288:135:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6288:135:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6288:135:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6288:135:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5678:750;;;;;:::o;3757:231::-;3842:7;3864:36;3884:15;3864:19;:36::i;:::-;3856:45;;;;;;;;-1:-1:-1;3940:28:10;;;;:11;:28;;;;;:44;;;-1:-1:-1;;;;;3940:44:10;;3757:231::o;1944:679::-;2011:4;2065:28;;;:11;:28;;;;;;;;2101:21;;;;:62;;;;;;;;;2097:397;;;2180:27;;;;2211:10;-1:-1:-1;;;;;2180:41:10;;;:27;;:41;2172:50;;;;;;2235:17;;2268:27;;;;2347:21;;;;2297:17;;;;-1:-1:-1;;;;;2235:17:10;;;;:32;;2268:27;;2297:72;;:45;;440:2;2297:45;:28;:45;:::i;:::-;:49;:72;:49;:72;:::i;:::-;2235:135;;-1:-1:-1;;;2235:135:10;;;;;;-1:-1:-1;;;;;2235:135:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2227:144;;;;;;;;2497:64;;-1:-1:-1;;2497:64:10;2521:40;2497:64;;;2570:34;2588:15;2570:34;;;;;;;;;;;;;;-1:-1:-1;2615:4:10;;1944:679;-1:-1:-1;;1944:679:10:o;279:56::-;;;;:::o;397:45::-;440:2;397:45;:::o;5554:120::-;-1:-1:-1;;;;;5648:21:10;5615:17;5648:21;;;:14;:21;;;;;;;;;5554:120::o;793:1148::-;985:4;1004:17;;985:4;;-1:-1:-1;;;;;1004:17:10;:34;1039:9;1004:45;;-1:-1:-1;;;1004:45:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;996:54;;;;;;;;1071:1;1062:10;;1054:19;;;;;;1109:1;1092:12;;:19;;;:16;:19;:::i;:::-;1077:12;:34;;;1161:25;;;;:11;:25;;;;;;1190:39;;1161:25;;-1:-1:-1;1219:10:10;;1161:25;;-1:-1:-1;;1190:39:10;;1219:10;1190:39;;;;;;;;;;;;-1:-1:-1;1233:20:10;;;:38;;;1275:17;;;;:35;;;1314:17;;;:35;;;1353:18;;;:36;;;1393:21;;;:36;;;1438:10;:51;;;;;;;;;1434:440;;;1543:10;-1:-1:-1;;;;;1506:47:10;1517:11;-1:-1:-1;;;;;1506:31:10;;:33;;;;;-1:-1:-1;;;1506:33:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1506:47:10;;1498:56;;;;;;;;1568:17;;-1:-1:-1;;;;;1568:17:10;:30;1599:10;1611:47;1650:7;1611:34;:6;440:2;1611:34;:17;:34;:::i;:47::-;1568:91;;-1:-1:-1;;;1568:91:10;;;;;;-1:-1:-1;;;;;1568:91:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:100;;;;;;;;1727:22;;;:41;;-1:-1:-1;;;;;1727:41:10;;;-1:-1:-1;;1727:41:10;;;;;;;1773:27;;;:40;;1803:10;1773:40;;;;;;;;;;;;;1882:32;1901:12;;1882:32;;;;;;;;;;;;;;-1:-1:-1;;1925:12:10;;;793:1148;-1:-1:-1;;;;;;793:1148:10:o;4422:814::-;4496:43;4543:16;4590:13;4628;4674:14;4733:17;4782:18;4836:23;4943:40;4874:36;4894:15;4874:19;:36::i;:::-;4866:45;;;;;;;;-1:-1:-1;;;4986:28:10;;;;-1:-1:-1;;4986:11:10;:28;;;;;;;;5030:21;;;5056:20;;;5081:17;;;;5103;;;;5125:18;;;;5148:21;;;;5174:22;;;;5201:27;;;;;5030:21;;;;;5081:17;;-1:-1:-1;5103:17:10;;-1:-1:-1;5125:18:10;-1:-1:-1;5148:21:10;-1:-1:-1;;;;;;5174:22:10;;;;5201:27;;;;4422:814::o;531:106:15:-;589:7;610:6;;;;603:14;;;;-1:-1:-1;628:5:15;;;531:106::o;1388:114::-;1453:7;1474:24;1488:1;1491;1494:3;1474:13;:24::i;:::-;1467:31;1388:114;-1:-1:-1;;;1388:114:15:o;640:162::-;698:7;;716:6;;712:32;;;738:1;731:8;;;;712:32;-1:-1:-1;759:5:15;;;763:1;759;:5;775;;;;;;;;:10;768:18;;;;797:1;790:8;;640:162;;;;;;:::o;405:123::-;463:7;489:5;;;505:6;;;;498:14;;;1264:121;1343:7;1364:17;1368:9;1372:1;1375;1368:3;:9::i;:::-;1379:1;1364:3;:17::i;:::-;1357:24;1264:121;-1:-1:-1;;;;1264:121:15:o;805:257::-;863:7;949:9;965:1;961;:5;;;;;;;;;805:257;-1:-1:-1;;;;805:257:15:o", "source": "pragma solidity ^0.4.21;\nimport './IexecLib.sol';\nimport './IexecHubAccessor.sol';\nimport './WorkerPool.sol';\nimport \"./SafeMathOZ.sol\";\nimport './IexecCallbackInterface.sol';\n\ncontract Marketplace is IexecHubAccessor\n{\n\tusing SafeMathOZ for uint256;\n\n\t/**\n\t * Marketplace\n\t */\n\tuint public m_orderCount;\n\tmapping(uint =>IexecLib.MarketOrder) public m_orderBook;\n\n\tuint256 public constant ASK_STAKE_RATIO = 30;\n\n\t/**\n\t * Events\n\t */\n\tevent MarketOrderCreated (uint marketorderIdx);\n\tevent MarketOrderClosed (uint marketorderIdx);\n\tevent MarketOrderAskConsume(uint marketorderIdx, address requester);\n\n\t/**\n\t * Constructor\n\t */\n\tfunction Marketplace(address _iexecHubAddress)\n\tIexecHubAccessor(_iexecHubAddress)\n\tpublic\n\t{\n\t}\n\n\t/**\n\t * Market orders\n\t */\n\tfunction createMarketOrder(\n\t\tIexecLib.MarketOrderDirectionEnum _direction,\n\t\tuint256 _category,\n\t\tuint256 _trust,\n\t\tuint256 _value,\n\t\taddress _workerpool,\n\t\tuint256 _volume)\n\tpublic returns (uint)\n\t{\n\t\trequire(iexecHubInterface.existingCategory(_category));\n\t\trequire(_volume >0);\n\t\tm_orderCount = m_orderCount.add(1);\n\t\tIexecLib.MarketOrder storage marketorder = m_orderBook[m_orderCount];\n\t\tmarketorder.direction = _direction;\n\t\tmarketorder.category = _category;\n\t\tmarketorder.trust = _trust;\n\t\tmarketorder.value = _value;\n\t\tmarketorder.volume = _volume;\n\t\tmarketorder.remaining = _volume;\n\n\t\tif (_direction == IexecLib.MarketOrderDirectionEnum.ASK)\n\t\t{\n\t\t\trequire(WorkerPool(_workerpool).m_owner() == msg.sender);\n\n\t\t\trequire(iexecHubInterface.lockForOrder(msg.sender, _value.percentage(ASK_STAKE_RATIO).mul(_volume))); // mul must be done after percentage to avoid rounding errors\n\t\t\tmarketorder.workerpool = _workerpool;\n\t\t\tmarketorder.workerpoolOwner = msg.sender;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// no BID implementation\n\t\t\trevert();\n\t\t}\n\t\temit MarketOrderCreated(m_orderCount);\n\t\treturn m_orderCount;\n\t}\n\n\tfunction closeMarketOrder(uint256 _marketorderIdx) public returns (bool)\n\t{\n\t\tIexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx];\n\t\tif (marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK)\n\t\t{\n\t\t\trequire(marketorder.workerpoolOwner == msg.sender);\n\t\t\trequire(iexecHubInterface.unlockForOrder(marketorder.workerpoolOwner, marketorder.value.percentage(ASK_STAKE_RATIO).mul(marketorder.remaining))); // mul must be done after percentage to avoid rounding errors\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// no BID implementation\n\t\t\trevert();\n\t\t}\n\t\tmarketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED;\n\t\temit MarketOrderClosed(_marketorderIdx);\n\t\treturn true;\n\t}\n\n\n\t/**\n\t * Assets consumption\n\t */\n\tfunction consumeMarketOrderAsk(\n\t\tuint256 _marketorderIdx,\n\t\taddress _requester,\n\t\taddress _workerpool)\n\tpublic onlyIexecHub returns (bool)\n\t{\n\t\tIexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx];\n\t\trequire(marketorder.direction == IexecLib.MarketOrderDirectionEnum.ASK);\n\t\trequire(marketorder.remaining > 0);\n\t\trequire(marketorder.workerpool == _workerpool);\n\n\t\tmarketorder.remaining = marketorder.remaining.sub(1);\n\t\tif (marketorder.remaining == 0)\n\t\t{\n\t\t\tmarketorder.direction = IexecLib.MarketOrderDirectionEnum.CLOSED;\n\t\t}\n\t\trequire(iexecHubInterface.lockForOrder(_requester, marketorder.value));\n\t\temit MarketOrderAskConsume(_marketorderIdx, _requester);\n\t\treturn true;\n\t}\n\n\tfunction existingMarketOrder(uint256 _marketorderIdx) public view returns (bool marketOrderExist)\n\t{\n\t\treturn m_orderBook[_marketorderIdx].category > 0;\n\t}\n\n\t/**\n\t * Views\n\t */\n\tfunction getMarketOrderValue(uint256 _marketorderIdx) public view returns (uint256)\n\t{\n\t\trequire(existingMarketOrder(_marketorderIdx)); // no silent value returned\n\t\treturn m_orderBook[_marketorderIdx].value;\n\t}\n\tfunction getMarketOrderWorkerpoolOwner(uint256 _marketorderIdx) public view returns (address)\n\t{\n\t\trequire(existingMarketOrder(_marketorderIdx)); // no silent value returned\n\t\treturn m_orderBook[_marketorderIdx].workerpoolOwner;\n\t}\n\tfunction getMarketOrderCategory(uint256 _marketorderIdx) public view returns (uint256)\n\t{\n\t\trequire(existingMarketOrder(_marketorderIdx)); // no silent value returned\n\t\treturn m_orderBook[_marketorderIdx].category;\n\t}\n\tfunction getMarketOrderTrust(uint256 _marketorderIdx) public view returns (uint256)\n\t{\n\t\trequire(existingMarketOrder(_marketorderIdx)); // no silent value returned\n\t\treturn m_orderBook[_marketorderIdx].trust;\n\t}\n\tfunction getMarketOrder(uint256 _marketorderIdx) public view returns\n\t(\n\t\tIexecLib.MarketOrderDirectionEnum direction,\n\t\tuint256 category, // runtime selection\n\t\tuint256 trust, // for PoCo\n\t\tuint256 value, // value/cost/price\n\t\tuint256 volume, // quantity of instances (total)\n\t\tuint256 remaining, // remaining instances\n\t\taddress workerpool, // BID can use null for any\n\t\taddress workerpoolOwner)\n\t{\n\t\trequire(existingMarketOrder(_marketorderIdx)); // no silent value returned\n\t\tIexecLib.MarketOrder storage marketorder = m_orderBook[_marketorderIdx];\n\t\treturn (\n\t\t\tmarketorder.direction,\n\t\t\tmarketorder.category,\n\t\t\tmarketorder.trust,\n\t\t\tmarketorder.value,\n\t\t\tmarketorder.volume,\n\t\t\tmarketorder.remaining,\n\t\t\tmarketorder.workerpool,\n\t\t\tmarketorder.workerpoolOwner\n\t\t);\n\t}\n\n\t/**\n\t * Callback Proof managment\n\t */\n\n\tevent WorkOrderCallbackProof(address indexed woid, address requester, address beneficiary,address indexed callbackTo, address indexed gasCallbackProvider,string stdout, string stderr , string uri);\n\n\t//mapping(workorder => bool)\n\t mapping(address => bool) m_callbackDone;\n\n\t function isCallbackDone(address _woid) public view returns (bool callbackDone)\n\t {\n\t\t return m_callbackDone[_woid];\n\t }\n\n\t function workOrderCallback(address _woid,string _stdout, string _stderr, string _uri) public\n\t {\n\t\t require(iexecHubInterface.isWoidRegistred(_woid));\n\t\t require(!isCallbackDone(_woid));\n\t\t m_callbackDone[_woid] = true;\n\t\t require(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.COMPLETED);\n\t\t require(WorkOrder(_woid).m_resultCallbackProof() == keccak256(_stdout,_stderr,_uri));\n\t\t address callbackTo =WorkOrder(_woid).m_callback();\n\t\t require(callbackTo != address(0));\n\t\t require(IexecCallbackInterface(callbackTo).workOrderCallback(\n\t\t\t _woid,\n\t\t\t _stdout,\n\t\t\t _stderr,\n\t\t\t _uri\n\t\t ));\n\t\t emit WorkOrderCallbackProof(_woid,WorkOrder(_woid).m_requester(),WorkOrder(_woid).m_beneficiary(),callbackTo,tx.origin,_stdout,_stderr,_uri);\n\t }\n\n}\n", @@ -16677,6 +16677,12 @@ "version": "0.4.21+commit.dfe3193c.Emscripten.clang" }, "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0xfb7703c74f14930f8871c34056d5db6693e5a00b", + "transactionHash": "0xc0c911f0899002e7216f2c99730813e30c4764988b3cb8fcbab0e625afec5f56" + }, "3": { "events": {}, "links": {}, @@ -16697,5 +16703,5 @@ } }, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-21T11:48:56.520Z" + "updatedAt": "2018-06-12T15:21:39.679Z" } diff --git a/build/contracts/MarketplaceAccessor.json b/deployed/contracts/MarketplaceAccessor.json similarity index 99% rename from build/contracts/MarketplaceAccessor.json rename to deployed/contracts/MarketplaceAccessor.json index f1c8989e..4b7764df 100644 --- a/build/contracts/MarketplaceAccessor.json +++ b/deployed/contracts/MarketplaceAccessor.json @@ -875,9 +875,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", -<<<<<<< Updated upstream - "updatedAt": "2018-05-19T20:49:59.805Z" -======= - "updatedAt": "2018-05-20T20:12:33.558Z" ->>>>>>> Stashed changes + "updatedAt": "2018-06-12T14:56:21.149Z" } \ No newline at end of file diff --git a/build/contracts/MarketplaceInterface.json b/deployed/contracts/MarketplaceInterface.json similarity index 99% rename from build/contracts/MarketplaceInterface.json rename to deployed/contracts/MarketplaceInterface.json index f9241239..d88bef90 100644 --- a/build/contracts/MarketplaceInterface.json +++ b/deployed/contracts/MarketplaceInterface.json @@ -2037,9 +2037,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", -<<<<<<< Updated upstream - "updatedAt": "2018-05-19T20:49:59.811Z" -======= - "updatedAt": "2018-05-20T20:12:33.558Z" ->>>>>>> Stashed changes + "updatedAt": "2018-06-12T14:56:21.149Z" } \ No newline at end of file diff --git a/build/contracts/Migrations.json b/deployed/contracts/Migrations.json similarity index 97% rename from build/contracts/Migrations.json rename to deployed/contracts/Migrations.json index d71c1999..81c8f6de 100644 --- a/build/contracts/Migrations.json +++ b/deployed/contracts/Migrations.json @@ -1375,40 +1375,13 @@ "version": "0.4.21+commit.dfe3193c.Emscripten.clang" }, "networks": { - "3": { + "1": { "events": {}, "links": {}, - "address": "0x922c8fb7b70ff0e42919f623a53887ef31cf4e91", - "transactionHash": "0x5697151589061e21d3dced8191c942092f0365a17ccdc3014104f0888b0b5648" - }, - "4": { - "events": {}, - "links": {}, - "address": "0x4d4f1096e353b288b7f815a3c0bb878b3e0fa930", - "transactionHash": "0x99d7823ba70acc52b559b5b640a33fb49f1145e99c065c3a32dab39bb501a118" - }, - "42": { - "events": {}, - "links": {}, -<<<<<<< Updated upstream - "address": "0x9d555846844a451dd2396adbe1b5f4a45d7bd2b5", - "transactionHash": "0xf234d345a9d8b5d308a7bd57f8e118d934bc953845563491cc521310b5bb08a2" - }, - "1526762989825": { - "events": {}, - "links": {}, - "address": "0x4376803dc78e0fa0251a68ae7bb949de35863135", - "transactionHash": "0xf234d345a9d8b5d308a7bd57f8e118d934bc953845563491cc521310b5bb08a2" - } - }, - "schemaVersion": "2.0.0", - "updatedAt": "2018-05-19T20:50:05.742Z" -======= - "address": "0x9a1eb11bcbc6cf50fda67519568bec2da3f8cad0", - "transactionHash": "0x9a0a926bde88a7e07eee256f0b6ca5ff4bf47b090bf1893c6baabc662b2977c0" + "address": "0x016dffb35cf40f8723417e5aa2c0bd7adb8a9a62", + "transactionHash": "0xa961d67e562c2252d195c1f2d99e37a68768f173fccbe65e36217acd04d1a8f8" } }, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-21T11:48:56.468Z" ->>>>>>> Stashed changes + "updatedAt": "2018-06-12T15:21:39.638Z" } \ No newline at end of file diff --git a/build/contracts/Ownable.json b/deployed/contracts/Ownable.json similarity index 99% rename from build/contracts/Ownable.json rename to deployed/contracts/Ownable.json index d8d27d23..a7272030 100644 --- a/build/contracts/Ownable.json +++ b/deployed/contracts/Ownable.json @@ -1006,5 +1006,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.576Z" -} + "updatedAt": "2018-06-12T14:56:21.164Z" +} \ No newline at end of file diff --git a/build/contracts/OwnableOZ.json b/deployed/contracts/OwnableOZ.json similarity index 99% rename from build/contracts/OwnableOZ.json rename to deployed/contracts/OwnableOZ.json index 4e64033d..769c09f3 100644 --- a/build/contracts/OwnableOZ.json +++ b/deployed/contracts/OwnableOZ.json @@ -1821,9 +1821,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", -<<<<<<< Updated upstream - "updatedAt": "2018-05-19T20:49:59.812Z" -======= - "updatedAt": "2018-05-20T20:12:33.559Z" ->>>>>>> Stashed changes + "updatedAt": "2018-06-12T14:56:21.149Z" } \ No newline at end of file diff --git a/build/contracts/RLC.json b/deployed/contracts/RLC.json similarity index 100% rename from build/contracts/RLC.json rename to deployed/contracts/RLC.json diff --git a/build/contracts/SafeMath.json b/deployed/contracts/SafeMath.json similarity index 99% rename from build/contracts/SafeMath.json rename to deployed/contracts/SafeMath.json index b16226b4..d867b967 100644 --- a/build/contracts/SafeMath.json +++ b/deployed/contracts/SafeMath.json @@ -4975,5 +4975,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.578Z" -} + "updatedAt": "2018-06-12T14:56:21.166Z" +} \ No newline at end of file diff --git a/build/contracts/SafeMathOZ.json b/deployed/contracts/SafeMathOZ.json similarity index 99% rename from build/contracts/SafeMathOZ.json rename to deployed/contracts/SafeMathOZ.json index 42a444f8..c175808f 100644 --- a/build/contracts/SafeMathOZ.json +++ b/deployed/contracts/SafeMathOZ.json @@ -5033,5 +5033,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.559Z" -} + "updatedAt": "2018-06-12T14:56:21.150Z" +} \ No newline at end of file diff --git a/build/contracts/TestSha.json b/deployed/contracts/TestSha.json similarity index 99% rename from build/contracts/TestSha.json rename to deployed/contracts/TestSha.json index 913b2d18..79462be2 100644 --- a/build/contracts/TestSha.json +++ b/deployed/contracts/TestSha.json @@ -2778,5 +2778,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.560Z" -} + "updatedAt": "2018-06-12T14:56:21.151Z" +} \ No newline at end of file diff --git a/build/contracts/TokenSpender.json b/deployed/contracts/TokenSpender.json similarity index 99% rename from build/contracts/TokenSpender.json rename to deployed/contracts/TokenSpender.json index 63502f1a..8679d565 100644 --- a/build/contracts/TokenSpender.json +++ b/deployed/contracts/TokenSpender.json @@ -390,5 +390,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.579Z" -} + "updatedAt": "2018-06-12T14:56:21.167Z" +} \ No newline at end of file diff --git a/build/contracts/WorkOrder.json b/deployed/contracts/WorkOrder.json similarity index 99% rename from build/contracts/WorkOrder.json rename to deployed/contracts/WorkOrder.json index 89400e6e..b3f8baa1 100644 --- a/build/contracts/WorkOrder.json +++ b/deployed/contracts/WorkOrder.json @@ -7224,5 +7224,5 @@ }, "networks": {}, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-20T20:12:33.561Z" -} + "updatedAt": "2018-06-12T14:56:21.151Z" +} \ No newline at end of file diff --git a/build/contracts/WorkerPool.json b/deployed/contracts/WorkerPool.json similarity index 99% rename from build/contracts/WorkerPool.json rename to deployed/contracts/WorkerPool.json index 042c4c29..93728c7a 100644 --- a/build/contracts/WorkerPool.json +++ b/deployed/contracts/WorkerPool.json @@ -1090,8 +1090,8 @@ "type": "function" } ], - "bytecode": "0x606060405234156200001057600080fd5b604051620033a1380380620033a183398101604052808051919060200180518201919060200180519190602001805191906020018051919060200180516000805460a060020a60ff0219600160a060020a03338116600160a060020a031990931692909217167401000000000000000000000000000000000000000017909155909250829150879081161515620000a657600080fd5b60018054600160a060020a031916600160a060020a0392831617905581161515620000d057600080fd5b60028054600160a060020a03928316600160a060020a031991821681179092556003805490911690911790553281163390911614156200010f57600080fd5b6200012832640100000000620020476200017882021704565b60048580516200013d9291602001906200023c565b5050601e60055560016006556007929092556008556009555050600e8054600160a060020a03191633600160a060020a0316179055620002e1565b60005433600160a060020a039081169116146200019457600080fd5b60005474010000000000000000000000000000000000000000900460ff161515620001be57600080fd5b600160a060020a0381161515620001d457600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a03929092169190911760a060020a60ff0219169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027f57805160ff1916838001178555620002af565b82800160010185558215620002af579182015b82811115620002af57825182559160200191906001019062000292565b50620002bd929150620002c1565b5090565b620002de91905b80821115620002bd5760008155600101620002c8565b90565b6130b080620002f16000396000f3006060604052600436106101b35763ffffffff60e060020a600035041663031ee1c881146101b857806306021e7e146101fb5780630c6e29e3146102f2578063126eac431461030557806316ebf77d146103795780631f1e74061461039b5780632b8fd18a146104105780633ec6a4c41461044257806340f036051461046157806341cb01ad1461048657806345b99d28146104a55780635a628525146104b85780636ab6936a146104da5780637919233f146104ed5780637bd220bb1461050f5780637c60988514610534578063835436b41461059c57806387639c68146105bb57806389869163146105ce5780638d7db2f7146105ed578063900b7b6214610677578063b32ca9c51461068d578063bb7fb08b146106a0578063bbac78a9146106c2578063c6c5b072146106e3578063c6ced32b146106f6578063cc6f06a314610709578063dc988b401461071c578063deff41c114610747578063e21b9d081461075a578063e2d36ef51461076d578063e653ec6a14610780578063ec1847b614610793578063ef9cb474146107b2578063f20e56ec146107d1578063f4efa24c146107e4578063ff266d2614610852575b600080fd5b34156101c357600080fd5b6101e9600160a060020a036004351660243560443560ff6064351660843560a435610871565b60405190815260200160405180910390f35b341561020657600080fd5b6102de60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b604051901515815260200160405180910390f35b34156102fd57600080fd5b6102de611168565b341561031057600080fd5b61032a600160a060020a0360043581169060243516611275565b6040518087600481111561033a57fe5b60ff168152602081019690965250604080860194909452600160a060020a039092166060850152608084015260a083015260c090910191505180910390f35b341561038457600080fd5b6102de600160a060020a03600435166024356112f1565b34156103a657600080fd5b6103ba600160a060020a036004351661166d565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c0850152600160a060020a031660e0840152610100830191909152610120909101905180910390f35b341561041b57600080fd5b6104266004356116c1565b604051600160a060020a03909116815260200160405180910390f35b341561044d57600080fd5b6101e9600160a060020a03600435166116e9565b341561046c57600080fd5b6102de600160a060020a0360043581169060243516611707565b341561049157600080fd5b6101e9600160a060020a0360043516611747565b34156104b057600080fd5b6101e9611759565b34156104c357600080fd5b6102de600160a060020a036004351660243561175e565b34156104e557600080fd5b6101e96119b3565b34156104f857600080fd5b6102de600160a060020a03600435166024356119b9565b341561051a57600080fd5b61032a600160a060020a0360043581169060243516611bf1565b341561053f57600080fd5b6102de60048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250611c3f915050565b34156105a757600080fd5b6102de600160a060020a0360043516611ca8565b34156105c657600080fd5b6101e9611d88565b34156105d957600080fd5b6102de600160a060020a0360043516611d8e565b34156105f857600080fd5b610600611f2b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561063c578082015183820152602001610624565b50505050905090810190601f1680156106695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068257600080fd5b610426600435611fc9565b341561069857600080fd5b610426611ff5565b34156106ab57600080fd5b610426600160a060020a0360043516602435612004565b34156106cd57600080fd5b6106e1600160a060020a0360043516612047565b005b34156106ee57600080fd5b6101e9612116565b341561070157600080fd5b6101e961211c565b341561071457600080fd5b6101e9612123565b341561072757600080fd5b6102de600160a060020a0360043581169060243581169060443516612129565b341561075257600080fd5b61042661238e565b341561076557600080fd5b6102de61239d565b341561077857600080fd5b6101e96123be565b341561078b57600080fd5b6102de6123c4565b341561079e57600080fd5b6101e9600160a060020a0360043516612489565b34156107bd57600080fd5b6106e16004356024356044356064356124d9565b34156107dc57600080fd5b6101e961258d565b34156107ef57600080fd5b610803600160a060020a0360043516612592565b60405197885260208801969096526040808801959095526060870193909352608086019190915260a085015260c0840152600160a060020a0390911660e0830152610100909101905180910390f35b341561085d57600080fd5b6102de600160a060020a03600435166125e4565b60015460009081908190600160a060020a03166332ca55878a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108c857600080fd5b5af115156108d557600080fd5b5050506040518051905015156108ea57600080fd5b600160a060020a0389166000908152600c60205260409020600581015490925042111561091657600080fd5b600189600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561095557600080fd5b5af1151561096257600080fd5b50505060405180519050600481111561097757fe5b1461098157600080fd5b50600160a060020a038089166000908152600d60209081526040808320339094168352929052208715156109b457600080fd5b8615156109c057600080fd5b6003810154600160a060020a031615610a8f57600188886040517f19457468657265756d205369676e6564204d6573736167653a0a3634000000008152601c810192909252603c820152605c0160405180910390208787876040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af11515610a6a57600080fd5b5050602060405103516003820154600160a060020a03908116911614610a8f57600080fd5b6001815460ff166004811115610aa157fe5b14610aab57600080fd5b805460ff19166002908117825560018083018a905590820188905554600160a060020a0316638c0f8e113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b1457600080fd5b5af11515610b2157600080fd5b505050604051805160048301555060078201805460018101610b43838261302f565b5060009182526020909120018054600160a060020a03191633600160a060020a03818116929092179092556001805490850154911691638981d077918c919060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bd157600080fd5b5af11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b33600160a060020a031689600160a060020a03167f1593a9a000265660fd299c9f8c9bbacfeb4d428861542e6c44b68615324225d48a60405190815260200160405180910390a35060010154979650505050505050565b60008054819033600160a060020a03908116911614610c6857600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cb857600080fd5b5af11515610cc557600080fd5b505050604051805190501515610cda57600080fd5b50600160a060020a0385166000908152600c602052604090206005810154421115610d0457600080fd5b42816003015411158015610d1c575060008160040154115b80610d2e575080600601548160040154145b1515610d3957600080fd5b610e1e8682610140604051908101604052908160008201548152602001600182015481526020016002820154600019166000191681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015610df257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd4575b50505091835250506008820154600160a060020a03166020820152600990910154604090910152612818565b1515610e2957600080fd5b600154600160a060020a031663b6b57ebd878787876040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015610ead578082015183820152602001610e95565b50505050905090810190601f168015610eda5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610f10578082015183820152602001610ef8565b50505050905090810190601f168015610f3d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610f73578082015183820152602001610f5b565b50505050905090810190601f168015610fa05780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610fc357600080fd5b5af11515610fd057600080fd5b505050604051805190501515610fe557600080fd5b85600160a060020a03167f4bfecaabd22e1b95e9aa9eb161b19f645b3460e7533d5e0f6349faf8dc0a724486868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611058578082015183820152602001611040565b50505050905090810190601f1680156110855780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156110bb5780820151838201526020016110a3565b50505050905090810190601f1680156110e85780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561111e578082015183820152602001611106565b50505050905090810190601f16801561114b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a250600195945050505050565b6001546000908190600160a060020a031663b218cf153360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111bd57600080fd5b5af115156111ca57600080fd5b5050506040518051905015156111df57600080fd5b600a8054600181016111f1838261302f565b60009283526020909220018054600160a060020a03191633600160a060020a03161790559050611222816001612c92565b600160a060020a0333166000818152600b60205260409081902092909255907f67799bb3ec4a3491a0c1c4e6d02ec99927df7ba7fa268c216672c0c5ecc1e8f8905160405180910390a2600191505b5090565b600080600080600080600061128a8989611707565b151561129557600080fd5b50505050600160a060020a039485166000908152600d602090815260408083209688168352959052939093208054600182015460028301546003840154600485015460059095015460ff90941699929891975016945091925090565b6000805481908190819033600160a060020a0390811691161461131357600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561136357600080fd5b5af1151561137057600080fd5b50505060405180519050151561138557600080fd5b600160a060020a0386166000908152600c6020526040902060058101549093504211156113b157600080fd5b85600160a060020a0316632d4d671f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ee57600080fd5b5af115156113fb57600080fd5b50505060405180519050151561141057600080fd5b60006006840181905591505b60078301548210156114dc576007830180548390811061143857fe5b6000918252602080832090910154600160a060020a038981168452600d8352604080852091909216808552925290912060010154909150851480156114b057506002600160a060020a038088166000908152600d602090815260408083209386168352929052205460ff1660048111156114ae57fe5b145b156114d15760068301546114cb90600163ffffffff612ca416565b60068401555b81600101915061141c565b6006830154600090116114ee57600080fd5b600280840186905560015460035461161f92429261161392600160a060020a0391821691631f87172691811690634cfddcfb908e1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561155657600080fd5b5af1151561156357600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115a357600080fd5b5af115156115b057600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b5af115156115fd57600080fd5b505050604051805191905063ffffffff612cbe16565b9063ffffffff612ca416565b6003840155600160a060020a0386167fa1b9f527f9799a46d54103401c99dc62f3744afe1d095a1c53620758dc38b2868660405190815260200160405180910390a250600195945050505050565b600c602052600090815260409020805460018201546002830154600384015460048501546005860154600687015460088801546009909801549697959694959394929391929091600160a060020a03169089565b600a8054829081106116cf57fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a03166000908152600c602052604090206007015490565b600080600160a060020a038085166000908152600d602090815260408083209387168352929052205460ff16600481111561173e57fe5b14159392505050565b600b6020526000908152604090205481565b600a81565b60015460009081908190600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156117b557600080fd5b5af115156117c257600080fd5b5050506040518051905015156117d757600080fd5b600160a060020a0385166000908152600c60205260409020600581015490925042111561180357600080fd5b50600160a060020a038085166000908152600d6020908152604080832033909416835292905220600285600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561186957600080fd5b5af1151561187657600080fd5b50505060405180519050600481111561188b57fe5b1461189557600080fd5b60038201544290116118a657600080fd5b6002815460ff1660048111156118b857fe5b146118c257600080fd5b60028201546001820154146118d657600080fd5b836040519081526020016040519081900390206001820154146118f857600080fd5b33604051600160a060020a03919091166c010000000000000000000000000281526014016040518091039020841860405190815260200160405190819003902060028201541461194757600080fd5b805460ff191660031781556004820154611962906001612ca4565b6004830155600160a060020a033381169086167f4f5df7005a83b6f11e90ead1268eb534656169a5034e8d239c763471294be3d58660405190815260200160405180910390a3506001949350505050565b60085481565b60015460009081908190819033600160a060020a039081169116146119dd57600080fd5b600354600160a060020a0316634cfddcfb8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a2557600080fd5b5af11515611a3257600080fd5b5050506040518051600154909450611a939150429061161390600a90600160a060020a0316631f8717268860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b600160a060020a038088166000908152600c60205260409081902060035493955093509116906338c4090b9087905160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611af557600080fd5b5af11515611b0257600080fd5b5050506040518051825550600354600160a060020a03166355d66c3e8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611b5557600080fd5b5af11515611b6257600080fd5b5050506040518051600883018054600160a060020a031916600160a060020a0392909216919091179055506005548154611b9b91612ce9565b6001820155600581018290556006546009820155600160a060020a0386167f9c081174ce28e85a62530b1102b0df58428b8da5027e81fbb4984aa1dc03310760405160405180910390a250600195945050505050565b600d60209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460059095015460ff9094169492939192600160a060020a039091169186565b60008054819033600160a060020a03908116911614611c5d57600080fd5b5060005b8351811015611c9d57611c8a85858381518110611c7a57fe5b9060200190602002015185612129565b1515611c9557600080fd5b600101611c61565b506001949350505050565b6000805433600160a060020a03908116911614611cc457600080fd5b600154600160a060020a031663835436b48360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d1457600080fd5b5af11515611d2157600080fd5b505050604051805190501515611d3657600080fd5b611d3f82612cfe565b1515611d4a57600080fd5b81600160a060020a03167fb22288215ec8cbd28148d7ffa053c6e6e23c62b58d0eb71a6387b59fad33a01960405160405180910390a2506001919050565b60065481565b60015460009081908190819033600160a060020a03908116911614611db257600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211611ddd57600080fd5b600091505b6007830154821015611eea5760078301805483908110611dfe57fe5b600091825260209091200154600160a060020a031690506001600160a060020a038087166000908152600d602090815260408083209386168352929052205460ff166004811115611e4b57fe5b14611edf576001805490840154600160a060020a0390911690636b4f6865908790849060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611ebd57600080fd5b5af11515611eca57600080fd5b505050604051805190501515611edf57600080fd5b816001019150611de2565b84600160a060020a03167f8d8d47a5d5034ce9c01a2308543fdaa83d60863e4b735b7d57361987cdc8ed9460405160405180910390a2506001949350505050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fc15780601f10611f9657610100808354040283529160200191611fc1565b820191906000526020600020905b815481529060010190602001808311611fa457829003601f168201915b505050505081565b6000600a82815481101515611fda57fe5b600091825260209091200154600160a060020a031692915050565b600e54600160a060020a031681565b600160a060020a0382166000908152600c6020526040812060070180548390811061202b57fe5b600091825260209091200154600160a060020a03169392505050565b60005433600160a060020a0390811691161461206257600080fd5b60005474010000000000000000000000000000000000000000900460ff16151561208b57600080fd5b600160a060020a03811615156120a057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a03929092169190911774ff000000000000000000000000000000000000000019169055565b60055481565b600a545b90565b60095481565b60008054819081908190819033600160a060020a0390811691161461214d57600080fd5b600154600160a060020a03166332ca55878960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561219d57600080fd5b5af115156121aa57600080fd5b5050506040518051905015156121bf57600080fd5b600188600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156121fe57600080fd5b5af1151561220b57600080fd5b50505060405180519050600481111561222057fe5b1461222a57600080fd5b600160a060020a038089166000818152600d60209081526040808320948c168352938152838220928252600c9052919091206005810154919550935042111561227257600080fd5b600154600160a060020a031663f69f190c8860405160e060020a63ffffffff8416028152600160a060020a0390911660048201526024016040805180830381600087803b15156122c157600080fd5b5af115156122ce57600080fd5b50505060405180519060200180519193509091505030600160a060020a03908116908316146122fc57600080fd5b6000845460ff16600481111561230e57fe5b1461231857600080fd5b835460ff19166001178455600384018054600160a060020a03888116600160a060020a0319909216919091179091558781169089167f9cade22a92ceb705fefd1c03e9ac4dbbf787cd493ec63a9f2b078cbc859c06298360405190815260200160405180910390a3506001979650505050505050565b600054600160a060020a031681565b60005474010000000000000000000000000000000000000000900460ff1681565b60075481565b600154600090600160a060020a0316631708d7253360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561241757600080fd5b5af1151561242457600080fd5b50505060405180519050151561243957600080fd5b61244233612cfe565b151561244d57600080fd5b33600160a060020a03167fd08d61a9c25ada3385d23554bae10e5d15c9518d4bfd27571c190558f7030f6e60405160405180910390a250600190565b600160a060020a0381166000818152600b6020526040812054600a805492939192839081106124b457fe5b600091825260209091200154600160a060020a0316146124d357600080fd5b92915050565b60005433600160a060020a039081169116146124f457600080fd5b7f52bb55d3097463659f724f9b420d259719787a8563b48eb82368680999bfea0760055485600654866008548760095488604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a1606483111561257957600080fd5b600593909355600691909155600855600955565b600281565b600160a060020a039081166000908152600c6020526040902080546001820154600283015460038401546004850154600586015460068701546008909701549598949793969295919490939190911690565b6000805481908190819033600160a060020a0390811691161461260657600080fd5b600154600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561265657600080fd5b5af1151561266357600080fd5b50505060405180519050151561267857600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211156126a457600080fd5b428360030154111580156126ba57506004830154155b15156126c557600080fd5b84600160a060020a0316631a514d976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561270257600080fd5b5af1151561270f57600080fd5b50505060405180519050151561272457600080fd5b600091505b60078301548210156127c2576007830180548390811061274557fe5b60009182526020808320909101546002860154600160a060020a038981168552600d8452604080862091909316808652935292206001015490925014156127b757600160a060020a038581166000908152600d60209081526040808320938516835292905220805460ff191660041790555b816001019150612729565b600060068401819055600284018190556003840155600160a060020a0385167f631055693b4cbe13143279bc507432c42de858b6d04b3ba4e1ff3d2c88a7e52b60405160405180910390a2506001949350505050565b60008060008060008060008061282c613058565b6000808b5193508b60e001519250600099505b82518a101561292857828a8151811061285457fe5b90602001906020020151600160a060020a03808f166000908152600d6020908152604080832093851683529290522090995091506003825460ff16600481111561289a57fe5b1415612905576003820154600160a060020a031615156128bb5760016128be565b60035b60ff1697506128e26128dd898460040154612cbe90919063ffffffff16565b612de2565b60010196506128f7868863ffffffff612ca416565b60058301889055955061291d565b61291a8c60200151859063ffffffff612ca416565b93505b89600101995061283f565b6000861161293557600080fd5b61295c61294f8d610120015160649063ffffffff612c9216565b859063ffffffff612ce916565b9050600099505b82518a1015612bee57828a8151811061297857fe5b9060200190602002015198506003600160a060020a03808f166000908152600d60209081526040808320938e168352929052205460ff1660048111156129ba57fe5b1415612b4057600160a060020a03808e166000908152600d60209081526040808320938d16835292905220600501546129fb9082908863ffffffff612ffb16565b9450612a0d848663ffffffff612c9216565b9350600160009054906101000a9004600160a060020a0316600160a060020a0316636b4f68658e8b8f6020015160405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515612a8957600080fd5b5af11515612a9657600080fd5b505050604051805190501515612aab57600080fd5b60018054600160a060020a031690630c91f2d0908f908c90899060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612b1957600080fd5b5af11515612b2657600080fd5b505050604051805190501515612b3b57600080fd5b612be3565b600160009054906101000a9004600160a060020a0316600160a060020a0316639fdf96258e8b8f60200151600160405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612bc157600080fd5b5af11515612bce57600080fd5b505050604051805190501515612be357600080fd5b896001019950612963565b600154600160a060020a0316630c91f2d08e6101008f015187600060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612c5d57600080fd5b5af11515612c6a57600080fd5b505050604051805190501515612c7f57600080fd5b5060019c9b505050505050505050505050565b600082821115612c9e57fe5b50900390565b600082820183811015612cb357fe5b8091505b5092915050565b600080831515612cd15760009150612cb7565b50828202828482811515612ce157fe5b0414612cb357fe5b6000612cf783836064612ffb565b9392505050565b6000806000612d0c84612489565b600a805491935090612d2590600163ffffffff612c9216565b81548110612d2f57fe5b600091825260209091200154600a8054600160a060020a039092169250829184908110612d5857fe5b60009182526020808320919091018054600160a060020a031916600160a060020a039485161790559183168152600b90915260409020829055600a8054612da0906001612c92565b81548110612daa57fe5b60009182526020909120018054600160a060020a0319169055600a54612dd790600163ffffffff612c9216565b611c9d600a8261302f565b700100000000000000000000000000000000680100000000000000006401000000006201000061010060106004600260001989019081041790810417908104179081041790810417908104179081041790810417600101906000906040517ff8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd81527ff5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe60208201527ff6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a827252361660408201527fc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff60608201527ff7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e60808201527fe39ed557db96902cd38ed14fad815115c786af479b7e8324736353433727170760a08201527fc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d236242260660c08201527f753a6d1b65325d0c552a4d1345224105391a310b29122104190a11030902010060e082015261010081016040527e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff7f01000000000000000000000000000000000000000000000000000000000000008082870204818160ff038501510495507f8000000000000000000000000000000000000000000000000000000000000000851161010002860195505050505050919050565b600061301061300a8585612cbe565b83613018565b949350505050565b600080828481151561302657fe5b04949350505050565b8154818355818115116130535760008381526020902061305391810190830161306a565b505050565b60206040519081016040526000815290565b61212091905b8082111561127157600081556001016130705600a165627a7a7230582065611159d17657b023295e8fc204391c05e93b9c80a240e60da82d1ef90187460029", - "deployedBytecode": "0x6060604052600436106101b35763ffffffff60e060020a600035041663031ee1c881146101b857806306021e7e146101fb5780630c6e29e3146102f2578063126eac431461030557806316ebf77d146103795780631f1e74061461039b5780632b8fd18a146104105780633ec6a4c41461044257806340f036051461046157806341cb01ad1461048657806345b99d28146104a55780635a628525146104b85780636ab6936a146104da5780637919233f146104ed5780637bd220bb1461050f5780637c60988514610534578063835436b41461059c57806387639c68146105bb57806389869163146105ce5780638d7db2f7146105ed578063900b7b6214610677578063b32ca9c51461068d578063bb7fb08b146106a0578063bbac78a9146106c2578063c6c5b072146106e3578063c6ced32b146106f6578063cc6f06a314610709578063dc988b401461071c578063deff41c114610747578063e21b9d081461075a578063e2d36ef51461076d578063e653ec6a14610780578063ec1847b614610793578063ef9cb474146107b2578063f20e56ec146107d1578063f4efa24c146107e4578063ff266d2614610852575b600080fd5b34156101c357600080fd5b6101e9600160a060020a036004351660243560443560ff6064351660843560a435610871565b60405190815260200160405180910390f35b341561020657600080fd5b6102de60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b604051901515815260200160405180910390f35b34156102fd57600080fd5b6102de611168565b341561031057600080fd5b61032a600160a060020a0360043581169060243516611275565b6040518087600481111561033a57fe5b60ff168152602081019690965250604080860194909452600160a060020a039092166060850152608084015260a083015260c090910191505180910390f35b341561038457600080fd5b6102de600160a060020a03600435166024356112f1565b34156103a657600080fd5b6103ba600160a060020a036004351661166d565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c0850152600160a060020a031660e0840152610100830191909152610120909101905180910390f35b341561041b57600080fd5b6104266004356116c1565b604051600160a060020a03909116815260200160405180910390f35b341561044d57600080fd5b6101e9600160a060020a03600435166116e9565b341561046c57600080fd5b6102de600160a060020a0360043581169060243516611707565b341561049157600080fd5b6101e9600160a060020a0360043516611747565b34156104b057600080fd5b6101e9611759565b34156104c357600080fd5b6102de600160a060020a036004351660243561175e565b34156104e557600080fd5b6101e96119b3565b34156104f857600080fd5b6102de600160a060020a03600435166024356119b9565b341561051a57600080fd5b61032a600160a060020a0360043581169060243516611bf1565b341561053f57600080fd5b6102de60048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250611c3f915050565b34156105a757600080fd5b6102de600160a060020a0360043516611ca8565b34156105c657600080fd5b6101e9611d88565b34156105d957600080fd5b6102de600160a060020a0360043516611d8e565b34156105f857600080fd5b610600611f2b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561063c578082015183820152602001610624565b50505050905090810190601f1680156106695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068257600080fd5b610426600435611fc9565b341561069857600080fd5b610426611ff5565b34156106ab57600080fd5b610426600160a060020a0360043516602435612004565b34156106cd57600080fd5b6106e1600160a060020a0360043516612047565b005b34156106ee57600080fd5b6101e9612116565b341561070157600080fd5b6101e961211c565b341561071457600080fd5b6101e9612123565b341561072757600080fd5b6102de600160a060020a0360043581169060243581169060443516612129565b341561075257600080fd5b61042661238e565b341561076557600080fd5b6102de61239d565b341561077857600080fd5b6101e96123be565b341561078b57600080fd5b6102de6123c4565b341561079e57600080fd5b6101e9600160a060020a0360043516612489565b34156107bd57600080fd5b6106e16004356024356044356064356124d9565b34156107dc57600080fd5b6101e961258d565b34156107ef57600080fd5b610803600160a060020a0360043516612592565b60405197885260208801969096526040808801959095526060870193909352608086019190915260a085015260c0840152600160a060020a0390911660e0830152610100909101905180910390f35b341561085d57600080fd5b6102de600160a060020a03600435166125e4565b60015460009081908190600160a060020a03166332ca55878a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108c857600080fd5b5af115156108d557600080fd5b5050506040518051905015156108ea57600080fd5b600160a060020a0389166000908152600c60205260409020600581015490925042111561091657600080fd5b600189600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561095557600080fd5b5af1151561096257600080fd5b50505060405180519050600481111561097757fe5b1461098157600080fd5b50600160a060020a038089166000908152600d60209081526040808320339094168352929052208715156109b457600080fd5b8615156109c057600080fd5b6003810154600160a060020a031615610a8f57600188886040517f19457468657265756d205369676e6564204d6573736167653a0a3634000000008152601c810192909252603c820152605c0160405180910390208787876040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af11515610a6a57600080fd5b5050602060405103516003820154600160a060020a03908116911614610a8f57600080fd5b6001815460ff166004811115610aa157fe5b14610aab57600080fd5b805460ff19166002908117825560018083018a905590820188905554600160a060020a0316638c0f8e113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b1457600080fd5b5af11515610b2157600080fd5b505050604051805160048301555060078201805460018101610b43838261302f565b5060009182526020909120018054600160a060020a03191633600160a060020a03818116929092179092556001805490850154911691638981d077918c919060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bd157600080fd5b5af11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b33600160a060020a031689600160a060020a03167f1593a9a000265660fd299c9f8c9bbacfeb4d428861542e6c44b68615324225d48a60405190815260200160405180910390a35060010154979650505050505050565b60008054819033600160a060020a03908116911614610c6857600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cb857600080fd5b5af11515610cc557600080fd5b505050604051805190501515610cda57600080fd5b50600160a060020a0385166000908152600c602052604090206005810154421115610d0457600080fd5b42816003015411158015610d1c575060008160040154115b80610d2e575080600601548160040154145b1515610d3957600080fd5b610e1e8682610140604051908101604052908160008201548152602001600182015481526020016002820154600019166000191681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015610df257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd4575b50505091835250506008820154600160a060020a03166020820152600990910154604090910152612818565b1515610e2957600080fd5b600154600160a060020a031663b6b57ebd878787876040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015610ead578082015183820152602001610e95565b50505050905090810190601f168015610eda5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610f10578082015183820152602001610ef8565b50505050905090810190601f168015610f3d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610f73578082015183820152602001610f5b565b50505050905090810190601f168015610fa05780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610fc357600080fd5b5af11515610fd057600080fd5b505050604051805190501515610fe557600080fd5b85600160a060020a03167f4bfecaabd22e1b95e9aa9eb161b19f645b3460e7533d5e0f6349faf8dc0a724486868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611058578082015183820152602001611040565b50505050905090810190601f1680156110855780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156110bb5780820151838201526020016110a3565b50505050905090810190601f1680156110e85780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561111e578082015183820152602001611106565b50505050905090810190601f16801561114b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a250600195945050505050565b6001546000908190600160a060020a031663b218cf153360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111bd57600080fd5b5af115156111ca57600080fd5b5050506040518051905015156111df57600080fd5b600a8054600181016111f1838261302f565b60009283526020909220018054600160a060020a03191633600160a060020a03161790559050611222816001612c92565b600160a060020a0333166000818152600b60205260409081902092909255907f67799bb3ec4a3491a0c1c4e6d02ec99927df7ba7fa268c216672c0c5ecc1e8f8905160405180910390a2600191505b5090565b600080600080600080600061128a8989611707565b151561129557600080fd5b50505050600160a060020a039485166000908152600d602090815260408083209688168352959052939093208054600182015460028301546003840154600485015460059095015460ff90941699929891975016945091925090565b6000805481908190819033600160a060020a0390811691161461131357600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561136357600080fd5b5af1151561137057600080fd5b50505060405180519050151561138557600080fd5b600160a060020a0386166000908152600c6020526040902060058101549093504211156113b157600080fd5b85600160a060020a0316632d4d671f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ee57600080fd5b5af115156113fb57600080fd5b50505060405180519050151561141057600080fd5b60006006840181905591505b60078301548210156114dc576007830180548390811061143857fe5b6000918252602080832090910154600160a060020a038981168452600d8352604080852091909216808552925290912060010154909150851480156114b057506002600160a060020a038088166000908152600d602090815260408083209386168352929052205460ff1660048111156114ae57fe5b145b156114d15760068301546114cb90600163ffffffff612ca416565b60068401555b81600101915061141c565b6006830154600090116114ee57600080fd5b600280840186905560015460035461161f92429261161392600160a060020a0391821691631f87172691811690634cfddcfb908e1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561155657600080fd5b5af1151561156357600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115a357600080fd5b5af115156115b057600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b5af115156115fd57600080fd5b505050604051805191905063ffffffff612cbe16565b9063ffffffff612ca416565b6003840155600160a060020a0386167fa1b9f527f9799a46d54103401c99dc62f3744afe1d095a1c53620758dc38b2868660405190815260200160405180910390a250600195945050505050565b600c602052600090815260409020805460018201546002830154600384015460048501546005860154600687015460088801546009909801549697959694959394929391929091600160a060020a03169089565b600a8054829081106116cf57fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a03166000908152600c602052604090206007015490565b600080600160a060020a038085166000908152600d602090815260408083209387168352929052205460ff16600481111561173e57fe5b14159392505050565b600b6020526000908152604090205481565b600a81565b60015460009081908190600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156117b557600080fd5b5af115156117c257600080fd5b5050506040518051905015156117d757600080fd5b600160a060020a0385166000908152600c60205260409020600581015490925042111561180357600080fd5b50600160a060020a038085166000908152600d6020908152604080832033909416835292905220600285600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561186957600080fd5b5af1151561187657600080fd5b50505060405180519050600481111561188b57fe5b1461189557600080fd5b60038201544290116118a657600080fd5b6002815460ff1660048111156118b857fe5b146118c257600080fd5b60028201546001820154146118d657600080fd5b836040519081526020016040519081900390206001820154146118f857600080fd5b33604051600160a060020a03919091166c010000000000000000000000000281526014016040518091039020841860405190815260200160405190819003902060028201541461194757600080fd5b805460ff191660031781556004820154611962906001612ca4565b6004830155600160a060020a033381169086167f4f5df7005a83b6f11e90ead1268eb534656169a5034e8d239c763471294be3d58660405190815260200160405180910390a3506001949350505050565b60085481565b60015460009081908190819033600160a060020a039081169116146119dd57600080fd5b600354600160a060020a0316634cfddcfb8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a2557600080fd5b5af11515611a3257600080fd5b5050506040518051600154909450611a939150429061161390600a90600160a060020a0316631f8717268860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b600160a060020a038088166000908152600c60205260409081902060035493955093509116906338c4090b9087905160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611af557600080fd5b5af11515611b0257600080fd5b5050506040518051825550600354600160a060020a03166355d66c3e8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611b5557600080fd5b5af11515611b6257600080fd5b5050506040518051600883018054600160a060020a031916600160a060020a0392909216919091179055506005548154611b9b91612ce9565b6001820155600581018290556006546009820155600160a060020a0386167f9c081174ce28e85a62530b1102b0df58428b8da5027e81fbb4984aa1dc03310760405160405180910390a250600195945050505050565b600d60209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460059095015460ff9094169492939192600160a060020a039091169186565b60008054819033600160a060020a03908116911614611c5d57600080fd5b5060005b8351811015611c9d57611c8a85858381518110611c7a57fe5b9060200190602002015185612129565b1515611c9557600080fd5b600101611c61565b506001949350505050565b6000805433600160a060020a03908116911614611cc457600080fd5b600154600160a060020a031663835436b48360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d1457600080fd5b5af11515611d2157600080fd5b505050604051805190501515611d3657600080fd5b611d3f82612cfe565b1515611d4a57600080fd5b81600160a060020a03167fb22288215ec8cbd28148d7ffa053c6e6e23c62b58d0eb71a6387b59fad33a01960405160405180910390a2506001919050565b60065481565b60015460009081908190819033600160a060020a03908116911614611db257600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211611ddd57600080fd5b600091505b6007830154821015611eea5760078301805483908110611dfe57fe5b600091825260209091200154600160a060020a031690506001600160a060020a038087166000908152600d602090815260408083209386168352929052205460ff166004811115611e4b57fe5b14611edf576001805490840154600160a060020a0390911690636b4f6865908790849060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611ebd57600080fd5b5af11515611eca57600080fd5b505050604051805190501515611edf57600080fd5b816001019150611de2565b84600160a060020a03167f8d8d47a5d5034ce9c01a2308543fdaa83d60863e4b735b7d57361987cdc8ed9460405160405180910390a2506001949350505050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fc15780601f10611f9657610100808354040283529160200191611fc1565b820191906000526020600020905b815481529060010190602001808311611fa457829003601f168201915b505050505081565b6000600a82815481101515611fda57fe5b600091825260209091200154600160a060020a031692915050565b600e54600160a060020a031681565b600160a060020a0382166000908152600c6020526040812060070180548390811061202b57fe5b600091825260209091200154600160a060020a03169392505050565b60005433600160a060020a0390811691161461206257600080fd5b60005474010000000000000000000000000000000000000000900460ff16151561208b57600080fd5b600160a060020a03811615156120a057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a03929092169190911774ff000000000000000000000000000000000000000019169055565b60055481565b600a545b90565b60095481565b60008054819081908190819033600160a060020a0390811691161461214d57600080fd5b600154600160a060020a03166332ca55878960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561219d57600080fd5b5af115156121aa57600080fd5b5050506040518051905015156121bf57600080fd5b600188600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156121fe57600080fd5b5af1151561220b57600080fd5b50505060405180519050600481111561222057fe5b1461222a57600080fd5b600160a060020a038089166000818152600d60209081526040808320948c168352938152838220928252600c9052919091206005810154919550935042111561227257600080fd5b600154600160a060020a031663f69f190c8860405160e060020a63ffffffff8416028152600160a060020a0390911660048201526024016040805180830381600087803b15156122c157600080fd5b5af115156122ce57600080fd5b50505060405180519060200180519193509091505030600160a060020a03908116908316146122fc57600080fd5b6000845460ff16600481111561230e57fe5b1461231857600080fd5b835460ff19166001178455600384018054600160a060020a03888116600160a060020a0319909216919091179091558781169089167f9cade22a92ceb705fefd1c03e9ac4dbbf787cd493ec63a9f2b078cbc859c06298360405190815260200160405180910390a3506001979650505050505050565b600054600160a060020a031681565b60005474010000000000000000000000000000000000000000900460ff1681565b60075481565b600154600090600160a060020a0316631708d7253360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561241757600080fd5b5af1151561242457600080fd5b50505060405180519050151561243957600080fd5b61244233612cfe565b151561244d57600080fd5b33600160a060020a03167fd08d61a9c25ada3385d23554bae10e5d15c9518d4bfd27571c190558f7030f6e60405160405180910390a250600190565b600160a060020a0381166000818152600b6020526040812054600a805492939192839081106124b457fe5b600091825260209091200154600160a060020a0316146124d357600080fd5b92915050565b60005433600160a060020a039081169116146124f457600080fd5b7f52bb55d3097463659f724f9b420d259719787a8563b48eb82368680999bfea0760055485600654866008548760095488604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a1606483111561257957600080fd5b600593909355600691909155600855600955565b600281565b600160a060020a039081166000908152600c6020526040902080546001820154600283015460038401546004850154600586015460068701546008909701549598949793969295919490939190911690565b6000805481908190819033600160a060020a0390811691161461260657600080fd5b600154600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561265657600080fd5b5af1151561266357600080fd5b50505060405180519050151561267857600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211156126a457600080fd5b428360030154111580156126ba57506004830154155b15156126c557600080fd5b84600160a060020a0316631a514d976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561270257600080fd5b5af1151561270f57600080fd5b50505060405180519050151561272457600080fd5b600091505b60078301548210156127c2576007830180548390811061274557fe5b60009182526020808320909101546002860154600160a060020a038981168552600d8452604080862091909316808652935292206001015490925014156127b757600160a060020a038581166000908152600d60209081526040808320938516835292905220805460ff191660041790555b816001019150612729565b600060068401819055600284018190556003840155600160a060020a0385167f631055693b4cbe13143279bc507432c42de858b6d04b3ba4e1ff3d2c88a7e52b60405160405180910390a2506001949350505050565b60008060008060008060008061282c613058565b6000808b5193508b60e001519250600099505b82518a101561292857828a8151811061285457fe5b90602001906020020151600160a060020a03808f166000908152600d6020908152604080832093851683529290522090995091506003825460ff16600481111561289a57fe5b1415612905576003820154600160a060020a031615156128bb5760016128be565b60035b60ff1697506128e26128dd898460040154612cbe90919063ffffffff16565b612de2565b60010196506128f7868863ffffffff612ca416565b60058301889055955061291d565b61291a8c60200151859063ffffffff612ca416565b93505b89600101995061283f565b6000861161293557600080fd5b61295c61294f8d610120015160649063ffffffff612c9216565b859063ffffffff612ce916565b9050600099505b82518a1015612bee57828a8151811061297857fe5b9060200190602002015198506003600160a060020a03808f166000908152600d60209081526040808320938e168352929052205460ff1660048111156129ba57fe5b1415612b4057600160a060020a03808e166000908152600d60209081526040808320938d16835292905220600501546129fb9082908863ffffffff612ffb16565b9450612a0d848663ffffffff612c9216565b9350600160009054906101000a9004600160a060020a0316600160a060020a0316636b4f68658e8b8f6020015160405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515612a8957600080fd5b5af11515612a9657600080fd5b505050604051805190501515612aab57600080fd5b60018054600160a060020a031690630c91f2d0908f908c90899060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612b1957600080fd5b5af11515612b2657600080fd5b505050604051805190501515612b3b57600080fd5b612be3565b600160009054906101000a9004600160a060020a0316600160a060020a0316639fdf96258e8b8f60200151600160405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612bc157600080fd5b5af11515612bce57600080fd5b505050604051805190501515612be357600080fd5b896001019950612963565b600154600160a060020a0316630c91f2d08e6101008f015187600060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612c5d57600080fd5b5af11515612c6a57600080fd5b505050604051805190501515612c7f57600080fd5b5060019c9b505050505050505050505050565b600082821115612c9e57fe5b50900390565b600082820183811015612cb357fe5b8091505b5092915050565b600080831515612cd15760009150612cb7565b50828202828482811515612ce157fe5b0414612cb357fe5b6000612cf783836064612ffb565b9392505050565b6000806000612d0c84612489565b600a805491935090612d2590600163ffffffff612c9216565b81548110612d2f57fe5b600091825260209091200154600a8054600160a060020a039092169250829184908110612d5857fe5b60009182526020808320919091018054600160a060020a031916600160a060020a039485161790559183168152600b90915260409020829055600a8054612da0906001612c92565b81548110612daa57fe5b60009182526020909120018054600160a060020a0319169055600a54612dd790600163ffffffff612c9216565b611c9d600a8261302f565b700100000000000000000000000000000000680100000000000000006401000000006201000061010060106004600260001989019081041790810417908104179081041790810417908104179081041790810417600101906000906040517ff8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd81527ff5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe60208201527ff6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a827252361660408201527fc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff60608201527ff7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e60808201527fe39ed557db96902cd38ed14fad815115c786af479b7e8324736353433727170760a08201527fc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d236242260660c08201527f753a6d1b65325d0c552a4d1345224105391a310b29122104190a11030902010060e082015261010081016040527e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff7f01000000000000000000000000000000000000000000000000000000000000008082870204818160ff038501510495507f8000000000000000000000000000000000000000000000000000000000000000851161010002860195505050505050919050565b600061301061300a8585612cbe565b83613018565b949350505050565b600080828481151561302657fe5b04949350505050565b8154818355818115116130535760008381526020902061305391810190830161306a565b505050565b60206040519081016040526000815290565b61212091905b8082111561127157600081556001016130705600a165627a7a7230582065611159d17657b023295e8fc204391c05e93b9c80a240e60da82d1ef90187460029", + "bytecode": "0x606060405234156200001057600080fd5b604051620033a1380380620033a183398101604052808051919060200180518201919060200180519190602001805191906020018051919060200180516000805460a060020a60ff0219600160a060020a03338116600160a060020a031990931692909217167401000000000000000000000000000000000000000017909155909250829150879081161515620000a657600080fd5b60018054600160a060020a031916600160a060020a0392831617905581161515620000d057600080fd5b60028054600160a060020a03928316600160a060020a031991821681179092556003805490911690911790553281163390911614156200010f57600080fd5b6200012832640100000000620020476200017882021704565b60048580516200013d9291602001906200023c565b5050601e60055560016006556007929092556008556009555050600e8054600160a060020a03191633600160a060020a0316179055620002e1565b60005433600160a060020a039081169116146200019457600080fd5b60005474010000000000000000000000000000000000000000900460ff161515620001be57600080fd5b600160a060020a0381161515620001d457600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a03929092169190911760a060020a60ff0219169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027f57805160ff1916838001178555620002af565b82800160010185558215620002af579182015b82811115620002af57825182559160200191906001019062000292565b50620002bd929150620002c1565b5090565b620002de91905b80821115620002bd5760008155600101620002c8565b90565b6130b080620002f16000396000f3006060604052600436106101b35763ffffffff60e060020a600035041663031ee1c881146101b857806306021e7e146101fb5780630c6e29e3146102f2578063126eac431461030557806316ebf77d146103795780631f1e74061461039b5780632b8fd18a146104105780633ec6a4c41461044257806340f036051461046157806341cb01ad1461048657806345b99d28146104a55780635a628525146104b85780636ab6936a146104da5780637919233f146104ed5780637bd220bb1461050f5780637c60988514610534578063835436b41461059c57806387639c68146105bb57806389869163146105ce5780638d7db2f7146105ed578063900b7b6214610677578063b32ca9c51461068d578063bb7fb08b146106a0578063bbac78a9146106c2578063c6c5b072146106e3578063c6ced32b146106f6578063cc6f06a314610709578063dc988b401461071c578063deff41c114610747578063e21b9d081461075a578063e2d36ef51461076d578063e653ec6a14610780578063ec1847b614610793578063ef9cb474146107b2578063f20e56ec146107d1578063f4efa24c146107e4578063ff266d2614610852575b600080fd5b34156101c357600080fd5b6101e9600160a060020a036004351660243560443560ff6064351660843560a435610871565b60405190815260200160405180910390f35b341561020657600080fd5b6102de60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b604051901515815260200160405180910390f35b34156102fd57600080fd5b6102de611168565b341561031057600080fd5b61032a600160a060020a0360043581169060243516611275565b6040518087600481111561033a57fe5b60ff168152602081019690965250604080860194909452600160a060020a039092166060850152608084015260a083015260c090910191505180910390f35b341561038457600080fd5b6102de600160a060020a03600435166024356112f1565b34156103a657600080fd5b6103ba600160a060020a036004351661166d565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c0850152600160a060020a031660e0840152610100830191909152610120909101905180910390f35b341561041b57600080fd5b6104266004356116c1565b604051600160a060020a03909116815260200160405180910390f35b341561044d57600080fd5b6101e9600160a060020a03600435166116e9565b341561046c57600080fd5b6102de600160a060020a0360043581169060243516611707565b341561049157600080fd5b6101e9600160a060020a0360043516611747565b34156104b057600080fd5b6101e9611759565b34156104c357600080fd5b6102de600160a060020a036004351660243561175e565b34156104e557600080fd5b6101e96119b3565b34156104f857600080fd5b6102de600160a060020a03600435166024356119b9565b341561051a57600080fd5b61032a600160a060020a0360043581169060243516611bf1565b341561053f57600080fd5b6102de60048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250611c3f915050565b34156105a757600080fd5b6102de600160a060020a0360043516611ca8565b34156105c657600080fd5b6101e9611d88565b34156105d957600080fd5b6102de600160a060020a0360043516611d8e565b34156105f857600080fd5b610600611f2b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561063c578082015183820152602001610624565b50505050905090810190601f1680156106695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068257600080fd5b610426600435611fc9565b341561069857600080fd5b610426611ff5565b34156106ab57600080fd5b610426600160a060020a0360043516602435612004565b34156106cd57600080fd5b6106e1600160a060020a0360043516612047565b005b34156106ee57600080fd5b6101e9612116565b341561070157600080fd5b6101e961211c565b341561071457600080fd5b6101e9612123565b341561072757600080fd5b6102de600160a060020a0360043581169060243581169060443516612129565b341561075257600080fd5b61042661238e565b341561076557600080fd5b6102de61239d565b341561077857600080fd5b6101e96123be565b341561078b57600080fd5b6102de6123c4565b341561079e57600080fd5b6101e9600160a060020a0360043516612489565b34156107bd57600080fd5b6106e16004356024356044356064356124d9565b34156107dc57600080fd5b6101e961258d565b34156107ef57600080fd5b610803600160a060020a0360043516612592565b60405197885260208801969096526040808801959095526060870193909352608086019190915260a085015260c0840152600160a060020a0390911660e0830152610100909101905180910390f35b341561085d57600080fd5b6102de600160a060020a03600435166125e4565b60015460009081908190600160a060020a03166332ca55878a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108c857600080fd5b5af115156108d557600080fd5b5050506040518051905015156108ea57600080fd5b600160a060020a0389166000908152600c60205260409020600581015490925042111561091657600080fd5b600189600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561095557600080fd5b5af1151561096257600080fd5b50505060405180519050600481111561097757fe5b1461098157600080fd5b50600160a060020a038089166000908152600d60209081526040808320339094168352929052208715156109b457600080fd5b8615156109c057600080fd5b6003810154600160a060020a031615610a8f57600188886040517f19457468657265756d205369676e6564204d6573736167653a0a3634000000008152601c810192909252603c820152605c0160405180910390208787876040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af11515610a6a57600080fd5b5050602060405103516003820154600160a060020a03908116911614610a8f57600080fd5b6001815460ff166004811115610aa157fe5b14610aab57600080fd5b805460ff19166002908117825560018083018a905590820188905554600160a060020a0316638c0f8e113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b1457600080fd5b5af11515610b2157600080fd5b505050604051805160048301555060078201805460018101610b43838261302f565b5060009182526020909120018054600160a060020a03191633600160a060020a03818116929092179092556001805490850154911691638981d077918c919060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bd157600080fd5b5af11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b33600160a060020a031689600160a060020a03167f1593a9a000265660fd299c9f8c9bbacfeb4d428861542e6c44b68615324225d48a60405190815260200160405180910390a35060010154979650505050505050565b60008054819033600160a060020a03908116911614610c6857600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cb857600080fd5b5af11515610cc557600080fd5b505050604051805190501515610cda57600080fd5b50600160a060020a0385166000908152600c602052604090206005810154421115610d0457600080fd5b42816003015411158015610d1c575060008160040154115b80610d2e575080600601548160040154145b1515610d3957600080fd5b610e1e8682610140604051908101604052908160008201548152602001600182015481526020016002820154600019166000191681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015610df257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd4575b50505091835250506008820154600160a060020a03166020820152600990910154604090910152612818565b1515610e2957600080fd5b600154600160a060020a031663b6b57ebd878787876040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015610ead578082015183820152602001610e95565b50505050905090810190601f168015610eda5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610f10578082015183820152602001610ef8565b50505050905090810190601f168015610f3d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610f73578082015183820152602001610f5b565b50505050905090810190601f168015610fa05780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610fc357600080fd5b5af11515610fd057600080fd5b505050604051805190501515610fe557600080fd5b85600160a060020a03167f4bfecaabd22e1b95e9aa9eb161b19f645b3460e7533d5e0f6349faf8dc0a724486868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611058578082015183820152602001611040565b50505050905090810190601f1680156110855780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156110bb5780820151838201526020016110a3565b50505050905090810190601f1680156110e85780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561111e578082015183820152602001611106565b50505050905090810190601f16801561114b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a250600195945050505050565b6001546000908190600160a060020a031663b218cf153360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111bd57600080fd5b5af115156111ca57600080fd5b5050506040518051905015156111df57600080fd5b600a8054600181016111f1838261302f565b60009283526020909220018054600160a060020a03191633600160a060020a03161790559050611222816001612c92565b600160a060020a0333166000818152600b60205260409081902092909255907f67799bb3ec4a3491a0c1c4e6d02ec99927df7ba7fa268c216672c0c5ecc1e8f8905160405180910390a2600191505b5090565b600080600080600080600061128a8989611707565b151561129557600080fd5b50505050600160a060020a039485166000908152600d602090815260408083209688168352959052939093208054600182015460028301546003840154600485015460059095015460ff90941699929891975016945091925090565b6000805481908190819033600160a060020a0390811691161461131357600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561136357600080fd5b5af1151561137057600080fd5b50505060405180519050151561138557600080fd5b600160a060020a0386166000908152600c6020526040902060058101549093504211156113b157600080fd5b85600160a060020a0316632d4d671f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ee57600080fd5b5af115156113fb57600080fd5b50505060405180519050151561141057600080fd5b60006006840181905591505b60078301548210156114dc576007830180548390811061143857fe5b6000918252602080832090910154600160a060020a038981168452600d8352604080852091909216808552925290912060010154909150851480156114b057506002600160a060020a038088166000908152600d602090815260408083209386168352929052205460ff1660048111156114ae57fe5b145b156114d15760068301546114cb90600163ffffffff612ca416565b60068401555b81600101915061141c565b6006830154600090116114ee57600080fd5b600280840186905560015460035461161f92429261161392600160a060020a0391821691631f87172691811690634cfddcfb908e1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561155657600080fd5b5af1151561156357600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115a357600080fd5b5af115156115b057600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b5af115156115fd57600080fd5b505050604051805191905063ffffffff612cbe16565b9063ffffffff612ca416565b6003840155600160a060020a0386167fa1b9f527f9799a46d54103401c99dc62f3744afe1d095a1c53620758dc38b2868660405190815260200160405180910390a250600195945050505050565b600c602052600090815260409020805460018201546002830154600384015460048501546005860154600687015460088801546009909801549697959694959394929391929091600160a060020a03169089565b600a8054829081106116cf57fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a03166000908152600c602052604090206007015490565b600080600160a060020a038085166000908152600d602090815260408083209387168352929052205460ff16600481111561173e57fe5b14159392505050565b600b6020526000908152604090205481565b600a81565b60015460009081908190600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156117b557600080fd5b5af115156117c257600080fd5b5050506040518051905015156117d757600080fd5b600160a060020a0385166000908152600c60205260409020600581015490925042111561180357600080fd5b50600160a060020a038085166000908152600d6020908152604080832033909416835292905220600285600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561186957600080fd5b5af1151561187657600080fd5b50505060405180519050600481111561188b57fe5b1461189557600080fd5b60038201544290116118a657600080fd5b6002815460ff1660048111156118b857fe5b146118c257600080fd5b60028201546001820154146118d657600080fd5b836040519081526020016040519081900390206001820154146118f857600080fd5b33604051600160a060020a03919091166c010000000000000000000000000281526014016040518091039020841860405190815260200160405190819003902060028201541461194757600080fd5b805460ff191660031781556004820154611962906001612ca4565b6004830155600160a060020a033381169086167f4f5df7005a83b6f11e90ead1268eb534656169a5034e8d239c763471294be3d58660405190815260200160405180910390a3506001949350505050565b60085481565b60015460009081908190819033600160a060020a039081169116146119dd57600080fd5b600354600160a060020a0316634cfddcfb8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a2557600080fd5b5af11515611a3257600080fd5b5050506040518051600154909450611a939150429061161390600a90600160a060020a0316631f8717268860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b600160a060020a038088166000908152600c60205260409081902060035493955093509116906338c4090b9087905160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611af557600080fd5b5af11515611b0257600080fd5b5050506040518051825550600354600160a060020a03166355d66c3e8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611b5557600080fd5b5af11515611b6257600080fd5b5050506040518051600883018054600160a060020a031916600160a060020a0392909216919091179055506005548154611b9b91612ce9565b6001820155600581018290556006546009820155600160a060020a0386167f9c081174ce28e85a62530b1102b0df58428b8da5027e81fbb4984aa1dc03310760405160405180910390a250600195945050505050565b600d60209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460059095015460ff9094169492939192600160a060020a039091169186565b60008054819033600160a060020a03908116911614611c5d57600080fd5b5060005b8351811015611c9d57611c8a85858381518110611c7a57fe5b9060200190602002015185612129565b1515611c9557600080fd5b600101611c61565b506001949350505050565b6000805433600160a060020a03908116911614611cc457600080fd5b600154600160a060020a031663835436b48360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d1457600080fd5b5af11515611d2157600080fd5b505050604051805190501515611d3657600080fd5b611d3f82612cfe565b1515611d4a57600080fd5b81600160a060020a03167fb22288215ec8cbd28148d7ffa053c6e6e23c62b58d0eb71a6387b59fad33a01960405160405180910390a2506001919050565b60065481565b60015460009081908190819033600160a060020a03908116911614611db257600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211611ddd57600080fd5b600091505b6007830154821015611eea5760078301805483908110611dfe57fe5b600091825260209091200154600160a060020a031690506001600160a060020a038087166000908152600d602090815260408083209386168352929052205460ff166004811115611e4b57fe5b14611edf576001805490840154600160a060020a0390911690636b4f6865908790849060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611ebd57600080fd5b5af11515611eca57600080fd5b505050604051805190501515611edf57600080fd5b816001019150611de2565b84600160a060020a03167f8d8d47a5d5034ce9c01a2308543fdaa83d60863e4b735b7d57361987cdc8ed9460405160405180910390a2506001949350505050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fc15780601f10611f9657610100808354040283529160200191611fc1565b820191906000526020600020905b815481529060010190602001808311611fa457829003601f168201915b505050505081565b6000600a82815481101515611fda57fe5b600091825260209091200154600160a060020a031692915050565b600e54600160a060020a031681565b600160a060020a0382166000908152600c6020526040812060070180548390811061202b57fe5b600091825260209091200154600160a060020a03169392505050565b60005433600160a060020a0390811691161461206257600080fd5b60005474010000000000000000000000000000000000000000900460ff16151561208b57600080fd5b600160a060020a03811615156120a057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a03929092169190911774ff000000000000000000000000000000000000000019169055565b60055481565b600a545b90565b60095481565b60008054819081908190819033600160a060020a0390811691161461214d57600080fd5b600154600160a060020a03166332ca55878960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561219d57600080fd5b5af115156121aa57600080fd5b5050506040518051905015156121bf57600080fd5b600188600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156121fe57600080fd5b5af1151561220b57600080fd5b50505060405180519050600481111561222057fe5b1461222a57600080fd5b600160a060020a038089166000818152600d60209081526040808320948c168352938152838220928252600c9052919091206005810154919550935042111561227257600080fd5b600154600160a060020a031663f69f190c8860405160e060020a63ffffffff8416028152600160a060020a0390911660048201526024016040805180830381600087803b15156122c157600080fd5b5af115156122ce57600080fd5b50505060405180519060200180519193509091505030600160a060020a03908116908316146122fc57600080fd5b6000845460ff16600481111561230e57fe5b1461231857600080fd5b835460ff19166001178455600384018054600160a060020a03888116600160a060020a0319909216919091179091558781169089167f9cade22a92ceb705fefd1c03e9ac4dbbf787cd493ec63a9f2b078cbc859c06298360405190815260200160405180910390a3506001979650505050505050565b600054600160a060020a031681565b60005474010000000000000000000000000000000000000000900460ff1681565b60075481565b600154600090600160a060020a0316631708d7253360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561241757600080fd5b5af1151561242457600080fd5b50505060405180519050151561243957600080fd5b61244233612cfe565b151561244d57600080fd5b33600160a060020a03167fd08d61a9c25ada3385d23554bae10e5d15c9518d4bfd27571c190558f7030f6e60405160405180910390a250600190565b600160a060020a0381166000818152600b6020526040812054600a805492939192839081106124b457fe5b600091825260209091200154600160a060020a0316146124d357600080fd5b92915050565b60005433600160a060020a039081169116146124f457600080fd5b7f52bb55d3097463659f724f9b420d259719787a8563b48eb82368680999bfea0760055485600654866008548760095488604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a1606483111561257957600080fd5b600593909355600691909155600855600955565b600281565b600160a060020a039081166000908152600c6020526040902080546001820154600283015460038401546004850154600586015460068701546008909701549598949793969295919490939190911690565b6000805481908190819033600160a060020a0390811691161461260657600080fd5b600154600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561265657600080fd5b5af1151561266357600080fd5b50505060405180519050151561267857600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211156126a457600080fd5b428360030154111580156126ba57506004830154155b15156126c557600080fd5b84600160a060020a0316631a514d976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561270257600080fd5b5af1151561270f57600080fd5b50505060405180519050151561272457600080fd5b600091505b60078301548210156127c2576007830180548390811061274557fe5b60009182526020808320909101546002860154600160a060020a038981168552600d8452604080862091909316808652935292206001015490925014156127b757600160a060020a038581166000908152600d60209081526040808320938516835292905220805460ff191660041790555b816001019150612729565b600060068401819055600284018190556003840155600160a060020a0385167f631055693b4cbe13143279bc507432c42de858b6d04b3ba4e1ff3d2c88a7e52b60405160405180910390a2506001949350505050565b60008060008060008060008061282c613058565b6000808b5193508b60e001519250600099505b82518a101561292857828a8151811061285457fe5b90602001906020020151600160a060020a03808f166000908152600d6020908152604080832093851683529290522090995091506003825460ff16600481111561289a57fe5b1415612905576003820154600160a060020a031615156128bb5760016128be565b60035b60ff1697506128e26128dd898460040154612cbe90919063ffffffff16565b612de2565b60010196506128f7868863ffffffff612ca416565b60058301889055955061291d565b61291a8c60200151859063ffffffff612ca416565b93505b89600101995061283f565b6000861161293557600080fd5b61295c61294f8d610120015160649063ffffffff612c9216565b859063ffffffff612ce916565b9050600099505b82518a1015612bee57828a8151811061297857fe5b9060200190602002015198506003600160a060020a03808f166000908152600d60209081526040808320938e168352929052205460ff1660048111156129ba57fe5b1415612b4057600160a060020a03808e166000908152600d60209081526040808320938d16835292905220600501546129fb9082908863ffffffff612ffb16565b9450612a0d848663ffffffff612c9216565b9350600160009054906101000a9004600160a060020a0316600160a060020a0316636b4f68658e8b8f6020015160405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515612a8957600080fd5b5af11515612a9657600080fd5b505050604051805190501515612aab57600080fd5b60018054600160a060020a031690630c91f2d0908f908c90899060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612b1957600080fd5b5af11515612b2657600080fd5b505050604051805190501515612b3b57600080fd5b612be3565b600160009054906101000a9004600160a060020a0316600160a060020a0316639fdf96258e8b8f60200151600160405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612bc157600080fd5b5af11515612bce57600080fd5b505050604051805190501515612be357600080fd5b896001019950612963565b600154600160a060020a0316630c91f2d08e6101008f015187600060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612c5d57600080fd5b5af11515612c6a57600080fd5b505050604051805190501515612c7f57600080fd5b5060019c9b505050505050505050505050565b600082821115612c9e57fe5b50900390565b600082820183811015612cb357fe5b8091505b5092915050565b600080831515612cd15760009150612cb7565b50828202828482811515612ce157fe5b0414612cb357fe5b6000612cf783836064612ffb565b9392505050565b6000806000612d0c84612489565b600a805491935090612d2590600163ffffffff612c9216565b81548110612d2f57fe5b600091825260209091200154600a8054600160a060020a039092169250829184908110612d5857fe5b60009182526020808320919091018054600160a060020a031916600160a060020a039485161790559183168152600b90915260409020829055600a8054612da0906001612c92565b81548110612daa57fe5b60009182526020909120018054600160a060020a0319169055600a54612dd790600163ffffffff612c9216565b611c9d600a8261302f565b700100000000000000000000000000000000680100000000000000006401000000006201000061010060106004600260001989019081041790810417908104179081041790810417908104179081041790810417600101906000906040517ff8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd81527ff5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe60208201527ff6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a827252361660408201527fc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff60608201527ff7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e60808201527fe39ed557db96902cd38ed14fad815115c786af479b7e8324736353433727170760a08201527fc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d236242260660c08201527f753a6d1b65325d0c552a4d1345224105391a310b29122104190a11030902010060e082015261010081016040527e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff7f01000000000000000000000000000000000000000000000000000000000000008082870204818160ff038501510495507f8000000000000000000000000000000000000000000000000000000000000000851161010002860195505050505050919050565b600061301061300a8585612cbe565b83613018565b949350505050565b600080828481151561302657fe5b04949350505050565b8154818355818115116130535760008381526020902061305391810190830161306a565b505050565b60206040519081016040526000815290565b61212091905b8082111561127157600081556001016130705600a165627a7a723058204bd60a5d84290b2bdfc72f3d4d9633b5c868e69c228c5d05ceb5053f697380d00029", + "deployedBytecode": "0x6060604052600436106101b35763ffffffff60e060020a600035041663031ee1c881146101b857806306021e7e146101fb5780630c6e29e3146102f2578063126eac431461030557806316ebf77d146103795780631f1e74061461039b5780632b8fd18a146104105780633ec6a4c41461044257806340f036051461046157806341cb01ad1461048657806345b99d28146104a55780635a628525146104b85780636ab6936a146104da5780637919233f146104ed5780637bd220bb1461050f5780637c60988514610534578063835436b41461059c57806387639c68146105bb57806389869163146105ce5780638d7db2f7146105ed578063900b7b6214610677578063b32ca9c51461068d578063bb7fb08b146106a0578063bbac78a9146106c2578063c6c5b072146106e3578063c6ced32b146106f6578063cc6f06a314610709578063dc988b401461071c578063deff41c114610747578063e21b9d081461075a578063e2d36ef51461076d578063e653ec6a14610780578063ec1847b614610793578063ef9cb474146107b2578063f20e56ec146107d1578063f4efa24c146107e4578063ff266d2614610852575b600080fd5b34156101c357600080fd5b6101e9600160a060020a036004351660243560443560ff6064351660843560a435610871565b60405190815260200160405180910390f35b341561020657600080fd5b6102de60048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b604051901515815260200160405180910390f35b34156102fd57600080fd5b6102de611168565b341561031057600080fd5b61032a600160a060020a0360043581169060243516611275565b6040518087600481111561033a57fe5b60ff168152602081019690965250604080860194909452600160a060020a039092166060850152608084015260a083015260c090910191505180910390f35b341561038457600080fd5b6102de600160a060020a03600435166024356112f1565b34156103a657600080fd5b6103ba600160a060020a036004351661166d565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c0850152600160a060020a031660e0840152610100830191909152610120909101905180910390f35b341561041b57600080fd5b6104266004356116c1565b604051600160a060020a03909116815260200160405180910390f35b341561044d57600080fd5b6101e9600160a060020a03600435166116e9565b341561046c57600080fd5b6102de600160a060020a0360043581169060243516611707565b341561049157600080fd5b6101e9600160a060020a0360043516611747565b34156104b057600080fd5b6101e9611759565b34156104c357600080fd5b6102de600160a060020a036004351660243561175e565b34156104e557600080fd5b6101e96119b3565b34156104f857600080fd5b6102de600160a060020a03600435166024356119b9565b341561051a57600080fd5b61032a600160a060020a0360043581169060243516611bf1565b341561053f57600080fd5b6102de60048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250611c3f915050565b34156105a757600080fd5b6102de600160a060020a0360043516611ca8565b34156105c657600080fd5b6101e9611d88565b34156105d957600080fd5b6102de600160a060020a0360043516611d8e565b34156105f857600080fd5b610600611f2b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561063c578082015183820152602001610624565b50505050905090810190601f1680156106695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068257600080fd5b610426600435611fc9565b341561069857600080fd5b610426611ff5565b34156106ab57600080fd5b610426600160a060020a0360043516602435612004565b34156106cd57600080fd5b6106e1600160a060020a0360043516612047565b005b34156106ee57600080fd5b6101e9612116565b341561070157600080fd5b6101e961211c565b341561071457600080fd5b6101e9612123565b341561072757600080fd5b6102de600160a060020a0360043581169060243581169060443516612129565b341561075257600080fd5b61042661238e565b341561076557600080fd5b6102de61239d565b341561077857600080fd5b6101e96123be565b341561078b57600080fd5b6102de6123c4565b341561079e57600080fd5b6101e9600160a060020a0360043516612489565b34156107bd57600080fd5b6106e16004356024356044356064356124d9565b34156107dc57600080fd5b6101e961258d565b34156107ef57600080fd5b610803600160a060020a0360043516612592565b60405197885260208801969096526040808801959095526060870193909352608086019190915260a085015260c0840152600160a060020a0390911660e0830152610100909101905180910390f35b341561085d57600080fd5b6102de600160a060020a03600435166125e4565b60015460009081908190600160a060020a03166332ca55878a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108c857600080fd5b5af115156108d557600080fd5b5050506040518051905015156108ea57600080fd5b600160a060020a0389166000908152600c60205260409020600581015490925042111561091657600080fd5b600189600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561095557600080fd5b5af1151561096257600080fd5b50505060405180519050600481111561097757fe5b1461098157600080fd5b50600160a060020a038089166000908152600d60209081526040808320339094168352929052208715156109b457600080fd5b8615156109c057600080fd5b6003810154600160a060020a031615610a8f57600188886040517f19457468657265756d205369676e6564204d6573736167653a0a3634000000008152601c810192909252603c820152605c0160405180910390208787876040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af11515610a6a57600080fd5b5050602060405103516003820154600160a060020a03908116911614610a8f57600080fd5b6001815460ff166004811115610aa157fe5b14610aab57600080fd5b805460ff19166002908117825560018083018a905590820188905554600160a060020a0316638c0f8e113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b1457600080fd5b5af11515610b2157600080fd5b505050604051805160048301555060078201805460018101610b43838261302f565b5060009182526020909120018054600160a060020a03191633600160a060020a03818116929092179092556001805490850154911691638981d077918c919060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bd157600080fd5b5af11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b33600160a060020a031689600160a060020a03167f1593a9a000265660fd299c9f8c9bbacfeb4d428861542e6c44b68615324225d48a60405190815260200160405180910390a35060010154979650505050505050565b60008054819033600160a060020a03908116911614610c6857600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cb857600080fd5b5af11515610cc557600080fd5b505050604051805190501515610cda57600080fd5b50600160a060020a0385166000908152600c602052604090206005810154421115610d0457600080fd5b42816003015411158015610d1c575060008160040154115b80610d2e575080600601548160040154145b1515610d3957600080fd5b610e1e8682610140604051908101604052908160008201548152602001600182015481526020016002820154600019166000191681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015610df257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd4575b50505091835250506008820154600160a060020a03166020820152600990910154604090910152612818565b1515610e2957600080fd5b600154600160a060020a031663b6b57ebd878787876040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015610ead578082015183820152602001610e95565b50505050905090810190601f168015610eda5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015610f10578082015183820152602001610ef8565b50505050905090810190601f168015610f3d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610f73578082015183820152602001610f5b565b50505050905090810190601f168015610fa05780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1515610fc357600080fd5b5af11515610fd057600080fd5b505050604051805190501515610fe557600080fd5b85600160a060020a03167f4bfecaabd22e1b95e9aa9eb161b19f645b3460e7533d5e0f6349faf8dc0a724486868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611058578082015183820152602001611040565b50505050905090810190601f1680156110855780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156110bb5780820151838201526020016110a3565b50505050905090810190601f1680156110e85780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561111e578082015183820152602001611106565b50505050905090810190601f16801561114b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a250600195945050505050565b6001546000908190600160a060020a031663b218cf153360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111bd57600080fd5b5af115156111ca57600080fd5b5050506040518051905015156111df57600080fd5b600a8054600181016111f1838261302f565b60009283526020909220018054600160a060020a03191633600160a060020a03161790559050611222816001612c92565b600160a060020a0333166000818152600b60205260409081902092909255907f67799bb3ec4a3491a0c1c4e6d02ec99927df7ba7fa268c216672c0c5ecc1e8f8905160405180910390a2600191505b5090565b600080600080600080600061128a8989611707565b151561129557600080fd5b50505050600160a060020a039485166000908152600d602090815260408083209688168352959052939093208054600182015460028301546003840154600485015460059095015460ff90941699929891975016945091925090565b6000805481908190819033600160a060020a0390811691161461131357600080fd5b600154600160a060020a03166332ca55878760405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561136357600080fd5b5af1151561137057600080fd5b50505060405180519050151561138557600080fd5b600160a060020a0386166000908152600c6020526040902060058101549093504211156113b157600080fd5b85600160a060020a0316632d4d671f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ee57600080fd5b5af115156113fb57600080fd5b50505060405180519050151561141057600080fd5b60006006840181905591505b60078301548210156114dc576007830180548390811061143857fe5b6000918252602080832090910154600160a060020a038981168452600d8352604080852091909216808552925290912060010154909150851480156114b057506002600160a060020a038088166000908152600d602090815260408083209386168352929052205460ff1660048111156114ae57fe5b145b156114d15760068301546114cb90600163ffffffff612ca416565b60068401555b81600101915061141c565b6006830154600090116114ee57600080fd5b600280840186905560015460035461161f92429261161392600160a060020a0391821691631f87172691811690634cfddcfb908e1663ecc40f646040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561155657600080fd5b5af1151561156357600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115a357600080fd5b5af115156115b057600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b5af115156115fd57600080fd5b505050604051805191905063ffffffff612cbe16565b9063ffffffff612ca416565b6003840155600160a060020a0386167fa1b9f527f9799a46d54103401c99dc62f3744afe1d095a1c53620758dc38b2868660405190815260200160405180910390a250600195945050505050565b600c602052600090815260409020805460018201546002830154600384015460048501546005860154600687015460088801546009909801549697959694959394929391929091600160a060020a03169089565b600a8054829081106116cf57fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a03166000908152600c602052604090206007015490565b600080600160a060020a038085166000908152600d602090815260408083209387168352929052205460ff16600481111561173e57fe5b14159392505050565b600b6020526000908152604090205481565b600a81565b60015460009081908190600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156117b557600080fd5b5af115156117c257600080fd5b5050506040518051905015156117d757600080fd5b600160a060020a0385166000908152600c60205260409020600581015490925042111561180357600080fd5b50600160a060020a038085166000908152600d6020908152604080832033909416835292905220600285600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561186957600080fd5b5af1151561187657600080fd5b50505060405180519050600481111561188b57fe5b1461189557600080fd5b60038201544290116118a657600080fd5b6002815460ff1660048111156118b857fe5b146118c257600080fd5b60028201546001820154146118d657600080fd5b836040519081526020016040519081900390206001820154146118f857600080fd5b33604051600160a060020a03919091166c010000000000000000000000000281526014016040518091039020841860405190815260200160405190819003902060028201541461194757600080fd5b805460ff191660031781556004820154611962906001612ca4565b6004830155600160a060020a033381169086167f4f5df7005a83b6f11e90ead1268eb534656169a5034e8d239c763471294be3d58660405190815260200160405180910390a3506001949350505050565b60085481565b60015460009081908190819033600160a060020a039081169116146119dd57600080fd5b600354600160a060020a0316634cfddcfb8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a2557600080fd5b5af11515611a3257600080fd5b5050506040518051600154909450611a939150429061161390600a90600160a060020a0316631f8717268860405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115f057600080fd5b600160a060020a038088166000908152600c60205260409081902060035493955093509116906338c4090b9087905160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611af557600080fd5b5af11515611b0257600080fd5b5050506040518051825550600354600160a060020a03166355d66c3e8660405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611b5557600080fd5b5af11515611b6257600080fd5b5050506040518051600883018054600160a060020a031916600160a060020a0392909216919091179055506005548154611b9b91612ce9565b6001820155600581018290556006546009820155600160a060020a0386167f9c081174ce28e85a62530b1102b0df58428b8da5027e81fbb4984aa1dc03310760405160405180910390a250600195945050505050565b600d60209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460059095015460ff9094169492939192600160a060020a039091169186565b60008054819033600160a060020a03908116911614611c5d57600080fd5b5060005b8351811015611c9d57611c8a85858381518110611c7a57fe5b9060200190602002015185612129565b1515611c9557600080fd5b600101611c61565b506001949350505050565b6000805433600160a060020a03908116911614611cc457600080fd5b600154600160a060020a031663835436b48360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d1457600080fd5b5af11515611d2157600080fd5b505050604051805190501515611d3657600080fd5b611d3f82612cfe565b1515611d4a57600080fd5b81600160a060020a03167fb22288215ec8cbd28148d7ffa053c6e6e23c62b58d0eb71a6387b59fad33a01960405160405180910390a2506001919050565b60065481565b60015460009081908190819033600160a060020a03908116911614611db257600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211611ddd57600080fd5b600091505b6007830154821015611eea5760078301805483908110611dfe57fe5b600091825260209091200154600160a060020a031690506001600160a060020a038087166000908152600d602090815260408083209386168352929052205460ff166004811115611e4b57fe5b14611edf576001805490840154600160a060020a0390911690636b4f6865908790849060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611ebd57600080fd5b5af11515611eca57600080fd5b505050604051805190501515611edf57600080fd5b816001019150611de2565b84600160a060020a03167f8d8d47a5d5034ce9c01a2308543fdaa83d60863e4b735b7d57361987cdc8ed9460405160405180910390a2506001949350505050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fc15780601f10611f9657610100808354040283529160200191611fc1565b820191906000526020600020905b815481529060010190602001808311611fa457829003601f168201915b505050505081565b6000600a82815481101515611fda57fe5b600091825260209091200154600160a060020a031692915050565b600e54600160a060020a031681565b600160a060020a0382166000908152600c6020526040812060070180548390811061202b57fe5b600091825260209091200154600160a060020a03169392505050565b60005433600160a060020a0390811691161461206257600080fd5b60005474010000000000000000000000000000000000000000900460ff16151561208b57600080fd5b600160a060020a03811615156120a057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a03929092169190911774ff000000000000000000000000000000000000000019169055565b60055481565b600a545b90565b60095481565b60008054819081908190819033600160a060020a0390811691161461214d57600080fd5b600154600160a060020a03166332ca55878960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561219d57600080fd5b5af115156121aa57600080fd5b5050506040518051905015156121bf57600080fd5b600188600160a060020a031663e329c4786040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156121fe57600080fd5b5af1151561220b57600080fd5b50505060405180519050600481111561222057fe5b1461222a57600080fd5b600160a060020a038089166000818152600d60209081526040808320948c168352938152838220928252600c9052919091206005810154919550935042111561227257600080fd5b600154600160a060020a031663f69f190c8860405160e060020a63ffffffff8416028152600160a060020a0390911660048201526024016040805180830381600087803b15156122c157600080fd5b5af115156122ce57600080fd5b50505060405180519060200180519193509091505030600160a060020a03908116908316146122fc57600080fd5b6000845460ff16600481111561230e57fe5b1461231857600080fd5b835460ff19166001178455600384018054600160a060020a03888116600160a060020a0319909216919091179091558781169089167f9cade22a92ceb705fefd1c03e9ac4dbbf787cd493ec63a9f2b078cbc859c06298360405190815260200160405180910390a3506001979650505050505050565b600054600160a060020a031681565b60005474010000000000000000000000000000000000000000900460ff1681565b60075481565b600154600090600160a060020a0316631708d7253360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561241757600080fd5b5af1151561242457600080fd5b50505060405180519050151561243957600080fd5b61244233612cfe565b151561244d57600080fd5b33600160a060020a03167fd08d61a9c25ada3385d23554bae10e5d15c9518d4bfd27571c190558f7030f6e60405160405180910390a250600190565b600160a060020a0381166000818152600b6020526040812054600a805492939192839081106124b457fe5b600091825260209091200154600160a060020a0316146124d357600080fd5b92915050565b60005433600160a060020a039081169116146124f457600080fd5b7f52bb55d3097463659f724f9b420d259719787a8563b48eb82368680999bfea0760055485600654866008548760095488604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a1606483111561257957600080fd5b600593909355600691909155600855600955565b600281565b600160a060020a039081166000908152600c6020526040902080546001820154600283015460038401546004850154600586015460068701546008909701549598949793969295919490939190911690565b6000805481908190819033600160a060020a0390811691161461260657600080fd5b600154600160a060020a03166332ca55878660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561265657600080fd5b5af1151561266357600080fd5b50505060405180519050151561267857600080fd5b600160a060020a0385166000908152600c6020526040902060058101549093504211156126a457600080fd5b428360030154111580156126ba57506004830154155b15156126c557600080fd5b84600160a060020a0316631a514d976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561270257600080fd5b5af1151561270f57600080fd5b50505060405180519050151561272457600080fd5b600091505b60078301548210156127c2576007830180548390811061274557fe5b60009182526020808320909101546002860154600160a060020a038981168552600d8452604080862091909316808652935292206001015490925014156127b757600160a060020a038581166000908152600d60209081526040808320938516835292905220805460ff191660041790555b816001019150612729565b600060068401819055600284018190556003840155600160a060020a0385167f631055693b4cbe13143279bc507432c42de858b6d04b3ba4e1ff3d2c88a7e52b60405160405180910390a2506001949350505050565b60008060008060008060008061282c613058565b6000808b5193508b60e001519250600099505b82518a101561292857828a8151811061285457fe5b90602001906020020151600160a060020a03808f166000908152600d6020908152604080832093851683529290522090995091506003825460ff16600481111561289a57fe5b1415612905576003820154600160a060020a031615156128bb5760016128be565b60035b60ff1697506128e26128dd898460040154612cbe90919063ffffffff16565b612de2565b60010196506128f7868863ffffffff612ca416565b60058301889055955061291d565b61291a8c60200151859063ffffffff612ca416565b93505b89600101995061283f565b6000861161293557600080fd5b61295c61294f8d610120015160649063ffffffff612c9216565b859063ffffffff612ce916565b9050600099505b82518a1015612bee57828a8151811061297857fe5b9060200190602002015198506003600160a060020a03808f166000908152600d60209081526040808320938e168352929052205460ff1660048111156129ba57fe5b1415612b4057600160a060020a03808e166000908152600d60209081526040808320938d16835292905220600501546129fb9082908863ffffffff612ffb16565b9450612a0d848663ffffffff612c9216565b9350600160009054906101000a9004600160a060020a0316600160a060020a0316636b4f68658e8b8f6020015160405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515612a8957600080fd5b5af11515612a9657600080fd5b505050604051805190501515612aab57600080fd5b60018054600160a060020a031690630c91f2d0908f908c90899060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612b1957600080fd5b5af11515612b2657600080fd5b505050604051805190501515612b3b57600080fd5b612be3565b600160009054906101000a9004600160a060020a0316600160a060020a0316639fdf96258e8b8f60200151600160405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612bc157600080fd5b5af11515612bce57600080fd5b505050604051805190501515612be357600080fd5b896001019950612963565b600154600160a060020a0316630c91f2d08e6101008f015187600060405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201529015156064820152608401602060405180830381600087803b1515612c5d57600080fd5b5af11515612c6a57600080fd5b505050604051805190501515612c7f57600080fd5b5060019c9b505050505050505050505050565b600082821115612c9e57fe5b50900390565b600082820183811015612cb357fe5b8091505b5092915050565b600080831515612cd15760009150612cb7565b50828202828482811515612ce157fe5b0414612cb357fe5b6000612cf783836064612ffb565b9392505050565b6000806000612d0c84612489565b600a805491935090612d2590600163ffffffff612c9216565b81548110612d2f57fe5b600091825260209091200154600a8054600160a060020a039092169250829184908110612d5857fe5b60009182526020808320919091018054600160a060020a031916600160a060020a039485161790559183168152600b90915260409020829055600a8054612da0906001612c92565b81548110612daa57fe5b60009182526020909120018054600160a060020a0319169055600a54612dd790600163ffffffff612c9216565b611c9d600a8261302f565b700100000000000000000000000000000000680100000000000000006401000000006201000061010060106004600260001989019081041790810417908104179081041790810417908104179081041790810417600101906000906040517ff8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd81527ff5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe60208201527ff6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a827252361660408201527fc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff60608201527ff7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e60808201527fe39ed557db96902cd38ed14fad815115c786af479b7e8324736353433727170760a08201527fc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d236242260660c08201527f753a6d1b65325d0c552a4d1345224105391a310b29122104190a11030902010060e082015261010081016040527e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff7f01000000000000000000000000000000000000000000000000000000000000008082870204818160ff038501510495507f8000000000000000000000000000000000000000000000000000000000000000851161010002860195505050505050919050565b600061301061300a8585612cbe565b83613018565b949350505050565b600080828481151561302657fe5b04949350505050565b8154818355818115116130535760008381526020902061305391810190830161306a565b505050565b60206040519081016040526000815290565b61212091905b8082111561127157600081556001016130705600a165627a7a723058204bd60a5d84290b2bdfc72f3d4d9633b5c868e69c228c5d05ceb5053f697380d00029", "sourceMap": "253:17693:18:-;;;2782:1041;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;667:7:14;:25;;-1:-1:-1;;;;;;;;;;;682:10:14;667:25;;-1:-1:-1;;;;;;667:25:14;;;;;;;696:19;;;;;;2782:1041:18;;-1:-1:-1;2782:1041:18;;-1:-1:-1;3030:16:18;;300:30:7;;;;292:39;;;;;;335:17;:55;;-1:-1:-1;;;;;;335:55:7;-1:-1:-1;;;;;335:55:7;;;;;;377:33:11;;;;369:42;;;;;;415:18;:42;;-1:-1:-1;;;;;415:42:11;;;-1:-1:-1;;;;;;415:42:11;;;;;;;;461:20;:64;;;;;;;;;;3169:9:18;:23;;3182:10;3169:23;;;;;3161:32;;;;;;3197;3219:9;3197:21;;;;;;:32;:::i;:::-;3257:13;3292:12;;3257:47;;;;;;;;:::i;:::-;-1:-1:-1;;3343:2:18;3308:18;:37;3422:1;3387:28;:36;3489:29;:63;;;;3633:32;:66;3703:32;:66;-1:-1:-1;;3773:22:18;:45;;-1:-1:-1;;;;;;3773:45:18;3808:10;-1:-1:-1;;;;;3773:45:18;;;;253:17693;;876:234:14;502:7;;488:10;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;956:12;;;;;;;948:21;;;;;;;;-1:-1:-1;;;;;981:23:14;;;;973:32;;;;;;1035:7;;-1:-1:-1;;;;;1014:40:14;;;;1035:7;1014:40;;;;;;;;;;1058:7;:24;;-1:-1:-1;;;;;;1058:24:14;-1:-1:-1;;;;;1058:24:14;;;;;;;;-1:-1:-1;;;;;;1086:20:14;;;876:234::o;253:17693:18:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;253:17693:18;;;-1:-1:-1;253:17693:18;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", "deployedSourceMap": "253:17693:18:-;;;;;;;;-1:-1:-1;;;253:17693:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10616:1346;;;;;;;;;;;;-1:-1:-1;;;;;10616:1346:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15164:744;;;;;;;;;;;;;-1:-1:-1;;;;;15164:744:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15164:744:18;;-1:-1:-1;15164:744:18;;-1:-1:-1;;;;;;15164:744:18;;;;;;;;;;;;;;;;;;5126:274;;;;;;;;;;;;7349:567;;;;;;;;;;-1:-1:-1;;;;;7349:567:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7349:567:18;;;;;;;;-1:-1:-1;;;;;7349:567:18;;;;;;;;;;;;-1:-1:-1;7349:567:18;;;;;;;;-1:-1:-1;7349:567:18;;;;;;11965:1174;;;;;;;;;;;;-1:-1:-1;;;;;11965:1174:18;;;;;1127:57;;;;;;;;;;;;-1:-1:-1;;;;;1127:57:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1127:57:18;;;;;;;;;;;;;;;;;;;;;;;988:44;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;988:44:18;;;;;;;;;;;;;;;6840:147;;;;;;;;;;;;-1:-1:-1;;;;;6840:147:18;;;7143:203;;;;;;;;;;-1:-1:-1;;;;;7143:203:18;;;;;;;;;;1035:48;;;;;;;;;;;;-1:-1:-1;;;;;1035:48:18;;;1388:58;;;;;;;;;;;;13142:1035;;;;;;;;;;;;-1:-1:-1;;;;;13142:1035:18;;;;;782:67;;;;;;;;;;;;7999:834;;;;;;;;;;;;-1:-1:-1;;;;;7999:834:18;;;;;1240:84;;;;;;;;;;-1:-1:-1;;;;;1240:84:18;;;;;;;;;;9376:294;;;;;;;;;;;;;-1:-1:-1;;;;;9376:294:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9376:294:18;;-1:-1:-1;;;9376:294:18;;-1:-1:-1;;;;;9376:294:18;;-1:-1:-1;9376:294:18;;-1:-1:-1;;9376:294:18;5641:235;;;;;;;;;;;;-1:-1:-1;;;;;5641:235:18;;;528:63;;;;;;;;;;;;8836:537;;;;;;;;;;;;-1:-1:-1;;;;;8836:537:18;;;383:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;383:48:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4763:102;;;;;;;;;;;;;;1499:45;;;;;;;;;;;;6990:150;;;;;;;;;;;;-1:-1:-1;;;;;6990:150:18;;;;;876:234:14;;;;;;;;;;;;-1:-1:-1;;;;;876:234:14;;;;;434:53:18;;;;;;;;;;;;5037:86;;;;;;;;;;;;885:67;;;;;;;;;;;;9673:940;;;;;;;;;;-1:-1:-1;;;;;9673:940:18;;;;;;;;;;;;;;;238:22:14;;;;;;;;;;;;263:27;;;;;;;;;;;;632:64:18;;;;;;;;;;;;5403:235;;;;;;;;;;;;4867:168;;;;;;;;;;;;-1:-1:-1;;;;;4867:168:18;;;3826:855;;;;;;;;;;;;;;;;;;;;1328:57;;;;;;;;;;;;6268:569;;;;;;;;;;;;-1:-1:-1;;;;;6268:569:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6268:569:18;;;;;;;;;;;;;;;;;;14180:879;;;;;;;;;;;;-1:-1:-1;;;;;14180:879:18;;;10616:1346;10777:17;;10743:19;;;;;;-1:-1:-1;;;;;10777:17:18;:33;10811:5;10777:40;;;;;-1:-1:-1;;;10777:40:18;;;-1:-1:-1;;;;;10777:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10769:49;;;;;;;;-1:-1:-1;;;;;10867:18:18;;;;;;:11;:18;;;;;10904:26;;;;10867:18;;-1:-1:-1;10897:3:18;:33;;10889:42;;;;;;10974:35;-1:-1:-1;;;;;10943:25:18;;;:27;;-1:-1:-1;;;10943:27:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;;;;;10935:75;;;;;;-1:-1:-1;;;;;;11115:22:18;;;;;;;:15;:22;;;;;;;;11138:10;11115:34;;;;;;;;;11189:18;;;11181:27;;;;;;11220:18;;;11212:27;;;;;;11247:29;;;;-1:-1:-1;;;;;11247:29:18;:43;11243:197;;11340:94;11396:11;11409;11350:71;;;;;;;;;;;;;;;;;;;;;;;;;11423:2;11427;11431;11340:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11307:29;;;;-1:-1:-1;;;;;11307:127:18;;;:29;;:127;11299:136;;;;;;11475:42;11452:19;;;;:65;;;;;;;;;11444:74;;;;;;11522:69;;-1:-1:-1;;11522:69:18;11548:43;11522:69;;;;;-1:-1:-1;11595:23:18;;;:37;;;11636:23;;;:37;;;11703:17;-1:-1:-1;;;;;11703:17:18;:32;11736:10;11703:44;;;;;-1:-1:-1;;;11703:44:18;;;-1:-1:-1;;;;;11703:44:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11677:18;;;:70;-1:-1:-1;11751:22:18;;;:39;;;;;;:22;:39;;:::i;:::-;-1:-1:-1;11751:39:18;;;;;;;;;;;-1:-1:-1;;;;;;11751:39:18;-1:-1:-1;;;;;11779:10:18;11751:39;;;;;;;;;;-1:-1:-1;11803:17:18;;11852:21;;;;11803:17;;;:29;;11833:5;;11803:71;;;;;-1:-1:-1;;;11803:71:18;;;-1:-1:-1;;;;;11803:71:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11795:80;;;;;;;;-1:-1:-1;;;;;11902:10:18;11884:42;;;;;;11914:11;11884:42;;;;;;;;;;;;;;-1:-1:-1;11937:21:18;;;;10616:1346;-1:-1:-1;;;;;;;10616:1346:18:o;15164:744::-;15289:4;502:7:14;;15289:4:18;;488:10:14;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;15308:17:18;;-1:-1:-1;;;;;15308:17:18;:33;15342:5;15308:40;;;;;-1:-1:-1;;;15308:40:18;;;-1:-1:-1;;;;;15308:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15300:49;;;;;;;;-1:-1:-1;;;;;;15392:18:18;;;;;;:11;:18;;;;;15429:26;;;;15422:3;:33;;15414:42;;;;;;15493:3;15469:9;:20;;;:27;;:58;;;;;15526:1;15500:9;:23;;;:27;15469:58;15468:114;;;;15560:9;:21;;;15533:9;:23;;;:48;15468:114;15460:123;;;;;;;;15724:35;15742:5;15749:9;15724:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15724:35:18;;;-1:-1:-1;15724:35:18;;;;;;;;;;;;-1:-1:-1;;;15724:35:18;;;-1:-1:-1;;15724:35:18;;;;-1:-1:-1;;;;;15724:35:18;;;;;;;;;;;;;;;:17;:35::i;:::-;15716:44;;;;;;;;15773:17;;-1:-1:-1;;;;;15773:17:18;:35;15809:5;15816:7;15825;15834:4;15773:66;;-1:-1:-1;;;15773:66:18;;;;;;-1:-1:-1;;;;;15773:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15773:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15773:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15773:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15765:75;;;;;;;;-1:-1:-1;;;;;15849:40:18;;;15868:7;15876;15884:4;15849:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15849:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15849:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15849:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15900:4:18;;15164:744;-1:-1:-1;;;;;15164:744:18:o;5126:274::-;5213:17;;5169:4;;;;-1:-1:-1;;;;;5213:17:18;:32;5246:10;5213:44;;;;;-1:-1:-1;;;5213:44:18;;;-1:-1:-1;;;;;5213:44:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5205:53;;;;;;;;5275:9;:26;;;;;;:9;:26;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;5275:26:18;-1:-1:-1;;;;;5290:10:18;5275:26;;;;;-1:-1:-1;5333:12:18;5275:26;-1:-1:-1;5333:9:18;:12::i;:::-;5319:10;-1:-1:-1;;;;;5305:25:18;;;;;:13;:25;;;;;;;:40;;;;:25;5354:27;;;;;;;;;;5392:4;5385:11;;5126:274;;;:::o;7349:567::-;7431:38;7473:18;7495;7517:24;7545:13;7562:14;7660:42;7591:36;7612:5;7619:7;7591:20;:36::i;:::-;7583:45;;;;;;;;-1:-1:-1;;;;;;;;;7705:22:18;;;;;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;7752:19;;-1:-1:-1;7776:23:18;;;-1:-1:-1;7804:23:18;;;7832:29;;;;7866:18;;;;7889:19;;;;;7752;;;;;7776:23;;7804;;-1:-1:-1;7832:29:18;;-1:-1:-1;7866:18:18;;-1:-1:-1;7889:19:18;7349:567::o;11965:1174::-;12068:4;502:7:14;;12068:4:18;;;;;;488:10:14;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;12087:17:18;;-1:-1:-1;;;;;12087:17:18;:33;12121:5;12087:40;;;;;-1:-1:-1;;;12087:40:18;;;-1:-1:-1;;;;;12087:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12079:49;;;;;;;;-1:-1:-1;;;;;12171:18:18;;;;;;:11;:18;;;;;12208:26;;;;12171:18;;-1:-1:-1;12201:3:18;:33;;12193:42;;;;;;-1:-1:-1;;;;;12247:36:18;;;:38;;-1:-1:-1;;;12247:38:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12239:47;;;;;;;;12315:1;12291:21;;;:25;;;12315:1;-1:-1:-1;12320:377:18;12342:22;;;:29;12340:31;;12320:377;;;12397:22;;;:25;;12420:1;;12397:25;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12436:22:18;;;;;:15;:22;;;;;;12397:25;;;;12436;;;;;;;;-1:-1:-1;12436:36:18;;12397:25;;-1:-1:-1;12436:50:18;;:141;;;;-1:-1:-1;;;;;;12498:22:18;;;;;;;:15;:22;;;;;;;;:25;;;;;;;;;:32;12534:43;;12498:32;;:79;;;;;;;;;12436:141;12427:266;;;12659:21;;;;:28;;12685:1;12659:28;:25;:28;:::i;:::-;12635:21;;;:52;12427:266;12373:3;;;;;12320:377;;;12708:21;;;;12732:1;12708:25;;12700:34;;;;;;12811:19;;;;:33;;;12871:17;;12917:20;;12871:170;;13037:3;;12871:161;;-1:-1:-1;;;;;12871:17:18;;;;:45;;12917:20;;;:43;;12961:33;;;:35;;-1:-1:-1;;;12961:35:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12917:80;;;;;-1:-1:-1;;;12917:80:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12871:127;;;;;-1:-1:-1;;;12871:127:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:161;-1:-1:-1;12871:161:18;:131;:161;:::i;:::-;:165;:170;:165;:170;:::i;:::-;12848:20;;;:193;-1:-1:-1;;;;;13086:34:18;;;13109:10;13086:34;;;;;;;;;;;;;;-1:-1:-1;13131:4:18;;11965:1174;-1:-1:-1;;;;;11965:1174:18:o;1127:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1127:57:18;;;:::o;988:44::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;988:44:18;;-1:-1:-1;988:44:18;:::o;6840:147::-;-1:-1:-1;;;;;6945:18:18;6906:25;6945:18;;;:11;:18;;;;;:31;;:38;;6840:147::o;7143:203::-;-1:-1:-1;;;;;7263:22:18;;;7227;7263;;;:15;:22;;;;;;;;:31;;;;;;;;;;;:38;7227:22;;7263:38;;:79;;;;;;;;;;;7143:203;-1:-1:-1;;;7143:203:18:o;1035:48::-;;;;;;;;;;;;;:::o;1388:58::-;1444:2;1388:58;:::o;13142:1035::-;13225:17;;13206:4;;;;;;-1:-1:-1;;;;;13225:17:18;:33;13259:5;13225:40;;;;;-1:-1:-1;;;13225:40:18;;;-1:-1:-1;;;;;13225:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13217:49;;;;;;;;-1:-1:-1;;;;;13315:18:18;;;;;;:11;:18;;;;;13352:26;;;;13315:18;;-1:-1:-1;13345:3:18;:33;;13337:42;;;;;;-1:-1:-1;;;;;;13428:22:18;;;;;;;:15;:22;;;;;;;;13451:10;13428:34;;;;;;;;;;;;-1:-1:-1;;13428:22:18;13475:25;;:27;-1:-1:-1;;;13475:27:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;;;;;;13467:83;;;;;;13562:20;;;;13593:3;13562:34;;13554:83;;;;;;13680:43;13649:19;;;;:74;;;;;;;;;13641:83;;;;;;13767:19;;;;13736:23;;;;:50;13728:83;;;;;;13864:7;13854:42;;;;;;;;;;;;;;;13823:23;;;;:73;13815:83;;;;;;13971:10;13961:21;;-1:-1:-1;;;;;13961:21:18;;;;;;;;;;;;;;;;;13951:7;:31;13941:42;;;;;;;;;;;;;;;13910:23;;;;:73;13902:83;;;;;;13990:64;;-1:-1:-1;;13990:64:18;14016:38;13990:64;;;14084:23;;;;:30;;13990:64;14084:27;:30::i;:::-;14058:23;;;:56;-1:-1:-1;;;;;14138:10:18;14124:34;;;;;;14150:7;14124:34;;;;;;;;;;;;;;-1:-1:-1;14169:4:18;;13142:1035;-1:-1:-1;;;;13142:1035:18:o;782:67::-;;;;:::o;7999:834::-;197:17:7;;8091:4:18;;;;;;;;175:10:7;-1:-1:-1;;;;;175:40:7;;;197:17;;175:40;167:49;;;;;;8120:20:18;;-1:-1:-1;;;;;8120:20:18;:43;8164:15;8120:60;;;;;-1:-1:-1;;;8120:60:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8202:17;;8120:60;;-1:-1:-1;8202:91:18;;-1:-1:-1;8289:3:18;;8202:82;;1444:2;;-1:-1:-1;;;;;8202:17:18;:45;8120:60;8202:52;;;;;-1:-1:-1;;;8202:52:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:91;-1:-1:-1;;;;;8337:18:18;;;;;;;:11;:18;;;;;;;8398:20;;8184:109;;-1:-1:-1;8337:18:18;-1:-1:-1;8398:20:18;;;:40;;8439:15;;8398:57;;;;-1:-1:-1;;;8398:57:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8359:96;;-1:-1:-1;8498:20:18;;-1:-1:-1;;;;;8498:20:18;:50;8549:15;8498:67;;;;;-1:-1:-1;;;8498:67:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8459:25;;;:106;;-1:-1:-1;;;;;;8459:106:18;-1:-1:-1;;;;;8459:106:18;;;;;;;;;;-1:-1:-1;8640:18:18;;8608:20;;:51;;:31;:51::i;:::-;8569:21;;;:90;8663:26;;;:47;;;8753:28;;8714:36;;;:67;-1:-1:-1;;;;;8791:22:18;;;;;;;;;;;;-1:-1:-1;8825:4:18;;7999:834;-1:-1:-1;;;;;7999:834:18:o;1240:84::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1240:84:18;;;;;:::o;9376:294::-;9515:4;502:7:14;;9515:4:18;;488:10:14;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;-1:-1:-1;9540:1:18;9526:126;9547:8;:15;9543:1;:19;9526:126;;;9584:62;9608:5;9615:8;9624:1;9615:11;;;;;;;;;;;;;;;;9628:17;9584:23;:62::i;:::-;9576:71;;;;;;;;9564:3;;9526:126;;;-1:-1:-1;9662:4:18;;9376:294;-1:-1:-1;;;;9376:294:18:o;5641:235::-;5705:4;502:7:14;;488:10;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;5752:17:18;;-1:-1:-1;;;;;5752:17:18;:29;5782:7;5752:38;;;;;-1:-1:-1;;;5752:38:18;;;-1:-1:-1;;;;;5752:38:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5744:47;;;;;;;;5803:21;5816:7;5803:12;:21::i;:::-;5795:30;;;;;;;;-1:-1:-1;;;;;5834:23:18;;;;;;;;;;;;-1:-1:-1;5868:4:18;5641:235;;;:::o;528:63::-;;;;:::o;8836:537::-;197:17:7;;8910:4:18;;;;;;;;175:10:7;-1:-1:-1;;;;;175:40:7;;;197:17;;175:40;167:49;;;;;;-1:-1:-1;;;;;8961:18:18;;;;;;:11;:18;;;;;8997:26;;;;8961:18;;-1:-1:-1;8991:3:18;:32;8983:41;;;;;;9063:1;9059:5;;9054:269;9070:22;;;:29;9066:33;;9054:269;;;9117:22;;;:25;;9140:1;;9117:25;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9151:22:18;;;;;:15;:22;;;;;;9117:25;;;;9151;;;;;;;;:32;9117:25;;-1:-1:-1;;;9151:32:18;;:78;;;;;;;;;9147:172;;9248:17;;;9290:21;;;;-1:-1:-1;;;;;9248:17:18;;;;:31;;9280:5;;9287:1;;9248:64;;;;;-1:-1:-1;;;9248:64:18;;;-1:-1:-1;;;;;9248:64:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9240:73;;;;;;;;9101:3;;;;;9054:269;;;-1:-1:-1;;;;;9331:23:18;;;;;;;;;;;;-1:-1:-1;9365:4:18;;8836:537;-1:-1:-1;;;;8836:537:18:o;383:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4763:102::-;4823:7;4844:9;4854:6;4844:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4844:17:18;;;-1:-1:-1;;4763:102:18:o;1499:45::-;;;-1:-1:-1;;;;;1499:45:18;;:::o;6990:150::-;-1:-1:-1;;;;;7098:18:18;;7065:19;7098:18;;;:11;:18;;;;;:31;;:38;;7130:5;;7098:38;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7098:38:18;;;-1:-1:-1;;;6990:150:18:o;876:234:14:-;502:7;;488:10;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;956:12;;;;;;;948:21;;;;;;;;-1:-1:-1;;;;;981:23:14;;;;973:32;;;;;;1035:7;;-1:-1:-1;;;;;1014:40:14;;;;1035:7;1014:40;;;;;;;;;;1058:7;:24;;-1:-1:-1;;;;;;1058:24:14;-1:-1:-1;;;;;1058:24:14;;;;;;;;-1:-1:-1;;1086:20:14;;;876:234::o;434:53:18:-;;;;:::o;5037:86::-;5103:9;:16;5037:86;;:::o;885:67::-;;;;:::o;9673:940::-;9808:4;502:7:14;;9808:4:18;;;;;;;;488:10:14;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;9827:17:18;;-1:-1:-1;;;;;9827:17:18;:33;9861:5;9827:40;;;;;-1:-1:-1;;;9827:40:18;;;-1:-1:-1;;;;;9827:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9819:49;;;;;;;;9911:35;-1:-1:-1;;;;;9880:25:18;;;:27;;-1:-1:-1;;;9880:27:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;;;;;9872:75;;;;;;-1:-1:-1;;;;;9996:22:18;;;;;;;:15;:22;;;;;;;;:31;;;;;;;;;;;10076:18;;;:11;:18;;;;;;10113:26;;;;9996:31;;-1:-1:-1;10076:18:18;-1:-1:-1;10106:3:18;:33;;10098:42;;;;;;10218:17;;-1:-1:-1;;;;;10218:17:18;:33;10252:7;10218:42;;;;;-1:-1:-1;;;10218:42:18;;;-1:-1:-1;;;;;10218:42:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10190:70;;-1:-1:-1;10190:70:18;;-1:-1:-1;;10321:4:18;-1:-1:-1;;;;;10299:27:18;;;;;;;10291:36;;;;;;10363:37;10340:19;;;;:60;;;;;;;;;10332:69;;;;;;10405:74;;10437:42;-1:-1:-1;;10405:74:18;;;;;;10483:29;;;:49;;-1:-1:-1;;;;;;10483:49:18;-1:-1:-1;;;;;10483:49:18;;;;;;;;;;10542:52;;;;;;;10582:11;10542:52;;;;;;;;;;;;;;-1:-1:-1;10605:4:18;;9673:940;-1:-1:-1;;;;;;;9673:940:18:o;238:22:14:-;;;-1:-1:-1;;;;;238:22:14;;:::o;263:27::-;;;;;;;;;:::o;632:64:18:-;;;;:::o;5403:235::-;5495:17;;5451:4;;-1:-1:-1;;;;;5495:17:18;:36;5532:10;5495:48;;;;;-1:-1:-1;;;5495:48:18;;;-1:-1:-1;;;;;5495:48:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5487:57;;;;;;;;5556:24;5569:10;5556:12;:24::i;:::-;5548:33;;;;;;;;-1:-1:-1;;;;;5608:10:18;5590:29;;;;;;;;;;;-1:-1:-1;5630:4:18;5403:235;:::o;4867:168::-;-1:-1:-1;;;;;4953:22:18;;4929:4;4953:22;;;:13;:22;;;;;;4987:9;:16;;4929:4;;4953:22;;;;4987:16;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4987:16:18;:27;4979:36;;;;;;5026:5;4867:168;-1:-1:-1;;4867:168:18:o;3826:855::-;502:7:14;;488:10;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;4053:300:18;4080:18;;4114:20;4139:28;;4173:30;4208:32;;4242:34;4281:32;;4315:34;4053:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4399:3;4365:37;;;4357:46;;;;;;4407:18;:55;;;;4466:28;:65;;;;4535:32;:69;4608:32;:69;3826:855::o;1328:57::-;1384:1;1328:57;:::o;6268:569::-;-1:-1:-1;;;;;6585:18:18;;;6336:20;6585:18;;;:11;:18;;;;;6619:20;;-1:-1:-1;6644:21:18;;;-1:-1:-1;6670:19:18;;;6694:20;;;;6719:23;;;;6747:26;;;;6778:21;;;;6804:25;;;;;6619:20;;6644:21;;6670:19;;6694:20;;6719:23;;6747:26;;6804:25;;;;;6268:569::o;14180:879::-;14254:4;502:7:14;;14254:4:18;;;;;;488:10:14;-1:-1:-1;;;;;488:21:14;;;502:7;;488:21;480:30;;;;;;14273:17:18;;-1:-1:-1;;;;;14273:17:18;:33;14307:5;14273:40;;;;;-1:-1:-1;;;14273:40:18;;;-1:-1:-1;;;;;14273:40:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14265:49;;;;;;;;-1:-1:-1;;;;;14357:18:18;;;;;;:11;:18;;;;;14394:26;;;;14357:18;;-1:-1:-1;14387:3:18;:33;;14379:42;;;;;;14457:3;14433:9;:20;;;:27;;:59;;;;-1:-1:-1;14464:23:18;;;;:28;14433:59;14425:68;;;;;;;;-1:-1:-1;;;;;14505:27:18;;;:29;;-1:-1:-1;;;14505:29:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14497:38;;;;;;;;14557:1;14545:13;;14540:268;14564:22;;;:29;14560:33;;14540:268;;;14619:22;;;:25;;14642:1;;14619:25;;;;;;;;;;;;;;;;;;;14693:19;;;;-1:-1:-1;;;;;14653:22:18;;;;;:15;:22;;;;;;14619:25;;;;14653;;;;;;;-1:-1:-1;14653:36:18;;14619:25;;-1:-1:-1;14653:59:18;14649:155;;;-1:-1:-1;;;;;14723:22:18;;;;;;;:15;:22;;;;;;;;:25;;;;;;;;;:75;;-1:-1:-1;;14723:75:18;14758:40;14723:75;;;14649:155;14595:3;;;;;14540:268;;;14957:1;14933:21;;;:25;;;14962:19;;;:27;;;14993:20;;;:25;-1:-1:-1;;;;;15027:13:18;;;;;;;;;;;;-1:-1:-1;15051:4:18;;14180:879;-1:-1:-1;;;;14180:879:18:o;15911:2032::-;16002:4;16013:9;16026;16039:19;16062:20;16086:19;16109:30;16143:19;16190:29;;:::i;:::-;16320:31;;16165:10;:21;16143:43;;16222:10;:23;;;16190:55;;16258:1;16254:5;;16249:632;16263:12;:19;16261:1;:21;16249:632;;;16300:12;16313:1;16300:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16354:22:18;;;;;;;:15;:22;;;;;;;;:25;;;;;;;;;16388:8;;16354:25;;-1:-1:-1;16354:25:18;-1:-1:-1;16400:38:18;;16388:8;;:50;;;;;;;;;16384:493;;;16465:18;;;;-1:-1:-1;;;;;16465:18:18;:32;;16464:42;;16505:1;16464:42;;;16501:1;16464:42;16449:57;;;;16556:30;:24;16568:11;16556:1;:7;;;:11;;:24;;;;:::i;:::-;:28;:30::i;:::-;16552:1;:34;;-1:-1:-1;16607:29:18;:11;16552:34;16607:29;:15;:29;:::i;:::-;16642:8;;;:27;;;16592:44;-1:-1:-1;16384:493:18;;;16832:39;16848:10;:22;;;16832:11;;:39;:15;:39;:::i;:::-;16818:53;;16384:493;16284:3;;;;;16249:632;;;16906:1;16892:15;;16884:24;;;;;;16988:79;17011:55;17028:10;:37;;;17019:3;;17011:55;:16;:55;:::i;:::-;16988:11;;:79;:22;:79;:::i;:::-;16959:108;;17081:1;17077:5;;17072:703;17086:12;:19;17084:1;:21;17072:703;;;17123:12;17136:1;17123:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17147:22:18;;;;;;;:15;:22;;;;;;;;:25;;;;;;;;;:32;17119:19;;-1:-1:-1;17183:38:18;;17147:32;;:74;;;;;;;;;17143:628;;;-1:-1:-1;;;;;17290:22:18;;;;;;;:15;:22;;;;;;;;:25;;;;;;;;;:32;;;17257:79;;:18;;17324:11;17257:32;:79::i;:::-;17232:104;-1:-1:-1;17357:39:18;:11;17232:104;17357:39;:15;:39;:::i;:::-;17342:54;;17410:17;;;;;;;;;-1:-1:-1;;;;;17410:17:18;-1:-1:-1;;;;;17410:31:18;;17442:5;17449:1;17452:10;:22;;;17410:65;;;;;-1:-1:-1;;;17410:65:18;;;-1:-1:-1;;;;;17410:65:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17402:74;;;;;;;;17490:17;;;-1:-1:-1;;;;;17490:17:18;;:31;;17522:5;;17529:1;;17532:22;;17490:71;;;;;-1:-1:-1;;;17490:71:18;;;-1:-1:-1;;;;;17490:71:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17482:80;;;;;;;;17143:628;;;17677:17;;;;;;;;;-1:-1:-1;;;;;17677:17:18;-1:-1:-1;;;;;17677:30:18;;17708:5;17715:1;17718:10;:22;;;17742:4;17677:70;;;;;-1:-1:-1;;;17677:70:18;;;-1:-1:-1;;;;;17677:70:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17669:79;;;;;;;;17107:3;;;;;17072:703;;;17836:17;;-1:-1:-1;;;;;17836:17:18;:31;17868:5;17836:17;17875:26;;;17903:11;17916:5;17836:86;;;;;-1:-1:-1;;;17836:86:18;;;-1:-1:-1;;;;;17836:86:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17828:95;;;;;;;;-1:-1:-1;17935:4:18;;15911:2032;-1:-1:-1;;;;;;;;;;;;15911:2032:18:o;531:106:15:-;589:7;610:6;;;;603:14;;;;-1:-1:-1;628:5:15;;;531:106::o;405:123::-;463:7;489:5;;;505:6;;;;498:14;;;;523:1;516:8;;405:123;;;;;;:::o;640:162::-;698:7;;716:6;;712:32;;;738:1;731:8;;;;712:32;-1:-1:-1;759:5:15;;;763:1;759;:5;775;;;;;;;;:10;768:18;;;1388:114;1453:7;1474:24;1488:1;1491;1494:3;1474:13;:24::i;:::-;1467:31;1388:114;-1:-1:-1;;;1388:114:15:o;5879:386:18:-;5936:4;5947:10;6021:18;5960:23;5975:7;5960:14;:23::i;:::-;6042:9;6052:16;;5947:36;;-1:-1:-1;6042:9:18;6052:23;;6073:1;6052:23;:20;:23;:::i;:::-;6042:34;;;;;;;;;;;;;;;;;;6080:9;:25;;-1:-1:-1;;;;;6042:34:18;;;;-1:-1:-1;6042:34:18;;6094:5;;6080:25;;;;;;;;;;;;;;;;;;:38;;-1:-1:-1;;;;;;6080:38:18;-1:-1:-1;;;;;6080:38:18;;;;;;6122:25;;;;;:13;:25;;;;;;:33;;;6166:9;6176:16;;:23;;-1:-1:-1;6176:20:18;:23::i;:::-;6166:34;;;;;;;;;;;;;;;;;6159:41;;-1:-1:-1;;;;;;6159:41:18;;;6223:9;:16;:23;;-1:-1:-1;6223:20:18;:23::i;:::-;6204:42;:9;:42;;:::i;1604:1539:15:-;1704:1;1950:35;1907:19;1872:11;1841:7;1812:5;1784:4;1756;1728;-1:-1:-1;;1698:8:15;;1721:12;;;1715:19;1749:12;;;1743:19;1777:12;;;1771:19;1805:13;;;1799:20;1834:15;;;1828:22;1865:19;;;1859:26;1900:27;;;1894:34;1943:43;;;1937:50;1996:9;;-1:-1:-1;;2024:4:15;2018:11;2053:66;2040:1;2033:87;2144:66;2137:4;2135:1;2131:11;2124:87;2235:66;2228:4;2226:1;2222:11;2215:87;2326:66;2319:4;2317:1;2313:11;2306:87;2417:66;2410:4;2408:1;2404:11;2397:87;2508:66;2501:4;2499:1;2495:11;2488:87;2599:66;2592:4;2590:1;2586:11;2579:87;2690:66;2683:4;2681:1;2677:11;2670:87;2781:5;2778:1;2774:13;2768:4;2761:27;2805:64;2886:65;2983:5;2975;2972:1;2968:13;2964:25;3028:5;3022:1;3018:3;3014:10;3012:1;3008:17;3002:24;2998:36;2993:41;;3067:66;3062:3;3059:75;3054:3;3050:85;3047:1;3043:93;3038:98;;1672:1468;;;;;;;;:::o;1264:121::-;1343:7;1364:17;1368:9;1372:1;1375;1368:3;:9::i;:::-;1379:1;1364:3;:17::i;:::-;1357:24;1264:121;-1:-1:-1;;;;1264:121:15:o;805:257::-;863:7;949:9;965:1;961;:5;;;;;;;;;805:257;-1:-1:-1;;;;805:257:15:o;253:17693:18:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;", "source": "pragma solidity ^0.4.21;\n\nimport './OwnableOZ.sol';\nimport './IexecHubAccessor.sol';\nimport './MarketplaceAccessor.sol';\nimport './IexecHub.sol';\nimport \"./SafeMathOZ.sol\";\nimport \"./WorkOrder.sol\";\nimport \"./Marketplace.sol\";\nimport './IexecLib.sol';\n\ncontract WorkerPool is OwnableOZ, IexecHubAccessor, MarketplaceAccessor\n{\n\tusing SafeMathOZ for uint256;\n\n\n\t/**\n\t * Members\n\t */\n\tstring public m_description;\n\tuint256 public m_stakeRatioPolicy; // % of reward to stake\n\tuint256 public m_schedulerRewardRatioPolicy; // % of reward given to scheduler\n\tuint256 public m_subscriptionLockStakePolicy; // Stake locked when in workerpool - Constant set by constructor, do not update\n\tuint256 public m_subscriptionMinimumStakePolicy; // Minimum stake for subscribing\n\tuint256 public m_subscriptionMinimumScorePolicy; // Minimum score for subscribing\n\taddress[] public m_workers;\n\tmapping(address => uint256) public m_workerIndex;\n\n\t// mapping(woid => IexecLib.Consensus)\n\tmapping(address => IexecLib.Consensus) public m_consensus;\n\t// mapping(woid => worker address => Contribution);\n\tmapping(address => mapping(address => IexecLib.Contribution)) public m_contributions;\n\n\tuint256 public constant REVEAL_PERIOD_DURATION_RATIO = 2;\n\tuint256 public constant CONSENSUS_DURATION_RATIO = 10;\n\n\t/**\n\t * Address of slave/related contracts\n\t */\n\taddress public m_workerPoolHubAddress;\n\n\n\t/**\n\t * Events\n\t */\n\tevent WorkerPoolPolicyUpdate(\n\t\tuint256 oldStakeRatioPolicy, uint256 newStakeRatioPolicy,\n\t\tuint256 oldSchedulerRewardRatioPolicy, uint256 newSchedulerRewardRatioPolicy,\n\t\tuint256 oldSubscriptionMinimumStakePolicy, uint256 newSubscriptionMinimumStakePolicy,\n\t\tuint256 oldSubscriptionMinimumScorePolicy, uint256 newSubscriptionMinimumScorePolicy);\n\n\tevent WorkOrderActive (address indexed woid);\n\tevent WorkOrderClaimed (address indexed woid);\n\n\tevent AllowWorkerToContribute (address indexed woid, address indexed worker, uint256 workerScore);\n\tevent Contribute (address indexed woid, address indexed worker, bytes32 resultHash);\n\tevent RevealConsensus (address indexed woid, bytes32 consensus);\n\tevent Reveal (address indexed woid, address indexed worker, bytes32 result);\n\tevent Reopen (address indexed woid);\n event FinalizeWork (address indexed woid, string stdout, string stderr, string uri);\n\n\n\n\tevent WorkerSubscribe (address indexed worker);\n\tevent WorkerUnsubscribe (address indexed worker);\n\tevent WorkerEviction (address indexed worker);\n\n\t/**\n\t * Methods\n\t */\n\t// Constructor\n\tfunction WorkerPool(\n\t\taddress _iexecHubAddress,\n\t\tstring _description,\n\t\tuint256 _subscriptionLockStakePolicy,\n\t\tuint256 _subscriptionMinimumStakePolicy,\n\t\tuint256 _subscriptionMinimumScorePolicy,\n\t\taddress _marketplaceAddress)\n\tIexecHubAccessor(_iexecHubAddress)\n\tMarketplaceAccessor(_marketplaceAddress)\n\tpublic\n\t{\n\t\t// tx.origin == owner\n\t\t// msg.sender == WorkerPoolHub\n\t\trequire(tx.origin != msg.sender);\n\t\tsetImmutableOwnership(tx.origin); // owner → tx.origin\n\n\t\tm_description = _description;\n\t\tm_stakeRatioPolicy = 30; // % of the work order price to stake\n\t\tm_schedulerRewardRatioPolicy = 1; // % of the work reward going to scheduler vs workers reward\n\t\tm_subscriptionLockStakePolicy = _subscriptionLockStakePolicy; // only at creation. cannot be change to respect lock/unlock of worker stake\n\t\tm_subscriptionMinimumStakePolicy = _subscriptionMinimumStakePolicy;\n\t\tm_subscriptionMinimumScorePolicy = _subscriptionMinimumScorePolicy;\n\t\tm_workerPoolHubAddress = msg.sender;\n\n\t}\n\n\tfunction changeWorkerPoolPolicy(\n\t\tuint256 _newStakeRatioPolicy,\n\t\tuint256 _newSchedulerRewardRatioPolicy,\n\t\tuint256 _newSubscriptionMinimumStakePolicy,\n\t\tuint256 _newSubscriptionMinimumScorePolicy)\n\tpublic onlyOwner\n\t{\n\t\temit WorkerPoolPolicyUpdate(\n\t\t\tm_stakeRatioPolicy, _newStakeRatioPolicy,\n\t\t\tm_schedulerRewardRatioPolicy, _newSchedulerRewardRatioPolicy,\n\t\t\tm_subscriptionMinimumStakePolicy, _newSubscriptionMinimumStakePolicy,\n\t\t\tm_subscriptionMinimumScorePolicy, _newSubscriptionMinimumScorePolicy\n\t\t);\n\t\trequire(_newSchedulerRewardRatioPolicy <= 100);\n\t\tm_stakeRatioPolicy = _newStakeRatioPolicy;\n\t\tm_schedulerRewardRatioPolicy = _newSchedulerRewardRatioPolicy;\n\t\tm_subscriptionMinimumStakePolicy = _newSubscriptionMinimumStakePolicy;\n\t\tm_subscriptionMinimumScorePolicy = _newSubscriptionMinimumScorePolicy;\n\t}\n\n\t/************************* worker list management **************************/\n\tfunction getWorkerAddress(uint _index) public view returns (address)\n\t{\n\t\treturn m_workers[_index];\n\t}\n\tfunction getWorkerIndex(address _worker) public view returns (uint)\n\t{\n\t\tuint index = m_workerIndex[_worker];\n\t\trequire(m_workers[index] == _worker);\n\t\treturn index;\n\t}\n\tfunction getWorkersCount() public view returns (uint)\n\t{\n\t\treturn m_workers.length;\n\t}\n\n\tfunction subscribeToPool() public returns (bool)\n\t{\n\t\t// msg.sender = worker\n\t\trequire(iexecHubInterface.registerToPool(msg.sender));\n\t\tuint index = m_workers.push(msg.sender);\n\t\tm_workerIndex[msg.sender] = index.sub(1);\n\t\temit WorkerSubscribe(msg.sender);\n\t\treturn true;\n\t}\n\n\tfunction unsubscribeFromPool() public returns (bool)\n\t{\n\t\t// msg.sender = worker\n\t\trequire(iexecHubInterface.unregisterFromPool(msg.sender));\n\t\trequire(removeWorker(msg.sender));\n\t\temit WorkerUnsubscribe(msg.sender);\n\t\treturn true;\n\t}\n\n\tfunction evictWorker(address _worker) public onlyOwner returns (bool)\n\t{\n\t\t// msg.sender = scheduler\n\t\trequire(iexecHubInterface.evictWorker(_worker));\n\t\trequire(removeWorker(_worker));\n\t\temit WorkerEviction(_worker);\n\t\treturn true;\n\t}\n\n\tfunction removeWorker(address _worker) internal returns (bool)\n\t{\n\t\tuint index = getWorkerIndex(_worker); // fails if worker not registered\n\t\taddress lastWorker = m_workers[m_workers.length.sub(1)];\n\t\tm_workers [index ] = lastWorker;\n\t\tm_workerIndex[lastWorker] = index;\n\t\tdelete m_workers[m_workers.length.sub(1)];\n\t\tm_workers.length = m_workers.length.sub(1);\n\t\treturn true;\n\t}\n\n\tfunction getConsensusDetails(address _woid) public view returns (\n\t\tuint256 c_poolReward,\n\t\tuint256 c_stakeAmount,\n\t\tbytes32 c_consensus,\n\t\tuint256 c_revealDate,\n\t\tuint256 c_revealCounter,\n\t\tuint256 c_consensusTimeout,\n\t\tuint256 c_winnerCount,\n\t\taddress c_workerpoolOwner)\n\t{\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\treturn (\n\t\t\tconsensus.poolReward,\n\t\t\tconsensus.stakeAmount,\n\t\t\tconsensus.consensus,\n\t\t\tconsensus.revealDate,\n\t\t\tconsensus.revealCounter,\n\t\t\tconsensus.consensusTimeout,\n\t\t\tconsensus.winnerCount,\n\t\t\tconsensus.workerpoolOwner\n\t\t);\n\t}\n\n\tfunction getContributorsCount(address _woid) public view returns (uint256 contributorsCount)\n\t{\n\t\treturn m_consensus[_woid].contributors.length;\n\t}\n\n\tfunction getContributor(address _woid, uint256 index) public view returns (address contributor)\n\t{\n\t\treturn m_consensus[_woid].contributors[index];\n\t}\n\n\tfunction existingContribution(address _woid, address _worker) public view returns (bool contributionExist)\n\t{\n\t\treturn m_contributions[_woid][_worker].status != IexecLib.ContributionStatusEnum.UNSET;\n\t}\n\n\tfunction getContribution(address _woid, address _worker) public view returns\n\t(\n\t\tIexecLib.ContributionStatusEnum status,\n\t\tbytes32 resultHash,\n\t\tbytes32 resultSign,\n\t\taddress enclaveChallenge,\n\t\tuint256 score,\n\t\tuint256 weight)\n\t{\n\t\trequire(existingContribution(_woid, _worker)); // no silent value returned\n\t\tIexecLib.Contribution storage contribution = m_contributions[_woid][_worker];\n\t\treturn (\n\t\t\tcontribution.status,\n\t\t\tcontribution.resultHash,\n\t\t\tcontribution.resultSign,\n\t\t\tcontribution.enclaveChallenge,\n\t\t\tcontribution.score,\n\t\t\tcontribution.weight\n\t\t);\n\t}\n\n\n\t/**************************** Works management *****************************/\n\tfunction emitWorkOrder(address _woid, uint256 _marketorderIdx) public onlyIexecHub returns (bool)\n\t{\n\t\tuint256 catid = marketplaceInterface.getMarketOrderCategory(_marketorderIdx);\n\t\tuint256 timeout = iexecHubInterface.getCategoryWorkClockTimeRef(catid).mul(CONSENSUS_DURATION_RATIO).add(now);\n\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\tconsensus.poolReward = marketplaceInterface.getMarketOrderValue(_marketorderIdx);\n\t\tconsensus.workerpoolOwner = marketplaceInterface.getMarketOrderWorkerpoolOwner(_marketorderIdx);\n\t\tconsensus.stakeAmount = consensus.poolReward.percentage(m_stakeRatioPolicy);\n\t\tconsensus.consensusTimeout = timeout;\n\t\tconsensus.schedulerRewardRatioPolicy = m_schedulerRewardRatioPolicy;\n\n\t\temit WorkOrderActive(_woid);\n\n\t\treturn true;\n\t}\n\n\tfunction claimFailedConsensus(address _woid) public onlyIexecHub returns (bool)\n\t{\n\t IexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\trequire(now > consensus.consensusTimeout);\n\t\tuint256 i;\n\t\taddress w;\n\t\tfor (i = 0; i < consensus.contributors.length; ++i)\n\t\t{\n\t\t\tw = consensus.contributors[i];\n\t\t\tif (m_contributions[_woid][w].status != IexecLib.ContributionStatusEnum.AUTHORIZED)\n\t\t\t{\n\t\t\t\trequire(iexecHubInterface.unlockForWork(_woid, w, consensus.stakeAmount));\n\t\t\t}\n\t\t}\n\t\temit WorkOrderClaimed(_woid);\n\t\treturn true;\n\t}\n\n\tfunction allowWorkersToContribute(address _woid, address[] _workers, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool)\n\t{\n\t\tfor (uint i = 0; i < _workers.length; ++i)\n\t\t{\n\t\t\trequire(allowWorkerToContribute(_woid, _workers[i], _enclaveChallenge));\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction allowWorkerToContribute(address _woid, address _worker, address _enclaveChallenge) public onlyOwner /*onlySheduler*/ returns (bool)\n\t{\n\t\trequire(iexecHubInterface.isWoidRegistred(_woid));\n\t\trequire(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE);\n\t\tIexecLib.Contribution storage contribution = m_contributions[_woid][_worker];\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\trequire(now <= consensus.consensusTimeout);\n\n\t\taddress workerPool;\n\t\tuint256 workerScore;\n\t\t(workerPool, workerScore) = iexecHubInterface.getWorkerStatus(_worker); // workerPool, workerScore\n\t\trequire(workerPool == address(this));\n\n\t\trequire(contribution.status == IexecLib.ContributionStatusEnum.UNSET);\n\t\tcontribution.status = IexecLib.ContributionStatusEnum.AUTHORIZED;\n\t\tcontribution.enclaveChallenge = _enclaveChallenge;\n\n\t\temit AllowWorkerToContribute(_woid, _worker, workerScore);\n\t\treturn true;\n\t}\n\n\tfunction contribute(address _woid, bytes32 _resultHash, bytes32 _resultSign, uint8 _v, bytes32 _r, bytes32 _s) public returns (uint256 workerStake)\n\t{\n\t\trequire(iexecHubInterface.isWoidRegistred(_woid));\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\trequire(now <= consensus.consensusTimeout);\n\t\trequire(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.ACTIVE); // can't contribute on a claimed or completed workorder\n\t\tIexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender];\n\n\t\t// msg.sender = a worker\n\t\trequire(_resultHash != 0x0);\n\t\trequire(_resultSign != 0x0);\n\t\tif (contribution.enclaveChallenge != address(0))\n\t\t{\n\t\t\trequire(contribution.enclaveChallenge == ecrecover(keccak256(\"\\x19Ethereum Signed Message:\\n64\", _resultHash, _resultSign), _v, _r, _s));\n\t\t}\n\n\t\trequire(contribution.status == IexecLib.ContributionStatusEnum.AUTHORIZED);\n\t\tcontribution.status = IexecLib.ContributionStatusEnum.CONTRIBUTED;\n\t\tcontribution.resultHash = _resultHash;\n\t\tcontribution.resultSign = _resultSign;\n\t\tcontribution.score = iexecHubInterface.getWorkerScore(msg.sender);\n\t\tconsensus.contributors.push(msg.sender);\n\n\t\trequire(iexecHubInterface.lockForWork(_woid, msg.sender, consensus.stakeAmount));\n\t\temit Contribute(_woid, msg.sender, _resultHash);\n\t\treturn consensus.stakeAmount;\n\t}\n\n\tfunction revealConsensus(address _woid, bytes32 _consensus) public onlyOwner /*onlySheduler*/ returns (bool)\n\t{\n\t\trequire(iexecHubInterface.isWoidRegistred(_woid));\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\trequire(now <= consensus.consensusTimeout);\n\t\trequire(WorkOrder(_woid).startRevealingPhase());\n\n\t\tconsensus.winnerCount = 0;\n\t\tfor (uint256 i = 0; i 0); // you cannot revealConsensus if no worker has contributed to this hash\n\n\t\tconsensus.consensus = _consensus;\n\t\tconsensus.revealDate = iexecHubInterface.getCategoryWorkClockTimeRef(marketplaceInterface.getMarketOrderCategory(WorkOrder(_woid).m_marketorderIdx())).mul(REVEAL_PERIOD_DURATION_RATIO).add(now); // is it better to store th catid ?\n\t\temit RevealConsensus(_woid, _consensus);\n\t\treturn true;\n\t}\n\n\tfunction reveal(address _woid, bytes32 _result) public returns (bool)\n\t{\n\t\trequire(iexecHubInterface.isWoidRegistred(_woid));\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\trequire(now <= consensus.consensusTimeout);\n\t\tIexecLib.Contribution storage contribution = m_contributions[_woid][msg.sender];\n\n\t\trequire(WorkOrder(_woid).m_status() == IexecLib.WorkOrderStatusEnum.REVEALING );\n\t\trequire(consensus.revealDate > now );\n\t\trequire(contribution.status == IexecLib.ContributionStatusEnum.CONTRIBUTED);\n\t\trequire(contribution.resultHash == consensus.consensus );\n\t\trequire(contribution.resultHash == keccak256(_result ) );\n\t\trequire(contribution.resultSign == keccak256(_result ^ keccak256(msg.sender)) );\n\n\t\tcontribution.status = IexecLib.ContributionStatusEnum.PROVED;\n\t\tconsensus.revealCounter = consensus.revealCounter.add(1);\n\n\t\temit Reveal(_woid, msg.sender, _result);\n\t\treturn true;\n\t}\n\n\tfunction reopen(address _woid) public onlyOwner /*onlySheduler*/ returns (bool)\n\t{\n\t\trequire(iexecHubInterface.isWoidRegistred(_woid));\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\trequire(now <= consensus.consensusTimeout);\n\t\trequire(consensus.revealDate <= now && consensus.revealCounter == 0);\n\t\trequire(WorkOrder(_woid).reActivate());\n\n\t\tfor (uint256 i = 0; i < consensus.contributors.length; ++i)\n\t\t{\n\t\t\taddress w = consensus.contributors[i];\n\t\t\tif (m_contributions[_woid][w].resultHash == consensus.consensus)\n\t\t\t{\n\t\t\t\tm_contributions[_woid][w].status = IexecLib.ContributionStatusEnum.REJECTED;\n\t\t\t}\n\t\t}\n\t\t// Reset to status before revealConsensus. Must be after REJECTED traitement above because of consensus.consensus check\n\t\tconsensus.winnerCount = 0;\n\t\tconsensus.consensus = 0x0;\n\t\tconsensus.revealDate = 0;\n\t\temit Reopen(_woid);\n\t\treturn true;\n\t}\n\n\t// if sheduler never call finalized ? no incetive to do that. schedulermust be pay also at this time\n\tfunction finalizeWork(address _woid, string _stdout, string _stderr, string _uri) public onlyOwner /*onlySheduler*/ returns (bool)\n\t{\n\t\trequire(iexecHubInterface.isWoidRegistred(_woid));\n\t\tIexecLib.Consensus storage consensus = m_consensus[_woid];\n\t\trequire(now <= consensus.consensusTimeout);\n\t\trequire((consensus.revealDate <= now && consensus.revealCounter > 0) || (consensus.revealCounter == consensus.winnerCount)); // consensus.winnerCount never 0 at this step\n\n\t\t// add penalized to the call worker to contribution and they never contribute ?\n\t\trequire(distributeRewards(_woid, consensus));\n\n\t\trequire(iexecHubInterface.finalizeWorkOrder(_woid, _stdout, _stderr, _uri));\n\t\temit FinalizeWork(_woid,_stdout,_stderr,_uri);\n\t\treturn true;\n\t}\n\n\tfunction distributeRewards(address _woid, IexecLib.Consensus _consensus) internal returns (bool)\n\t{\n\t\tuint256 i;\n\t\taddress w;\n\t\tuint256 workerBonus;\n\t\tuint256 workerWeight;\n\t\tuint256 totalWeight;\n\t\tuint256 individualWorkerReward;\n\t\tuint256 totalReward = _consensus.poolReward;\n\t\taddress[] memory contributors = _consensus.contributors;\n\t\tfor (i = 0; i 0);\n\n\t\t// compute how much is going to the workers\n\t\tuint256 totalWorkersReward = totalReward.percentage(uint256(100).sub(_consensus.schedulerRewardRatioPolicy));\n\n\t\tfor (i = 0; i workerPool\n\tmapping(address => address) m_workerAffectation;\n\t// owner => index\n\tmapping(address => uint256) m_workerPoolCountByOwner;\n\t// owner => index => workerPool\n\tmapping(address => mapping(uint256 => address)) m_workerPoolByOwnerByIndex;\n\t// workerPool => owner // stored in the workerPool\n\t/* mapping(address => address) m_ownerByWorkerPool; */\n\tmapping(address => bool) m_workerPoolRegistered;\n\n\tmapping(uint256 => address) m_workerPoolByIndex;\n\tuint256 public m_totalWorkerPoolCount;\n\n\n\n\t/**\n\t * Constructor\n\t */\n\tfunction WorkerPoolHub() public\n\t{\n\t}\n\n\t/**\n\t * Methods\n\t */\n\tfunction isWorkerPoolRegistered(address _workerPool) public view returns (bool)\n\t{\n\t\treturn m_workerPoolRegistered[_workerPool];\n\t}\n\tfunction getWorkerPoolsCount(address _owner) public view returns (uint256)\n\t{\n\t\treturn m_workerPoolCountByOwner[_owner];\n\t}\n\tfunction getWorkerPool(address _owner, uint256 _index) public view returns (address)\n\t{\n\t\treturn m_workerPoolByOwnerByIndex[_owner][_index];\n\t}\n\tfunction getWorkerPoolByIndex(uint256 _index) public view returns (address)\n\t{\n\t\treturn m_workerPoolByIndex[_index];\n\t}\n\tfunction getWorkerAffectation(address _worker) public view returns (address workerPool)\n\t{\n\t\treturn m_workerAffectation[_worker];\n\t}\n\n\tfunction addWorkerPool(address _owner, address _workerPool) internal\n\t{\n\t\tuint id = m_workerPoolCountByOwner[_owner].add(1);\n\t\tm_totalWorkerPoolCount = m_totalWorkerPoolCount.add(1);\n\t\tm_workerPoolByIndex [m_totalWorkerPoolCount] = _workerPool;\n\t\tm_workerPoolCountByOwner [_owner] = id;\n\t\tm_workerPoolByOwnerByIndex[_owner][id] = _workerPool;\n\t\tm_workerPoolRegistered [_workerPool] = true;\n\t}\n\n\tfunction createWorkerPool(\n\t\tstring _description,\n\t\tuint256 _subscriptionLockStakePolicy,\n\t\tuint256 _subscriptionMinimumStakePolicy,\n\t\tuint256 _subscriptionMinimumScorePolicy,\n\t\taddress _marketplaceAddress)\n\texternal onlyOwner /*owner == IexecHub*/ returns (address createdWorkerPool)\n\t{\n\t\t// tx.origin == owner\n\t\t// msg.sender == IexecHub\n\t\t// At creating ownership is transfered to tx.origin\n\t\taddress newWorkerPool = new WorkerPool(\n\t\t\tmsg.sender, // iexecHubAddress\n\t\t\t_description,\n\t\t\t_subscriptionLockStakePolicy,\n\t\t\t_subscriptionMinimumStakePolicy,\n\t\t\t_subscriptionMinimumScorePolicy,\n\t\t\t_marketplaceAddress\n\t\t);\n\t\taddWorkerPool(tx.origin, newWorkerPool);\n\t\treturn newWorkerPool;\n\t}\n\n\tfunction registerWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool subscribed)\n\t{\n\t\t// you must have no cuurent affectation on others worker Pool\n\t\trequire(m_workerAffectation[_worker] == address(0));\n\t\tm_workerAffectation[_worker] = _workerPool;\n\t\treturn true;\n\t}\n\n\tfunction unregisterWorkerAffectation(address _workerPool, address _worker) public onlyOwner /*owner == IexecHub*/ returns (bool unsubscribed)\n\t{\n\t\trequire(m_workerAffectation[_worker] == _workerPool);\n\t\tm_workerAffectation[_worker] = address(0);\n\t\treturn true;\n\t}\n}\n", @@ -6468,6 +6468,30 @@ "version": "0.4.21+commit.dfe3193c.Emscripten.clang" }, "networks": { + "1": { + "events": { + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + } + }, + "links": {}, + "address": "0x897dc0cca9bb43f7601e477e721ef4dea4453f07", + "transactionHash": "0xd7c68a10d9c0666b2b10130808138c7fa113287b3b302c6af656753838bae29f" + }, "3": { "events": { "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { @@ -6542,5 +6566,5 @@ } }, "schemaVersion": "2.0.0", - "updatedAt": "2018-05-21T11:48:56.460Z" + "updatedAt": "2018-06-12T15:21:39.633Z" } diff --git a/package.json b/package.json index 07fd17f3..bbde6550 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "iexec-poco", - "version": "1.0.13", + "version": "1.0.14", "description": "", "main": "truffle.js", "scripts": { diff --git a/test/byFunctions/WorkerPool/emitWorkOrder.js b/test/byFunctions/WorkerPool/emitWorkOrder.js index 64ed3e30..2a03fdaa 100644 --- a/test/byFunctions/WorkerPool/emitWorkOrder.js +++ b/test/byFunctions/WorkerPool/emitWorkOrder.js @@ -295,11 +295,11 @@ contract('IexecHub', function(accounts) { from: iExecCloudUser, gas:constants.AMOUNT_GAS_PROVIDED }); - assert.strictEqual(getCategoryWorkClockTimeRefCall.toNumber(), 30, "check getCategoryWorkClockTimeRef for cat 1 =30 sec"); + assert.strictEqual(getCategoryWorkClockTimeRefCall.toNumber(), 300, "check getCategoryWorkClockTimeRef for cat 1 =300 sec"); - assert.strictEqual(timestamp+(getCategoryWorkClockTimeRefCall.toNumber()*10), timestamp+300, "consensusTimeout = blocktime + 30 *10"); + assert.strictEqual(timestamp+(getCategoryWorkClockTimeRefCall.toNumber()*10), timestamp+3000, "consensusTimeout = blocktime + 300 *10"); //console.log(timestamp+600); - assert.strictEqual(timestamp+(getCategoryWorkClockTimeRefCall.toNumber()*10), consensusTimeout.toNumber(), "consensusTimeout = blocktime + 30 *5"); + assert.strictEqual(timestamp+(getCategoryWorkClockTimeRefCall.toNumber()*10), consensusTimeout.toNumber(), "consensusTimeout = blocktime + 300 *5"); assert.strictEqual(winnerCount.toNumber(), 0, "check no winnerCount"); diff --git a/truffle-hdwallet.js b/truffle-hdwallet.js index c0d5ac88..aa1c91a0 100644 --- a/truffle-hdwallet.js +++ b/truffle-hdwallet.js @@ -196,7 +196,82 @@ module.exports = { network_id: "1", gas: 4400000, gasPrice: 22000000000, - },*/ + }, + Using network 'mainnet'. + + Running migration: 1_initial_migration.js + Deploying Migrations... + ... 0xa961d67e562c2252d195c1f2d99e37a68768f173fccbe65e36217acd04d1a8f8 + Migrations: 0x016dffb35cf40f8723417e5aa2c0bd7adb8a9a62 + Saving successful migration to network... + ... 0x0655be0e98854e2029fcbdbb2af6b40f20a1511537216f142a65d64c0463893a + Saving artifacts... + Running migration: 2_deploy_contracts.js + sleeping... + Deploying WorkerPoolHub... + ... 0xd7c68a10d9c0666b2b10130808138c7fa113287b3b302c6af656753838bae29f + WorkerPoolHub: 0x897dc0cca9bb43f7601e477e721ef4dea4453f07 + WorkerPoolHub deployed at address: 0x897dc0cca9bb43f7601e477e721ef4dea4453f07 + sleeping... + Deploying AppHub... + ... 0xfea5e3122cea6830157eb8c4b28319e62d65a64c53c4546160d31aadfb5d6ff6 + AppHub: 0xb4f226150bdc6cf901c15e4ed1caeda7ea5c512c + AppHub deployed at address: 0xb4f226150bdc6cf901c15e4ed1caeda7ea5c512c + sleeping... + Deploying DatasetHub... + ... 0x32e88b373ae05c173eb3d743879f98acbbccde8192a7056ce4a44e7a03cc2896 + DatasetHub: 0xd0bb45fd58e357c9b3a5e7a36a5c6b6b5d1cf9b2 + DatasetHub deployed at address: 0xd0bb45fd58e357c9b3a5e7a36a5c6b6b5d1cf9b2 + sleeping... + Deploying IexecHub... + ... 0x931349936f3b358dc84c873e30d76258cf67ac64c953d11335211234b5ceee43 + IexecHub: 0x0d5ef019ca4c5cc413ee892ced89d7107c5f424d + IexecHub deployed at address: 0x0d5ef019ca4c5cc413ee892ced89d7107c5f424d + sleeping... + ... 0xd4e5b2df39b43534823c9ab01f651dc8ffdd91bce4918405954972d8a64ba86e + setImmutableOwnership of WorkerPoolHub to IexecHub + sleeping... + ... 0xe895f549a93b68c9d8ff978b3312b67212d87470a68968b7c80563fdaa656508 + setImmutableOwnership of AppHub to IexecHub + sleeping... + ... 0x60b03139251d363495ba2601eda1f2d1ec71ed2f86b5db57ea925159ec4ededb + setImmutableOwnership of DatasetHub to IexecHub + sleeping... + Deploying Marketplace... + ... 0xc0c911f0899002e7216f2c99730813e30c4764988b3cb8fcbab0e625afec5f56 + Marketplace: 0xfb7703c74f14930f8871c34056d5db6693e5a00b + Marketplace deployed at address: 0xfb7703c74f14930f8871c34056d5db6693e5a00b + sleeping... + ... 0xb16e055845689dd5163487bc6cc0fa3763887c1351bc6fc19914ceb6e5a02a1d + attach Contracts to IexecHub done + sleeping... + ... 0xd14a326d01fabda89e64630f6da88ddb9048f1915ac31da905e64792bff18919 + setCategoriesCreator to 0xfDd76d2aFe65a4aB85943b6E0e1c22eDf4e8B548 + create category : 1 + sleeping... + ... 0xc384a4ec42139498873d7a241aa4f96d97a77d477bc5438f9d9216c8580a7cf9 + create category : 2 + sleeping... + ... 0xef1f2cec252e6857a4606e2b1d6c28cf2f5d77bd54c1810664bda3f04d22933b + create category : 3 + sleeping... + ... 0xad749e6a5ca9e80e01c90b5effbfd1b2f745e8e820ff68c43b0347b03dbc9395 + create category : 4 + sleeping... + ... 0x3bf7642f5d44ba762d3090d93d0d5ca62a9a41e3c87d399011b4a04dd499e4e6 + create category : 5 + sleeping... + ... 0x3f644cf27044f8ac76b1d3bbe469a5db98161bbffacdf58d36858c247137f424 + m_categoriesCount is now: 5 + Saving successful migration to network... + ... 0xa233c95039e3638a3a9933b4ec87c2e16cc3e4c5cb98a6155571180ec4a7d67b + Saving artifacts... + + + + + + */ }, solc: { optimizer: {