From 78f3db0f524d08122dfa39ffcff0bec5c28a6d0f Mon Sep 17 00:00:00 2001 From: Jialiang Date: Mon, 29 Jan 2018 14:40:41 +0000 Subject: [PATCH 1/3] Hw5 and Hw6 --- .../build/contracts/Migrations.json | 14 +- .../assignment/build/contracts/Ownable.json | 282 +-- .../assignment/build/contracts/Payroll.json | 1826 ++++++++--------- .../assignment/build/contracts/SafeMath.json | 510 ++--- Lesson5/assignment/README.md | 2 - 5 files changed, 1316 insertions(+), 1318 deletions(-) delete mode 100644 Lesson5/assignment/README.md diff --git a/Lesson4/assignment/build/contracts/Migrations.json b/Lesson4/assignment/build/contracts/Migrations.json index b8b38cc21..093c3ad53 100644 --- a/Lesson4/assignment/build/contracts/Migrations.json +++ b/Lesson4/assignment/build/contracts/Migrations.json @@ -64,15 +64,15 @@ "type": "constructor" } ], - "bytecode": "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102db8061005e6000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610224565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc61022a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024f565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610220578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b6102c65a03f1151561021c57600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ac57806001819055505b505600a165627a7a72305820f198d203409c86dbcabaf8118bfcc315f7331d573c53b2c8be67822e9b09e8dd0029", - "deployedBytecode": "0x606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610224565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc61022a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024f565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610220578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b6102c65a03f1151561021c57600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ac57806001819055505b505600a165627a7a72305820f198d203409c86dbcabaf8118bfcc315f7331d573c53b2c8be67822e9b09e8dd0029", + "bytecode": "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102db8061005e6000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610224565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc61022a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024f565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610220578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b6102c65a03f1151561021c57600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ac57806001819055505b505600a165627a7a723058203abbe0540146f1f3dfa77463ce86007ca8c0355c532dbdfd878ffe992b461f6d0029", + "deployedBytecode": "0x606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610224565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc61022a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024f565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610220578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b6102c65a03f1151561021c57600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ac57806001819055505b505600a165627a7a723058203abbe0540146f1f3dfa77463ce86007ca8c0355c532dbdfd878ffe992b461f6d0029", "sourceMap": "25:467:0:-;;;177:51;;;;;;;;213:10;205:5;;:18;;;;;;;;;;;;;;;;;;25:467;;;;;;", "deployedSourceMap": "25:467:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;332:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;73:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;232:96;;;;;;;;;;;;;;;;;;;;;;;;;;332:158;387:19;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;420:11;387:45;;438:8;:21;;;460:24;;438:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;142:26;332:158;;:::o;73:36::-;;;;:::o;49:20::-;;;;;;;;;;;;;:::o;232:96::-;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;314:9;287:24;:36;;;;142:26;232:96;:::o", "source": "pragma solidity ^0.4.4;\n\ncontract Migrations {\n address public owner;\n uint public last_completed_migration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n function Migrations() {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) restricted {\n last_completed_migration = completed;\n }\n\n function upgrade(address new_address) restricted {\n Migrations upgraded = Migrations(new_address);\n upgraded.setCompleted(last_completed_migration);\n }\n}\n", - "sourcePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/Migrations.sol", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/Migrations.sol", "ast": { "attributes": { - "absolutePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/Migrations.sol", + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/Migrations.sol", "exportedSymbols": { "Migrations": [ 56 @@ -220,7 +220,7 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 583, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, @@ -357,7 +357,7 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 583, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, @@ -817,5 +817,5 @@ }, "networks": {}, "schemaVersion": "1.0.1", - "updatedAt": "2018-01-26T17:43:47.551Z" + "updatedAt": "2018-01-29T04:05:56.611Z" } \ No newline at end of file diff --git a/Lesson4/assignment/build/contracts/Ownable.json b/Lesson4/assignment/build/contracts/Ownable.json index 493b467aa..732e3cef0 100644 --- a/Lesson4/assignment/build/contracts/Ownable.json +++ b/Lesson4/assignment/build/contracts/Ownable.json @@ -53,18 +53,18 @@ "type": "event" } ], - "bytecode": "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102858061005e6000396000f30060606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610051578063f2fde38b146100a6575b600080fd5b341561005c57600080fd5b6100646100df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100b157600080fd5b6100dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610104565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561015f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561019b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820263192a73b946d076f91c7de4e0299286c6c5413060727829faf542e8d87b58c0029", - "deployedBytecode": "0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610051578063f2fde38b146100a6575b600080fd5b341561005c57600080fd5b6100646100df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100b157600080fd5b6100dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610104565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561015f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561019b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820263192a73b946d076f91c7de4e0299286c6c5413060727829faf542e8d87b58c0029", - "sourceMap": "217:787:0:-;;;469:55;;;;;;;;509:10;501:5;;:18;;;;;;;;;;;;;;;;;;217:787;;;;;;", - "deployedSourceMap": "217:787:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20;;;;;;;;;;;;;:::o;832:169::-;653:5;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;928:1;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o", + "bytecode": "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102858061005e6000396000f30060606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610051578063f2fde38b146100a6575b600080fd5b341561005c57600080fd5b6100646100df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100b157600080fd5b6100dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610104565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561015f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561019b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820dfdb9edb464d0329bac2a5d1033bab1e45442a1c6daec27b7c0678469f704c4e0029", + "deployedBytecode": "0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610051578063f2fde38b146100a6575b600080fd5b341561005c57600080fd5b6100646100df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100b157600080fd5b6100dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610104565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561015f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561019b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820dfdb9edb464d0329bac2a5d1033bab1e45442a1c6daec27b7c0678469f704c4e0029", + "sourceMap": "217:787:1:-;;;469:55;;;;;;;;509:10;501:5;;:18;;;;;;;;;;;;;;;;;;217:787;;;;;;", + "deployedSourceMap": "217:787:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20;;;;;;;;;;;;;:::o;832:169::-;653:5;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;928:1;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o", "source": "pragma solidity ^0.4.18;\n\n\n/**\n * @title Ownable\n * @dev The Ownable contract has an owner address, and provides basic authorization control\n * functions, this simplifies the implementation of \"user permissions\".\n */\ncontract Ownable {\n address public owner;\n\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n\n /**\n * @dev The Ownable constructor sets the original `owner` of the contract to the sender\n * account.\n */\n function Ownable() public {\n owner = msg.sender;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(msg.sender == owner);\n _;\n }\n\n /**\n * @dev Allows the current owner to transfer control of the contract to a newOwner.\n * @param newOwner The address to transfer ownership to.\n */\n function transferOwnership(address newOwner) public onlyOwner {\n require(newOwner != address(0));\n OwnershipTransferred(owner, newOwner);\n owner = newOwner;\n }\n\n}", - "sourcePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/Ownable.sol", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/Ownable.sol", "ast": { "attributes": { - "absolutePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/Ownable.sol", + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/Ownable.sol", "exportedSymbols": { "Ownable": [ - 55 + 112 ] } }, @@ -78,9 +78,9 @@ ".18" ] }, - "id": 1, + "id": 58, "name": "PragmaDirective", - "src": "0:24:0" + "src": "0:24:1" }, { "attributes": { @@ -94,17 +94,17 @@ "documentation": "@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".", "fullyImplemented": true, "linearizedBaseContracts": [ - 55 + 112 ], "name": "Ownable", - "scope": 56 + "scope": 113 }, "children": [ { "attributes": { "constant": false, "name": "owner", - "scope": 55, + "scope": 112, "stateVariable": true, "storageLocation": "default", "type": "address", @@ -117,14 +117,14 @@ "name": "address", "type": "address" }, - "id": 2, + "id": 59, "name": "ElementaryTypeName", - "src": "238:7:0" + "src": "238:7:1" } ], - "id": 3, + "id": 60, "name": "VariableDeclaration", - "src": "238:20:0" + "src": "238:20:1" }, { "attributes": { @@ -139,7 +139,7 @@ "constant": false, "indexed": true, "name": "previousOwner", - "scope": 9, + "scope": 66, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -152,21 +152,21 @@ "name": "address", "type": "address" }, - "id": 4, + "id": 61, "name": "ElementaryTypeName", - "src": "291:7:0" + "src": "291:7:1" } ], - "id": 5, + "id": 62, "name": "VariableDeclaration", - "src": "291:29:0" + "src": "291:29:1" }, { "attributes": { "constant": false, "indexed": true, "name": "newOwner", - "scope": 9, + "scope": 66, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -179,24 +179,24 @@ "name": "address", "type": "address" }, - "id": 6, + "id": 63, "name": "ElementaryTypeName", - "src": "322:7:0" + "src": "322:7:1" } ], - "id": 7, + "id": 64, "name": "VariableDeclaration", - "src": "322:24:0" + "src": "322:24:1" } ], - "id": 8, + "id": 65, "name": "ParameterList", - "src": "290:57:0" + "src": "290:57:1" } ], - "id": 9, + "id": 66, "name": "EventDefinition", - "src": "264:84:0" + "src": "264:84:1" }, { "attributes": { @@ -208,7 +208,7 @@ ], "name": "Ownable", "payable": false, - "scope": 55, + "scope": 112, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -221,9 +221,9 @@ ] }, "children": [], - "id": 10, + "id": 67, "name": "ParameterList", - "src": "485:2:0" + "src": "485:2:1" }, { "attributes": { @@ -232,9 +232,9 @@ ] }, "children": [], - "id": 11, + "id": 68, "name": "ParameterList", - "src": "495:0:0" + "src": "495:0:1" }, { "children": [ @@ -257,13 +257,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 3, + "referencedDeclaration": 60, "type": "address", "value": "owner" }, - "id": 12, + "id": 69, "name": "Identifier", - "src": "501:5:0" + "src": "501:5:1" }, { "attributes": { @@ -283,38 +283,38 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 13, + "id": 70, "name": "Identifier", - "src": "509:3:0" + "src": "509:3:1" } ], - "id": 14, + "id": 71, "name": "MemberAccess", - "src": "509:10:0" + "src": "509:10:1" } ], - "id": 15, + "id": 72, "name": "Assignment", - "src": "501:18:0" + "src": "501:18:1" } ], - "id": 16, + "id": 73, "name": "ExpressionStatement", - "src": "501:18:0" + "src": "501:18:1" } ], - "id": 17, + "id": 74, "name": "Block", - "src": "495:29:0" + "src": "495:29:1" } ], - "id": 18, + "id": 75, "name": "FunctionDefinition", - "src": "469:55:0" + "src": "469:55:1" }, { "attributes": { @@ -329,9 +329,9 @@ ] }, "children": [], - "id": 19, + "id": 76, "name": "ParameterList", - "src": "622:2:0" + "src": "622:2:1" }, { "children": [ @@ -363,13 +363,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 530, + "referencedDeclaration": 587, "type": "function (bool) pure", "value": "require" }, - "id": 20, + "id": 77, "name": "Identifier", - "src": "631:7:0" + "src": "631:7:1" }, { "attributes": { @@ -404,18 +404,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 21, + "id": 78, "name": "Identifier", - "src": "639:3:0" + "src": "639:3:1" } ], - "id": 22, + "id": 79, "name": "MemberAccess", - "src": "639:10:0" + "src": "639:10:1" }, { "attributes": { @@ -423,43 +423,43 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 3, + "referencedDeclaration": 60, "type": "address", "value": "owner" }, - "id": 23, + "id": 80, "name": "Identifier", - "src": "653:5:0" + "src": "653:5:1" } ], - "id": 24, + "id": 81, "name": "BinaryOperation", - "src": "639:19:0" + "src": "639:19:1" } ], - "id": 25, + "id": 82, "name": "FunctionCall", - "src": "631:28:0" + "src": "631:28:1" } ], - "id": 26, + "id": 83, "name": "ExpressionStatement", - "src": "631:28:0" + "src": "631:28:1" }, { - "id": 27, + "id": 84, "name": "PlaceholderStatement", - "src": "665:1:0" + "src": "665:1:1" } ], - "id": 28, + "id": 85, "name": "Block", - "src": "625:46:0" + "src": "625:46:1" } ], - "id": 29, + "id": 86, "name": "ModifierDefinition", - "src": "604:67:0" + "src": "604:67:1" }, { "attributes": { @@ -468,7 +468,7 @@ "isConstructor": false, "name": "transferOwnership", "payable": false, - "scope": 55, + "scope": 112, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -480,7 +480,7 @@ "attributes": { "constant": false, "name": "newOwner", - "scope": 54, + "scope": 111, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -493,19 +493,19 @@ "name": "address", "type": "address" }, - "id": 30, + "id": 87, "name": "ElementaryTypeName", - "src": "859:7:0" + "src": "859:7:1" } ], - "id": 31, + "id": 88, "name": "VariableDeclaration", - "src": "859:16:0" + "src": "859:16:1" } ], - "id": 32, + "id": 89, "name": "ParameterList", - "src": "858:18:0" + "src": "858:18:1" }, { "attributes": { @@ -514,9 +514,9 @@ ] }, "children": [], - "id": 35, + "id": 92, "name": "ParameterList", - "src": "894:0:0" + "src": "894:0:1" }, { "attributes": { @@ -531,18 +531,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 29, + "referencedDeclaration": 86, "type": "modifier ()", "value": "onlyOwner" }, - "id": 33, + "id": 90, "name": "Identifier", - "src": "884:9:0" + "src": "884:9:1" } ], - "id": 34, + "id": 91, "name": "ModifierInvocation", - "src": "884:9:0" + "src": "884:9:1" }, { "children": [ @@ -574,13 +574,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 530, + "referencedDeclaration": 587, "type": "function (bool) pure", "value": "require" }, - "id": 36, + "id": 93, "name": "Identifier", - "src": "900:7:0" + "src": "900:7:1" }, { "attributes": { @@ -603,13 +603,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 31, + "referencedDeclaration": 88, "type": "address", "value": "newOwner" }, - "id": 37, + "id": 94, "name": "Identifier", - "src": "908:8:0" + "src": "908:8:1" }, { "attributes": { @@ -641,9 +641,9 @@ "type": "type(address)", "value": "address" }, - "id": 38, + "id": 95, "name": "ElementaryTypeNameExpression", - "src": "920:7:0" + "src": "920:7:1" }, { "attributes": { @@ -658,29 +658,29 @@ "type": "int_const 0", "value": "0" }, - "id": 39, + "id": 96, "name": "Literal", - "src": "928:1:0" + "src": "928:1:1" } ], - "id": 40, + "id": 97, "name": "FunctionCall", - "src": "920:10:0" + "src": "920:10:1" } ], - "id": 41, + "id": 98, "name": "BinaryOperation", - "src": "908:22:0" + "src": "908:22:1" } ], - "id": 42, + "id": 99, "name": "FunctionCall", - "src": "900:31:0" + "src": "900:31:1" } ], - "id": 43, + "id": 100, "name": "ExpressionStatement", - "src": "900:31:0" + "src": "900:31:1" }, { "children": [ @@ -714,13 +714,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 9, + "referencedDeclaration": 66, "type": "function (address,address)", "value": "OwnershipTransferred" }, - "id": 44, + "id": 101, "name": "Identifier", - "src": "937:20:0" + "src": "937:20:1" }, { "attributes": { @@ -728,13 +728,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 3, + "referencedDeclaration": 60, "type": "address", "value": "owner" }, - "id": 45, + "id": 102, "name": "Identifier", - "src": "958:5:0" + "src": "958:5:1" }, { "attributes": { @@ -742,23 +742,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 31, + "referencedDeclaration": 88, "type": "address", "value": "newOwner" }, - "id": 46, + "id": 103, "name": "Identifier", - "src": "965:8:0" + "src": "965:8:1" } ], - "id": 47, + "id": 104, "name": "FunctionCall", - "src": "937:37:0" + "src": "937:37:1" } ], - "id": 48, + "id": 105, "name": "ExpressionStatement", - "src": "937:37:0" + "src": "937:37:1" }, { "children": [ @@ -779,13 +779,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 3, + "referencedDeclaration": 60, "type": "address", "value": "owner" }, - "id": 49, + "id": 106, "name": "Identifier", - "src": "980:5:0" + "src": "980:5:1" }, { "attributes": { @@ -793,43 +793,43 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 31, + "referencedDeclaration": 88, "type": "address", "value": "newOwner" }, - "id": 50, + "id": 107, "name": "Identifier", - "src": "988:8:0" + "src": "988:8:1" } ], - "id": 51, + "id": 108, "name": "Assignment", - "src": "980:16:0" + "src": "980:16:1" } ], - "id": 52, + "id": 109, "name": "ExpressionStatement", - "src": "980:16:0" + "src": "980:16:1" } ], - "id": 53, + "id": 110, "name": "Block", - "src": "894:107:0" + "src": "894:107:1" } ], - "id": 54, + "id": 111, "name": "FunctionDefinition", - "src": "832:169:0" + "src": "832:169:1" } ], - "id": 55, + "id": 112, "name": "ContractDefinition", - "src": "217:787:0" + "src": "217:787:1" } ], - "id": 56, + "id": 113, "name": "SourceUnit", - "src": "0:1004:0" + "src": "0:1004:1" }, "compiler": { "name": "solc", @@ -837,5 +837,5 @@ }, "networks": {}, "schemaVersion": "1.0.1", - "updatedAt": "2018-01-26T20:54:31.138Z" + "updatedAt": "2018-01-29T04:05:56.613Z" } \ No newline at end of file diff --git a/Lesson4/assignment/build/contracts/Payroll.json b/Lesson4/assignment/build/contracts/Payroll.json index 40d4d52c0..3fb7f41b0 100644 --- a/Lesson4/assignment/build/contracts/Payroll.json +++ b/Lesson4/assignment/build/contracts/Payroll.json @@ -213,18 +213,18 @@ "type": "event" } ], - "bytecode": "0x60606040526000600155341561001457600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611449806100a46000396000f3006060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806323fed09e146100bf5780632e46eb1d146100ec5780634ec19512146101155780635e91d8ec1461013e5780638da5cb5b14610180578063a2f09dfa146101d5578063bc456c42146101f3578063cf41d6f81461024b578063d067894714610260578063d108177a146102e7578063e7fd9a1314610320578063f2fde38b14610362575b600080fd5b34156100ca57600080fd5b6100d261039b565b604051808215151515815260200191505060405180910390f35b34156100f757600080fd5b6100ff6103ac565b6040518082815260200191505060405180910390f35b341561012057600080fd5b6101286103b2565b6040518082815260200191505060405180910390f35b341561014957600080fd5b61017e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506103e5565b005b341561018b57600080fd5b6101936105ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd6105d3565b6040518082815260200191505060405180910390f35b34156101fe57600080fd5b610249600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061064e565b005b341561025657600080fd5b61025e6109b7565b005b341561026b57600080fd5b610297600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c39565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34156102f257600080fd5b61031e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c83565b005b341561032b57600080fd5b610360600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e4b565b005b341561036d57600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061107a565b005b6000806103a66103b2565b11905090565b60015481565b60006103e06001543073ffffffffffffffffffffffffffffffffffffffff16316111d090919063ffffffff16565b905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561044357600080fd5b826000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156104cc57600080fd5b6104d5846111eb565b6104f0670de0b6b3a7640000846113ab90919063ffffffff16565b915061055b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461054d846001546113e690919063ffffffff16565b61140490919063ffffffff16565b60018190555081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561063157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106aa57600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561073357600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107bb57600080fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055505050505050565b6000336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a4257600080fd5b610a98600a600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113e690919063ffffffff16565b91504282101515610aa557fe5b3073ffffffffffffffffffffffffffffffffffffffff1631600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411151515610b0a57fe5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501515610c3557600080fd5b5050565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cdf57600080fd5b806000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610d6857600080fd5b610d71826111eb565b610dc8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460015461140490919063ffffffff16565b600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea757600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f2f57600080fd5b6060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff168152602001610f72670de0b6b3a7640000856113ab90919063ffffffff16565b815260200142815250600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061106f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001546113e690919063ffffffff16565b600181905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561111257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082848115156111de57fe5b0490508091505092915050565b6000611299600a61128b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544203600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546113ab90919063ffffffff16565b6111d090919063ffffffff16565b9050803073ffffffffffffffffffffffffffffffffffffffff1631101515156112be57fe5b42600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156113a757600080fd5b5050565b60008060008414156113c057600091506113df565b82840290508284828115156113d157fe5b041415156113db57fe5b8091505b5092915050565b60008082840190508381101515156113fa57fe5b8091505092915050565b600082821115151561141257fe5b8183039050929150505600a165627a7a7230582072909421cc6f6366ff03aeb75ed4f35dbd725d54b92143d239fa47adebabf34b0029", - "deployedBytecode": "0x6060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806323fed09e146100bf5780632e46eb1d146100ec5780634ec19512146101155780635e91d8ec1461013e5780638da5cb5b14610180578063a2f09dfa146101d5578063bc456c42146101f3578063cf41d6f81461024b578063d067894714610260578063d108177a146102e7578063e7fd9a1314610320578063f2fde38b14610362575b600080fd5b34156100ca57600080fd5b6100d261039b565b604051808215151515815260200191505060405180910390f35b34156100f757600080fd5b6100ff6103ac565b6040518082815260200191505060405180910390f35b341561012057600080fd5b6101286103b2565b6040518082815260200191505060405180910390f35b341561014957600080fd5b61017e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506103e5565b005b341561018b57600080fd5b6101936105ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd6105d3565b6040518082815260200191505060405180910390f35b34156101fe57600080fd5b610249600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061064e565b005b341561025657600080fd5b61025e6109b7565b005b341561026b57600080fd5b610297600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c39565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34156102f257600080fd5b61031e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c83565b005b341561032b57600080fd5b610360600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e4b565b005b341561036d57600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061107a565b005b6000806103a66103b2565b11905090565b60015481565b60006103e06001543073ffffffffffffffffffffffffffffffffffffffff16316111d090919063ffffffff16565b905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561044357600080fd5b826000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156104cc57600080fd5b6104d5846111eb565b6104f0670de0b6b3a7640000846113ab90919063ffffffff16565b915061055b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461054d846001546113e690919063ffffffff16565b61140490919063ffffffff16565b60018190555081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561063157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106aa57600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561073357600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107bb57600080fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055505050505050565b6000336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a4257600080fd5b610a98600a600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113e690919063ffffffff16565b91504282101515610aa557fe5b3073ffffffffffffffffffffffffffffffffffffffff1631600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411151515610b0a57fe5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501515610c3557600080fd5b5050565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cdf57600080fd5b806000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610d6857600080fd5b610d71826111eb565b610dc8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460015461140490919063ffffffff16565b600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea757600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f2f57600080fd5b6060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff168152602001610f72670de0b6b3a7640000856113ab90919063ffffffff16565b815260200142815250600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061106f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001546113e690919063ffffffff16565b600181905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561111257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082848115156111de57fe5b0490508091505092915050565b6000611299600a61128b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544203600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546113ab90919063ffffffff16565b6111d090919063ffffffff16565b9050803073ffffffffffffffffffffffffffffffffffffffff1631101515156112be57fe5b42600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156113a757600080fd5b5050565b60008060008414156113c057600091506113df565b82840290508284828115156113d157fe5b041415156113db57fe5b8091505b5092915050565b60008082840190508381101515156113fa57fe5b8091505092915050565b600082821115151561141257fe5b8183039050929150505600a165627a7a7230582072909421cc6f6366ff03aeb75ed4f35dbd725d54b92143d239fa47adebabf34b0029", - "sourceMap": "113:2936:1:-;;;356:1;329:28;;770:54;;;;;;;;509:10:0;501:5;;:18;;;;;;;;;;;;;;;;;;807:10:1;799:5;;:18;;;;;;;;;;;;;;;;;;113:2936;;;;;;", - "deployedSourceMap": "113:2936:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;329:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2072:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1651:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1974:88:1;;;;;;;;;;;;;;;;;;;;;;;2764:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2272:352;;;;;;;;;;;;;;382:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1414:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:85:1;2211:4;2254:1;2234:17;:15;:17::i;:::-;:21;2227:28;;2177:85;:::o;329:28::-;;;;:::o;2072:95::-;2108:4;2131:29;2148:11;;2131:4;:12;;;:16;;:29;;;;:::i;:::-;2124:36;;2072:95;:::o;1651:313::-;1787:14;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1732:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;1753:24;1766:10;1753:12;:24::i;:::-;1804:19;1815:7;1804:6;:10;;:19;;;;:::i;:::-;1787:36;;1847:60;1878:9;:21;1888:10;1878:21;;;;;;;;;;;;;;;:28;;;1847:26;1863:9;1847:11;;:15;;:26;;;;:::i;:::-;:30;;:60;;;;:::i;:::-;1833:11;:74;;;;1948:9;1917;:21;1927:10;1917:21;;;;;;;;;;;;;;;:28;;:40;;;;629:1;1651:313;;;:::o;238:20:0:-;;;;;;;;;;;;;:::o;1974:88:1:-;2020:4;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;2043:4;:12;;;2036:19;;1974:88;:::o;2764:283::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;2859:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;2888:10;738:3;710:9;:21;720:10;710:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;702:40;;;;;;;;2934:9;:21;2944:10;2934:21;;;;;;;;;;;;;;;2910:9;:21;2920:10;2910:21;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2992:10;2965:9;:21;2975:10;2965:21;;;;;;;;;;;;;;;:24;;;:37;;;;;;;;;;;;;;;;;;3019:9;:21;3029:10;3019:21;;;;;;;;;;;;;;;;3012:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;542:1;629;2764:283;;:::o;2272:352::-;2326:15;2305:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;2344:49;313:10;2344:9;:21;2354:10;2344:21;;;;;;;;;;;;;;;:32;;;:36;;:49;;;;:::i;:::-;2326:67;;2423:3;2410:10;:16;2403:24;;;;;;2476:4;:12;;;2444:9;:21;2454:10;2444:21;;;;;;;;;;;;;;;:28;;;:44;;2437:52;;;;;;2534:10;2499:9;:21;2509:10;2499:21;;;;;;;;;;;;;;;:32;;:45;;;;2554:9;:21;2564:10;2554:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:33;;:63;2588:9;:21;2598:10;2588:21;;;;;;;;;;;;;;;:28;;;2554:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2272:352;;:::o;382:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1414:227::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1482:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;1503:24;1516:10;1503:12;:24::i;:::-;1551:45;1567:9;:21;1577:10;1567:21;;;;;;;;;;;;;;;:28;;;1551:11;;:15;;:45;;;;:::i;:::-;1537:11;:59;;;;1613:9;:21;1623:10;1613:21;;;;;;;;;;;;;;;;1606:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;629:1;1414:227;:::o;1156:248::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1237:10;738:3;710:9;:21;720:10;710:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;702:40;;;;;;;;1282:46;;;;;;;;;1291:10;1282:46;;;;;;1303:19;1314:7;1303:6;:10;;:19;;;;:::i;:::-;1282:46;;;;1324:3;1282:46;;;1258:9;:21;1268:10;1258:21;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1352:45;1368:9;:21;1378:10;1368:21;;;;;;;;;;;;;;;:28;;;1352:11;;:15;;:45;;;;:::i;:::-;1338:11;:59;;;;629:1;1156:248;;:::o;832:169:0:-;613:5:1;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;928:1:0;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o;458:265:2:-;516:7;605:9;621:1;617;:5;;;;;;;;605:17;;717:1;710:8;;458:265;;;;;:::o;834:312:1:-;894:12;909:89;313:10;909:72;948:9;:21;958:10;948:21;;;;;;;;;;;;;;;:32;;;942:3;:38;909:9;:21;919:10;909:21;;;;;;;;;;;;;;;:28;;;:32;;:72;;;;:::i;:::-;:76;;:89;;;;:::i;:::-;894:104;;1031:7;1015:4;:12;;;:23;;1008:31;;;;;;1084:3;1049:9;:21;1059:10;1049:21;;;;;;;;;;;;;;;:32;;:38;;;;1097:9;:21;1107:10;1097:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:33;;:42;1131:7;1097:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;834:312;;:::o;203:173:2:-;261:7;316:9;285:1;280;:6;276:35;;;303:1;296:8;;;;276:35;332:1;328;:5;316:17;;355:1;350;346;:5;;;;;;;;:10;339:18;;;;;;370:1;363:8;;203:173;;;;;;:::o;1008:129::-;1066:7;1081:9;1097:1;1093;:5;1081:17;;1116:1;1111;:6;;1104:14;;;;;;1131:1;1124:8;;1008:129;;;;;:::o;836:110::-;894:7;921:1;916;:6;;909:14;;;;;;940:1;936;:5;929:12;;836:110;;;;:::o", + "bytecode": "0x60606040526000600155341561001457600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611449806100a46000396000f3006060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806323fed09e146100bf5780632e46eb1d146100ec5780634ec19512146101155780635e91d8ec1461013e5780638da5cb5b14610180578063a2f09dfa146101d5578063bc456c42146101f3578063cf41d6f81461024b578063d067894714610260578063d108177a146102e7578063e7fd9a1314610320578063f2fde38b14610362575b600080fd5b34156100ca57600080fd5b6100d261039b565b604051808215151515815260200191505060405180910390f35b34156100f757600080fd5b6100ff6103ac565b6040518082815260200191505060405180910390f35b341561012057600080fd5b6101286103b2565b6040518082815260200191505060405180910390f35b341561014957600080fd5b61017e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506103e5565b005b341561018b57600080fd5b6101936105ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd6105d3565b6040518082815260200191505060405180910390f35b34156101fe57600080fd5b610249600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061064e565b005b341561025657600080fd5b61025e6109b7565b005b341561026b57600080fd5b610297600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c39565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34156102f257600080fd5b61031e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c83565b005b341561032b57600080fd5b610360600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e4b565b005b341561036d57600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061107a565b005b6000806103a66103b2565b11905090565b60015481565b60006103e06001543073ffffffffffffffffffffffffffffffffffffffff16316111d090919063ffffffff16565b905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561044357600080fd5b826000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156104cc57600080fd5b6104d5846111eb565b6104f0670de0b6b3a7640000846113ab90919063ffffffff16565b915061055b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461054d846001546113e690919063ffffffff16565b61140490919063ffffffff16565b60018190555081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561063157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106aa57600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561073357600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107bb57600080fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055505050505050565b6000336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a4257600080fd5b610a98600a600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113e690919063ffffffff16565b91504282101515610aa557fe5b3073ffffffffffffffffffffffffffffffffffffffff1631600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411151515610b0a57fe5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501515610c3557600080fd5b5050565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cdf57600080fd5b806000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610d6857600080fd5b610d71826111eb565b610dc8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460015461140490919063ffffffff16565b600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea757600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f2f57600080fd5b6060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff168152602001610f72670de0b6b3a7640000856113ab90919063ffffffff16565b815260200142815250600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061106f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001546113e690919063ffffffff16565b600181905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561111257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082848115156111de57fe5b0490508091505092915050565b6000611299600a61128b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544203600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546113ab90919063ffffffff16565b6111d090919063ffffffff16565b9050803073ffffffffffffffffffffffffffffffffffffffff1631101515156112be57fe5b42600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156113a757600080fd5b5050565b60008060008414156113c057600091506113df565b82840290508284828115156113d157fe5b041415156113db57fe5b8091505b5092915050565b60008082840190508381101515156113fa57fe5b8091505092915050565b600082821115151561141257fe5b8183039050929150505600a165627a7a7230582068de03c465a50a9c1715a08ea3d9fb6bca2468a8df566ac11464aa6cc781f9450029", + "deployedBytecode": "0x6060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806323fed09e146100bf5780632e46eb1d146100ec5780634ec19512146101155780635e91d8ec1461013e5780638da5cb5b14610180578063a2f09dfa146101d5578063bc456c42146101f3578063cf41d6f81461024b578063d067894714610260578063d108177a146102e7578063e7fd9a1314610320578063f2fde38b14610362575b600080fd5b34156100ca57600080fd5b6100d261039b565b604051808215151515815260200191505060405180910390f35b34156100f757600080fd5b6100ff6103ac565b6040518082815260200191505060405180910390f35b341561012057600080fd5b6101286103b2565b6040518082815260200191505060405180910390f35b341561014957600080fd5b61017e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506103e5565b005b341561018b57600080fd5b6101936105ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd6105d3565b6040518082815260200191505060405180910390f35b34156101fe57600080fd5b610249600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061064e565b005b341561025657600080fd5b61025e6109b7565b005b341561026b57600080fd5b610297600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c39565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34156102f257600080fd5b61031e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c83565b005b341561032b57600080fd5b610360600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e4b565b005b341561036d57600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061107a565b005b6000806103a66103b2565b11905090565b60015481565b60006103e06001543073ffffffffffffffffffffffffffffffffffffffff16316111d090919063ffffffff16565b905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561044357600080fd5b826000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156104cc57600080fd5b6104d5846111eb565b6104f0670de0b6b3a7640000846113ab90919063ffffffff16565b915061055b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461054d846001546113e690919063ffffffff16565b61140490919063ffffffff16565b60018190555081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561063157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106aa57600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561073357600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107bb57600080fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055505050505050565b6000336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a4257600080fd5b610a98600a600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113e690919063ffffffff16565b91504282101515610aa557fe5b3073ffffffffffffffffffffffffffffffffffffffff1631600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411151515610b0a57fe5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501515610c3557600080fd5b5050565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cdf57600080fd5b806000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610d6857600080fd5b610d71826111eb565b610dc8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460015461140490919063ffffffff16565b600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea757600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f2f57600080fd5b6060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff168152602001610f72670de0b6b3a7640000856113ab90919063ffffffff16565b815260200142815250600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061106f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001546113e690919063ffffffff16565b600181905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561111257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082848115156111de57fe5b0490508091505092915050565b6000611299600a61128b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544203600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546113ab90919063ffffffff16565b6111d090919063ffffffff16565b9050803073ffffffffffffffffffffffffffffffffffffffff1631101515156112be57fe5b42600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156113a757600080fd5b5050565b60008060008414156113c057600091506113df565b82840290508284828115156113d157fe5b041415156113db57fe5b8091505b5092915050565b60008082840190508381101515156113fa57fe5b8091505092915050565b600082821115151561141257fe5b8183039050929150505600a165627a7a7230582068de03c465a50a9c1715a08ea3d9fb6bca2468a8df566ac11464aa6cc781f9450029", + "sourceMap": "113:2936:2:-;;;356:1;329:28;;770:54;;;;;;;;509:10:1;501:5;;:18;;;;;;;;;;;;;;;;;;807:10:2;799:5;;:18;;;;;;;;;;;;;;;;;;113:2936;;;;;;", + "deployedSourceMap": "113:2936:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;329:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2072:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1651:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1974:88:2;;;;;;;;;;;;;;;;;;;;;;;2764:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2272:352;;;;;;;;;;;;;;382:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1414:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:85:2;2211:4;2254:1;2234:17;:15;:17::i;:::-;:21;2227:28;;2177:85;:::o;329:28::-;;;;:::o;2072:95::-;2108:4;2131:29;2148:11;;2131:4;:12;;;:16;;:29;;;;:::i;:::-;2124:36;;2072:95;:::o;1651:313::-;1787:14;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1732:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;1753:24;1766:10;1753:12;:24::i;:::-;1804:19;1815:7;1804:6;:10;;:19;;;;:::i;:::-;1787:36;;1847:60;1878:9;:21;1888:10;1878:21;;;;;;;;;;;;;;;:28;;;1847:26;1863:9;1847:11;;:15;;:26;;;;:::i;:::-;:30;;:60;;;;:::i;:::-;1833:11;:74;;;;1948:9;1917;:21;1927:10;1917:21;;;;;;;;;;;;;;;:28;;:40;;;;629:1;1651:313;;;:::o;238:20:1:-;;;;;;;;;;;;;:::o;1974:88:2:-;2020:4;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;2043:4;:12;;;2036:19;;1974:88;:::o;2764:283::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;2859:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;2888:10;738:3;710:9;:21;720:10;710:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;702:40;;;;;;;;2934:9;:21;2944:10;2934:21;;;;;;;;;;;;;;;2910:9;:21;2920:10;2910:21;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2992:10;2965:9;:21;2975:10;2965:21;;;;;;;;;;;;;;;:24;;;:37;;;;;;;;;;;;;;;;;;3019:9;:21;3029:10;3019:21;;;;;;;;;;;;;;;;3012:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;542:1;629;2764:283;;:::o;2272:352::-;2326:15;2305:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;2344:49;313:10;2344:9;:21;2354:10;2344:21;;;;;;;;;;;;;;;:32;;;:36;;:49;;;;:::i;:::-;2326:67;;2423:3;2410:10;:16;2403:24;;;;;;2476:4;:12;;;2444:9;:21;2454:10;2444:21;;;;;;;;;;;;;;;:28;;;:44;;2437:52;;;;;;2534:10;2499:9;:21;2509:10;2499:21;;;;;;;;;;;;;;;:32;;:45;;;;2554:9;:21;2564:10;2554:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:33;;:63;2588:9;:21;2598:10;2588:21;;;;;;;;;;;;;;;:28;;;2554:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2272:352;;:::o;382:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1414:227::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1482:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;1503:24;1516:10;1503:12;:24::i;:::-;1551:45;1567:9;:21;1577:10;1567:21;;;;;;;;;;;;;;;:28;;;1551:11;;:15;;:45;;;;:::i;:::-;1537:11;:59;;;;1613:9;:21;1623:10;1613:21;;;;;;;;;;;;;;;;1606:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;629:1;1414:227;:::o;1156:248::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1237:10;738:3;710:9;:21;720:10;710:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;702:40;;;;;;;;1282:46;;;;;;;;;1291:10;1282:46;;;;;;1303:19;1314:7;1303:6;:10;;:19;;;;:::i;:::-;1282:46;;;;1324:3;1282:46;;;1258:9;:21;1268:10;1258:21;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1352:45;1368:9;:21;1378:10;1368:21;;;;;;;;;;;;;;;:28;;;1352:11;;:15;;:45;;;;:::i;:::-;1338:11;:59;;;;629:1;1156:248;;:::o;832:169:1:-;613:5:2;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;928:1:1;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o;458:265:3:-;516:7;605:9;621:1;617;:5;;;;;;;;605:17;;717:1;710:8;;458:265;;;;;:::o;834:312:2:-;894:12;909:89;313:10;909:72;948:9;:21;958:10;948:21;;;;;;;;;;;;;;;:32;;;942:3;:38;909:9;:21;919:10;909:21;;;;;;;;;;;;;;;:28;;;:32;;:72;;;;:::i;:::-;:76;;:89;;;;:::i;:::-;894:104;;1031:7;1015:4;:12;;;:23;;1008:31;;;;;;1084:3;1049:9;:21;1059:10;1049:21;;;;;;;;;;;;;;;:32;;:38;;;;1097:9;:21;1107:10;1097:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:33;;:42;1131:7;1097:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;834:312;;:::o;203:173:3:-;261:7;316:9;285:1;280;:6;276:35;;;303:1;296:8;;;;276:35;332:1;328;:5;316:17;;355:1;350;346;:5;;;;;;;;:10;339:18;;;;;;370:1;363:8;;203:173;;;;;;:::o;1008:129::-;1066:7;1081:9;1097:1;1093;:5;1081:17;;1116:1;1111;:6;;1104:14;;;;;;1131:1;1124:8;;1008:129;;;;;:::o;836:110::-;894:7;921:1;916;:6;;909:14;;;;;;940:1;936;:5;929:12;;836:110;;;;:::o", "source": "/*作业请提交在这个目录下*/\npragma solidity ^0.4.14;\nimport './Ownable.sol';\nimport './SafeMath.sol';\n\ncontract Payroll is Ownable {\n \n using SafeMath for uint;\n \n struct Employee {\n address id;\n uint salary;\n uint lastPayday;\n }\n \n uint constant payDuration = 10 seconds;\n uint public totalSalary = 0;\n address owner;\n mapping (address => Employee) public employees;\n \n\n modifier employeeExist(address employeeId){\n require(employees[employeeId].id != 0x0);\n _;\n }\n \n modifier onlyOwner(){\n require(msg.sender == owner);\n _;\n }\n \n modifier employeeNotExist(address employeeId){\n require(employees[employeeId].id == 0x0);\n _;\n }\n \n function Payroll() {\n owner = msg.sender;\n }\n \n function _partialPaid(address employeeID) private {\n uint payment = employees[employeeID].salary.mul(now - employees[employeeID].lastPayday).div(payDuration);\n assert(this.balance >= payment);\n employees[employeeID].lastPayday = now;\n employees[employeeID].id.transfer(payment);\n }\n \n function addEmployee(address employeeId, uint salary) onlyOwner employeeNotExist(employeeId){\n employees[employeeId] = Employee(employeeId, salary.mul(1 ether), now);\n totalSalary = totalSalary.add(employees[employeeId].salary);\n }\n \n function removeEmployee(address employeeId) onlyOwner employeeExist(employeeId){\n _partialPaid(employeeId);\n totalSalary = totalSalary.sub(employees[employeeId].salary);\n delete employees[employeeId];\n }\n \n function updateEmployee(address employeeId, uint salary) onlyOwner employeeExist(employeeId){\n _partialPaid(employeeId);\n uint newSalary = salary.mul(1 ether);\n totalSalary = totalSalary.add(newSalary).sub(employees[employeeId].salary);\n employees[employeeId].salary = newSalary;\n }\n \n function addFund() payable onlyOwner returns (uint) {\n return this.balance;\n }\n \n function calculateRunway() returns (uint) {\n return this.balance.div(totalSalary);\n }\n \n function hasEnoughFund() returns (bool) {\n return calculateRunway() > 0;\n }\n \n function getPaid() employeeExist(msg.sender){\n uint nextPayday = employees[msg.sender].lastPayday.add(payDuration);\n assert(nextPayday < now);\n assert(employees[msg.sender].salary <= this.balance);\n employees[msg.sender].lastPayday = nextPayday;\n employees[msg.sender].id.transfer(employees[msg.sender].salary);\n }\n \n //增加 changePaymentAddress 函数,更改员工的薪水支付地址,思考一下能否使用modifier整合某个功能\n function changePaymentAddress (address oldAddress, address newAddress) onlyOwner employeeExist(oldAddress) employeeNotExist(newAddress) {\n employees[newAddress] = employees[oldAddress];\n employees[newAddress].id = newAddress;\n delete employees[oldAddress];\n }\n}", - "sourcePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/Payroll.sol", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/Payroll.sol", "ast": { "attributes": { - "absolutePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/Payroll.sol", + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/Payroll.sol", "exportedSymbols": { "Payroll": [ - 417 + 474 ] } }, @@ -238,54 +238,54 @@ ".14" ] }, - "id": 57, + "id": 114, "name": "PragmaDirective", - "src": "38:24:1" + "src": "38:24:2" }, { "attributes": { - "SourceUnit": 56, - "absolutePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/Ownable.sol", + "SourceUnit": 113, + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/Ownable.sol", "file": "./Ownable.sol", - "scope": 418, + "scope": 475, "symbolAliases": [ null ], "unitAlias": "" }, - "id": 58, + "id": 115, "name": "ImportDirective", - "src": "63:23:1" + "src": "63:23:2" }, { "attributes": { - "SourceUnit": 516, - "absolutePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/SafeMath.sol", + "SourceUnit": 573, + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/SafeMath.sol", "file": "./SafeMath.sol", - "scope": 418, + "scope": 475, "symbolAliases": [ null ], "unitAlias": "" }, - "id": 59, + "id": 116, "name": "ImportDirective", - "src": "87:24:1" + "src": "87:24:2" }, { "attributes": { "contractDependencies": [ - 55 + 112 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, "linearizedBaseContracts": [ - 417, - 55 + 474, + 112 ], "name": "Payroll", - "scope": 418 + "scope": 475 }, "children": [ { @@ -299,17 +299,17 @@ "attributes": { "contractScope": null, "name": "Ownable", - "referencedDeclaration": 55, + "referencedDeclaration": 112, "type": "contract Ownable" }, - "id": 60, + "id": 117, "name": "UserDefinedTypeName", - "src": "133:7:1" + "src": "133:7:2" } ], - "id": 61, + "id": 118, "name": "InheritanceSpecifier", - "src": "133:7:1" + "src": "133:7:2" }, { "children": [ @@ -317,32 +317,32 @@ "attributes": { "contractScope": null, "name": "SafeMath", - "referencedDeclaration": 515, + "referencedDeclaration": 572, "type": "library SafeMath" }, - "id": 62, + "id": 119, "name": "UserDefinedTypeName", - "src": "158:8:1" + "src": "158:8:2" }, { "attributes": { "name": "uint", "type": "uint256" }, - "id": 63, + "id": 120, "name": "ElementaryTypeName", - "src": "171:4:1" + "src": "171:4:2" } ], - "id": 64, + "id": 121, "name": "UsingForDirective", - "src": "152:24:1" + "src": "152:24:2" }, { "attributes": { "canonicalName": "Payroll.Employee", "name": "Employee", - "scope": 417, + "scope": 474, "visibility": "public" }, "children": [ @@ -350,7 +350,7 @@ "attributes": { "constant": false, "name": "id", - "scope": 71, + "scope": 128, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -363,20 +363,20 @@ "name": "address", "type": "address" }, - "id": 65, + "id": 122, "name": "ElementaryTypeName", - "src": "212:7:1" + "src": "212:7:2" } ], - "id": 66, + "id": 123, "name": "VariableDeclaration", - "src": "212:10:1" + "src": "212:10:2" }, { "attributes": { "constant": false, "name": "salary", - "scope": 71, + "scope": 128, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -389,20 +389,20 @@ "name": "uint", "type": "uint256" }, - "id": 67, + "id": 124, "name": "ElementaryTypeName", - "src": "232:4:1" + "src": "232:4:2" } ], - "id": 68, + "id": 125, "name": "VariableDeclaration", - "src": "232:11:1" + "src": "232:11:2" }, { "attributes": { "constant": false, "name": "lastPayday", - "scope": 71, + "scope": 128, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -415,25 +415,25 @@ "name": "uint", "type": "uint256" }, - "id": 69, + "id": 126, "name": "ElementaryTypeName", - "src": "253:4:1" + "src": "253:4:2" } ], - "id": 70, + "id": 127, "name": "VariableDeclaration", - "src": "253:15:1" + "src": "253:15:2" } ], - "id": 71, + "id": 128, "name": "StructDefinition", - "src": "186:89:1" + "src": "186:89:2" }, { "attributes": { "constant": true, "name": "payDuration", - "scope": 417, + "scope": 474, "stateVariable": true, "storageLocation": "default", "type": "uint256", @@ -445,9 +445,9 @@ "name": "uint", "type": "uint256" }, - "id": 72, + "id": 129, "name": "ElementaryTypeName", - "src": "285:4:1" + "src": "285:4:2" }, { "attributes": { @@ -462,20 +462,20 @@ "type": "int_const 10", "value": "10" }, - "id": 73, + "id": 130, "name": "Literal", - "src": "313:10:1" + "src": "313:10:2" } ], - "id": 74, + "id": 131, "name": "VariableDeclaration", - "src": "285:38:1" + "src": "285:38:2" }, { "attributes": { "constant": false, "name": "totalSalary", - "scope": 417, + "scope": 474, "stateVariable": true, "storageLocation": "default", "type": "uint256", @@ -487,9 +487,9 @@ "name": "uint", "type": "uint256" }, - "id": 75, + "id": 132, "name": "ElementaryTypeName", - "src": "329:4:1" + "src": "329:4:2" }, { "attributes": { @@ -504,20 +504,20 @@ "type": "int_const 0", "value": "0" }, - "id": 76, + "id": 133, "name": "Literal", - "src": "356:1:1" + "src": "356:1:2" } ], - "id": 77, + "id": 134, "name": "VariableDeclaration", - "src": "329:28:1" + "src": "329:28:2" }, { "attributes": { "constant": false, "name": "owner", - "scope": 417, + "scope": 474, "stateVariable": true, "storageLocation": "default", "type": "address", @@ -530,20 +530,20 @@ "name": "address", "type": "address" }, - "id": 78, + "id": 135, "name": "ElementaryTypeName", - "src": "363:7:1" + "src": "363:7:2" } ], - "id": 79, + "id": 136, "name": "VariableDeclaration", - "src": "363:13:1" + "src": "363:13:2" }, { "attributes": { "constant": false, "name": "employees", - "scope": 417, + "scope": 474, "stateVariable": true, "storageLocation": "default", "type": "mapping(address => struct Payroll.Employee storage ref)", @@ -561,30 +561,30 @@ "name": "address", "type": "address" }, - "id": 80, + "id": 137, "name": "ElementaryTypeName", - "src": "391:7:1" + "src": "391:7:2" }, { "attributes": { "contractScope": null, "name": "Employee", - "referencedDeclaration": 71, + "referencedDeclaration": 128, "type": "struct Payroll.Employee storage pointer" }, - "id": 81, + "id": 138, "name": "UserDefinedTypeName", - "src": "402:8:1" + "src": "402:8:2" } ], - "id": 82, + "id": 139, "name": "Mapping", - "src": "382:29:1" + "src": "382:29:2" } ], - "id": 83, + "id": 140, "name": "VariableDeclaration", - "src": "382:46:1" + "src": "382:46:2" }, { "attributes": { @@ -598,7 +598,7 @@ "attributes": { "constant": false, "name": "employeeId", - "scope": 98, + "scope": 155, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -611,19 +611,19 @@ "name": "address", "type": "address" }, - "id": 84, + "id": 141, "name": "ElementaryTypeName", - "src": "463:7:1" + "src": "463:7:2" } ], - "id": 85, + "id": 142, "name": "VariableDeclaration", - "src": "463:18:1" + "src": "463:18:2" } ], - "id": 86, + "id": 143, "name": "ParameterList", - "src": "462:20:1" + "src": "462:20:2" }, { "children": [ @@ -655,13 +655,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 530, + "referencedDeclaration": 587, "type": "function (bool) pure", "value": "require" }, - "id": 87, + "id": 144, "name": "Identifier", - "src": "492:7:1" + "src": "492:7:2" }, { "attributes": { @@ -686,7 +686,7 @@ "isPure": false, "lValueRequested": false, "member_name": "id", - "referencedDeclaration": 66, + "referencedDeclaration": 123, "type": "address" }, "children": [ @@ -706,13 +706,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 88, + "id": 145, "name": "Identifier", - "src": "500:9:1" + "src": "500:9:2" }, { "attributes": { @@ -720,23 +720,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 85, + "referencedDeclaration": 142, "type": "address", "value": "employeeId" }, - "id": 89, + "id": 146, "name": "Identifier", - "src": "510:10:1" + "src": "510:10:2" } ], - "id": 90, + "id": 147, "name": "IndexAccess", - "src": "500:21:1" + "src": "500:21:2" } ], - "id": 91, + "id": 148, "name": "MemberAccess", - "src": "500:24:1" + "src": "500:24:2" }, { "attributes": { @@ -751,39 +751,39 @@ "type": "int_const 0", "value": "0x0" }, - "id": 92, + "id": 149, "name": "Literal", - "src": "528:3:1" + "src": "528:3:2" } ], - "id": 93, + "id": 150, "name": "BinaryOperation", - "src": "500:31:1" + "src": "500:31:2" } ], - "id": 94, + "id": 151, "name": "FunctionCall", - "src": "492:40:1" + "src": "492:40:2" } ], - "id": 95, + "id": 152, "name": "ExpressionStatement", - "src": "492:40:1" + "src": "492:40:2" }, { - "id": 96, + "id": 153, "name": "PlaceholderStatement", - "src": "542:1:1" + "src": "542:1:2" } ], - "id": 97, + "id": 154, "name": "Block", - "src": "482:68:1" + "src": "482:68:2" } ], - "id": 98, + "id": 155, "name": "ModifierDefinition", - "src": "440:110:1" + "src": "440:110:2" }, { "attributes": { @@ -798,9 +798,9 @@ ] }, "children": [], - "id": 99, + "id": 156, "name": "ParameterList", - "src": "578:2:1" + "src": "578:2:2" }, { "children": [ @@ -832,13 +832,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 530, + "referencedDeclaration": 587, "type": "function (bool) pure", "value": "require" }, - "id": 100, + "id": 157, "name": "Identifier", - "src": "590:7:1" + "src": "590:7:2" }, { "attributes": { @@ -873,18 +873,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 101, + "id": 158, "name": "Identifier", - "src": "598:3:1" + "src": "598:3:2" } ], - "id": 102, + "id": 159, "name": "MemberAccess", - "src": "598:10:1" + "src": "598:10:2" }, { "attributes": { @@ -892,43 +892,43 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 79, + "referencedDeclaration": 136, "type": "address", "value": "owner" }, - "id": 103, + "id": 160, "name": "Identifier", - "src": "613:5:1" + "src": "613:5:2" } ], - "id": 104, + "id": 161, "name": "BinaryOperation", - "src": "598:20:1" + "src": "598:20:2" } ], - "id": 105, + "id": 162, "name": "FunctionCall", - "src": "590:29:1" + "src": "590:29:2" } ], - "id": 106, + "id": 163, "name": "ExpressionStatement", - "src": "590:29:1" + "src": "590:29:2" }, { - "id": 107, + "id": 164, "name": "PlaceholderStatement", - "src": "629:1:1" + "src": "629:1:2" } ], - "id": 108, + "id": 165, "name": "Block", - "src": "580:57:1" + "src": "580:57:2" } ], - "id": 109, + "id": 166, "name": "ModifierDefinition", - "src": "560:77:1" + "src": "560:77:2" }, { "attributes": { @@ -942,7 +942,7 @@ "attributes": { "constant": false, "name": "employeeId", - "scope": 124, + "scope": 181, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -955,19 +955,19 @@ "name": "address", "type": "address" }, - "id": 110, + "id": 167, "name": "ElementaryTypeName", - "src": "673:7:1" + "src": "673:7:2" } ], - "id": 111, + "id": 168, "name": "VariableDeclaration", - "src": "673:18:1" + "src": "673:18:2" } ], - "id": 112, + "id": 169, "name": "ParameterList", - "src": "672:20:1" + "src": "672:20:2" }, { "children": [ @@ -999,13 +999,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 530, + "referencedDeclaration": 587, "type": "function (bool) pure", "value": "require" }, - "id": 113, + "id": 170, "name": "Identifier", - "src": "702:7:1" + "src": "702:7:2" }, { "attributes": { @@ -1030,7 +1030,7 @@ "isPure": false, "lValueRequested": false, "member_name": "id", - "referencedDeclaration": 66, + "referencedDeclaration": 123, "type": "address" }, "children": [ @@ -1050,13 +1050,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 114, + "id": 171, "name": "Identifier", - "src": "710:9:1" + "src": "710:9:2" }, { "attributes": { @@ -1064,23 +1064,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 111, + "referencedDeclaration": 168, "type": "address", "value": "employeeId" }, - "id": 115, + "id": 172, "name": "Identifier", - "src": "720:10:1" + "src": "720:10:2" } ], - "id": 116, + "id": 173, "name": "IndexAccess", - "src": "710:21:1" + "src": "710:21:2" } ], - "id": 117, + "id": 174, "name": "MemberAccess", - "src": "710:24:1" + "src": "710:24:2" }, { "attributes": { @@ -1095,39 +1095,39 @@ "type": "int_const 0", "value": "0x0" }, - "id": 118, + "id": 175, "name": "Literal", - "src": "738:3:1" + "src": "738:3:2" } ], - "id": 119, + "id": 176, "name": "BinaryOperation", - "src": "710:31:1" + "src": "710:31:2" } ], - "id": 120, + "id": 177, "name": "FunctionCall", - "src": "702:40:1" + "src": "702:40:2" } ], - "id": 121, + "id": 178, "name": "ExpressionStatement", - "src": "702:40:1" + "src": "702:40:2" }, { - "id": 122, + "id": 179, "name": "PlaceholderStatement", - "src": "752:1:1" + "src": "752:1:2" } ], - "id": 123, + "id": 180, "name": "Block", - "src": "692:68:1" + "src": "692:68:2" } ], - "id": 124, + "id": 181, "name": "ModifierDefinition", - "src": "647:113:1" + "src": "647:113:2" }, { "attributes": { @@ -1139,7 +1139,7 @@ ], "name": "Payroll", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -1152,9 +1152,9 @@ ] }, "children": [], - "id": 125, + "id": 182, "name": "ParameterList", - "src": "786:2:1" + "src": "786:2:2" }, { "attributes": { @@ -1163,9 +1163,9 @@ ] }, "children": [], - "id": 126, + "id": 183, "name": "ParameterList", - "src": "789:0:1" + "src": "789:0:2" }, { "children": [ @@ -1188,13 +1188,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 79, + "referencedDeclaration": 136, "type": "address", "value": "owner" }, - "id": 127, + "id": 184, "name": "Identifier", - "src": "799:5:1" + "src": "799:5:2" }, { "attributes": { @@ -1214,38 +1214,38 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 128, + "id": 185, "name": "Identifier", - "src": "807:3:1" + "src": "807:3:2" } ], - "id": 129, + "id": 186, "name": "MemberAccess", - "src": "807:10:1" + "src": "807:10:2" } ], - "id": 130, + "id": 187, "name": "Assignment", - "src": "799:18:1" + "src": "799:18:2" } ], - "id": 131, + "id": 188, "name": "ExpressionStatement", - "src": "799:18:1" + "src": "799:18:2" } ], - "id": 132, + "id": 189, "name": "Block", - "src": "789:35:1" + "src": "789:35:2" } ], - "id": 133, + "id": 190, "name": "FunctionDefinition", - "src": "770:54:1" + "src": "770:54:2" }, { "attributes": { @@ -1257,7 +1257,7 @@ ], "name": "_partialPaid", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "private" @@ -1269,7 +1269,7 @@ "attributes": { "constant": false, "name": "employeeID", - "scope": 179, + "scope": 236, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -1282,19 +1282,19 @@ "name": "address", "type": "address" }, - "id": 134, + "id": 191, "name": "ElementaryTypeName", - "src": "856:7:1" + "src": "856:7:2" } ], - "id": 135, + "id": 192, "name": "VariableDeclaration", - "src": "856:18:1" + "src": "856:18:2" } ], - "id": 136, + "id": 193, "name": "ParameterList", - "src": "855:20:1" + "src": "855:20:2" }, { "attributes": { @@ -1303,16 +1303,16 @@ ] }, "children": [], - "id": 137, + "id": 194, "name": "ParameterList", - "src": "884:0:1" + "src": "884:0:2" }, { "children": [ { "attributes": { "assignments": [ - 139 + 196 ] }, "children": [ @@ -1320,7 +1320,7 @@ "attributes": { "constant": false, "name": "payment", - "scope": 179, + "scope": 236, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -1333,14 +1333,14 @@ "name": "uint", "type": "uint256" }, - "id": 138, + "id": 195, "name": "ElementaryTypeName", - "src": "894:4:1" + "src": "894:4:2" } ], - "id": 139, + "id": 196, "name": "VariableDeclaration", - "src": "894:12:1" + "src": "894:12:2" }, { "attributes": { @@ -1370,7 +1370,7 @@ "isPure": false, "lValueRequested": false, "member_name": "div", - "referencedDeclaration": 470, + "referencedDeclaration": 527, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -1402,7 +1402,7 @@ "isPure": false, "lValueRequested": false, "member_name": "mul", - "referencedDeclaration": 452, + "referencedDeclaration": 509, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -1414,7 +1414,7 @@ "isPure": false, "lValueRequested": false, "member_name": "salary", - "referencedDeclaration": 68, + "referencedDeclaration": 125, "type": "uint256" }, "children": [ @@ -1434,13 +1434,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 140, + "id": 197, "name": "Identifier", - "src": "909:9:1" + "src": "909:9:2" }, { "attributes": { @@ -1448,28 +1448,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 135, + "referencedDeclaration": 192, "type": "address", "value": "employeeID" }, - "id": 141, + "id": 198, "name": "Identifier", - "src": "919:10:1" + "src": "919:10:2" } ], - "id": 142, + "id": 199, "name": "IndexAccess", - "src": "909:21:1" + "src": "909:21:2" } ], - "id": 143, + "id": 200, "name": "MemberAccess", - "src": "909:28:1" + "src": "909:28:2" } ], - "id": 144, + "id": 201, "name": "MemberAccess", - "src": "909:32:1" + "src": "909:32:2" }, { "attributes": { @@ -1492,13 +1492,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 529, + "referencedDeclaration": 586, "type": "uint256", "value": "now" }, - "id": 145, + "id": 202, "name": "Identifier", - "src": "942:3:1" + "src": "942:3:2" }, { "attributes": { @@ -1508,7 +1508,7 @@ "isPure": false, "lValueRequested": false, "member_name": "lastPayday", - "referencedDeclaration": 70, + "referencedDeclaration": 127, "type": "uint256" }, "children": [ @@ -1528,13 +1528,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 146, + "id": 203, "name": "Identifier", - "src": "948:9:1" + "src": "948:9:2" }, { "attributes": { @@ -1542,38 +1542,38 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 135, + "referencedDeclaration": 192, "type": "address", "value": "employeeID" }, - "id": 147, + "id": 204, "name": "Identifier", - "src": "958:10:1" + "src": "958:10:2" } ], - "id": 148, + "id": 205, "name": "IndexAccess", - "src": "948:21:1" + "src": "948:21:2" } ], - "id": 149, + "id": 206, "name": "MemberAccess", - "src": "948:32:1" + "src": "948:32:2" } ], - "id": 150, + "id": 207, "name": "BinaryOperation", - "src": "942:38:1" + "src": "942:38:2" } ], - "id": 151, + "id": 208, "name": "FunctionCall", - "src": "909:72:1" + "src": "909:72:2" } ], - "id": 152, + "id": 209, "name": "MemberAccess", - "src": "909:76:1" + "src": "909:76:2" }, { "attributes": { @@ -1581,23 +1581,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 74, + "referencedDeclaration": 131, "type": "uint256", "value": "payDuration" }, - "id": 153, + "id": 210, "name": "Identifier", - "src": "986:11:1" + "src": "986:11:2" } ], - "id": 154, + "id": 211, "name": "FunctionCall", - "src": "909:89:1" + "src": "909:89:2" } ], - "id": 155, + "id": 212, "name": "VariableDeclarationStatement", - "src": "894:104:1" + "src": "894:104:2" }, { "children": [ @@ -1627,13 +1627,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 518, + "referencedDeclaration": 575, "type": "function (bool) pure", "value": "assert" }, - "id": 156, + "id": 213, "name": "Identifier", - "src": "1008:6:1" + "src": "1008:6:2" }, { "attributes": { @@ -1668,18 +1668,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 542, + "referencedDeclaration": 601, "type": "contract Payroll", "value": "this" }, - "id": 157, + "id": 214, "name": "Identifier", - "src": "1015:4:1" + "src": "1015:4:2" } ], - "id": 158, + "id": 215, "name": "MemberAccess", - "src": "1015:12:1" + "src": "1015:12:2" }, { "attributes": { @@ -1687,28 +1687,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 139, + "referencedDeclaration": 196, "type": "uint256", "value": "payment" }, - "id": 159, + "id": 216, "name": "Identifier", - "src": "1031:7:1" + "src": "1031:7:2" } ], - "id": 160, + "id": 217, "name": "BinaryOperation", - "src": "1015:23:1" + "src": "1015:23:2" } ], - "id": 161, + "id": 218, "name": "FunctionCall", - "src": "1008:31:1" + "src": "1008:31:2" } ], - "id": 162, + "id": 219, "name": "ExpressionStatement", - "src": "1008:31:1" + "src": "1008:31:2" }, { "children": [ @@ -1731,7 +1731,7 @@ "isPure": false, "lValueRequested": true, "member_name": "lastPayday", - "referencedDeclaration": 70, + "referencedDeclaration": 127, "type": "uint256" }, "children": [ @@ -1751,13 +1751,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 163, + "id": 220, "name": "Identifier", - "src": "1049:9:1" + "src": "1049:9:2" }, { "attributes": { @@ -1765,23 +1765,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 135, + "referencedDeclaration": 192, "type": "address", "value": "employeeID" }, - "id": 164, + "id": 221, "name": "Identifier", - "src": "1059:10:1" + "src": "1059:10:2" } ], - "id": 165, + "id": 222, "name": "IndexAccess", - "src": "1049:21:1" + "src": "1049:21:2" } ], - "id": 166, + "id": 223, "name": "MemberAccess", - "src": "1049:32:1" + "src": "1049:32:2" }, { "attributes": { @@ -1789,23 +1789,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 529, + "referencedDeclaration": 586, "type": "uint256", "value": "now" }, - "id": 167, + "id": 224, "name": "Identifier", - "src": "1084:3:1" + "src": "1084:3:2" } ], - "id": 168, + "id": 225, "name": "Assignment", - "src": "1049:38:1" + "src": "1049:38:2" } ], - "id": 169, + "id": 226, "name": "ExpressionStatement", - "src": "1049:38:1" + "src": "1049:38:2" }, { "children": [ @@ -1849,7 +1849,7 @@ "isPure": false, "lValueRequested": false, "member_name": "id", - "referencedDeclaration": 66, + "referencedDeclaration": 123, "type": "address" }, "children": [ @@ -1869,13 +1869,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 170, + "id": 227, "name": "Identifier", - "src": "1097:9:1" + "src": "1097:9:2" }, { "attributes": { @@ -1883,28 +1883,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 135, + "referencedDeclaration": 192, "type": "address", "value": "employeeID" }, - "id": 171, + "id": 228, "name": "Identifier", - "src": "1107:10:1" + "src": "1107:10:2" } ], - "id": 172, + "id": 229, "name": "IndexAccess", - "src": "1097:21:1" + "src": "1097:21:2" } ], - "id": 173, + "id": 230, "name": "MemberAccess", - "src": "1097:24:1" + "src": "1097:24:2" } ], - "id": 174, + "id": 231, "name": "MemberAccess", - "src": "1097:33:1" + "src": "1097:33:2" }, { "attributes": { @@ -1912,33 +1912,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 139, + "referencedDeclaration": 196, "type": "uint256", "value": "payment" }, - "id": 175, + "id": 232, "name": "Identifier", - "src": "1131:7:1" + "src": "1131:7:2" } ], - "id": 176, + "id": 233, "name": "FunctionCall", - "src": "1097:42:1" + "src": "1097:42:2" } ], - "id": 177, + "id": 234, "name": "ExpressionStatement", - "src": "1097:42:1" + "src": "1097:42:2" } ], - "id": 178, + "id": 235, "name": "Block", - "src": "884:262:1" + "src": "884:262:2" } ], - "id": 179, + "id": 236, "name": "FunctionDefinition", - "src": "834:312:1" + "src": "834:312:2" }, { "attributes": { @@ -1947,7 +1947,7 @@ "isConstructor": false, "name": "addEmployee", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -1959,7 +1959,7 @@ "attributes": { "constant": false, "name": "employeeId", - "scope": 215, + "scope": 272, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -1972,20 +1972,20 @@ "name": "address", "type": "address" }, - "id": 180, + "id": 237, "name": "ElementaryTypeName", - "src": "1177:7:1" + "src": "1177:7:2" } ], - "id": 181, + "id": 238, "name": "VariableDeclaration", - "src": "1177:18:1" + "src": "1177:18:2" }, { "attributes": { "constant": false, "name": "salary", - "scope": 215, + "scope": 272, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -1998,19 +1998,19 @@ "name": "uint", "type": "uint256" }, - "id": 182, + "id": 239, "name": "ElementaryTypeName", - "src": "1197:4:1" + "src": "1197:4:2" } ], - "id": 183, + "id": 240, "name": "VariableDeclaration", - "src": "1197:11:1" + "src": "1197:11:2" } ], - "id": 184, + "id": 241, "name": "ParameterList", - "src": "1176:33:1" + "src": "1176:33:2" }, { "attributes": { @@ -2019,9 +2019,9 @@ ] }, "children": [], - "id": 190, + "id": 247, "name": "ParameterList", - "src": "1248:0:1" + "src": "1248:0:2" }, { "attributes": { @@ -2036,18 +2036,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 109, + "referencedDeclaration": 166, "type": "modifier ()", "value": "onlyOwner" }, - "id": 185, + "id": 242, "name": "Identifier", - "src": "1210:9:1" + "src": "1210:9:2" } ], - "id": 186, + "id": 243, "name": "ModifierInvocation", - "src": "1210:9:1" + "src": "1210:9:2" }, { "children": [ @@ -2057,13 +2057,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 124, + "referencedDeclaration": 181, "type": "modifier (address)", "value": "employeeNotExist" }, - "id": 187, + "id": 244, "name": "Identifier", - "src": "1220:16:1" + "src": "1220:16:2" }, { "attributes": { @@ -2071,18 +2071,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 181, + "referencedDeclaration": 238, "type": "address", "value": "employeeId" }, - "id": 188, + "id": 245, "name": "Identifier", - "src": "1237:10:1" + "src": "1237:10:2" } ], - "id": 189, + "id": 246, "name": "ModifierInvocation", - "src": "1220:28:1" + "src": "1220:28:2" }, { "children": [ @@ -2115,13 +2115,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 191, + "id": 248, "name": "Identifier", - "src": "1258:9:1" + "src": "1258:9:2" }, { "attributes": { @@ -2129,18 +2129,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 181, + "referencedDeclaration": 238, "type": "address", "value": "employeeId" }, - "id": 192, + "id": 249, "name": "Identifier", - "src": "1268:10:1" + "src": "1268:10:2" } ], - "id": 193, + "id": 250, "name": "IndexAccess", - "src": "1258:21:1" + "src": "1258:21:2" }, { "attributes": { @@ -2176,13 +2176,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 71, + "referencedDeclaration": 128, "type": "type(struct Payroll.Employee storage pointer)", "value": "Employee" }, - "id": 194, + "id": 251, "name": "Identifier", - "src": "1282:8:1" + "src": "1282:8:2" }, { "attributes": { @@ -2190,13 +2190,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 181, + "referencedDeclaration": 238, "type": "address", "value": "employeeId" }, - "id": 195, + "id": 252, "name": "Identifier", - "src": "1291:10:1" + "src": "1291:10:2" }, { "attributes": { @@ -2226,7 +2226,7 @@ "isPure": false, "lValueRequested": false, "member_name": "mul", - "referencedDeclaration": 452, + "referencedDeclaration": 509, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -2236,18 +2236,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 183, + "referencedDeclaration": 240, "type": "uint256", "value": "salary" }, - "id": 196, + "id": 253, "name": "Identifier", - "src": "1303:6:1" + "src": "1303:6:2" } ], - "id": 197, + "id": 254, "name": "MemberAccess", - "src": "1303:10:1" + "src": "1303:10:2" }, { "attributes": { @@ -2262,14 +2262,14 @@ "type": "int_const 1000000000000000000", "value": "1" }, - "id": 198, + "id": 255, "name": "Literal", - "src": "1314:7:1" + "src": "1314:7:2" } ], - "id": 199, + "id": 256, "name": "FunctionCall", - "src": "1303:19:1" + "src": "1303:19:2" }, { "attributes": { @@ -2277,28 +2277,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 529, + "referencedDeclaration": 586, "type": "uint256", "value": "now" }, - "id": 200, + "id": 257, "name": "Identifier", - "src": "1324:3:1" + "src": "1324:3:2" } ], - "id": 201, + "id": 258, "name": "FunctionCall", - "src": "1282:46:1" + "src": "1282:46:2" } ], - "id": 202, + "id": 259, "name": "Assignment", - "src": "1258:70:1" + "src": "1258:70:2" } ], - "id": 203, + "id": 260, "name": "ExpressionStatement", - "src": "1258:70:1" + "src": "1258:70:2" }, { "children": [ @@ -2319,13 +2319,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 77, + "referencedDeclaration": 134, "type": "uint256", "value": "totalSalary" }, - "id": 204, + "id": 261, "name": "Identifier", - "src": "1338:11:1" + "src": "1338:11:2" }, { "attributes": { @@ -2355,7 +2355,7 @@ "isPure": false, "lValueRequested": false, "member_name": "add", - "referencedDeclaration": 514, + "referencedDeclaration": 571, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -2365,18 +2365,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 77, + "referencedDeclaration": 134, "type": "uint256", "value": "totalSalary" }, - "id": 205, + "id": 262, "name": "Identifier", - "src": "1352:11:1" + "src": "1352:11:2" } ], - "id": 206, + "id": 263, "name": "MemberAccess", - "src": "1352:15:1" + "src": "1352:15:2" }, { "attributes": { @@ -2386,7 +2386,7 @@ "isPure": false, "lValueRequested": false, "member_name": "salary", - "referencedDeclaration": 68, + "referencedDeclaration": 125, "type": "uint256" }, "children": [ @@ -2406,13 +2406,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 207, + "id": 264, "name": "Identifier", - "src": "1368:9:1" + "src": "1368:9:2" }, { "attributes": { @@ -2420,48 +2420,48 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 181, + "referencedDeclaration": 238, "type": "address", "value": "employeeId" }, - "id": 208, + "id": 265, "name": "Identifier", - "src": "1378:10:1" + "src": "1378:10:2" } ], - "id": 209, + "id": 266, "name": "IndexAccess", - "src": "1368:21:1" + "src": "1368:21:2" } ], - "id": 210, + "id": 267, "name": "MemberAccess", - "src": "1368:28:1" + "src": "1368:28:2" } ], - "id": 211, + "id": 268, "name": "FunctionCall", - "src": "1352:45:1" + "src": "1352:45:2" } ], - "id": 212, + "id": 269, "name": "Assignment", - "src": "1338:59:1" + "src": "1338:59:2" } ], - "id": 213, + "id": 270, "name": "ExpressionStatement", - "src": "1338:59:1" + "src": "1338:59:2" } ], - "id": 214, + "id": 271, "name": "Block", - "src": "1248:156:1" + "src": "1248:156:2" } ], - "id": 215, + "id": 272, "name": "FunctionDefinition", - "src": "1156:248:1" + "src": "1156:248:2" }, { "attributes": { @@ -2470,7 +2470,7 @@ "isConstructor": false, "name": "removeEmployee", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -2482,7 +2482,7 @@ "attributes": { "constant": false, "name": "employeeId", - "scope": 245, + "scope": 302, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -2495,19 +2495,19 @@ "name": "address", "type": "address" }, - "id": 216, + "id": 273, "name": "ElementaryTypeName", - "src": "1438:7:1" + "src": "1438:7:2" } ], - "id": 217, + "id": 274, "name": "VariableDeclaration", - "src": "1438:18:1" + "src": "1438:18:2" } ], - "id": 218, + "id": 275, "name": "ParameterList", - "src": "1437:20:1" + "src": "1437:20:2" }, { "attributes": { @@ -2516,9 +2516,9 @@ ] }, "children": [], - "id": 224, + "id": 281, "name": "ParameterList", - "src": "1493:0:1" + "src": "1493:0:2" }, { "attributes": { @@ -2533,18 +2533,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 109, + "referencedDeclaration": 166, "type": "modifier ()", "value": "onlyOwner" }, - "id": 219, + "id": 276, "name": "Identifier", - "src": "1458:9:1" + "src": "1458:9:2" } ], - "id": 220, + "id": 277, "name": "ModifierInvocation", - "src": "1458:9:1" + "src": "1458:9:2" }, { "children": [ @@ -2554,13 +2554,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 98, + "referencedDeclaration": 155, "type": "modifier (address)", "value": "employeeExist" }, - "id": 221, + "id": 278, "name": "Identifier", - "src": "1468:13:1" + "src": "1468:13:2" }, { "attributes": { @@ -2568,18 +2568,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 217, + "referencedDeclaration": 274, "type": "address", "value": "employeeId" }, - "id": 222, + "id": 279, "name": "Identifier", - "src": "1482:10:1" + "src": "1482:10:2" } ], - "id": 223, + "id": 280, "name": "ModifierInvocation", - "src": "1468:25:1" + "src": "1468:25:2" }, { "children": [ @@ -2611,13 +2611,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 179, + "referencedDeclaration": 236, "type": "function (address)", "value": "_partialPaid" }, - "id": 225, + "id": 282, "name": "Identifier", - "src": "1503:12:1" + "src": "1503:12:2" }, { "attributes": { @@ -2625,23 +2625,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 217, + "referencedDeclaration": 274, "type": "address", "value": "employeeId" }, - "id": 226, + "id": 283, "name": "Identifier", - "src": "1516:10:1" + "src": "1516:10:2" } ], - "id": 227, + "id": 284, "name": "FunctionCall", - "src": "1503:24:1" + "src": "1503:24:2" } ], - "id": 228, + "id": 285, "name": "ExpressionStatement", - "src": "1503:24:1" + "src": "1503:24:2" }, { "children": [ @@ -2662,13 +2662,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 77, + "referencedDeclaration": 134, "type": "uint256", "value": "totalSalary" }, - "id": 229, + "id": 286, "name": "Identifier", - "src": "1537:11:1" + "src": "1537:11:2" }, { "attributes": { @@ -2698,7 +2698,7 @@ "isPure": false, "lValueRequested": false, "member_name": "sub", - "referencedDeclaration": 490, + "referencedDeclaration": 547, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -2708,18 +2708,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 77, + "referencedDeclaration": 134, "type": "uint256", "value": "totalSalary" }, - "id": 230, + "id": 287, "name": "Identifier", - "src": "1551:11:1" + "src": "1551:11:2" } ], - "id": 231, + "id": 288, "name": "MemberAccess", - "src": "1551:15:1" + "src": "1551:15:2" }, { "attributes": { @@ -2729,7 +2729,7 @@ "isPure": false, "lValueRequested": false, "member_name": "salary", - "referencedDeclaration": 68, + "referencedDeclaration": 125, "type": "uint256" }, "children": [ @@ -2749,13 +2749,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 232, + "id": 289, "name": "Identifier", - "src": "1567:9:1" + "src": "1567:9:2" }, { "attributes": { @@ -2763,38 +2763,38 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 217, + "referencedDeclaration": 274, "type": "address", "value": "employeeId" }, - "id": 233, + "id": 290, "name": "Identifier", - "src": "1577:10:1" + "src": "1577:10:2" } ], - "id": 234, + "id": 291, "name": "IndexAccess", - "src": "1567:21:1" + "src": "1567:21:2" } ], - "id": 235, + "id": 292, "name": "MemberAccess", - "src": "1567:28:1" + "src": "1567:28:2" } ], - "id": 236, + "id": 293, "name": "FunctionCall", - "src": "1551:45:1" + "src": "1551:45:2" } ], - "id": 237, + "id": 294, "name": "Assignment", - "src": "1537:59:1" + "src": "1537:59:2" } ], - "id": 238, + "id": 295, "name": "ExpressionStatement", - "src": "1537:59:1" + "src": "1537:59:2" }, { "children": [ @@ -2826,13 +2826,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 239, + "id": 296, "name": "Identifier", - "src": "1613:9:1" + "src": "1613:9:2" }, { "attributes": { @@ -2840,38 +2840,38 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 217, + "referencedDeclaration": 274, "type": "address", "value": "employeeId" }, - "id": 240, + "id": 297, "name": "Identifier", - "src": "1623:10:1" + "src": "1623:10:2" } ], - "id": 241, + "id": 298, "name": "IndexAccess", - "src": "1613:21:1" + "src": "1613:21:2" } ], - "id": 242, + "id": 299, "name": "UnaryOperation", - "src": "1606:28:1" + "src": "1606:28:2" } ], - "id": 243, + "id": 300, "name": "ExpressionStatement", - "src": "1606:28:1" + "src": "1606:28:2" } ], - "id": 244, + "id": 301, "name": "Block", - "src": "1493:148:1" + "src": "1493:148:2" } ], - "id": 245, + "id": 302, "name": "FunctionDefinition", - "src": "1414:227:1" + "src": "1414:227:2" }, { "attributes": { @@ -2880,7 +2880,7 @@ "isConstructor": false, "name": "updateEmployee", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -2892,7 +2892,7 @@ "attributes": { "constant": false, "name": "employeeId", - "scope": 289, + "scope": 346, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -2905,20 +2905,20 @@ "name": "address", "type": "address" }, - "id": 246, + "id": 303, "name": "ElementaryTypeName", - "src": "1675:7:1" + "src": "1675:7:2" } ], - "id": 247, + "id": 304, "name": "VariableDeclaration", - "src": "1675:18:1" + "src": "1675:18:2" }, { "attributes": { "constant": false, "name": "salary", - "scope": 289, + "scope": 346, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -2931,19 +2931,19 @@ "name": "uint", "type": "uint256" }, - "id": 248, + "id": 305, "name": "ElementaryTypeName", - "src": "1695:4:1" + "src": "1695:4:2" } ], - "id": 249, + "id": 306, "name": "VariableDeclaration", - "src": "1695:11:1" + "src": "1695:11:2" } ], - "id": 250, + "id": 307, "name": "ParameterList", - "src": "1674:33:1" + "src": "1674:33:2" }, { "attributes": { @@ -2952,9 +2952,9 @@ ] }, "children": [], - "id": 256, + "id": 313, "name": "ParameterList", - "src": "1743:0:1" + "src": "1743:0:2" }, { "attributes": { @@ -2969,18 +2969,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 109, + "referencedDeclaration": 166, "type": "modifier ()", "value": "onlyOwner" }, - "id": 251, + "id": 308, "name": "Identifier", - "src": "1708:9:1" + "src": "1708:9:2" } ], - "id": 252, + "id": 309, "name": "ModifierInvocation", - "src": "1708:9:1" + "src": "1708:9:2" }, { "children": [ @@ -2990,13 +2990,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 98, + "referencedDeclaration": 155, "type": "modifier (address)", "value": "employeeExist" }, - "id": 253, + "id": 310, "name": "Identifier", - "src": "1718:13:1" + "src": "1718:13:2" }, { "attributes": { @@ -3004,18 +3004,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 247, + "referencedDeclaration": 304, "type": "address", "value": "employeeId" }, - "id": 254, + "id": 311, "name": "Identifier", - "src": "1732:10:1" + "src": "1732:10:2" } ], - "id": 255, + "id": 312, "name": "ModifierInvocation", - "src": "1718:25:1" + "src": "1718:25:2" }, { "children": [ @@ -3047,13 +3047,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 179, + "referencedDeclaration": 236, "type": "function (address)", "value": "_partialPaid" }, - "id": 257, + "id": 314, "name": "Identifier", - "src": "1753:12:1" + "src": "1753:12:2" }, { "attributes": { @@ -3061,28 +3061,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 247, + "referencedDeclaration": 304, "type": "address", "value": "employeeId" }, - "id": 258, + "id": 315, "name": "Identifier", - "src": "1766:10:1" + "src": "1766:10:2" } ], - "id": 259, + "id": 316, "name": "FunctionCall", - "src": "1753:24:1" + "src": "1753:24:2" } ], - "id": 260, + "id": 317, "name": "ExpressionStatement", - "src": "1753:24:1" + "src": "1753:24:2" }, { "attributes": { "assignments": [ - 262 + 319 ] }, "children": [ @@ -3090,7 +3090,7 @@ "attributes": { "constant": false, "name": "newSalary", - "scope": 289, + "scope": 346, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -3103,14 +3103,14 @@ "name": "uint", "type": "uint256" }, - "id": 261, + "id": 318, "name": "ElementaryTypeName", - "src": "1787:4:1" + "src": "1787:4:2" } ], - "id": 262, + "id": 319, "name": "VariableDeclaration", - "src": "1787:14:1" + "src": "1787:14:2" }, { "attributes": { @@ -3140,7 +3140,7 @@ "isPure": false, "lValueRequested": false, "member_name": "mul", - "referencedDeclaration": 452, + "referencedDeclaration": 509, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -3150,18 +3150,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 249, + "referencedDeclaration": 306, "type": "uint256", "value": "salary" }, - "id": 263, + "id": 320, "name": "Identifier", - "src": "1804:6:1" + "src": "1804:6:2" } ], - "id": 264, + "id": 321, "name": "MemberAccess", - "src": "1804:10:1" + "src": "1804:10:2" }, { "attributes": { @@ -3176,19 +3176,19 @@ "type": "int_const 1000000000000000000", "value": "1" }, - "id": 265, + "id": 322, "name": "Literal", - "src": "1815:7:1" + "src": "1815:7:2" } ], - "id": 266, + "id": 323, "name": "FunctionCall", - "src": "1804:19:1" + "src": "1804:19:2" } ], - "id": 267, + "id": 324, "name": "VariableDeclarationStatement", - "src": "1787:36:1" + "src": "1787:36:2" }, { "children": [ @@ -3209,13 +3209,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 77, + "referencedDeclaration": 134, "type": "uint256", "value": "totalSalary" }, - "id": 268, + "id": 325, "name": "Identifier", - "src": "1833:11:1" + "src": "1833:11:2" }, { "attributes": { @@ -3245,7 +3245,7 @@ "isPure": false, "lValueRequested": false, "member_name": "sub", - "referencedDeclaration": 490, + "referencedDeclaration": 547, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -3277,7 +3277,7 @@ "isPure": false, "lValueRequested": false, "member_name": "add", - "referencedDeclaration": 514, + "referencedDeclaration": 571, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -3287,18 +3287,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 77, + "referencedDeclaration": 134, "type": "uint256", "value": "totalSalary" }, - "id": 269, + "id": 326, "name": "Identifier", - "src": "1847:11:1" + "src": "1847:11:2" } ], - "id": 270, + "id": 327, "name": "MemberAccess", - "src": "1847:15:1" + "src": "1847:15:2" }, { "attributes": { @@ -3306,23 +3306,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 262, + "referencedDeclaration": 319, "type": "uint256", "value": "newSalary" }, - "id": 271, + "id": 328, "name": "Identifier", - "src": "1863:9:1" + "src": "1863:9:2" } ], - "id": 272, + "id": 329, "name": "FunctionCall", - "src": "1847:26:1" + "src": "1847:26:2" } ], - "id": 273, + "id": 330, "name": "MemberAccess", - "src": "1847:30:1" + "src": "1847:30:2" }, { "attributes": { @@ -3332,7 +3332,7 @@ "isPure": false, "lValueRequested": false, "member_name": "salary", - "referencedDeclaration": 68, + "referencedDeclaration": 125, "type": "uint256" }, "children": [ @@ -3352,13 +3352,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 274, + "id": 331, "name": "Identifier", - "src": "1878:9:1" + "src": "1878:9:2" }, { "attributes": { @@ -3366,38 +3366,38 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 247, + "referencedDeclaration": 304, "type": "address", "value": "employeeId" }, - "id": 275, + "id": 332, "name": "Identifier", - "src": "1888:10:1" + "src": "1888:10:2" } ], - "id": 276, + "id": 333, "name": "IndexAccess", - "src": "1878:21:1" + "src": "1878:21:2" } ], - "id": 277, + "id": 334, "name": "MemberAccess", - "src": "1878:28:1" + "src": "1878:28:2" } ], - "id": 278, + "id": 335, "name": "FunctionCall", - "src": "1847:60:1" + "src": "1847:60:2" } ], - "id": 279, + "id": 336, "name": "Assignment", - "src": "1833:74:1" + "src": "1833:74:2" } ], - "id": 280, + "id": 337, "name": "ExpressionStatement", - "src": "1833:74:1" + "src": "1833:74:2" }, { "children": [ @@ -3420,7 +3420,7 @@ "isPure": false, "lValueRequested": true, "member_name": "salary", - "referencedDeclaration": 68, + "referencedDeclaration": 125, "type": "uint256" }, "children": [ @@ -3440,13 +3440,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 281, + "id": 338, "name": "Identifier", - "src": "1917:9:1" + "src": "1917:9:2" }, { "attributes": { @@ -3454,23 +3454,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 247, + "referencedDeclaration": 304, "type": "address", "value": "employeeId" }, - "id": 282, + "id": 339, "name": "Identifier", - "src": "1927:10:1" + "src": "1927:10:2" } ], - "id": 283, + "id": 340, "name": "IndexAccess", - "src": "1917:21:1" + "src": "1917:21:2" } ], - "id": 284, + "id": 341, "name": "MemberAccess", - "src": "1917:28:1" + "src": "1917:28:2" }, { "attributes": { @@ -3478,33 +3478,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 262, + "referencedDeclaration": 319, "type": "uint256", "value": "newSalary" }, - "id": 285, + "id": 342, "name": "Identifier", - "src": "1948:9:1" + "src": "1948:9:2" } ], - "id": 286, + "id": 343, "name": "Assignment", - "src": "1917:40:1" + "src": "1917:40:2" } ], - "id": 287, + "id": 344, "name": "ExpressionStatement", - "src": "1917:40:1" + "src": "1917:40:2" } ], - "id": 288, + "id": 345, "name": "Block", - "src": "1743:221:1" + "src": "1743:221:2" } ], - "id": 289, + "id": 346, "name": "FunctionDefinition", - "src": "1651:313:1" + "src": "1651:313:2" }, { "attributes": { @@ -3513,7 +3513,7 @@ "isConstructor": false, "name": "addFund", "payable": true, - "scope": 417, + "scope": 474, "stateMutability": "payable", "superFunction": null, "visibility": "public" @@ -3526,9 +3526,9 @@ ] }, "children": [], - "id": 290, + "id": 347, "name": "ParameterList", - "src": "1990:2:1" + "src": "1990:2:2" }, { "children": [ @@ -3536,7 +3536,7 @@ "attributes": { "constant": false, "name": "", - "scope": 300, + "scope": 357, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -3549,19 +3549,19 @@ "name": "uint", "type": "uint256" }, - "id": 293, + "id": 350, "name": "ElementaryTypeName", - "src": "2020:4:1" + "src": "2020:4:2" } ], - "id": 294, + "id": 351, "name": "VariableDeclaration", - "src": "2020:4:1" + "src": "2020:4:2" } ], - "id": 295, + "id": 352, "name": "ParameterList", - "src": "2019:6:1" + "src": "2019:6:2" }, { "attributes": { @@ -3576,24 +3576,24 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 109, + "referencedDeclaration": 166, "type": "modifier ()", "value": "onlyOwner" }, - "id": 291, + "id": 348, "name": "Identifier", - "src": "2001:9:1" + "src": "2001:9:2" } ], - "id": 292, + "id": 349, "name": "ModifierInvocation", - "src": "2001:9:1" + "src": "2001:9:2" }, { "children": [ { "attributes": { - "functionReturnParameters": 295 + "functionReturnParameters": 352 }, "children": [ { @@ -3614,33 +3614,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 542, + "referencedDeclaration": 601, "type": "contract Payroll", "value": "this" }, - "id": 296, + "id": 353, "name": "Identifier", - "src": "2043:4:1" + "src": "2043:4:2" } ], - "id": 297, + "id": 354, "name": "MemberAccess", - "src": "2043:12:1" + "src": "2043:12:2" } ], - "id": 298, + "id": 355, "name": "Return", - "src": "2036:19:1" + "src": "2036:19:2" } ], - "id": 299, + "id": 356, "name": "Block", - "src": "2026:36:1" + "src": "2026:36:2" } ], - "id": 300, + "id": 357, "name": "FunctionDefinition", - "src": "1974:88:1" + "src": "1974:88:2" }, { "attributes": { @@ -3652,7 +3652,7 @@ ], "name": "calculateRunway", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -3665,9 +3665,9 @@ ] }, "children": [], - "id": 301, + "id": 358, "name": "ParameterList", - "src": "2096:2:1" + "src": "2096:2:2" }, { "children": [ @@ -3675,7 +3675,7 @@ "attributes": { "constant": false, "name": "", - "scope": 312, + "scope": 369, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -3688,25 +3688,25 @@ "name": "uint", "type": "uint256" }, - "id": 302, + "id": 359, "name": "ElementaryTypeName", - "src": "2108:4:1" + "src": "2108:4:2" } ], - "id": 303, + "id": 360, "name": "VariableDeclaration", - "src": "2108:4:1" + "src": "2108:4:2" } ], - "id": 304, + "id": 361, "name": "ParameterList", - "src": "2107:6:1" + "src": "2107:6:2" }, { "children": [ { "attributes": { - "functionReturnParameters": 304 + "functionReturnParameters": 361 }, "children": [ { @@ -3737,7 +3737,7 @@ "isPure": false, "lValueRequested": false, "member_name": "div", - "referencedDeclaration": 470, + "referencedDeclaration": 527, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -3759,23 +3759,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 542, + "referencedDeclaration": 601, "type": "contract Payroll", "value": "this" }, - "id": 305, + "id": 362, "name": "Identifier", - "src": "2131:4:1" + "src": "2131:4:2" } ], - "id": 306, + "id": 363, "name": "MemberAccess", - "src": "2131:12:1" + "src": "2131:12:2" } ], - "id": 307, + "id": 364, "name": "MemberAccess", - "src": "2131:16:1" + "src": "2131:16:2" }, { "attributes": { @@ -3783,33 +3783,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 77, + "referencedDeclaration": 134, "type": "uint256", "value": "totalSalary" }, - "id": 308, + "id": 365, "name": "Identifier", - "src": "2148:11:1" + "src": "2148:11:2" } ], - "id": 309, + "id": 366, "name": "FunctionCall", - "src": "2131:29:1" + "src": "2131:29:2" } ], - "id": 310, + "id": 367, "name": "Return", - "src": "2124:36:1" + "src": "2124:36:2" } ], - "id": 311, + "id": 368, "name": "Block", - "src": "2114:53:1" + "src": "2114:53:2" } ], - "id": 312, + "id": 369, "name": "FunctionDefinition", - "src": "2072:95:1" + "src": "2072:95:2" }, { "attributes": { @@ -3821,7 +3821,7 @@ ], "name": "hasEnoughFund", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -3834,9 +3834,9 @@ ] }, "children": [], - "id": 313, + "id": 370, "name": "ParameterList", - "src": "2199:2:1" + "src": "2199:2:2" }, { "children": [ @@ -3844,7 +3844,7 @@ "attributes": { "constant": false, "name": "", - "scope": 323, + "scope": 380, "stateVariable": false, "storageLocation": "default", "type": "bool", @@ -3857,25 +3857,25 @@ "name": "bool", "type": "bool" }, - "id": 314, + "id": 371, "name": "ElementaryTypeName", - "src": "2211:4:1" + "src": "2211:4:2" } ], - "id": 315, + "id": 372, "name": "VariableDeclaration", - "src": "2211:4:1" + "src": "2211:4:2" } ], - "id": 316, + "id": 373, "name": "ParameterList", - "src": "2210:6:1" + "src": "2210:6:2" }, { "children": [ { "attributes": { - "functionReturnParameters": 316 + "functionReturnParameters": 373 }, "children": [ { @@ -3919,18 +3919,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 312, + "referencedDeclaration": 369, "type": "function () returns (uint256)", "value": "calculateRunway" }, - "id": 317, + "id": 374, "name": "Identifier", - "src": "2234:15:1" + "src": "2234:15:2" } ], - "id": 318, + "id": 375, "name": "FunctionCall", - "src": "2234:17:1" + "src": "2234:17:2" }, { "attributes": { @@ -3945,29 +3945,29 @@ "type": "int_const 0", "value": "0" }, - "id": 319, + "id": 376, "name": "Literal", - "src": "2254:1:1" + "src": "2254:1:2" } ], - "id": 320, + "id": 377, "name": "BinaryOperation", - "src": "2234:21:1" + "src": "2234:21:2" } ], - "id": 321, + "id": 378, "name": "Return", - "src": "2227:28:1" + "src": "2227:28:2" } ], - "id": 322, + "id": 379, "name": "Block", - "src": "2217:45:1" + "src": "2217:45:2" } ], - "id": 323, + "id": 380, "name": "FunctionDefinition", - "src": "2177:85:1" + "src": "2177:85:2" }, { "attributes": { @@ -3976,7 +3976,7 @@ "isConstructor": false, "name": "getPaid", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -3989,9 +3989,9 @@ ] }, "children": [], - "id": 324, + "id": 381, "name": "ParameterList", - "src": "2288:2:1" + "src": "2288:2:2" }, { "attributes": { @@ -4000,9 +4000,9 @@ ] }, "children": [], - "id": 329, + "id": 386, "name": "ParameterList", - "src": "2316:0:1" + "src": "2316:0:2" }, { "children": [ @@ -4012,13 +4012,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 98, + "referencedDeclaration": 155, "type": "modifier (address)", "value": "employeeExist" }, - "id": 325, + "id": 382, "name": "Identifier", - "src": "2291:13:1" + "src": "2291:13:2" }, { "attributes": { @@ -4038,30 +4038,30 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 326, + "id": 383, "name": "Identifier", - "src": "2305:3:1" + "src": "2305:3:2" } ], - "id": 327, + "id": 384, "name": "MemberAccess", - "src": "2305:10:1" + "src": "2305:10:2" } ], - "id": 328, + "id": 385, "name": "ModifierInvocation", - "src": "2291:25:1" + "src": "2291:25:2" }, { "children": [ { "attributes": { "assignments": [ - 331 + 388 ] }, "children": [ @@ -4069,7 +4069,7 @@ "attributes": { "constant": false, "name": "nextPayday", - "scope": 380, + "scope": 437, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -4082,14 +4082,14 @@ "name": "uint", "type": "uint256" }, - "id": 330, + "id": 387, "name": "ElementaryTypeName", - "src": "2326:4:1" + "src": "2326:4:2" } ], - "id": 331, + "id": 388, "name": "VariableDeclaration", - "src": "2326:15:1" + "src": "2326:15:2" }, { "attributes": { @@ -4119,7 +4119,7 @@ "isPure": false, "lValueRequested": false, "member_name": "add", - "referencedDeclaration": 514, + "referencedDeclaration": 571, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ @@ -4131,7 +4131,7 @@ "isPure": false, "lValueRequested": false, "member_name": "lastPayday", - "referencedDeclaration": 70, + "referencedDeclaration": 127, "type": "uint256" }, "children": [ @@ -4151,13 +4151,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 332, + "id": 389, "name": "Identifier", - "src": "2344:9:1" + "src": "2344:9:2" }, { "attributes": { @@ -4177,33 +4177,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 333, + "id": 390, "name": "Identifier", - "src": "2354:3:1" + "src": "2354:3:2" } ], - "id": 334, + "id": 391, "name": "MemberAccess", - "src": "2354:10:1" + "src": "2354:10:2" } ], - "id": 335, + "id": 392, "name": "IndexAccess", - "src": "2344:21:1" + "src": "2344:21:2" } ], - "id": 336, + "id": 393, "name": "MemberAccess", - "src": "2344:32:1" + "src": "2344:32:2" } ], - "id": 337, + "id": 394, "name": "MemberAccess", - "src": "2344:36:1" + "src": "2344:36:2" }, { "attributes": { @@ -4211,23 +4211,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 74, + "referencedDeclaration": 131, "type": "uint256", "value": "payDuration" }, - "id": 338, + "id": 395, "name": "Identifier", - "src": "2381:11:1" + "src": "2381:11:2" } ], - "id": 339, + "id": 396, "name": "FunctionCall", - "src": "2344:49:1" + "src": "2344:49:2" } ], - "id": 340, + "id": 397, "name": "VariableDeclarationStatement", - "src": "2326:67:1" + "src": "2326:67:2" }, { "children": [ @@ -4257,13 +4257,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 518, + "referencedDeclaration": 575, "type": "function (bool) pure", "value": "assert" }, - "id": 341, + "id": 398, "name": "Identifier", - "src": "2403:6:1" + "src": "2403:6:2" }, { "attributes": { @@ -4286,13 +4286,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 331, + "referencedDeclaration": 388, "type": "uint256", "value": "nextPayday" }, - "id": 342, + "id": 399, "name": "Identifier", - "src": "2410:10:1" + "src": "2410:10:2" }, { "attributes": { @@ -4300,28 +4300,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 529, + "referencedDeclaration": 586, "type": "uint256", "value": "now" }, - "id": 343, + "id": 400, "name": "Identifier", - "src": "2423:3:1" + "src": "2423:3:2" } ], - "id": 344, + "id": 401, "name": "BinaryOperation", - "src": "2410:16:1" + "src": "2410:16:2" } ], - "id": 345, + "id": 402, "name": "FunctionCall", - "src": "2403:24:1" + "src": "2403:24:2" } ], - "id": 346, + "id": 403, "name": "ExpressionStatement", - "src": "2403:24:1" + "src": "2403:24:2" }, { "children": [ @@ -4351,13 +4351,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 518, + "referencedDeclaration": 575, "type": "function (bool) pure", "value": "assert" }, - "id": 347, + "id": 404, "name": "Identifier", - "src": "2437:6:1" + "src": "2437:6:2" }, { "attributes": { @@ -4382,7 +4382,7 @@ "isPure": false, "lValueRequested": false, "member_name": "salary", - "referencedDeclaration": 68, + "referencedDeclaration": 125, "type": "uint256" }, "children": [ @@ -4402,13 +4402,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 348, + "id": 405, "name": "Identifier", - "src": "2444:9:1" + "src": "2444:9:2" }, { "attributes": { @@ -4428,28 +4428,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 349, + "id": 406, "name": "Identifier", - "src": "2454:3:1" + "src": "2454:3:2" } ], - "id": 350, + "id": 407, "name": "MemberAccess", - "src": "2454:10:1" + "src": "2454:10:2" } ], - "id": 351, + "id": 408, "name": "IndexAccess", - "src": "2444:21:1" + "src": "2444:21:2" } ], - "id": 352, + "id": 409, "name": "MemberAccess", - "src": "2444:28:1" + "src": "2444:28:2" }, { "attributes": { @@ -4469,33 +4469,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 542, + "referencedDeclaration": 601, "type": "contract Payroll", "value": "this" }, - "id": 353, + "id": 410, "name": "Identifier", - "src": "2476:4:1" + "src": "2476:4:2" } ], - "id": 354, + "id": 411, "name": "MemberAccess", - "src": "2476:12:1" + "src": "2476:12:2" } ], - "id": 355, + "id": 412, "name": "BinaryOperation", - "src": "2444:44:1" + "src": "2444:44:2" } ], - "id": 356, + "id": 413, "name": "FunctionCall", - "src": "2437:52:1" + "src": "2437:52:2" } ], - "id": 357, + "id": 414, "name": "ExpressionStatement", - "src": "2437:52:1" + "src": "2437:52:2" }, { "children": [ @@ -4518,7 +4518,7 @@ "isPure": false, "lValueRequested": true, "member_name": "lastPayday", - "referencedDeclaration": 70, + "referencedDeclaration": 127, "type": "uint256" }, "children": [ @@ -4538,13 +4538,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 358, + "id": 415, "name": "Identifier", - "src": "2499:9:1" + "src": "2499:9:2" }, { "attributes": { @@ -4564,28 +4564,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 359, + "id": 416, "name": "Identifier", - "src": "2509:3:1" + "src": "2509:3:2" } ], - "id": 360, + "id": 417, "name": "MemberAccess", - "src": "2509:10:1" + "src": "2509:10:2" } ], - "id": 361, + "id": 418, "name": "IndexAccess", - "src": "2499:21:1" + "src": "2499:21:2" } ], - "id": 362, + "id": 419, "name": "MemberAccess", - "src": "2499:32:1" + "src": "2499:32:2" }, { "attributes": { @@ -4593,23 +4593,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 331, + "referencedDeclaration": 388, "type": "uint256", "value": "nextPayday" }, - "id": 363, + "id": 420, "name": "Identifier", - "src": "2534:10:1" + "src": "2534:10:2" } ], - "id": 364, + "id": 421, "name": "Assignment", - "src": "2499:45:1" + "src": "2499:45:2" } ], - "id": 365, + "id": 422, "name": "ExpressionStatement", - "src": "2499:45:1" + "src": "2499:45:2" }, { "children": [ @@ -4653,7 +4653,7 @@ "isPure": false, "lValueRequested": false, "member_name": "id", - "referencedDeclaration": 66, + "referencedDeclaration": 123, "type": "address" }, "children": [ @@ -4673,13 +4673,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 366, + "id": 423, "name": "Identifier", - "src": "2554:9:1" + "src": "2554:9:2" }, { "attributes": { @@ -4699,33 +4699,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 367, + "id": 424, "name": "Identifier", - "src": "2564:3:1" + "src": "2564:3:2" } ], - "id": 368, + "id": 425, "name": "MemberAccess", - "src": "2564:10:1" + "src": "2564:10:2" } ], - "id": 369, + "id": 426, "name": "IndexAccess", - "src": "2554:21:1" + "src": "2554:21:2" } ], - "id": 370, + "id": 427, "name": "MemberAccess", - "src": "2554:24:1" + "src": "2554:24:2" } ], - "id": 371, + "id": 428, "name": "MemberAccess", - "src": "2554:33:1" + "src": "2554:33:2" }, { "attributes": { @@ -4735,7 +4735,7 @@ "isPure": false, "lValueRequested": false, "member_name": "salary", - "referencedDeclaration": 68, + "referencedDeclaration": 125, "type": "uint256" }, "children": [ @@ -4755,13 +4755,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 372, + "id": 429, "name": "Identifier", - "src": "2588:9:1" + "src": "2588:9:2" }, { "attributes": { @@ -4781,48 +4781,48 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 527, + "referencedDeclaration": 584, "type": "msg", "value": "msg" }, - "id": 373, + "id": 430, "name": "Identifier", - "src": "2598:3:1" + "src": "2598:3:2" } ], - "id": 374, + "id": 431, "name": "MemberAccess", - "src": "2598:10:1" + "src": "2598:10:2" } ], - "id": 375, + "id": 432, "name": "IndexAccess", - "src": "2588:21:1" + "src": "2588:21:2" } ], - "id": 376, + "id": 433, "name": "MemberAccess", - "src": "2588:28:1" + "src": "2588:28:2" } ], - "id": 377, + "id": 434, "name": "FunctionCall", - "src": "2554:63:1" + "src": "2554:63:2" } ], - "id": 378, + "id": 435, "name": "ExpressionStatement", - "src": "2554:63:1" + "src": "2554:63:2" } ], - "id": 379, + "id": 436, "name": "Block", - "src": "2316:308:1" + "src": "2316:308:2" } ], - "id": 380, + "id": 437, "name": "FunctionDefinition", - "src": "2272:352:1" + "src": "2272:352:2" }, { "attributes": { @@ -4831,7 +4831,7 @@ "isConstructor": false, "name": "changePaymentAddress", "payable": false, - "scope": 417, + "scope": 474, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" @@ -4843,7 +4843,7 @@ "attributes": { "constant": false, "name": "oldAddress", - "scope": 416, + "scope": 473, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -4856,20 +4856,20 @@ "name": "address", "type": "address" }, - "id": 381, + "id": 438, "name": "ElementaryTypeName", - "src": "2795:7:1" + "src": "2795:7:2" } ], - "id": 382, + "id": 439, "name": "VariableDeclaration", - "src": "2795:18:1" + "src": "2795:18:2" }, { "attributes": { "constant": false, "name": "newAddress", - "scope": 416, + "scope": 473, "stateVariable": false, "storageLocation": "default", "type": "address", @@ -4882,19 +4882,19 @@ "name": "address", "type": "address" }, - "id": 383, + "id": 440, "name": "ElementaryTypeName", - "src": "2815:7:1" + "src": "2815:7:2" } ], - "id": 384, + "id": 441, "name": "VariableDeclaration", - "src": "2815:18:1" + "src": "2815:18:2" } ], - "id": 385, + "id": 442, "name": "ParameterList", - "src": "2794:40:1" + "src": "2794:40:2" }, { "attributes": { @@ -4903,9 +4903,9 @@ ] }, "children": [], - "id": 394, + "id": 451, "name": "ParameterList", - "src": "2900:0:1" + "src": "2900:0:2" }, { "attributes": { @@ -4920,18 +4920,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 109, + "referencedDeclaration": 166, "type": "modifier ()", "value": "onlyOwner" }, - "id": 386, + "id": 443, "name": "Identifier", - "src": "2835:9:1" + "src": "2835:9:2" } ], - "id": 387, + "id": 444, "name": "ModifierInvocation", - "src": "2835:9:1" + "src": "2835:9:2" }, { "children": [ @@ -4941,13 +4941,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 98, + "referencedDeclaration": 155, "type": "modifier (address)", "value": "employeeExist" }, - "id": 388, + "id": 445, "name": "Identifier", - "src": "2845:13:1" + "src": "2845:13:2" }, { "attributes": { @@ -4955,18 +4955,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 382, + "referencedDeclaration": 439, "type": "address", "value": "oldAddress" }, - "id": 389, + "id": 446, "name": "Identifier", - "src": "2859:10:1" + "src": "2859:10:2" } ], - "id": 390, + "id": 447, "name": "ModifierInvocation", - "src": "2845:25:1" + "src": "2845:25:2" }, { "children": [ @@ -4976,13 +4976,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 124, + "referencedDeclaration": 181, "type": "modifier (address)", "value": "employeeNotExist" }, - "id": 391, + "id": 448, "name": "Identifier", - "src": "2871:16:1" + "src": "2871:16:2" }, { "attributes": { @@ -4990,18 +4990,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 384, + "referencedDeclaration": 441, "type": "address", "value": "newAddress" }, - "id": 392, + "id": 449, "name": "Identifier", - "src": "2888:10:1" + "src": "2888:10:2" } ], - "id": 393, + "id": 450, "name": "ModifierInvocation", - "src": "2871:28:1" + "src": "2871:28:2" }, { "children": [ @@ -5034,13 +5034,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 395, + "id": 452, "name": "Identifier", - "src": "2910:9:1" + "src": "2910:9:2" }, { "attributes": { @@ -5048,18 +5048,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 384, + "referencedDeclaration": 441, "type": "address", "value": "newAddress" }, - "id": 396, + "id": 453, "name": "Identifier", - "src": "2920:10:1" + "src": "2920:10:2" } ], - "id": 397, + "id": 454, "name": "IndexAccess", - "src": "2910:21:1" + "src": "2910:21:2" }, { "attributes": { @@ -5077,13 +5077,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 398, + "id": 455, "name": "Identifier", - "src": "2934:9:1" + "src": "2934:9:2" }, { "attributes": { @@ -5091,28 +5091,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 382, + "referencedDeclaration": 439, "type": "address", "value": "oldAddress" }, - "id": 399, + "id": 456, "name": "Identifier", - "src": "2944:10:1" + "src": "2944:10:2" } ], - "id": 400, + "id": 457, "name": "IndexAccess", - "src": "2934:21:1" + "src": "2934:21:2" } ], - "id": 401, + "id": 458, "name": "Assignment", - "src": "2910:45:1" + "src": "2910:45:2" } ], - "id": 402, + "id": 459, "name": "ExpressionStatement", - "src": "2910:45:1" + "src": "2910:45:2" }, { "children": [ @@ -5135,7 +5135,7 @@ "isPure": false, "lValueRequested": true, "member_name": "id", - "referencedDeclaration": 66, + "referencedDeclaration": 123, "type": "address" }, "children": [ @@ -5155,13 +5155,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 403, + "id": 460, "name": "Identifier", - "src": "2965:9:1" + "src": "2965:9:2" }, { "attributes": { @@ -5169,23 +5169,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 384, + "referencedDeclaration": 441, "type": "address", "value": "newAddress" }, - "id": 404, + "id": 461, "name": "Identifier", - "src": "2975:10:1" + "src": "2975:10:2" } ], - "id": 405, + "id": 462, "name": "IndexAccess", - "src": "2965:21:1" + "src": "2965:21:2" } ], - "id": 406, + "id": 463, "name": "MemberAccess", - "src": "2965:24:1" + "src": "2965:24:2" }, { "attributes": { @@ -5193,23 +5193,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 384, + "referencedDeclaration": 441, "type": "address", "value": "newAddress" }, - "id": 407, + "id": 464, "name": "Identifier", - "src": "2992:10:1" + "src": "2992:10:2" } ], - "id": 408, + "id": 465, "name": "Assignment", - "src": "2965:37:1" + "src": "2965:37:2" } ], - "id": 409, + "id": 466, "name": "ExpressionStatement", - "src": "2965:37:1" + "src": "2965:37:2" }, { "children": [ @@ -5241,13 +5241,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 83, + "referencedDeclaration": 140, "type": "mapping(address => struct Payroll.Employee storage ref)", "value": "employees" }, - "id": 410, + "id": 467, "name": "Identifier", - "src": "3019:9:1" + "src": "3019:9:2" }, { "attributes": { @@ -5255,48 +5255,48 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 382, + "referencedDeclaration": 439, "type": "address", "value": "oldAddress" }, - "id": 411, + "id": 468, "name": "Identifier", - "src": "3029:10:1" + "src": "3029:10:2" } ], - "id": 412, + "id": 469, "name": "IndexAccess", - "src": "3019:21:1" + "src": "3019:21:2" } ], - "id": 413, + "id": 470, "name": "UnaryOperation", - "src": "3012:28:1" + "src": "3012:28:2" } ], - "id": 414, + "id": 471, "name": "ExpressionStatement", - "src": "3012:28:1" + "src": "3012:28:2" } ], - "id": 415, + "id": 472, "name": "Block", - "src": "2900:147:1" + "src": "2900:147:2" } ], - "id": 416, + "id": 473, "name": "FunctionDefinition", - "src": "2764:283:1" + "src": "2764:283:2" } ], - "id": 417, + "id": 474, "name": "ContractDefinition", - "src": "113:2936:1" + "src": "113:2936:2" } ], - "id": 418, + "id": 475, "name": "SourceUnit", - "src": "38:3011:1" + "src": "38:3011:2" }, "compiler": { "name": "solc", @@ -5304,5 +5304,5 @@ }, "networks": {}, "schemaVersion": "1.0.1", - "updatedAt": "2018-01-26T20:54:31.147Z" + "updatedAt": "2018-01-29T04:05:56.616Z" } \ No newline at end of file diff --git a/Lesson4/assignment/build/contracts/SafeMath.json b/Lesson4/assignment/build/contracts/SafeMath.json index 5f5948b38..f56931beb 100644 --- a/Lesson4/assignment/build/contracts/SafeMath.json +++ b/Lesson4/assignment/build/contracts/SafeMath.json @@ -1,18 +1,18 @@ { "contractName": "SafeMath", "abi": [], - "bytecode": "0x60606040523415600e57600080fd5b603580601b6000396000f3006060604052600080fd00a165627a7a72305820f26314e26f5d8958d52f0863a4ded1369ccbe8d0be33f9d6d94146124ff92c8a0029", - "deployedBytecode": "0x6060604052600080fd00a165627a7a72305820f26314e26f5d8958d52f0863a4ded1369ccbe8d0be33f9d6d94146124ff92c8a0029", - "sourceMap": "117:1022:2:-;;;;;;;;;;;;;;;;;", - "deployedSourceMap": "117:1022:2:-;;;;;", + "bytecode": "0x60606040523415600e57600080fd5b603580601b6000396000f3006060604052600080fd00a165627a7a7230582040651b5e20d14382db6918da4120533999d1f41e3f22575bca26bc932ab8eaee0029", + "deployedBytecode": "0x6060604052600080fd00a165627a7a7230582040651b5e20d14382db6918da4120533999d1f41e3f22575bca26bc932ab8eaee0029", + "sourceMap": "117:1022:3:-;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "117:1022:3:-;;;;;", "source": "pragma solidity ^0.4.18;\n\n\n/**\n * @title SafeMath\n * @dev Math operations with safety checks that throw on error\n */\nlibrary SafeMath {\n\n /**\n * @dev Multiplies two numbers, throws on overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n assert(c / a == b);\n return c;\n }\n\n /**\n * @dev Integer division of two numbers, truncating the quotient.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n // assert(b > 0); // Solidity automatically throws when dividing by 0\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n return c;\n }\n\n /**\n * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n assert(b <= a);\n return a - b;\n }\n\n /**\n * @dev Adds two numbers, throws on overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n assert(c >= a);\n return c;\n }\n}", - "sourcePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/SafeMath.sol", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/SafeMath.sol", "ast": { "attributes": { - "absolutePath": "/Users/Vincent/Desktop/guigulive-operation/Lesson4/assignment/contracts/SafeMath.sol", + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson4/assignment/contracts/SafeMath.sol", "exportedSymbols": { "SafeMath": [ - 515 + 572 ] } }, @@ -26,9 +26,9 @@ ".18" ] }, - "id": 419, + "id": 476, "name": "PragmaDirective", - "src": "0:24:2" + "src": "0:24:3" }, { "attributes": { @@ -42,10 +42,10 @@ "documentation": "@title SafeMath\n@dev Math operations with safety checks that throw on error", "fullyImplemented": true, "linearizedBaseContracts": [ - 515 + 572 ], "name": "SafeMath", - "scope": 516 + "scope": 573 }, "children": [ { @@ -58,7 +58,7 @@ ], "name": "mul", "payable": false, - "scope": 515, + "scope": 572, "stateMutability": "pure", "superFunction": null, "visibility": "internal" @@ -70,7 +70,7 @@ "attributes": { "constant": false, "name": "a", - "scope": 452, + "scope": 509, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -83,20 +83,20 @@ "name": "uint256", "type": "uint256" }, - "id": 420, + "id": 477, "name": "ElementaryTypeName", - "src": "216:7:2" + "src": "216:7:3" } ], - "id": 421, + "id": 478, "name": "VariableDeclaration", - "src": "216:9:2" + "src": "216:9:3" }, { "attributes": { "constant": false, "name": "b", - "scope": 452, + "scope": 509, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -109,19 +109,19 @@ "name": "uint256", "type": "uint256" }, - "id": 422, + "id": 479, "name": "ElementaryTypeName", - "src": "227:7:2" + "src": "227:7:3" } ], - "id": 423, + "id": 480, "name": "VariableDeclaration", - "src": "227:9:2" + "src": "227:9:3" } ], - "id": 424, + "id": 481, "name": "ParameterList", - "src": "215:22:2" + "src": "215:22:3" }, { "children": [ @@ -129,7 +129,7 @@ "attributes": { "constant": false, "name": "", - "scope": 452, + "scope": 509, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -142,19 +142,19 @@ "name": "uint256", "type": "uint256" }, - "id": 425, + "id": 482, "name": "ElementaryTypeName", - "src": "261:7:2" + "src": "261:7:3" } ], - "id": 426, + "id": 483, "name": "VariableDeclaration", - "src": "261:7:2" + "src": "261:7:3" } ], - "id": 427, + "id": 484, "name": "ParameterList", - "src": "260:9:2" + "src": "260:9:3" }, { "children": [ @@ -184,13 +184,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 421, + "referencedDeclaration": 478, "type": "uint256", "value": "a" }, - "id": 428, + "id": 485, "name": "Identifier", - "src": "280:1:2" + "src": "280:1:3" }, { "attributes": { @@ -205,20 +205,20 @@ "type": "int_const 0", "value": "0" }, - "id": 429, + "id": 486, "name": "Literal", - "src": "285:1:2" + "src": "285:1:3" } ], - "id": 430, + "id": 487, "name": "BinaryOperation", - "src": "280:6:2" + "src": "280:6:3" }, { "children": [ { "attributes": { - "functionReturnParameters": 427 + "functionReturnParameters": 484 }, "children": [ { @@ -234,29 +234,29 @@ "type": "int_const 0", "value": "0" }, - "id": 431, + "id": 488, "name": "Literal", - "src": "303:1:2" + "src": "303:1:3" } ], - "id": 432, + "id": 489, "name": "Return", - "src": "296:8:2" + "src": "296:8:3" } ], - "id": 433, + "id": 490, "name": "Block", - "src": "288:23:2" + "src": "288:23:3" } ], - "id": 434, + "id": 491, "name": "IfStatement", - "src": "276:35:2" + "src": "276:35:3" }, { "attributes": { "assignments": [ - 436 + 493 ] }, "children": [ @@ -264,7 +264,7 @@ "attributes": { "constant": false, "name": "c", - "scope": 452, + "scope": 509, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -277,14 +277,14 @@ "name": "uint256", "type": "uint256" }, - "id": 435, + "id": 492, "name": "ElementaryTypeName", - "src": "316:7:2" + "src": "316:7:3" } ], - "id": 436, + "id": 493, "name": "VariableDeclaration", - "src": "316:9:2" + "src": "316:9:3" }, { "attributes": { @@ -307,13 +307,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 421, + "referencedDeclaration": 478, "type": "uint256", "value": "a" }, - "id": 437, + "id": 494, "name": "Identifier", - "src": "328:1:2" + "src": "328:1:3" }, { "attributes": { @@ -321,23 +321,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 423, + "referencedDeclaration": 480, "type": "uint256", "value": "b" }, - "id": 438, + "id": 495, "name": "Identifier", - "src": "332:1:2" + "src": "332:1:3" } ], - "id": 439, + "id": 496, "name": "BinaryOperation", - "src": "328:5:2" + "src": "328:5:3" } ], - "id": 440, + "id": 497, "name": "VariableDeclarationStatement", - "src": "316:17:2" + "src": "316:17:3" }, { "children": [ @@ -367,13 +367,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 518, + "referencedDeclaration": 575, "type": "function (bool) pure", "value": "assert" }, - "id": 441, + "id": 498, "name": "Identifier", - "src": "339:6:2" + "src": "339:6:3" }, { "attributes": { @@ -411,13 +411,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 436, + "referencedDeclaration": 493, "type": "uint256", "value": "c" }, - "id": 442, + "id": 499, "name": "Identifier", - "src": "346:1:2" + "src": "346:1:3" }, { "attributes": { @@ -425,18 +425,18 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 421, + "referencedDeclaration": 478, "type": "uint256", "value": "a" }, - "id": 443, + "id": 500, "name": "Identifier", - "src": "350:1:2" + "src": "350:1:3" } ], - "id": 444, + "id": 501, "name": "BinaryOperation", - "src": "346:5:2" + "src": "346:5:3" }, { "attributes": { @@ -444,32 +444,32 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 423, + "referencedDeclaration": 480, "type": "uint256", "value": "b" }, - "id": 445, + "id": 502, "name": "Identifier", - "src": "355:1:2" + "src": "355:1:3" } ], - "id": 446, + "id": 503, "name": "BinaryOperation", - "src": "346:10:2" + "src": "346:10:3" } ], - "id": 447, + "id": 504, "name": "FunctionCall", - "src": "339:18:2" + "src": "339:18:3" } ], - "id": 448, + "id": 505, "name": "ExpressionStatement", - "src": "339:18:2" + "src": "339:18:3" }, { "attributes": { - "functionReturnParameters": 427 + "functionReturnParameters": 484 }, "children": [ { @@ -478,28 +478,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 436, + "referencedDeclaration": 493, "type": "uint256", "value": "c" }, - "id": 449, + "id": 506, "name": "Identifier", - "src": "370:1:2" + "src": "370:1:3" } ], - "id": 450, + "id": 507, "name": "Return", - "src": "363:8:2" + "src": "363:8:3" } ], - "id": 451, + "id": 508, "name": "Block", - "src": "270:106:2" + "src": "270:106:3" } ], - "id": 452, + "id": 509, "name": "FunctionDefinition", - "src": "203:173:2" + "src": "203:173:3" }, { "attributes": { @@ -511,7 +511,7 @@ ], "name": "div", "payable": false, - "scope": 515, + "scope": 572, "stateMutability": "pure", "superFunction": null, "visibility": "internal" @@ -523,7 +523,7 @@ "attributes": { "constant": false, "name": "a", - "scope": 470, + "scope": 527, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -536,20 +536,20 @@ "name": "uint256", "type": "uint256" }, - "id": 453, + "id": 510, "name": "ElementaryTypeName", - "src": "471:7:2" + "src": "471:7:3" } ], - "id": 454, + "id": 511, "name": "VariableDeclaration", - "src": "471:9:2" + "src": "471:9:3" }, { "attributes": { "constant": false, "name": "b", - "scope": 470, + "scope": 527, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -562,19 +562,19 @@ "name": "uint256", "type": "uint256" }, - "id": 455, + "id": 512, "name": "ElementaryTypeName", - "src": "482:7:2" + "src": "482:7:3" } ], - "id": 456, + "id": 513, "name": "VariableDeclaration", - "src": "482:9:2" + "src": "482:9:3" } ], - "id": 457, + "id": 514, "name": "ParameterList", - "src": "470:22:2" + "src": "470:22:3" }, { "children": [ @@ -582,7 +582,7 @@ "attributes": { "constant": false, "name": "", - "scope": 470, + "scope": 527, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -595,26 +595,26 @@ "name": "uint256", "type": "uint256" }, - "id": 458, + "id": 515, "name": "ElementaryTypeName", - "src": "516:7:2" + "src": "516:7:3" } ], - "id": 459, + "id": 516, "name": "VariableDeclaration", - "src": "516:7:2" + "src": "516:7:3" } ], - "id": 460, + "id": 517, "name": "ParameterList", - "src": "515:9:2" + "src": "515:9:3" }, { "children": [ { "attributes": { "assignments": [ - 462 + 519 ] }, "children": [ @@ -622,7 +622,7 @@ "attributes": { "constant": false, "name": "c", - "scope": 470, + "scope": 527, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -635,14 +635,14 @@ "name": "uint256", "type": "uint256" }, - "id": 461, + "id": 518, "name": "ElementaryTypeName", - "src": "605:7:2" + "src": "605:7:3" } ], - "id": 462, + "id": 519, "name": "VariableDeclaration", - "src": "605:9:2" + "src": "605:9:3" }, { "attributes": { @@ -665,13 +665,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 454, + "referencedDeclaration": 511, "type": "uint256", "value": "a" }, - "id": 463, + "id": 520, "name": "Identifier", - "src": "617:1:2" + "src": "617:1:3" }, { "attributes": { @@ -679,27 +679,27 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 456, + "referencedDeclaration": 513, "type": "uint256", "value": "b" }, - "id": 464, + "id": 521, "name": "Identifier", - "src": "621:1:2" + "src": "621:1:3" } ], - "id": 465, + "id": 522, "name": "BinaryOperation", - "src": "617:5:2" + "src": "617:5:3" } ], - "id": 466, + "id": 523, "name": "VariableDeclarationStatement", - "src": "605:17:2" + "src": "605:17:3" }, { "attributes": { - "functionReturnParameters": 460 + "functionReturnParameters": 517 }, "children": [ { @@ -708,28 +708,28 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 462, + "referencedDeclaration": 519, "type": "uint256", "value": "c" }, - "id": 467, + "id": 524, "name": "Identifier", - "src": "717:1:2" + "src": "717:1:3" } ], - "id": 468, + "id": 525, "name": "Return", - "src": "710:8:2" + "src": "710:8:3" } ], - "id": 469, + "id": 526, "name": "Block", - "src": "525:198:2" + "src": "525:198:3" } ], - "id": 470, + "id": 527, "name": "FunctionDefinition", - "src": "458:265:2" + "src": "458:265:3" }, { "attributes": { @@ -741,7 +741,7 @@ ], "name": "sub", "payable": false, - "scope": 515, + "scope": 572, "stateMutability": "pure", "superFunction": null, "visibility": "internal" @@ -753,7 +753,7 @@ "attributes": { "constant": false, "name": "a", - "scope": 490, + "scope": 547, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -766,20 +766,20 @@ "name": "uint256", "type": "uint256" }, - "id": 471, + "id": 528, "name": "ElementaryTypeName", - "src": "849:7:2" + "src": "849:7:3" } ], - "id": 472, + "id": 529, "name": "VariableDeclaration", - "src": "849:9:2" + "src": "849:9:3" }, { "attributes": { "constant": false, "name": "b", - "scope": 490, + "scope": 547, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -792,19 +792,19 @@ "name": "uint256", "type": "uint256" }, - "id": 473, + "id": 530, "name": "ElementaryTypeName", - "src": "860:7:2" + "src": "860:7:3" } ], - "id": 474, + "id": 531, "name": "VariableDeclaration", - "src": "860:9:2" + "src": "860:9:3" } ], - "id": 475, + "id": 532, "name": "ParameterList", - "src": "848:22:2" + "src": "848:22:3" }, { "children": [ @@ -812,7 +812,7 @@ "attributes": { "constant": false, "name": "", - "scope": 490, + "scope": 547, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -825,19 +825,19 @@ "name": "uint256", "type": "uint256" }, - "id": 476, + "id": 533, "name": "ElementaryTypeName", - "src": "894:7:2" + "src": "894:7:3" } ], - "id": 477, + "id": 534, "name": "VariableDeclaration", - "src": "894:7:2" + "src": "894:7:3" } ], - "id": 478, + "id": 535, "name": "ParameterList", - "src": "893:9:2" + "src": "893:9:3" }, { "children": [ @@ -869,13 +869,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 518, + "referencedDeclaration": 575, "type": "function (bool) pure", "value": "assert" }, - "id": 479, + "id": 536, "name": "Identifier", - "src": "909:6:2" + "src": "909:6:3" }, { "attributes": { @@ -898,13 +898,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 474, + "referencedDeclaration": 531, "type": "uint256", "value": "b" }, - "id": 480, + "id": 537, "name": "Identifier", - "src": "916:1:2" + "src": "916:1:3" }, { "attributes": { @@ -912,32 +912,32 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 472, + "referencedDeclaration": 529, "type": "uint256", "value": "a" }, - "id": 481, + "id": 538, "name": "Identifier", - "src": "921:1:2" + "src": "921:1:3" } ], - "id": 482, + "id": 539, "name": "BinaryOperation", - "src": "916:6:2" + "src": "916:6:3" } ], - "id": 483, + "id": 540, "name": "FunctionCall", - "src": "909:14:2" + "src": "909:14:3" } ], - "id": 484, + "id": 541, "name": "ExpressionStatement", - "src": "909:14:2" + "src": "909:14:3" }, { "attributes": { - "functionReturnParameters": 478 + "functionReturnParameters": 535 }, "children": [ { @@ -961,13 +961,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 472, + "referencedDeclaration": 529, "type": "uint256", "value": "a" }, - "id": 485, + "id": 542, "name": "Identifier", - "src": "936:1:2" + "src": "936:1:3" }, { "attributes": { @@ -975,33 +975,33 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 474, + "referencedDeclaration": 531, "type": "uint256", "value": "b" }, - "id": 486, + "id": 543, "name": "Identifier", - "src": "940:1:2" + "src": "940:1:3" } ], - "id": 487, + "id": 544, "name": "BinaryOperation", - "src": "936:5:2" + "src": "936:5:3" } ], - "id": 488, + "id": 545, "name": "Return", - "src": "929:12:2" + "src": "929:12:3" } ], - "id": 489, + "id": 546, "name": "Block", - "src": "903:43:2" + "src": "903:43:3" } ], - "id": 490, + "id": 547, "name": "FunctionDefinition", - "src": "836:110:2" + "src": "836:110:3" }, { "attributes": { @@ -1013,7 +1013,7 @@ ], "name": "add", "payable": false, - "scope": 515, + "scope": 572, "stateMutability": "pure", "superFunction": null, "visibility": "internal" @@ -1025,7 +1025,7 @@ "attributes": { "constant": false, "name": "a", - "scope": 514, + "scope": 571, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -1038,20 +1038,20 @@ "name": "uint256", "type": "uint256" }, - "id": 491, + "id": 548, "name": "ElementaryTypeName", - "src": "1021:7:2" + "src": "1021:7:3" } ], - "id": 492, + "id": 549, "name": "VariableDeclaration", - "src": "1021:9:2" + "src": "1021:9:3" }, { "attributes": { "constant": false, "name": "b", - "scope": 514, + "scope": 571, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -1064,19 +1064,19 @@ "name": "uint256", "type": "uint256" }, - "id": 493, + "id": 550, "name": "ElementaryTypeName", - "src": "1032:7:2" + "src": "1032:7:3" } ], - "id": 494, + "id": 551, "name": "VariableDeclaration", - "src": "1032:9:2" + "src": "1032:9:3" } ], - "id": 495, + "id": 552, "name": "ParameterList", - "src": "1020:22:2" + "src": "1020:22:3" }, { "children": [ @@ -1084,7 +1084,7 @@ "attributes": { "constant": false, "name": "", - "scope": 514, + "scope": 571, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -1097,26 +1097,26 @@ "name": "uint256", "type": "uint256" }, - "id": 496, + "id": 553, "name": "ElementaryTypeName", - "src": "1066:7:2" + "src": "1066:7:3" } ], - "id": 497, + "id": 554, "name": "VariableDeclaration", - "src": "1066:7:2" + "src": "1066:7:3" } ], - "id": 498, + "id": 555, "name": "ParameterList", - "src": "1065:9:2" + "src": "1065:9:3" }, { "children": [ { "attributes": { "assignments": [ - 500 + 557 ] }, "children": [ @@ -1124,7 +1124,7 @@ "attributes": { "constant": false, "name": "c", - "scope": 514, + "scope": 571, "stateVariable": false, "storageLocation": "default", "type": "uint256", @@ -1137,14 +1137,14 @@ "name": "uint256", "type": "uint256" }, - "id": 499, + "id": 556, "name": "ElementaryTypeName", - "src": "1081:7:2" + "src": "1081:7:3" } ], - "id": 500, + "id": 557, "name": "VariableDeclaration", - "src": "1081:9:2" + "src": "1081:9:3" }, { "attributes": { @@ -1167,13 +1167,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 492, + "referencedDeclaration": 549, "type": "uint256", "value": "a" }, - "id": 501, + "id": 558, "name": "Identifier", - "src": "1093:1:2" + "src": "1093:1:3" }, { "attributes": { @@ -1181,23 +1181,23 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 494, + "referencedDeclaration": 551, "type": "uint256", "value": "b" }, - "id": 502, + "id": 559, "name": "Identifier", - "src": "1097:1:2" + "src": "1097:1:3" } ], - "id": 503, + "id": 560, "name": "BinaryOperation", - "src": "1093:5:2" + "src": "1093:5:3" } ], - "id": 504, + "id": 561, "name": "VariableDeclarationStatement", - "src": "1081:17:2" + "src": "1081:17:3" }, { "children": [ @@ -1227,13 +1227,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 518, + "referencedDeclaration": 575, "type": "function (bool) pure", "value": "assert" }, - "id": 505, + "id": 562, "name": "Identifier", - "src": "1104:6:2" + "src": "1104:6:3" }, { "attributes": { @@ -1256,13 +1256,13 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 500, + "referencedDeclaration": 557, "type": "uint256", "value": "c" }, - "id": 506, + "id": 563, "name": "Identifier", - "src": "1111:1:2" + "src": "1111:1:3" }, { "attributes": { @@ -1270,32 +1270,32 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 492, + "referencedDeclaration": 549, "type": "uint256", "value": "a" }, - "id": 507, + "id": 564, "name": "Identifier", - "src": "1116:1:2" + "src": "1116:1:3" } ], - "id": 508, + "id": 565, "name": "BinaryOperation", - "src": "1111:6:2" + "src": "1111:6:3" } ], - "id": 509, + "id": 566, "name": "FunctionCall", - "src": "1104:14:2" + "src": "1104:14:3" } ], - "id": 510, + "id": 567, "name": "ExpressionStatement", - "src": "1104:14:2" + "src": "1104:14:3" }, { "attributes": { - "functionReturnParameters": 498 + "functionReturnParameters": 555 }, "children": [ { @@ -1304,38 +1304,38 @@ "overloadedDeclarations": [ null ], - "referencedDeclaration": 500, + "referencedDeclaration": 557, "type": "uint256", "value": "c" }, - "id": 511, + "id": 568, "name": "Identifier", - "src": "1131:1:2" + "src": "1131:1:3" } ], - "id": 512, + "id": 569, "name": "Return", - "src": "1124:8:2" + "src": "1124:8:3" } ], - "id": 513, + "id": 570, "name": "Block", - "src": "1075:62:2" + "src": "1075:62:3" } ], - "id": 514, + "id": 571, "name": "FunctionDefinition", - "src": "1008:129:2" + "src": "1008:129:3" } ], - "id": 515, + "id": 572, "name": "ContractDefinition", - "src": "117:1022:2" + "src": "117:1022:3" } ], - "id": 516, + "id": 573, "name": "SourceUnit", - "src": "0:1139:2" + "src": "0:1139:3" }, "compiler": { "name": "solc", @@ -1343,5 +1343,5 @@ }, "networks": {}, "schemaVersion": "1.0.1", - "updatedAt": "2018-01-26T20:54:31.142Z" + "updatedAt": "2018-01-29T04:05:56.621Z" } \ No newline at end of file diff --git a/Lesson5/assignment/README.md b/Lesson5/assignment/README.md deleted file mode 100644 index 5661cd368..000000000 --- a/Lesson5/assignment/README.md +++ /dev/null @@ -1,2 +0,0 @@ -## 硅谷live以太坊智能合约 第五课作业 -这里是同学提交作业的目录 From 56e24099bdc612411704d761fa17b87b1f2eb8ba Mon Sep 17 00:00:00 2001 From: Jialiang Date: Mon, 29 Jan 2018 23:25:17 +0000 Subject: [PATCH 2/3] hw --- Lesson5/assignment/box-img-lg.png | Bin 0 -> 113830 bytes Lesson5/assignment/box-img-sm.png | Bin 0 -> 5412 bytes .../build/contracts/Migrations.json | 827 +++ .../assignment/build/contracts/Ownable.json | 847 +++ .../assignment/build/contracts/Payroll.json | 5314 +++++++++++++++++ .../assignment/build/contracts/SafeMath.json | 1353 +++++ Lesson5/assignment/config/env.js | 28 + .../assignment/config/jest/cssTransform.js | 12 + .../assignment/config/jest/fileTransform.js | 10 + Lesson5/assignment/config/paths.js | 46 + Lesson5/assignment/config/polyfills.js | 14 + .../assignment/config/webpack.config.dev.js | 242 + .../assignment/config/webpack.config.prod.js | 269 + Lesson5/assignment/contracts/Migrations.sol | 23 + Lesson5/assignment/contracts/Ownable.sol | 42 + Lesson5/assignment/contracts/Payroll.sol | 92 + Lesson5/assignment/contracts/SafeMath.sol | 48 + .../migrations/1_initial_migration.js | 5 + .../migrations/2_deploy_contracts.js | 10 + .../migrations/2_deploy_contracts.js~ | 5 + Lesson5/assignment/package.json | 102 + Lesson5/assignment/public/favicon.ico | Bin 0 -> 32038 bytes Lesson5/assignment/public/index.html | 31 + Lesson5/assignment/scripts/build.js | 224 + Lesson5/assignment/scripts/start.js | 315 + Lesson5/assignment/scripts/test.js | 31 + Lesson5/assignment/src/App.css | 12 + Lesson5/assignment/src/App.js | 125 + Lesson5/assignment/src/App.test.js | 8 + Lesson5/assignment/src/components/Common.js | 70 + .../assignment/src/components/EditableCell.js | 55 + Lesson5/assignment/src/components/Employee.js | 67 + .../assignment/src/components/EmployeeList.js | 129 + Lesson5/assignment/src/components/Employer.js | 73 + Lesson5/assignment/src/components/Fund.js | 52 + Lesson5/assignment/src/css/open-sans.css | 13 + Lesson5/assignment/src/css/oswald.css | 27 + Lesson5/assignment/src/css/pure-min.css | 11 + .../src/fonts/Open-Sans-regular/LICENSE.txt | 202 + .../Open-Sans-regular/Open-Sans-regular.eot | Bin 0 -> 18233 bytes .../Open-Sans-regular/Open-Sans-regular.svg | 1637 +++++ .../Open-Sans-regular/Open-Sans-regular.ttf | Bin 0 -> 34156 bytes .../Open-Sans-regular/Open-Sans-regular.woff | Bin 0 -> 14260 bytes .../Open-Sans-regular/Open-Sans-regular.woff2 | Bin 0 -> 10352 bytes .../src/fonts/Oswald-300/LICENSE.txt | 93 + .../src/fonts/Oswald-300/Oswald-300.eot | Bin 0 -> 16752 bytes .../src/fonts/Oswald-300/Oswald-300.svg | 335 ++ .../src/fonts/Oswald-300/Oswald-300.ttf | Bin 0 -> 30704 bytes .../src/fonts/Oswald-300/Oswald-300.woff | Bin 0 -> 12864 bytes .../src/fonts/Oswald-300/Oswald-300.woff2 | Bin 0 -> 10056 bytes .../src/fonts/Oswald-regular/LICENSE.txt | 93 + .../fonts/Oswald-regular/Oswald-regular.eot | Bin 0 -> 17937 bytes .../fonts/Oswald-regular/Oswald-regular.svg | 347 ++ .../fonts/Oswald-regular/Oswald-regular.ttf | Bin 0 -> 34408 bytes .../fonts/Oswald-regular/Oswald-regular.woff | Bin 0 -> 12732 bytes .../fonts/Oswald-regular/Oswald-regular.woff2 | Bin 0 -> 9964 bytes Lesson5/assignment/src/index.css | 5 + Lesson5/assignment/src/index.js | 8 + Lesson5/assignment/src/utils/getWeb3.js | 38 + Lesson5/assignment/test/TestPayroll.js | 129 + Lesson5/assignment/truffle-config.js | 4 + Lesson5/assignment/truffle.js | 12 + Lesson5/assignment/truffle.js~ | 10 + 63 files changed, 13445 insertions(+) create mode 100644 Lesson5/assignment/box-img-lg.png create mode 100644 Lesson5/assignment/box-img-sm.png create mode 100644 Lesson5/assignment/build/contracts/Migrations.json create mode 100644 Lesson5/assignment/build/contracts/Ownable.json create mode 100644 Lesson5/assignment/build/contracts/Payroll.json create mode 100644 Lesson5/assignment/build/contracts/SafeMath.json create mode 100644 Lesson5/assignment/config/env.js create mode 100644 Lesson5/assignment/config/jest/cssTransform.js create mode 100644 Lesson5/assignment/config/jest/fileTransform.js create mode 100644 Lesson5/assignment/config/paths.js create mode 100644 Lesson5/assignment/config/polyfills.js create mode 100644 Lesson5/assignment/config/webpack.config.dev.js create mode 100644 Lesson5/assignment/config/webpack.config.prod.js create mode 100644 Lesson5/assignment/contracts/Migrations.sol create mode 100644 Lesson5/assignment/contracts/Ownable.sol create mode 100644 Lesson5/assignment/contracts/Payroll.sol create mode 100644 Lesson5/assignment/contracts/SafeMath.sol create mode 100644 Lesson5/assignment/migrations/1_initial_migration.js create mode 100644 Lesson5/assignment/migrations/2_deploy_contracts.js create mode 100644 Lesson5/assignment/migrations/2_deploy_contracts.js~ create mode 100644 Lesson5/assignment/package.json create mode 100644 Lesson5/assignment/public/favicon.ico create mode 100644 Lesson5/assignment/public/index.html create mode 100644 Lesson5/assignment/scripts/build.js create mode 100644 Lesson5/assignment/scripts/start.js create mode 100644 Lesson5/assignment/scripts/test.js create mode 100644 Lesson5/assignment/src/App.css create mode 100644 Lesson5/assignment/src/App.js create mode 100644 Lesson5/assignment/src/App.test.js create mode 100644 Lesson5/assignment/src/components/Common.js create mode 100644 Lesson5/assignment/src/components/EditableCell.js create mode 100644 Lesson5/assignment/src/components/Employee.js create mode 100644 Lesson5/assignment/src/components/EmployeeList.js create mode 100644 Lesson5/assignment/src/components/Employer.js create mode 100644 Lesson5/assignment/src/components/Fund.js create mode 100644 Lesson5/assignment/src/css/open-sans.css create mode 100644 Lesson5/assignment/src/css/oswald.css create mode 100644 Lesson5/assignment/src/css/pure-min.css create mode 100644 Lesson5/assignment/src/fonts/Open-Sans-regular/LICENSE.txt create mode 100644 Lesson5/assignment/src/fonts/Open-Sans-regular/Open-Sans-regular.eot create mode 100644 Lesson5/assignment/src/fonts/Open-Sans-regular/Open-Sans-regular.svg create mode 100644 Lesson5/assignment/src/fonts/Open-Sans-regular/Open-Sans-regular.ttf create mode 100644 Lesson5/assignment/src/fonts/Open-Sans-regular/Open-Sans-regular.woff create mode 100644 Lesson5/assignment/src/fonts/Open-Sans-regular/Open-Sans-regular.woff2 create mode 100644 Lesson5/assignment/src/fonts/Oswald-300/LICENSE.txt create mode 100644 Lesson5/assignment/src/fonts/Oswald-300/Oswald-300.eot create mode 100644 Lesson5/assignment/src/fonts/Oswald-300/Oswald-300.svg create mode 100644 Lesson5/assignment/src/fonts/Oswald-300/Oswald-300.ttf create mode 100644 Lesson5/assignment/src/fonts/Oswald-300/Oswald-300.woff create mode 100644 Lesson5/assignment/src/fonts/Oswald-300/Oswald-300.woff2 create mode 100644 Lesson5/assignment/src/fonts/Oswald-regular/LICENSE.txt create mode 100644 Lesson5/assignment/src/fonts/Oswald-regular/Oswald-regular.eot create mode 100644 Lesson5/assignment/src/fonts/Oswald-regular/Oswald-regular.svg create mode 100644 Lesson5/assignment/src/fonts/Oswald-regular/Oswald-regular.ttf create mode 100644 Lesson5/assignment/src/fonts/Oswald-regular/Oswald-regular.woff create mode 100644 Lesson5/assignment/src/fonts/Oswald-regular/Oswald-regular.woff2 create mode 100644 Lesson5/assignment/src/index.css create mode 100644 Lesson5/assignment/src/index.js create mode 100644 Lesson5/assignment/src/utils/getWeb3.js create mode 100644 Lesson5/assignment/test/TestPayroll.js create mode 100644 Lesson5/assignment/truffle-config.js create mode 100644 Lesson5/assignment/truffle.js create mode 100644 Lesson5/assignment/truffle.js~ diff --git a/Lesson5/assignment/box-img-lg.png b/Lesson5/assignment/box-img-lg.png new file mode 100644 index 0000000000000000000000000000000000000000..60c19962ad5846379c8f2a985e21fb518e7dcaa6 GIT binary patch literal 113830 zcmeEtWm8;1*X_XIPH?y2?(V^YhhV|o-Ccq^Awhy$aCaZv-FJYdQe{ zh@U<_5L2tZ&+iurJilu=f46Y9HUR+OQs|jv7-$*i7zb%abS(!5RO1P?R)^JCLDD7+Z_{?RP3-Y^>8fSU1p)6{wSf?hg$6@`oa)x;Rzu zZTao7)*E!KXHrD^YSI0osfZgE#HwJd({Q~j1Or~tc z|M}P8#|X~;J6uh&Ct_l`m|(z_s9ACE-B(|Y^G*IX3D^#KyDAe)h49ocy9Xb zJ$5^*(+9?^kppWW+#^dBM?!~1nD>O8-<~x@C{2QImo&^OlA_Bw(nHqkde-#hP~|=Q z?=%0cU@RxPMJrxKyj8SJJo>;Kve%Z>zh%c_w$oAb$>y&Kr|&N)zT>}eO28uE**FJ= z3-3N3$vpcl`;XADW+E4}o#x9(gI-J@H5d z@KV!mEEfN9-L3STYg|94r|KOHs7B<}+ z4dV}nM{n8FlCieu1OjXUY)S44--CKmau21w(;w=$>bqv@oSxWqTF+vc!8*Q2Y_@n* z1XJ4DK~7FXaH$!WJ4HiN^GO~F!hg50qCnR60*J$wLXu+!?-P7K`!T`l>|FQ#WB%$q zYGh?1FRsgxK2w_}k-f5!cxcRt*ws|7du+iB){_s?NPl5XoUE)TdJTT+na@?OGI!2- ztPz%BRBEQR)VukwCO|c}>ug3+_@yW8@D?^xZwf#f0OQl#etff&7nq z<|9S>vVp|5T*Ci^q3kIjBE}`sr=#GpFuI2@>Cb@OCzKWyh`LdZr&^||Qrmrgr|t}2 zcG=jk@OrugdSEdW8)ASZTtw&FJF$}LNZ`}rS3L6g`NE4LK%T?&}ViFqgbwa@TlDl>%=l zU5O6$3X+Ex4rbiCu+qApy+3zMQi?NYjrq5xWn0FN(k*)k=kd+;u)0eUiL~@r(5bui zkI5kAt>yDcc}*Zz*ZzUxz1{fI@)TD7e(oF&IfbIQk3 z?z>hw|Kz#+Ng@5V?LlmgglOBt`t9Nc$bd^Qy_n=1y~-AfKVrdlUc}Bq;IH^{J=V($ zELd*W0c#@FvdpkFWY&?oYs)HEz%%gBcvi9g!`>kA76#}cLr_ot(Dqyz<1iJ1>8%a? zVTyUHn`aqtiHkQiVuMj9wwHK{s5RrNzUt??w7a%pukm7zDv@|fytiUe8_ &IIu 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%0A5D*17g&GCtGr;&jPHo!?qH&fEO{R*_sF;J2 z!IGDF5FI;o{25TPR4!&Q(uv_i9+VB0FrkezLOI(CJAa*N$qUqUu#%D7WQRJfw+`z8 z51mq0q*#!F0MU1L0YV0}ee{$~(+<$+uV{QI8_n2w5mLsxJ|!c$Q@%+%S-?=H9X69c ztN~t6U^{OdcqQQ{bT4#be2&)Z+@ZK+<#7C~fB6&fsvrN!_$^&_|B#;Y zzhdsP_|+9>#SQQKK>XhS`1P3Bw>OqAUKBIO#=41pNcW>X(aR}xx6v`Z)_2Z%amh*A%a`~J90_xIPGdw#55ds>X>Ho@*4+w~k;P8_bP`0P_vVRUpP=4b+2fAh_H zBK>fjf61jWs)fY5(Yf(~T^r-<*$d*LHS6NWFMd9DKFk*qwFr@rWwVDgu@1$<2e@Y~ zflA-5Z!F|V++o#;^M>Nml`~_-oSgiz(TgP2qve_SJD7NOtX>;e{;U5MC){*(eAktK z9y90Z2cT#JehE^?QTc2B;X`rK9XH0Z+ir*r=e!^uJm=zgc=f5V_|9A7RsZih;;cKb zk9oRUGehm;Z&gU28cPpwZjCt)+!eRI><44lvJ+#?&DZ2J12jnWyIwY7)MHp3@r1d< zv0!XCw&_a1xW5Ti3{TK!)}#J3JVOgR3P&bD`W}E|1Y9#r$IKoPn~lHdI5@RT9RWKw zok506z4|9pmf=Z;JXEoZ>MV4KFmoNr!(<=@C9!0^kemETQbY-w!j}u6Lg)acZL&cH zuyA2IGUX-TB;x3q0S!dp^N{&uEcRMl2vam!yGD;P4Zz4LQC`gS(Xwcwm^(6=awV?! zqOq+hYsklOY%BV;3x?zTWy5jt^Is4@@RL6sf38XP{W~_q<#U$AFDzXb*S!Dz@yGA} z?U+AvRQLL4mrcDh{&snPQeT=`dE&|O+PD5lT=0U+{lxzibI!leMIHqF#`V|5N8a-% zvEj};^^U(D7StIm6{WshA>boG%k(wDPkrP=amDMuFHT;wR^JMk8_&__V85sd>ukLp zaQ^cyiwEz%%k798xx%nolj}lFayLFS9uMs1*?8K|UYuge(_O&Vq|+CT_{@Jy*Z;dd zToXUF&pt_?p;SH={>E4SNbH-pI4=Cchhvr|dmh+xS7~)qVPwWc>^bqYxbuoP#$Mg$ zAANX-o&(UUn9Enk#>-z5tFQS;3?1Z2`jnp?OIFO98>ij<)wts;SH;~g{hrwHrGJRi zZv2#P1?aYp?4H3rcUzCfUWd#6c{om0|Cz5V8rN<*7&{Lh)^iNdJ<-Hiq=)^i_mMKJ zlh5?3uJ)fux)YB^Zr_2>CUfzmtuE7jC=-1!UBx2QjkwRZ2q^Y0uC1<(qdOtL0$3olA=fM*5g?*^vImH3ehxF^BUdxx(t2p(xF(oY+3xtb zl75=?H&>q@U;o6F@$Uce-(umM*_!-ySyr-pm;L2SO=QEmTs*1!)2s9}|4+Q*m*T98 zF7~DQW0}F3?Fzm6cjko`$6dF6J$7!}rg}2j$yfB(V&pdh#`o=uh09mQSr_EuVW0He zqz40Ep(_(yLHOc7U1=MVB{@e`vDNd2W3N7U$C;_S*Awv3vFv}ma0Xudeb&-Z`w}{)zY;J$wpU z77Y#QZH6P0l)07lorF$&DiftK+UL<_i1^QgGho?rpE(0eq^jIpx~ zRXJ)Fn@Ce-%JUdzRPuSu>NK?aCXXixm=zEH#5_7g+tc1LPOFS+Hk}ilL2l%%pMzV6 zPJ@%RwTTliD{xwm080x4c8ASYRl!1xgVrlTWGU}I^N0(&(q$o%BM8z;UJnhd*PGy@ zh>X$?$l?-~a*-vV^yTDl@={qkEC@O!u^Op?lPa@WX4#u{6b-G}Xwwh@lAdDoMOU@5 ztrVvY^A`{Dt%HD2s2m}KptWNpClmJN=72VRip`EDfEH@5GkT6llZQF`*Y(!&_7UiB zS!5t*^1ncn|5;1)Znx}u^$)!@W}kj~{Lbdvgd2*VUv_#--upoO`Tu%%ESNn@lRsbd z(~__5=`(TUriF^q+<6P)%|G?_IC0I|Z>hf#tXO?wy!wrA(Ix-9+}o2`m%rtsnfd_H z!w+q0EOCOq8aUyrTe{?b!U?j0p{f4lJp7MahIPDn#i-A=X;UWP;o4_AD%dqkE3u9ahvlW}}j=B5v;G^os!eB&KQkeKdm-KJG^tRfZ zeW6>I|F~m)ycMYhr zgTw^DC5+8lWJ~eU5#TY(YE{OD>IgPRNdK9qXq&8}%Q|6eB}A}UA2JK0tU=mk(6@Rg zt?6BlCWs^aFlI2Ot)c{^WS&mGfIURd9`Qq-dq`wY@n=Sbsvq#Q4F>dJBg8sFV_Omj zfMDl$!F%$AtCVMxdHFvH$`6g;TO8Y&Ka>CIi%0ZszAl@edRn~V^>2v(t4sg4>H|MN zx#;A$Y;0lt<{$m{*t2a*ELpe^Pf4=uVlwbCYrqF-CiS78v!8oOoPN&v-$MH%(WkCE zD;6zV9$UY;$+F$9c1qIHpT_)SM_JyXHv;DHfSOWw)u6RcwJCnXS{6CyEafUn#I1Tb z&}XoX))JoD9s00?MbP$kTX8Zm4{K(?f z-?d;_>|U@W_Rn1u`{vA#4QtPf$yq!zqEGtjKK^HZ{Fn6!i5#|OsC~wD`vlyB>&}h8 z{TII)tM#=1@WK5tf9JNCt!<&c1u%E}=2)O_2|RSpg|TDBDSn>dfNl@)RRZ_5=DX|) z>11K3B`7{v#Dk>IUpW?E)a`)Hd$qu5JdexOie){|kPo;{9eNR$Cj)oP2rZY3P6h2nvpI(aj*v#z$lt^z`h@98N76xtHaG4&9?O=yz=h`K?mzhr}B zss!N;X?WK|JQfGW1gL^g2*HeFS9ZwgR_d7{V*U*NsZToEQksUS1h}a9ZhLrKzp6k}JbpWSS{_@DL6DCfovB3@XaDw{>e>0Q^7(~C&i>^C(KF%m zJj4OLpTFs(b+P%xb+K{HdHUs^h#Oz_#<<~%H|LoyX3+F>XR5RJP%OFg8!m8pzgut$ z0@-YRk#X+UO>uC}yx6_^q_}CLu66n#N$C-&JRGvc|+N8*|X59^~rs?+1_7j8m7cOZj!5cVj|HG^AZ z`Y@0y$1a&v31urzsdqNDVnuklH=-3a1bqYHVEnZa~(yCZRjd~B=}D-pM@KhbcsU=8x=%u)(x5PVOO&UGHBrA zTMDq4&9LKu~@bHn7$ge|rM zCWs9%T^d_;L%(IGg2pRC1SBg**_5>e*194*jo%FHl%TPJm4#pbR+Ml!n;m4+h#rp_ zfCJK#{~V4sZt7WUsUmnS5st@{2uL`XklN(W(XBV#5D#y8NY4y#DCK0?Ejqa>cWj!L+EZ~7Zo%u6q$_jL1D+3%y%5CEv{{!aV!trdagQgE4ksZ+!iwZ-|H2oDm~>W%BaB`NLRy z^VMFA;S&;lDEl{l)!;4vjq5%8FMQv>iF+=)B8K)Kj59v_;aH}t0T1hpf9JB*vFY5) zVqA9Id;aBd?}eAg?CslQ(WZO#P~fLy_3hWk;s@`JA$>n!5}#W>y-GR9ya9$UnmH8D zJ7F}g-8gQ)b9>{lCV9mZ&BWmYYAd}4djzYmkg1OnAhyAHP9QDR>GoKlF@S{*#OnlLE~vo{~XWT0Q`H=zvgm{!!TinjYyaI>t}Pz$6K@$dLfD z2#3ZLW^>Mq8R*P}GWg+R)4%!1A~|7JluAS{7%CX&jK+?#4_@;mjq4#0vfAD-qs3!8 zdiI+Rnb=hN&;@(SBIBZfvd-}S@l5~-j&nM$3jkbThY{FrEV&g&;n9rsI^aod_=}aA z@N`BKD@U_rCxQT}+T1Zk=Z3SUq!ZR89MJ=dQtQybQXYmRU&=~4=yT%Fa!&jRDOn{i zbzo-!K%0cJwi0bAMnK#2K|!68G(|KVynVE$Nm{Z^M6Ygwnx>@NFC`yh<6ty58OygI zfm&VD7OYZ@Y)aAF_Oh)LAu2%9Wl+H#h(J0zYqRgY06_MU$Rs)Ho;Kr5`&3Ox=jcAP z+fMcXKmXFpWA2KT@lOw2A4~O0*=y#nj0f(%CvLy_#+a=y`!SjHPyFz<$qNJh5g5TH zIrV#->Gp5j8Xx(q_qgwRl58?GxlCx1S-5m*yy^dWdn{PI#F9U$&jRyv!e@=mbNTMu zZnYQOr-8^0{O(i-VEA}cVQ|rkTm(F%4+r@sf^biIk}iC`boOvusAmv(;E&eozn5-1 zZR?B})ueo2?!vhJf|tZCm%lzXo_4Og)ZC5t#p$2^P%L=pfw<}QKN$yg8|IuZeCKrg-4| z7sWTvxF|NBb)kN``CzR1>gVF@&wn^pt-oHM9o8EKz8zEJ5;3EHT+h{lm3qzbJgp0_ z`{qISHGJK*)wghbwxm8A?axBxEuY3hv-vgval=`vlFKN^+Z;$P7OWcw6J?xsd3Kx( z-dmh<4qnM`S=gj6^)N<=5FAX@n*zLQ`zi^n9ALpM)_7_Lg_3m?y=4d{;v%!~q(uN5 z;`CSS@EZ)TaoUlLPa==I$!dF&LOPv+4?29t=B$c5!vR53=bS;Y_{75>zVjv&DHj6b zLAYe8*Fz;X#-F4?32H3cb|+04ge6Ahq6WHL+;?>bbR5!gT>#ke_J9UiJ5o++tKVv* zy1t&y$3b-#;2uJ;Io{rv5I4LLG!d<(e~{W+N5TYvS-b3P#<$j}h6a{qAjHxPN_pr~ zvGG8g3T#8y;7wMuvpQx^KjdjgvXgIeo2>~;Tc8)5`j{|xbjY5qg)kj3iY(Q(-nG!|R+9mX-TU$K|sZ#|k}p{mGlZruY5##q4?WY-YPm?LI{N zbQ?1C4S79{zh(30M>nFdd_l`ODYl#EQRgv1}Pqo-8Mb*{o_;!MSQOTVLC|NR#sC z9?&Okbv1xz1fJ}~z&TTbFVrRQ+1=zXpULm(xAYmRM>SdBclHb7ORxKh*mU|iG4r9V zar#vsj5RlXE>=Bod(6`W%bO72c=cQ3;K;(*ziMp^En69%{NbOE^%q{Ir}p>7i$C!0 zxb&8*V|4Z$P4>EVphdvFdVuetm1|b1ia?G zzZsvH@s8MZ!6oreKl+RMj=-!~b>FSAQ@;^FI`O`5#3fh#b?m(6?_#Ik3b;=Tf%`9h zS=@Q?%i}I>r+wvwcXN=dg25tn}f|C!mg5C;^Q|9w#z;LYJcIa{43Xr$l zW-NGlBcMO2In_@@!KGwg2b507kbFYR6j9ZG>&xBAQvIU2SLSW z_N+uO*+K3xL-@qOQwp)E>9i8~pvu40f$YXoa-k)QY!SIef|XPOK?pAh{izvi7U?v+ z2{2P~_9kcKrnTOKh7SSc(=e7xN;&y5fupL=nWoP(cu6T9i)gYCXt)^_m-Q-Xrw0ub zwAoi2bh@f7y@~(mM|m~Cu0+&vO2=^lKtrq6cz^?~R1I&};&3uJ(g5;m6v!J&^zJO6 zI!}U>v#XKJiY(-itRu5s2av!V#EJ&Ad6Eu&Z9+_W{j!>D!Thf>I%JPku_HAbY!?7J zSn)y&#C*_AVH^zEF%yJnNaTsqZAOH#2ez#kGvZ{QxnnoI`f~S(_n01@~2Ig zt~?=5S@WFu=>8qCQexYNdc2S_RQ34hD(;Ohznl$qBvjQ5tz4Np+#-g58V9G z!}rD;=dX^n`VIi;+Ry6sHZ3IlH9SM`Puio5y0#5BhBm@Zsfoq9G=07v47_eLw^9;b z>`%&pF2X~9%Vz7AhIBSR^{xQOr=mHm5Ab~H6>p8NeD{yU=&l`c{s;aj&b;obSiWPk zKC7$`;mH3p^b^Yrf@AWR#=+R4%k-ak{lAIZ&c94&)!wAQ)h1K$_8o$`-$f{Aau)(K555u=RM&Eq&ONQc>Wnb!2@~2PA22*$mhy`fSo9 zK=!(bT#2(hb}CRe<5WhT3KUIZ1u%%l0Pn<-G!SN+!l8|_g^)=aTjpZfn2{s;r#~IX z1%M*o{*eRmp%3Nw{-7YTgiKeN!4A&JLS+jPGYuoY!*%Hlr+csj&t@I$R08Czftr+x z#>j+`b%WU!q=}})WXp@rGE6C%#Rs@H6Ck<~8euWT1cpCIU_t>5%9lJZWI&n3d*wyr zN;E#;?!Vvf))S!JCf=5(GA++>OdsC4^~USt?%UVLy0g!DG;@6W;Oq-83buXv?*GFN zJ>*{qglXZDCEexzCggsd!T#Bf`{L5si{j<;@;QU84{eSQ{>dM8_ww5U0v=iBc4Dd1 zh9mOS9e?BMQ}p4Q&HCMddw1$fgz%^i-*%EM)uX#(Xxar!s{C&R@CvJNnX3m)#Gjuh?rg}nyaz-rOcxP-qX>Hu63I4ue zy=kFS>q|cR=kffneI`cqnPmFL2EDrXzPJ3RI5<}iNMeW{8mub&xMSG~@tN2BNKEJo zz;}K6ulfjCLwX4G%+Gx!xaH94L_P7K_~fC$^OlXo)eq?LRV@}D ztG}U})K5g`GcQxG0!X}NJN~W55R_Uko^yMv&7CmC#(@_Ep1zc4$o&B2MK@(KrSp&w zU>O`F71`cA;`DIPFg`U^A~G8w7U9K6`$5xe&Os^VvasPwLYp{qxa(Vp_}V(XKI;u{ z(#jU=mK^kW!=999nKm!u1;c#CExc{ELB%V&b~PZ+$Qh%|AX@B9`%Q!Xs<7W=0+*FT zh3zziIwAJR#ToVqgUvP{Uy-5Ts5e?Kd{1+tH$5%Mjc3oGPMP#lSMlaVTxkyhaI)L* zR<^YUdHza3(o(9LBvyO(C?PCZyNr%h3t0FJ*k+Vy%mb}p-e6Xih698!caWl~dblA4 zr*XX%SIR?xnaxXclX@Uz6~GxfDim}SGRWnCcKx~IWw{U*hUu1#Dhl~8lF9&J>*Gf{ zJpF#KUj(;ovmnp_cBW4e)HUHI>-2~|1q&$*NZG?xFINYazI0fZReArvYp*`sv9i7w zJ!>e|F64LI)Bg7G9y|+|ER9i3IuGjd`Vw9GU#fTPw{O`Z8#FO$!lJ%y%X-R4`c=Uj zj3@X*->U!MpZ%ZMwR7jO%y|TS_S|`~dd*rt=*Po;?Os2G2Xwmr$=wgddv@L*uba0r zzIXl!=HH^%1%LNfe>t{2a9>`fX!XLTa;S4E)8A-f?BpQRofu+xJ#fB08|=Y1!Qa+i z%@#AI;9N~~BfhtgezI=q&&i+n_YcP{FZ|xP;Z<*rRo8z$Uj1jk7Hf8IiLv>*+QHBG z+SZ=$c{59=$#mTZmZ<2^_&Gt?4GA%%6X(5(Q();|IH^j1U-m9@f&kU$DB96qQHDhd6%+*Js z&R+kec=>PrY|MV}{`kV1{zGh9cafe6;OBZVQ#)nS1P$8~uw1vG=!c%KQru(O6Wf!A zSXKtPH)Pv%%T{uC}*dO{4k<$aSYi_ZqF`g4Mn$vr~QJ^sj<-t8y_-7VYuwJJ>Zn8 zKGey7Vx@MZe3J|SWzm-%Hd{1#Rg!TR{Y7Kju_5JHd=|uxEc7A^4N9hy<`#^W1rRzV zpJYOx<$_l50#894o~+nS#gD$PY4g#Eo(yd3NcI?&l*jVSlLp0qIHBCq94v(Wq8*q{ z26+5c4e1VSf|LW=1j*Djf*mU!{|T3!spOakV2aJ4P*HHpvyq8U<=RVDvPq)l!H$4b zj}?801X^CthE!leE3STkAoIG;WFfIKGAPRfF0gl~m$n>F)2E&8K6|KF`m4|8W)s3l zmJN_Rb!0-39^{}+aG!B|m0R>C01cC@fUkO&{e*p>j!2Vr`M(<^gtwX_=vtA~`oI{p0#ozP3=vzJyK3-l+dvoq67S z+c)A*fA3wfd*_a3#xaldu|1lE__E))Ry_xF+^OdQHt3B1^Lw|(dv@F(`*n}}rxve? zi*@!-+NdiNzx%7d65sgBmtq0m!mrfXCPT8_s!3GFm)duK0Px!aP5$fjOMLW+Z+9S} zN%8mEg~OWYI15H^P2!TDWnjAfp?CIg`mP`HW&aoa{h!A2iT%3NuS?wgnNLRzj+xK9 z-wXEZHy;jZ23J3szhz^*@Y;{XT-_#ML}r1oU+?Pg)K3C)f`qzbCgJxjS{QruNn!QW zv`d%#&%XbbSo^hWEFa!c^#`6ku<2zNb;u10^(EbQIA!xaaqcJH69<IOqq$>uh zGtPjb{GRsUh*%9wLEp6b*mHBS_V+Xdp6UlVui=hIeh4iVU_`i&qXZ z2~V{yq&&fr1??!MKOi=FvVtm#(SHz`oqCYz@x%Ufq#B~1I#tx)we(RXRo<6`@d*wC ziznIKVgL+H=c(w<%`y!zEoY$)bxkrVz{;QH7@0CGN93&`pn;ZJBMW+hgrsa#kXUo#N1J)HYm=>&BHKDrU+NI3uT89w z2b&;a>r1qY&w}U&CP?HFWPKbtA@NId{NRi)f2U#Q=j?u1XMcK=0j@;!JdZ=B9x z(|#tg+<<$dWeSEztECKEJb#|P9dLF0&tHD0z9aC}DfS#$K<{=<`1g+QjobBZ|1J8w z@AY~X;f4b{^sfF;ymjG8@p_&0FVXkt_v?YgPyXG9Z3mHlaE#nLQzlhkLjBLy2oQ5a#?k+ek7?$pZ2ltxq;Zq-Fl(psfM4LANK;hCP*C!VOvd=EpgU2ra#vYJ}E(--O*&BSUA_;ebtQRH!}%| zaq#N^tpp&K|6YA4Kv83*`cSe|8@Pf9fJRA-_?{xVEh~2*f!YRTp3?M`J_A7Cq3s+= zb`BjY>(gt~1`s@naiM)+j0wqEfDSZ}5>9g}Cw9dqFL@H2G|0EJiw`H;%N$C#xn;PI zhAG!{$#~n39P9y=lqmGQ0x+NcoLl-p7BH}%HDtnS8hkU9P7zSf$TwFm1##;%)Z0Egab2P66qIw z58#C5%VOi*cg6qwm3PK-FS|Tme8nr{R9)U*q)EF!@u}Vu^?L)np>T-%9!g9oveROZpfC67$AS*cniJQ2_m9O2 z-Fi4_{f+ujpj<5ABe#@n9FqU{E?OR6fB75j*J1riv@qfJ=|mGFao!LI0> zqaa$Fbo}x?{Hm6m4fumR%!Qt%W+Gx@c3gbX!2#1f>};3L_-HuMR-P&It~IiKHXb z;r8(#mh%0{diw#H=a+ET=*Mst>Ha_UYnMIEO<9u$4*_o9x-~fe??-;;m%`M8~ONz8p_R%ag6FFNS(dC^Iqjn zIBWOzxa|GEAJ@L&r(@peS&zx{#M^neP^h>cIYETpVPMp9ys^; z{!H=euYVzC?cJ#bh(3JeZcang*y1+PPPXtsAP-^QyagQbL;D;%(bxF;99O`GX5_7s ze(E-vxxEpE?xvqCHYC7o$a9iz6RMaHmexs&T}Ff9KPyyx9OzpdwL`uIzzqmX62*ab z_rX|E@J~NA5L)LTG_K=^t@91`h&Gu_nuVq-d9mJNRGd;z8z@@KLrB%H?8rq&&yKbT zNLgv2_sN>J%9zeC$Po_xR?%m->jR%)m|+_!W`PXGPO;arMBj-Ky%^yVIrJ%o+BaLj zRX>9J+euH!0-zTFs+9ln1QmB}RXLUM4n?ldG#Z?sf+#h{KtoEr=>=~SrfDE=$s&^n z{Un98*_z%?XCh6JD?-dDVQwACv8dGTTNdVNIV(&1vCoaoEs2r=2>Q}*yvu^R?yx2i z_2~5o!7Kup7;Foa@Bsn{IC+bxc+6-X(_2Ks(%I&(R7K7xG&kw2a^d2|{vn{6_)K!APa8~N&)?mx^QMm9bHdg%3wpblX8Oj62BojgVjP~^}4ljntr$7 z6Yu^1wAdNbyXwR7klqSFhR7dR;v|~0+Bu^zO27PSA=qMJ2_vhj$D9NE;&~tc)41v< z{&O5yFfTsw!#^7vo^xSbqSy0QZPHI8%Lw9eyME61bKj-2Yuz(ncE@e;imU!I?pXJ{ z`1r{`FXxTKwJ-RdI9)&CyGjr1P3ShsOf6_$aQl~I?cF!WJ*S=(TUVSKhjf2`SZDM+ z(SNGG_P1i+ju_LudoK$40MX3Z@tK#uCC1fOOwQ+C{de*Fo37G_h8D-QZ~pi3;2Gz~ z*Dm{>xctiZ=nI1Kwfw(-*1TAM`OE!D;_WA{p~|u3tJlR@pZ=g;ZOqS0^I9mkx7;Rp zQ|&cF{adYTAFWZ}ymR|R?AJ>5vAA0v6esWdbGA2inFc>sdANK(V@MesZN-vJJZbBC z1pS8I;dWMIK&SuQ87NKqgU&dPU}@77O`k9qE~M1)Nls7d0>G7*wP`4obrrB&|Ei3QXJ6GcfKC9S;d3B0v%yAMhG8nw_}N+T ziZQDX$A&4wjEfeI{bEnm1$w8o3Z_1~L_7OHLC;SJ&(*I9a;bkpll!DzVH?*Oac)T0sowK);Y2E%(HYA zU{qHW0>_!;&OeEXNmgG zd3RhFw|xD}{zUKYg^S}KU;fYHEr0Vn`c*)^Dks^)dMjYH{B^=TH^t=b*U6Tga)-DY zz$JhE4nVexdWQV)`Io#Q?mhi{S9a;$x5mX^`gjcMR~?^w{XfOMvS-spFNhmn@`JJJ z-dp9j$++)~OJe;+FOyxTs2*a|V(R3pKOUF9|94~I0e)gw^^;HBAFD}xU`IRH|5^m; zgG{T(_QWk4xB0e@4bTp9qb|A%5Pb8XmuN0-E%+e=<^p(f7{ft1o*++w4J(ACz)vD$RqAUxCaIZKaLGVo%1K0)ZQA55 zE)=?*Qb-De%cGq$3A3Cs!1ZxmMJ2Qs%1NMtn2>pd9mr#h^ITE(Hyd&xAOXnIF6E`1 z0!ki2t;BN35of6e1k9o#hfx&810?NL2E1S$kBVMQm=-Fi0rq4--=rjahHPp?uQJE}ZDmCvWf1G3(wA7gMFFfJB=o&ux-O|G2R69|5Q&Xe=-JY$kNgBrC51#?i2##gl*Nf|q23 zX^@|O0jj?g3}ezkYqsQdoyv}~TKJ+hZ%;?c^&Tmuw#kJ~o5>TFzBd`vX^&-75@BQQ zGQ}@ARbylPoRSRB_n_TnI%Kxtq5Zowp&nFq8)M2mW$|oJILxBi#vIE8d@A~3U5eeJ zGxHr=b!m9j;uzaL6gTTZyqC^h7Uy1aX?*?@AG1-7-`vIPLBaA;KCMtS)`2_;T>6i_ zCw2||dU{QlpmnC`_Dp-pGr{ChFim29w?7?hS(fWg0Z+bL8x@7s6Kod?}3U5(aY*|KEG69#Osjbnoi1{1)vc7TKe zg)XuJX_ID^tQMM;W@XVfYo$rkVYMqENn6r{A#}iu#x`Js4YmQ#vMo!NENi&B(w*n2 z-_Q5^?0wGf_r9<0y^>A(hxhyb&e{7JzR$Ctz0cYE%vb4UJ7-SorZ}B$xaI0C?WvP+d-~CKN>2}L(#?La`@LUm2cCCF zJHF@o_P`5Y)_(6b-_yQT&-Jg@6BQRZZ9?1XG`uPopB-D`D=_*Bvld-$_{6=h)x8AY zDI4-f*YCgaw|~Cv(YGM@vY@N8tAd9m%j z|GxI3cm11o_aFaO+s@Ix&Pt?T5OXEsFL#`n;Bu4-LH3EuExWh0&pf6Hp(caGq^I+$ z#|1qJvVpG`&Qb=9JPqLX>^!P0lT4sV)YCZ@0~en}_X;oMj|#yoe-WpDxu}KpSsBgx z>7U9%mQ6b zRdK|w@l{9Ht?FYx%Nwy0CyeJz^Kc2s=a9ZE69C+bL&{Yn5JvB)U0VrIIZGi;wobm5 ze4-$k-awX5Fbh0trVGOcgXx_>xPpOJHjuR()ZDZU@hY2i;mWC)*`Qk%8%muDL(--~;Uyx4*Gnw_$U8@A0SF z59?FFH$VRlA0gkbR|2osX?P;xrWcs|kZ}CUUD_Qx4uaMU1eNbc(&-L(kvh|!$%Wz& zi7>)S4NJgUvgONM0C95zYn0g6Deu$5=qQ=xh>|baq7!3ex9jVMx8L>Rc2Ji%=wsL* zE;sGo(LVk7L7kbc4Ie-F9#LoNfqwOn3L6)Ls5h-gs-(ueJTRzqtL}PyC~{>&U^jOJ{p_J^i?@wIA06 zKzIWE;H$o)ZP9?aPxlsV)*Jpd^E5!kKmrw4VsW9J)Z>C@b-CcA2J?5n@%w$xfrRxr z;Dhb{uYXhfxZd!0NE3@=dZdt-0O>T5{W!TRk6~`!e?XTbKH6^i@O#>ApZG&R#X$dX zQ+Ru!(o!MTTDv`9lIMpTT5GD;cIm9p-tAl46Gu+8jqY4Xi7(~z`q0sOO#l{JK?T1Q zNZPvHG{W;G695@xKj6NUg=9siJ?Rhb6LEq*%b$CrRh84)7-ULc8S7ix*yzVbKS;{H zM|5PZ8)W-}1-E}Nr@>U^@(Vd{7t+l{0Gp!WFEYkVQ1Lh<#)V9p?K83Pfk648dw6&$t;?p>y4{Xt^O7l@;WK9V>vgn0Ce{K4DGNJsgN*O;itU;ot{7LmN(@*$|DSc=|&Wz_@nD*0w`$=F5O2I(F)Gv~k!mAg;wGT{r&7AHKi6`iG z=~SGi4)%FSDLBG%Y>5{}OFazXv9E%r#EIgxOZj4A6wc{r^X_|J()QhSbK9?*3$f*+ z5M_4jD1Ohj&F%5S8hkjCzC>c@ca@%dzi!ty?a)G*B&FWY%ips)D{x*<7Py<%>3U*&^v0Xpea{niPr4sslWtDD zN*taPWu4nGUAzSC6Nr2SeukGl?ry+4I_wpqGjJRQK}XS=(AWp z=LrDQ6T+3sYl+wTK}&s7QAfo!LQ*sW)dOKV7)ogYt*9;k`ZKNgg%1h=u|(;Q4HQLm z+!Bby8$uQmycr*}1ROmHSehB7aWH}};+YROzTj7MV1*VP$xuINItqv;OO-8#9dtr7 zsjy;Olx`2f2-yB&d}sAR4tvXfxJ;dZM1~xI23_#SF)zAnMhv^GbyWF&Hh@>hIo z2-=S~I|fh|6G#8t1HjBS(Fxy2NqUAH&*n#~97u8fAJayYK&ldKZ0D}@_`x0f_kZ%^ z?P(2$-+j$Z?YH#iyGXHG-APnLhFm88M8mSjo*EdD&K!$$xqXSgX$wyG^X^QSFvh{+SH znGGf~U;9mO^b-Jlg7};UOY2LBCk(EwBhvYRgtgTY_Zr-|bGsi+#3jcC|L~2Zd`|yo zLeR-(A!Yv~$3$Se)OMXd()R1<{NiSvPS>T0*Zk@~ZCC4Zz~O6dY$tWi|Jd$*?bxns zbvk~BpSeFH+2eY}FZJbdz_WTw-+6717j#BqIdMM#GCEyhdHmUO`02Lo(35T3k*7V_ zZzm5;XBoB~KG1d@e6qd!$NsDK@O8sTuB%|~X#SYDzc5l~x08hCrhFvBu7j!A&g3e}a*reAQhip5U+;K^4<+lNh zd0u@%Ri_W4Mt`FH@yXkuvJN{Ay3cfGifS?UB@alwPvx*OF#`wy{k$q%+qOa4x-e~& zDv8#e5YOEc`=Xg{9*)H)`z{(}zhA^QB?~?a;F;YkGiZ=(4<(6Fd&`#`1!u7zA9}l$ zAt3-?dP3vA3fc@cA5GhsrKZqHoJ#_sO42q8Lv{uSR@F1&sw={xIb4#oUj~pp2T3Ak zQqLeEpI9gU!2qgigS>uN#+>&DnsoZSh5G-%!Qm@R&uIdH)2RcM#$SSj(<(SoL4Lgq zQDti3Y~%-@0GX~uWkZxN#*B4lwEbi$(Bm+-QK5W4{D04fJNkSn3JsXY25Wwr2sJFCYp zKl}36>xR8`ZO=mwx0ik4W9@29^v*x^u>8{zJcIl?y$e7ps2|f;`hMdbf2-}kQ{P|E zrF1^e`^w+_<@SR6J~SQaOK^iGI!E^GYwvsOkG5miXu_aDa_du1w(tD8zuT^P>Pw2# z1;1Emqi)jN$XO+|>pJdTP(QolTvuj*tGnoaG4<{3dQhueKsr zicm>0lrZRQYhRmLV zztCl`*O|KD3oQNe^*-f=<+#pmOF8>HaU>hCGC4DyEZP>502B;VRvA<9*Z5+PhiJLz zSq2g`@vSa-CNPmO^I0tvfoGT8;c(WDvcz!(iy(^X4(BZery<}t0V}>`OCJ}igR=5K zELs1#w$TS8Ng*xy?0|Y0tPGfK_QBtlO%fjr!xXS^@W_6f6}v!m9Q$tDk_1OO{H1^# zfclAtT3iFuQsNZDwxeg6(z7#bQJR3HgU)xQ>lGh$#4AyY>vB z?jTJ2x)^VKo?%)Si&85H*Q#(6Hy8*=PCwc><5$tcjfjr?FY4X@-R8v7-T&G-W+ymN z{mEYsNVBidX-B~|vtG9qYpHM6<$^zW*Kf7`k3HIcaL+C6CVda!=MO*9KCTbN@U_72 z`H>%MTlG~qcFM$IUMH-(u5JMOT7D)vFTQ1p2S%4M2PP<$ln-9w*vT~H&A$$huB13DAK2!D%S!s9#Z^{C!@-Mzn2uRh+U zBmUi6HtW3w`Q4_^IKTD(`X_DQ1NV87!%Kob@!G%Gj_JOEd!K%|-ShMp+e@GPLff-R z&)vWNd)hJ17HChlbC;gh*rE^qY|zJu*6Gy#MNaYS^1|~! z|7U&)5rfWydJ4d25pbA_>$h0vs-ODyd~@?Y&N^Cj9j$!{Wv3oX>A$QP$#WEru{w~F{SqLpzdqe=l?7mzrx z(QIaa|_?jGy_#UwcJ-g+zo&dN}DzH@xt?ZT^4$ZZ< zmvK1!slwuu()tx3G^@g}34((`CObVJA&C~85_0b#La|As*NtM4kIrOT% z7g=Nb#w99XL_>HXQoj7BBY`Cz&&i+X^uJ`%w@OU}j{Z3d0G`_%mR+H&NNXofeO+gc z@|54GBe0Wt|NpQ5@-MbqHf(8s_3GRGir#?3jgXsE#2ThTT_*Yp)o{XAkFO_Qv5l__jzu^&(NV(OIvsgGtsC%8>8S#J9HHIvg--}izAIKd zZNOyZJb6X-oaFhc9yjXUdg5UFj(_{#x4jSPehqc4liPQ-Uw`Y5>Arv;@LK^Nx%IC0 z%WwZ%?TatC*Zgfy?Qd_=wfuV?{Tw%ez8(R}8_ z>OvN#_cJt#227?Fs>-eaa4~jvF#nhw|6siESfWKV(F6tVMFHOFlTD z%zSsTdcm-XE$W5mWW^sCHVE}uC7S(;Qu>tLz;7jj!zv9$Ilt~0-GQ_Q-^!&@uof?^ z2`|+7k`6Q_l*>{N4mM2^ue;S1x+((0t}n2ja00u>VS`Y9y_Rw+2?Srwg# zTF{G52)4Gci8Zr7Fs%+=Yz;gY@lhG+8C5=KL!ngo1IP+-yVpxv?pDQ`I&SoF2V^kW z$=FE8r7*B1SQt9!lRMZhf^sBidH;FY4B5*IdRY%o0ND2#eWL~>o&capjpj`JiBI<4 z&1PSWk_}qQEVQlfr-bM`!+zc3WP}fe}#I{8r%dODBF*X!CpmlhIJVp6eHJ!v&*EH3H{*m=F2DvE&}NW)Xkq`$ z$by~!!R=q%Nj6c|wi6JRcp4HlI2VnUGZb5*V;UO58o&=yl>Nb@v*g!7X zn2Dkj7rP8hB`bngnD!mAB4AN1T&J|)K3OmN_E}j5&n^!_PdXlxw%&+`&O*}8 z&qx0&Z)o8Yv^#XSw&RAm;Y&d9rVl{NYo8U+nT22YXa8$EeBi0}SNA@@y-Du_c#mEV z^xrb zUr!URJ{gcFOqg^%{Ca&<={tVqe{3&)-~X%k^q(=#LwDTU4(qW(()FMJc>9k3?eDj{ zAG^P;)1`vB57QZ(rFhC|?km{B*9g^(I3sXU?@my|F6iT*oV6Vm_E);&4|e}s$Y0bO z6gTQU42$t5mKe;LuD%ZqJZoKJ3iW{l4s>q7(V!wY~SY^ADI|0;Y+WsU;;o;Yyn&TB^bEL zk6M*M#Q2%ht04mVrk5NA{ZI85iVJ1S_9B~li7(o8**3dlk}*DX z`NaxFem!s|f)Jgl(PAUsFe{DBfHP9ztYX_ykg)%-P2|g8ferhKY3g8+ZU7%=mmR=M zU8){F2S{BoZU->npPz%J7rUe*`F{GZ_w3#g0|q|%@Q$iM zTTK1azjmv$u%*G1$NyH-xk`i9c1-|Wr5R>#F4}4SXE`z1VRDLjvyPIV{NlsypZ}A8 ztgp+RYyZW*yV|#I-`C!K{6PEZ{rBmseJAyXz?Zfk{i&aBFVzzQd`sXQ69MUaFcBaF zi6;W88`s=5G}&j<8Tf6h27Z-smO5ns%AjJr*#IK}%S0~zf|IilDkG~O$!)E=_wDWM z>C^4rSA9eKOF!{9+N10A*c+((EEN@r=NAVe3}|BFk{SZdOM)+1AwqbqCXL9 zCQb=>tx&PQYFF0io5m_Ofc2mqio~I-J}Pq-fHwD+{fHm3@Raf3PYjVX2DH>&OLeRD z?FQWwaL=bc&^GB3hx^WK?7ZoLPwGrT-n^HInQ)9t+`&yUwidRlHIEl=;8d0Tf`=dE zsd>*32KqM`Zr0j{P(TN|lQ#lrY?Go0YpW&zoB^Qi=7~Pe&92Lr0W2f@oFN;?A=CEQ zRK2@@#>K(xBqWEUD%clFk`P|MjD);>v)7WPO{|Lvaizz8p(hWn;2RfgI4oxS1xTW0 zKU82=i5&hAGNU>pAB>3_G9@Qk+`&t1arUATdc%+CA>(}oqS&*J4Lh5CyQN$&B;;jq z7VMXdRgoBgsLbRghq}G0I@qp=cEE+iyL=t7rrdv6kUW2+;d_rJyr4mH#IG9$U3)KHc{*n8ohQf(dO?bx05EoEprg~=8UQ#Y-OYMODEi_W@9R&z z=_rtWv7UwZ=X~GSe(rzJBtT!t`#bwy)V^=`&Fy3QOz+=*;*;$?dQ5Qdb=S2Y_{smI zz5U1knxCgXuRF}`vj!ty4q#Am9TX4cGsrMl@k53ICw^rupR5yF_gA1Z->GBj+4*iV zhgq$ahONGuxSTz6w%wzN$`AeRpK0s2Z)+bscA$Ojw!Q5S-u>I{QN8APgJR`q7?&K0 z0ck_d0L(jtd9#I_L5_r8_bKa?8GA{cHwJLU#&zkj>Gf1OU<#XVzEkZpz?-j_5j*7_ zM-9q69?BGp80xxAJ9*WX_It1Y_uFs$mH)h*+O22k?O1$Ze(+~+`b+KK{@~BFhi|=G z26TqW?H~sF{M$~CdB`%>&gh8$cmp1>EV+R<>3Py(cdBmW@vZB)h@$sq zl(6pgyx!57Tv?Da7K#&&{gcm*=hzQnS8`@*tGyP~JGYCB3CuTKz z0$HwCg%S+JBA;0%nj;)yD)kO0yxy_W*=$?_y|OAh8$5TJ@-IQ0Rz+B=G&~8ToD*(e0Dy##+KjLs4UFlrGkbo$}ekp!C-p+BHwGr zeEET>e&|STDi5r~aC!#iKIysJl_^8aMKK9Xe z@Zh2L>Q{eb`vyH4xLr4X{o%=j?cFC1w8I+k@7%V#-Fe3g+e^OgRsO2qfyWvD`i)RwKBcj2O;7T+Tz-L991Ikqfuj(9CQs@=X68eD_-~d z_QOB*GkTKY`u5HvkGE^}bi?ycUuggM@BNqU^pQilm#w}_Pn-ZGK57>{df=(U?abNp zI;b`W?n2VA+g^0t-nM(YPKPV?_%5s$G%U45DQp>Z+~oJex82kBKmTrhe)p>Ol8^jO z+p4eY`8jLC#iYu0)#~*CRUlWBBy5|2U`X0dPomaOl zM-R1^zxS8g2EILDpCV^j5xPDV9T-(>dOq8kBTTIQ!>x7g{wEK&+fL^~r zvu3ByZB7j1c3qQ8yYS;E0+VUehON$t!ob6ssKqT9RqktBg4TaPsW7LzKbu|);Y>Cn z@8tsa4A68fXm{G7CxfIgw-IcVN|tu)vc`&s)|{0QLBm=q1g8kS-BGd*HHkX^~ZmwnNc>~U}jrj_-I*Sbc?V-tF{%m`RdIJcjOs}e4IK^Hvq^CD6Q1L1u4^Kw*oYBZ5m#xbN)9q& zoo#z%gE}djwhxVnm5P;o^sl27$7O)niU$AF`tg4M_!Fv@+8Lic@`R4|cupJK#l$J; z7hcPICk(T}#r^l0GAU-`=RwR%I{OE>Ro51u{V ze)IT~?L#LIwJnP2-B(}N?$Vp}Uar&ZoAheiLwdC^pBU!jJ+>nQIm*|NCF2avi6euB z1~iR6{m3>097nks=+O6or*iihUZ;naLrt0#*)yk4*^f8B{rlSY|K#6nJM~q=-_s?G z{kkUpUAt~*zwpohY5S1Q0BqBZXXzuvN!sooZkoou6rbOJsGZU!j-2A}QJU8Hefz#$ zx?zyV0DH^QFO=7>x;0f@Bc)B?_qwgu<&?uauW1jx^fh`5;KsH^la$*&`zIReHK7uq zs;-|-#cS|gr%N>KZyve*p7#E4`GNMnH~p1%__{pew^676?|#=Wv~SYjf5+nwv|B&< z!M0I%{vW*Y_I6fJ7@X7f|3{vGZ+qZHuXKCt-v5YS0z|*+@y2o5YQw1$?SXr~v3>IO z-zCDjwok7CzV`#a?t1~c-?WJ;!M}Z??)b)^f-!QAx0uwNZ3C{i4$(fVc%Nj#Mf{c$ zj{CqN&FEVMCThaW0cGh;-~gAsiGuxC{ZD_1r}H3xsKhLnDT9r+X`gH8S{EGlcu zvzFH`hL4;R%9dBzej=&7v0#CNq<0OX$J)?|v_zs~;h}>fbs!m4YUN+i!jznSKq}JU zdEiH`-#^gnV_V276`pY^JH>9YlEO6>V6t3_H#is0Fz~5emj-fnY8?Gv)b;Acqao4t zj`wrNo*F*b-fXc;H?Q5XZ}*Hc+nDW%{7Q8rBj@lC67)W}vOlNmZqYOGpZ>%r+GjrX zsrLLA-q~J!!_DoD+pf`(^rrSvy|L~$bvfWeC!cPcG2^)>BYeL?UQI%B|h1bAHV zl&-ZOKc@E;XdoGbh4Ly@S!X(QR)G5th!}F?5&=5;o%g9~oMTcjO$@;Egre5q&?a}i z;%nOX|MmY=&-=g4ud4kuz1sLQ`eNdb?76*tNS`A9xqtZIv~8Po=YEenecjQ>k}QMJ z=QJRlSmlTmeg>Y_?$Bh5XY%oWIrT6v#Cs-0zvE9}sz)$kZ#;fP&)R=|JG*Ol+kgG@ z+t#B`HwNg9`h+l#37*xNfkS(4Xb;}~b?yCc{=xRgZ+v@u;?_Imv2v<-A928cujM=IeuiFrAC3Ecu z`zyBDS$o4YuY~EB>JQObK(G&UdtIh#*o9YJuiJ6cy?C~IvQgk9;(z6FYQBT6==cFIn@C58W&BaDd=v$$glHlq?SS$}K@`_tS=)}?!~iMCqLE3-IFzQz3#HVg z$H(=X>BL>3ie^+YPS_^{Lv_VgCHvUh263xYhPset!M}8gRFVh-vuGx1A*ocS)2(bZ z2LAIWdC5=k3M@Rm_y6p9ec^AtCIGWe4$7IsPqec~55$L2uV}O5y;)zAd&6C~gkXLq zmG+qpf&l@)sDppugWYMJ4+u1TJfKSfTQnej-;e%S`}Xhp9=#Fps`ijx((=w@Pqbe> z`b2wLN7wi2bHaQ-;M;VRy{F#L_Si#TXrI6D)9sUg^5OR2efPB!Ix;=2L5iS_FXZ8q z<6z6OSCa)M02qe}pM?^GK2Gs21n%yKxmn-0zw@OpYp;9DTiYvj+JB=4xBVKx{`W%< zx83VEwjbGhdwb+_pJ{*RCw{!0KJ=77Piz>%A$_nj1<7uO(EZxSA8b#bIOTf*keVkZ zDa7WDiuLmpbMED&tcCt7=1edsFU8w9MUT9lD6;aZ*N60lzK{Inzd=`T>oq9e^x!Aj zc1;9Gr?&2D2XrKVeD6NZ7EEgEPMm4ied;6auHXNac8AUw?9erJ?(*k3l36#`y9Lg) zlV{Gfhi|#7efBTBtv&L}H?#|SZ-iWQj5i!V)%HE|xwiA^{o16@w=$1lbO1g-WzKyVTgC-BzmqIZkOsUEf z>!c5W<)496m<5jmEb8Rhn(G4?%B3{ZW#3|1M1VogHeDz^c#`6W98$xcC=j#bu^&OK zdPryCKrq7AiJ!n#oqz^s$-eQR>EC9(Z?I7`R8Q3xzV_`)$Z$qIk%*b9*KGWm`XB1$kM)7V-sF!q zDocL&Y}M$e?$LoC9F)3@gZKNVd z#SXx$wk_+9b5y*vU8G6p&vGY!2DpVY0Kz+WQAha~^T<{A4@2BhfBL`|{dP3Rb@&-f zHbPGTUi7?j3+)<&kkzjrC3%p7r9b=)9yl4ig4pTt|LE}(?WhLtSAN55+B<&ehub|m z(k4BscM|+RM;>eM)#HK>YEp26t}VZ6>z?)oohkU*?R(oc;j_~?c~nQXpZi?9|GrPP zM<0HuJ@KVS+SB?JG4~DF6T2vXB+Cxp*TfYM`diu*Kgbg|y|M4=J?(k7KfgWyo_pHY z=p6+wc(Gn`qi5fb>U8mM9o^sl_|&2H&3cUSEt-@(_}Tl~&;DnBvmMl%|90qRK$0N* zV@VWJjt%y0zxMGjT=oQjm-3)FV(eHaey&?T+t6c;H2)=+K2v2ePU;4~55Msp?K9u` zAL#SD8lc(l+WKZ?T$bCt#*?J?j70@uGh2u_|XRz)QBY&91uFv zKcOH#e&ZeO^RN20_QXqG-H!Vn0SR+oBlZXg30r#i)80?~aeM8*`1|epBm4c?Uj#fr z2qyzTYB6Z|00@mmUG)cKk2KIJ=N^D}c>-`^)d_$nT)JOl%Qd%ZBCr)zC$O-mw=uM< z*6YiGvN=yov^Q+hi>@|PDXfW)KP3ESZ9h$jhapBB2}4FFgRAn=HF+#T0|gaJV=B4q zU%FjrGrh#C>r7Fafdo|h7jSJE`yJ0%7*-N3HxA+pH( zU%P1NV4(;xWnzbf{~*VDm&jv?1R;-umOG{rm&RsmJ-uQI+pFIMOQZYu*w@|696}a8r1zm=6x!Z zBUJu?pk8>&I)qw>H{iuX>#R=eA3SwWZ3>OO;~ zo_L}ieDXj$rkl);9XcF8R41ZFKi_-pwQbj)YudgWZ)!K*c5A!g=3Cme`>xXw-d4sZ zO+JpdKhReUKYjXWyZx$d?Ynp0&~B3b59+l4|MateuN^zEUpMUOBRg(?Di3z>6#)H} zEv-2seWnQjJ8jNHyiu{fW$#X(0g#&esw3)+NH&Q1EVe!)Mp=JiRIKqOa`?eNZG1*Y z>JQ!i()Q4+-`o!AO@8O~I^cDh1a3Nd*f;lGd;iDUHILrk_8fW2-y&GYcN&CAyhied zsCubi8CHzcllIguP-hoT>nzGaz1-)}^|!PqbSdD_Z7R?ecB#CM7xu_MC#@Z|r7|@3SKdUtk1D@hRcl1Oyydk2yFS|J5L^HNAOJ~3K~$wl z;n9<;P5_8Ef1CA!s*O9YC3GXj)_R=<&^-c6A3&nt(C0Y|Fbztm3ILzWZ)%f$wsVe^ zU2_Ex4;@V+*#~Wx>!Liia}X`bQCFPGKHatOexAKRVNg$!8zc3Egk2A+aZUs@%wQ>b z246;t&~&O(1vutf-|sOk>=8xoYaSY(l@HyLO1bRGGLci<{1pK3)Ak2cY z3lJ95+7ke42;4r=@NC@kz#G{+N+8XVlTf|mtsvT*PumM4Eg~8H^&mz8Eu(M>1O42o zoPZ<%AgL^|F&S|sMPL?&dIgXIjYh-c2KFpKz)2?3B~!*1%UG=2R6%shfZ_TeCB8*W z6eIGfKUVYy4JAK;c(UBLw z<(*vD<|v6ztA5Mfx5aleusipIc!OK(VS_$IzvwnqCa+%*kf*4H2*-6M;Ly>dZTrsM z?dx9qy7m{}{*HFe4gA^Z!|kXh13Pspo`IQ(z+Jjr@O*vi z{Z^Iv;(NDh<;z$obnOX!BjG-M58*Q>kF@)BW8x9nc;%MedW+!=?G{Zm_`uP>)(wBZ z@_+oxwn=?|*ABhgUY6XlYTv5Lu-5wq_1mBUoC&~FCv-i0X;A43=X9$6jd$Im3BWF$ zwZ|h;Vg|PJtW3)q`@}G@E}jEiG)PXwU;RNx>Sr}TpVKvl(|R}m2Ia5P84e!zY0*6RzL*#DndCEyLe!Z5vH6Ho=sj-L7qxPIa8x>F z#rqxGGkqq5PlzIEpH(1He|#%>NL3}%DW~q1$QUi1b+bVoRLz(z?@3Xe32^_hnMIqP zyi|;)ZApS)IOV2T0s4O$A16M20;VYfNqa`#{`liS@HKu&HqjGbvQQm|ves9N&zf{< zOr(T0kcgQax9Z*b;(OX(_|~_ySA6}e+U>XB-fq`tT)#_4;YalC_Rr|- z#m98h;QhK8k4eGr=&taZ zs!#2D_vD~>p*Y9_G3WuY&20P(xQR#VFV@P0x~SP1RxhnRBajI+5-P}++;zep@7%X? z7Oo$3i@L zm!vZY>o;;FsP{=obgM4yT+~gV>$tYAbdIBqz5_-F92lZ`kb|V6zYJG-*rrz99SRom zEu@MYVqJ#(8tJ0ip3ekt&_rM^kA1eC^%rv%WKtKX>g;VUuY8D;wiQ1@kOt0s5l1N6 zJKEH-g8+|qqRx?nMf#4xmI){2)Cp!}A|Dhl zhut8sBn7MNEns!qB9=q;FKTi>*ml&}DpL!)Ks{0ytRzWh=!r(L0MMSU$*DBzRJzhb z)<;IXphSO*clZlShIQh%+8)FyUEroGziej)J+YnhAgKv}HI3E%20Oy6eC-VX@QIa( zeXzF}JZ%Vk!`+n(x_$0Iv>tWbq9f4Fd#={$>a*>WANjDqBXHyMZf$qo^WyfJH@vaE z9ZXA3}gACy^qkO*D zZqz`3jUM-UxsFV4)O`lm>GVD{x~UG4+m{}GxV`f|zti6HYwv6i=*Gj%di?9!t956) zCfVromm^l%g2Xbp-ma7w0ER$$zg&+g)(m*AC!(t)`p}7b6b~HQFY(g4!*;#SQ`ku9 z3-pH~$kKYn8!@XY(|MFF#X>fz1MdYeBw(U@kQqLxT)6&*J8C7&M6wL{EQBF#Q$tSK z^sYk;>{?HBpGwD8MZ|O_0}=+hM-+)77taW zL6ggPI7#Q*0BW<@CxQtBcKpUo<;H{;J2>H5;!|+kKU^Vdq@P(O=ZytDWX)ARil`)h z1|BlTcbgdq4}^(s^i)Jq^3jXG;)_N+dOI2i;RrJDhkvIevFHUEV$qy+v819wmC!LwFMAzS}_5b z8VG(mjO*i)l<73xh#}l0$w41ZA!{YA$dG6jgm6%6vQ9V~Zs?^5&#GQ1JJW|}jKV9h zNWw#aq)c^+J_8v3&=By4Y?o&(Bx=EZzxf+&hn^gG!CiN? zyY-%cJMMgu&l22r+imT-t-7oHIi}OcjmTy!#5MkR_ew&^>HYaCDx7+%|hK(?K8aMxCd!1KP7uy->~nK3xX_b!WTv* zA9)f^{kcsC51RwSr(?ko~7y)vfKMXuggqmmSs|rHub;{av4C6BYhXO zrtCgnGIVh+DaE;X>0Z?RM@N6i8C0TGu#UwPKf*~KIg5H}O;-_{+@8nde_VdB0+4GY zne}V1c^5)|q6Ja6q3%}HxfK}_A{DEI4Zm}PQ!1R=5EC5x?ggIVWE93E06FQJ+vTW? zD}*fZ1E^!FUM?0MBCsGT(+5>YPIzujWFfmFsPsu8X)V` zx3FbtY@4NpiIK}?BuS_rnGzu>g^%yVV8qk9-Jh~o{vew%#YSaE80C8~yz$45Cn71^ z?b%{!0)QjhTUZS#T+v3SoXoiFoQ+XVXF`sO_jM>)sw@$M9;y{pR4D}UiY7hF!qShs z|6%o=fiY{5Pyd$QjB$bMv;HC)7{kC!V#=P?hIK+a(;XTFwbk1Tx*r*@T%a5~Sq9TP zR1xH%lg5rpB2o|6k9^eQir!|ZLBC%E$G`1*G0rwU8_%=-++g-8Jp%Y=fAqn2l}<5l z(Rb!|=y&7IH@Dkf@WOVT-q5%2`WtjF!OpgGmyXtT`aix6|G}mQc)w!7xdv{dR20E)P#k=NJ2W@B1MigOonP6o&ekF$*(k1cwkt=Xv#@D zRWv75XQxFGnQM|_Nz0<6&V;8Y!BpN76?YXR zGm}%ri8m8~X}=&>R!LxUHtd2f1>QhfHrUt7Qy;m&;r46<7N~NRF_89P%9WF}L|QgBxEk%OI{4IIwaUTLUBWw)= z&h(H&rq{=|EKeQRwXJ%kFh7ox&+4f9g6?cTynlZ?@aUJ?pMLNIo+R)BAJUGUyL3~V zuKxo{DnG$z0&q$<^8LD-}VjS3<|C2Fuw%-x7E2vnjY}>#NZa5p z{Y6FE#{E`Sh2?gcITj5F((8TAinL9ya&~XD1)#K#-9oLO?kpY*`>t{(hS|?q9%CeA zQ*jr|z0e0E!XBtx2Sib#r*z)>cI4z4O#&``hKqVLap8>E@?`+p!^hy`L=C+7m70W*?laE0Te-ocYGR~K3RhyjwugvP%X$j{o? zI&ehyc#G3f)Kantq&Z!-XC>nS8kwP^tlBsA#YeQ^mrZc(uO(oXJL;D{vO_@0r{!e{ zT&q?LZ3jZ(sVoV{0y`Hy@c}@5$JtyLDcg7Ptkr$8oM^&=1NL+_LFM988T%u2-jta( z178V$(KQAtns$|M&>TRY<+PN-DgP`_J;+kO@U(JTm;g*H3~?tq&Ok*?iQr{iq@bVp zRD^W|ky4Tp!PAyX2ND-bRM1Y4voFd` zB?j4}Ix4+cj{|CVDs^>w1|3AyO*!%albs6j$EOh^#l&PdVq{FHdLUQ{9&v(VUFmHY zcgjPJj>W+Q3muWKV&L`%baIr2Zyc$gXXDg*o$il-MpDj5+%eA?jomuJr)%cvgas=@ z$BNWZ5X6e@iLJxVdX4WY+QnWAl|}GiD;_uKF(9GT- z4IF&(5)h@7oweRLf)bw?ftiHQHO`5;l)}>umr9uN zCxUle6O&~#bKGpWBmqvN$MVTUx(8sBreEQgzWt!Q+2hhFlB>yxTb1r zhogK;fqoeo$Z3&yV7@m^FKiEVj|b{RmI@%${3yq)%kfiLD-K4b$scTD*1D+?~lT=CuU zSDjPL;D~6tg@JI2sAMcei4={g(}X%W7L$yjD5N6UPpNE{nWZS2djK@tNLx6bri+OG zal$fo7HEO_&#DkQuGTY}MMDtO3~OK_QGRxaLh}wtI))Q%B&l%ipE%^YX6LZe(#>f4 z`d{EzXm-J|X25w`k5X~^9i7}jBX({0Y!?i)cu7hu$rY{Q#DHxjOp>K+^DOjp9jDGrk&I5*LvfTvIW222D8jO_X$UbKhkgQ}sq=yau#A1M^cc&i?3vRL~PJ*@?%s#;)Mm zwtDQi@u}x+cNP1_=90pU2X24SkB!XScD%*!xP2{xE|ud8!ZV*#qTc+OYClsFYqt5s z|Go`$6z?94=<18 zLLPJ+ue&Vb!ov)I%Ev8e6c3yBhx#BJlq$F!`n+CI={vPV0NuhE4nV_%{I;8OjG1o;**2@0Z;lU4 zQVB?nC{X9BcGxTl5~=iJAvJYu!?kX*Rd-{CLR~=dj$S*TzQgRQtcj36{j2qg)Bk66 zidlEb~#g1#C&My;=pIb%s>nzI7vy7NMi+@eC>;21X+ng{h ziBGnPF18D2?g&_>Qy)xd;q52!PytQF8w|Iu-*K@2n7(shp2(L-*yZCu+zT+j51^~% zG623~Yf9GhB{*3YhHLH(L^;a69@GI{S3p_O;bs41EwM_5Rj=br&#<8QNHleJ97H4T z>ge`?5@+QcOShePcDwLL6=YwHZn3ZY){>!FfdB}sjKU) zG9-MnaLU1voR~dc?i+Txu-MOd+`%tQmxR?!2*YuMpZa^30*-yJwafHj^nfC6v7dNG z4nEs}l#wcYiqKL<0`_D_EJ`C7=$5UD>#%{S((DWX!X)6d2eD%|B^xpbsE^)}i!Aif z&?ezrbo*+OE;Vo*MU|D3DTsb5J~T7DV6gMu|I1k7a`PWg2RzfM=m|+) z%1w@@xDjx-zIK-y5(WM!rDF6W;^7qzDU(5E#+N@mF7$Fz`tO9=>z9GM20+>HP9rL1 zQ3as&fg@7dPXyOFR_q%yc*}`KhBhq)d!r&g<44>^m~vvBmdr*SdGQq!n=u>!z)D8h z?x#^y<_&-cj-T}V6#5R%2G&@B`;;aCOd9AR9`t3vb#Z)&Ne%L*9GK%Z_7d7ZO8)MUmvS8$@|z z^%n$Oq^wfOM>a}KsHlPgdK)qrLh@`&NTOr=uqInvN*OzLORc>?hi!?=02{YoZHyR- z4wus|>YV_s-e1s>9Bb)$AgvcxWl-=keZfBCXO93`<(Wun4SVAC3W`J>t&$j#x4oJ4 z&~qFtEW99s8hsSWPd?aciOnopCF;S7cOJ5h(JcfxB?jBHa+Tdtl<#e1)T)CdJ%@-T zEz5~gb+-@+)%ZoGWUN#DNOf^fQI!bg%GBdpoB`2==_lcNZZXKp5GLX&flkH+%iDRV zWtg)K=3$_ud%Jazw3D|x{Zh5JwU^DX(ii(k0AwHE8mD{dNqms7p+>c;bNZ3G3 zHihB)9=bd>Q-8Zb9Y)h0|0 zkYCoBv=?*Kg`>SM9Xj5w<}8Ygl^1XDk?t!iH%2vtu!3P2u z{>cYyJ#z4v2bgEN0WhAabtS+5=m~vb=bY|S$ninq+T**lcHBpl5_k7qdnHHkL`lBH zXR_g?Tw7b0i?o+$BGc_tE5v%=Ddd?3+0+@H+oXh|Bc4rzGet3ZD~#BIZspO9=0 ztKI)d^q5id*%ir6$ML4xU+R&k3S!@|qCt-he4!kE!c}}|Jq9B6SdPm872D_nQU2G2 z!MI(&c$N@tF@Dl5A7*C&a00r5Fpl(5t36MUB7>NI{b<7?=7?$rO%jvtHikB1_>Le$ zvMXs;@d-kg*Wn*1BwuE5rBaTNe3QQ+qcqz~(oxW5cJ5s9d(dp8V<8}aB!WNo8Ktxy zxshBi=p+Z540e@lQ+aIYKOP`kzL4z=guId?g-v))$W|ISq1m%xTQXMaisk>T&Os4> zsU95-{%~gr%evCbX+lb)3#pp2#mj%RUik12QtFKT@xKvAgJ~ew>vXvXAaOSFvKILJ z*x}>t?i==2`!ET>mVB5G{G$1eaQSK;(M5)zEzRpt`gVqV#nEL>>GrsaH}i7gUI5W2 zxoSi2A!iE8rWvO;P9Fm|G`zzaezLY{$3A(>l@qQBK3Xz5DC87*8F)j?g6=h3;d z-#*Ohgy?Ds-?)bT`6myxSKfM^Ctqwr+z&8pkAR2*T?!6QJZMTw>vhNS4OXKf@AK?+}U>ai|&UJn)IwC;o_A%Zfsf9(cAb zPLHbX*+91<1qIEXdV2xDAhB(h^ zAHl}FlW>7D9~wTHX^Qgl0t_NvQV$gTk~i!StBhAP1RHdw zJjysfIoXwH3`toO%kj?Qw1Vhq3^-k<#4HMpG~GEdb2F^ITu>*H0)Q4bm6-{YQ|U|{ zfb~pfA>U=hx5Kk~%#657Vuj06KiT32z}0qeo;&jr9{D(Ld%U=yN1e3ySXHlkv)Y;? zSB^^g-KcK^FbJ~)9&Q6}pUKeksw6)%@PwMYyi&jk7e7}_8-@K=5u!IZH*n-2_rwGv zu?XcNHvy6bivj938D}!z@ zAu~BUpli_#NSAZ;AM08Q?@8&ouJ{I+h%BiZ`NT3lS;1MNsFHli&%$27hDKkfK9rru zZ`+WLshy61l_XCl$-aO?ae-a}kPYcbxPYu%3ERX6eG#qB0%vs4gC5D-5Pl&mzWs6$ zJw#4IOkjW~CXhx-gSco>%Sdhb zQqo}BT%4IuM7K!E;jA&ce5aSiDrTzy5Os)ME_Et~SA*vcA-OI(GMy&fQqKgyjzG~* zc`Bd%Pa#-1yp9S9*=!ILph&BNI?+1|edIt+s%=a=MRZ~6S1<`qr;2D?@r{9gWJB)F zHJD-}oAN+k$P~uFp)NCc908n>#xOKRMWvI>FcYw$jG0K5!HP*LhkSHK{TFbsEA8?< zu-OT@16Z|iVOBC0J2B}Mx;V*MgluhbnVL}q2YOancAqQcCNA3R&;EOdKJydN3wrhK zc&kMA|Vj}$={eWt?k z6Sif*RURATCsA<3zwhxwWX&6Rm&h=9J*^urAJ<^UgzJnZToX1%1xUU5cYJCsPLEfo zV=5s^9DO8$V@m8Ik)s~q6B{t6q<)X@9DVgf9hJ9U<*6Y0rirI4ORsrqfT{Kc-bx7F zL32ihGKRiQSDBSDkWeOoLtK!ci|pl)Wh?#k<4?Q3c_KhKSCAY7oh9QY*>(C*QBR2t zr_1$HAblI4`v$+)`=TxbXa)jBKfIpy8Dm1@dQ{~`oru3^Dn|;^QrY%h7MUUqQC}#tmxMww*rpW`w6Mf#=~!d6F)lqRRj=1{y7ReyCypf}hA=-56eWB47 z>O5G=&aT_ku2eW&bL=}{Q0B>}|E0Nn_x}aGBmV+Bwgp>r&1cSYboKcs59>0(9)CHG zOAX%mgvVgb%-uf)m8#lfW$@EK!Lx>AegsO+)G6Nu*nlcY%X%)tm))RsiL875Qcd|( zv8VmW!)HK)>^y5!0i$!3U*1^Dj=O7Zdl4`YS_3mEu|bd7s6qUTy7tc<{nKR%t6Xw{ zUz}z6?EZu8hFyABfnwj|?csENc0P>D_)cs{J{>KeN6hhG5?*zw;#=N%i_8Z9Li9=o zGzhsF0%9!3m=Hko+R=qzPf`kwDpKQEc7IS;Cj4aUshX(%*_LL~*pZZN8^EQ+UmPY) zkLohjet-UVrnl1AniR*~Z^=Bd;xYhrdZw2GUC?EK_2V)??0cxDE%AE{=4rd(MD<51 zLKM1@E*HmIpfU8Kubc`_gA7z}Gj_o0b_ks19O<}Wp0G!o2eVsFeb~qQMqhhYR_FO5^%aIH z*}f_>QD7{Vx@^|gn8|c!X$;ac>CX7T%#+ks*IyQ#DVep>UMO9UHQb6 zGU@3HG&;V`l`x=R+35}6BZc(JBpi2yIZjCpf62gKMP>m|{1T0COL}sg)BmKtk$3eA zdXz~Y29|}DHqM_ss{X&+$-Cy|t$Df1XP-Ev&!h&QB|b2~d63f@pRsQV^8RU)mu-H2 za)HSMf6%n!=y$a{&!}czh68FUG0T#%4m8R6nk|^nJDz1YssUST;YTMi8*`*z$xZcE;en2r;kLkuqKJmNUP961`)(rYj96q5p2%d9n!SGM} z4R{<`i@<;R?T~<3q%X^1TH1tOtg)!pnSS{j?HeANB?ZN@e zt{D{+C<|+1LP)ue?Q7YiepP?U$PjCO;IR<#F~y4)S3R3}W0!>P`BT%2vO*2rFW1r; zw$%~`$4(AJ=P7r21ayp_|N%L6+Zw+3<-}T4{l~gtbP| z8=w&A=L;e;+Y9twkhDZN=1@YFA4*-Z;FifWXH}gFscy! z>bfgk8&xH6u$SyD_9lmy+2NY@)B&>%%e7J6Ny8~-lo)aI(@W}=tMa_QiHodr0iiNFTl2_QgdyljV4u6dl49SXjCksZE#qRzy2 z8jNa?7B93Kc&G<;fL?>QBx?ZDT4z5vI_@}PC?9?wxH@lnJthOgX16_G<7fP(4%08~ zk#gl#AL`{_$@;8_C`V79(HQ`JQ=leGRR2m7F9rJC{zEkZNK6y&_?4h0&JH?+ihFpn zNG#O}mSeF{t~g7|G50{<2mM-m!ZnLqpAZn!d3#K_QyWdRYFB*fzY5AchK{i+kiT9f zbR?yf=}YlGp;s+G_|)O&6mMMN5>L*Sohr|!l}ziPj+3(wRGIg_(_#H+hB4Sp_4YC73gMTq-JsB3NW5hrW0o54%24{FcN_Sf&rz zm67fkh*%dqV@@DU<3%lkD;@D+9a8E~%dCsWhP=8`7cR_RT(J(&FtNgia3(85 zGDrk_mRy>IXPlmOR8;7CS}&6$N^Y7rVnNjrR}F92HM z%pBk{@*L$K*TD9~5xp=)c@IW95*=p%UK|-ojyGAU%#mB{mIYDtiF(AXgZ+Avd(HJ)ixxgT!HkHoi*G zB$xU^Ynna67=!>!+J-YFoH1E$Cp0cMq069lRD&CrV2C-7s}e_I>o!oK$C!5TO>v%- zA%whslI?2`UaB{=9&g8uc|U7$CtP}#=Q(azo~3lf;1Ao zbst&dXPCt?-!Y~h=Cc3;L1=uba-A-h98%vrt8xJh8&{S={h}@daKmh(H0d+6@qGzTxY_^wRCoM2b77XeFjHJt(N`OS0|cg$^>Vfor}cttk)e4f;Y{!b4VmmCXVR6OuT}vbPS54OlKEA9z#M+SqUje>#c!gC zza%nvuFP7@F4b#%DY-6xx$9*|pTSQc*D}8reHAxWiuSs#BD_S>e%Cwc)pl~;nfq=1 zix!~g_~qjHC;V!H2T~J#{*~>4$9OlVKq18$kw6_5&iCatraRr_K9`n?04@oFfHSDO5QlY z=|{YI%7Xh-d?qSDG5IW(*v0kpr}V@OAKF+*)R771%F6(bwkJ@1J9C8=v{x_4m{2cQ zdI95EDS@!8h!0=BlpckRXTXI`TdgIs>>}L%*&JHmF8A@Q(mlOOwjCQyl3nFz$!iYIOS$440Ifdt&%QW zJgps*c34Xr6>t6H<3HZ3`TFiE%2z-l>Q5g(p?d+IYA?U}T9vpmnjM&Hq8kEz3R(5z zh!DH{`Nkp%P_v>~j^?0jI^y~>t@J#Wi3FKE8L!Ai6k?LgHK0k#g9tQ@6j0M+>Si>7 zY>=-$Y8GGPsRmdE6y%u*kOw3Bot{ZSj>5%~jIceD2}3&gf8S#VG;s6iA2;uH=bqh~ zxP0Nj!FKDO?YbdwTVgFty>w5Hoq@?sX0j?8N9DLeAMw2a=Bli_s_@H$vi!v*58mV* z=lJcjM`GG%;UnkzI`Gk>&hQ-E= z`*T#co*WS^*c9l4NjO>gidh6YziXG+xS4FyLvku14}}(cHmU2f=11!2DHHcO)rExx za*H}sS*#A*b$Yq0nBIw9XlV@_Hl#I%@kp=m=9`SziyyCs5zrq)} zFGG@#8`tr*$fXH@ocA65tC(=iH33+^G5vBblG=32yj1yq>w6cOuZQ@^n41!X@rjyOm|`a=FXR)|VkNq>){Ab1=UW85x{~cP&?;BX(seXp0ko%SOQ5 zm5j2N4gA~%*NW0}M}B66wd}4%f6g1t%$+rD%w$$%uS|(SfNPBX2y_{4!-lQPuPBL# zM(9m@_AHBkS<0V1u6|e>$mQ0?a$VSa@&fp>cyu`+*h_l0M~f3eN7A~8RB6lZFMqsG z3ID#MT2$)w#48dx{6zaeD@3g?>6n*grz?D!)@#{ai{3}B=WJe;wT(3mtzqGE zy-Z7me0xeB`@b#Ux9c7zj2j; zXUU686#pH?8L#H?xrCRO#U6NHx&D1we$0fJ1aKCBGj;RJ05g$i$kH~WQqLeKmYb0U zzvtK~jD$<42*XV|*z@IE`o7U3^5=$8^(!KYnkZF}jUU9rLhi7F1P zaAFc!$X%A)ve0sQLcDy=l{z}vSkA@fJiz6}+Ri9GU4AY!<)<7w6eS9(<}R1J z+-!XrB10P4Wj6=&E0FPJ+6i|pSJ$FXnyclawKxIjm0J~YBBtRfPqeuSVAkf&C7)Y< zRqLx7UsW>3d!3)rl`hnARxwf=+_K~pqGir17|-a#+D!Tho^|g=FMTEx{dDZYj$-n$ z=e(gyCfEPDK00yM_UNmeuSVdj5%_l#0S(ML1JEY`-Y;m8t+wwaX4^2^KfkrMYg9ZC zIg=`(0(qf=P@YAy+8m9%eq%zCa#5FT&g~)5J-W2?*kN{+In-MDxrvz!#k}}vxg5eA{71t|Np1>MpA^+ zQ`H4Q)DZLDg5h#ZptH% zFS;Vifa+2YCzq$sg(BDw8f_J3a2F@XM7gj3z@Fp1>(1{KNYmJ3_Iw|E+H$X5n-#*x-a z-+D44#Se7N--lm`iT;XdNZ#5U=Yt*YBR&>4{gK@pm#?e!sz-A%Gp4I|$1ZBMFN|l- zV}t6@g8%M|`5l0jj`2x;FvYd8KGM60=uBCfbb;RC3+XjLX8x0a5*<2lbST7 zKsmpwYwz`mR`eT=LR(8JPaPc3cTn2FJydIVGaU;)AbX2PIX0>vWYz84d2ly+EKB)n zgIUI(d{isgxuo7Q3_xK;IiCjCte6I+~d+k4#nrCfa}MaiM^88)I!iV+$Rws|!;b#yy0 z7rA41Kv8W>>4OJLIs9Y(Mh<`SX6k6;wVaL-8f}JmgK=yqQ|5wY`y-geD@8R| zIOwM64<8Y60nb0J`&<4qAO0d<&yYmZ#+rRxKQi!W!7|j^g?ay925rME9}1@wu@KmFGGfn~SuGCxKK- zzp_FWS9j>VAFe${H5>pJ1c&gFAMD#q*Q7bt_PC7^!3Drux-@u=$Iis%V1v>a3}_~- zY^{+-hwR+<(X5thZ7XBJ@v$;?U3{qArw&*_x)!ZGGx)RF*MH%@`dm2^xUqPj zf{*j2zSZdg{wcxxpV-8vA1Ky`{@3o@^Ttje!SN}i1)KWy%(~yW(I0o<@`suxCVEG8 zYhhCVAp4g_XV5pFAo6txCI$v>K>?ync)jPQ7_`$O55_(Am*L?!(V|;7m`^^w%Rje1 z;b>KE>@c}>$kTJ4^Dlb}>y4}7-l1ca`VwE$9@7?vV~*5bi2s3hULOAY z)LnLMt&ZhnTdpPCK+@-F3URBsA{Y#D%|ASchnu*eM!gGJBnv7w<_jIY{B82<;fNvX zD4LJ*k%5m4{1!9tZT=U?{L$cSUUqQzu}2y0H2nWVI0NjDo*sCB{z=ERgrj@@+WE-# zPL#HGcP(eg{MAHg-Yvy*{*;M6T)AE@Ijth+%u4;{?0I50&Wixsi)=h}G?%#14U{)< z57ir=g9a zSuVzP!bJ!;g8ffd(Cwee#hZR3^v|hkh^P6|4qINYf0JDDkLn`>9~tqg*%%z?7MIJegkRIXmHNY>SP$3YcX7S#tB6);W#KG4pqdYtVSh_P- z1n(8%;Ji+*9*&lvHssPT{7AL>8j|-Rh4fjhHyr!=bXmo6lh{Asq~T?WL1> zjU73pg6BHvMr2@DbdeMq(HVlagE`Rk3s*{FyoEU=C{osSnzIa!kLLXbNHU3?m%$}} z{NbMCmj3C@JA){ZaR89-J`i9I&tmfDUh{6^qkLrGBLlym4DdSuo}upLIT!o{aQAty z?0?Ryo*Vq14Vd*j;D5HX&znVL>3Ph7H1#>YFRlgUIyag!_MGoPE{g5%kCNB=hB!@KCHUSR=-rCRoM05M{(c=j z7v|?ZXLC~^JNqS_PRD-TrdtXLJKh)0T8tj_=;ucO^iWcAWpK0vk^bp)#PnJmY?=TC zQRNj17{2xIOSi3F7bpc|*maeDJwiKrFq0f~E)?uf3~+#@4#F4!P$EPvq@`4nka16nO^I(Qg=zjQ+Y za;18hOg_~ugxwo^p`)PhS5*3_JE%k?4@IWd7aSkuBLg29_`PI+PwjZuZ<%e({`SbG ze;>%%_?{G=3F;#+2j@qPI61B|hNDC7j~51$ldDkAn7bWZIkofJ-zAFx>wM>|q&esO zbxuiM%+MAe1ZJwa6KFhw!XI1#^Z$o1(g%ohF5kQ>=RPnj2>Qar(un-U#i;o2ugf#) zMv~f}{6{EhAmAu4^NJo-^pBjbzur7BFa-YJ5F0l+G{O^ab3KB+-vrRFM4?+^pmCMk zj~+x6nI;AeZRA`cDS;g)57$N^XXW~c82iJ4DWoS62r%7AvzJQ4;sPf*u$Fo3?Oqi2+JjMoFz5wOZ1MSk`=ZPQXBLg29 z`2A$yJN7L5-p!m1&8LB0xTdk62Dsnd^^xZte{^jBo*i?3^i&u-Y10l!9vZYcvvQd) z&#T3t_dL7KteOU;=*FQ9codvll6D*ziLVY?V&MElt|~URqy#^GrD^N9NcdaEIJ)cR zADP&(IXB)!gh&(Y_XVD=nH%Zkf8#QbYXluWtZCDFEiRFnD-0$EVFV$GQbhiO2Q-K3G_*kBxa=+0V#-zH$X0A) zJGJSj2|ybE0WZaPd-X8lUd-d&52L$Ts7kyfFR#v6<5(Gf&lebR(0B3VVyV15ePEDM z+Z{oXAN5BDJ~HrI&VYO00B7fCTXSmoFmTR^838&T2IgGw9N-w>V3@O7zH}+dZS*X` z4rsBt=m|gya`f_C2j8BFnhCsB!ZfV8jIlWPjpZqZ^SzSkum6LumuiDub6wJjW=y?| z{%}4FHlNW3{7~J7fO2RmJsmty$X)7Jj?L8&gXU%T*%$=`#B>}q*JAP0+^9YIpa-C3 zegr^gNpj_*`(PmMZ(ZUjkp9|w+9iRWMb&@ywj5yd^3$i>I?^t4Y9E{CV=1NZ=N;x? zk1wePPZTu4r}5?f8@91GP*fA!!yg!uI()Iai__&Wd}w$F5XYgP z>ZU_vhhuzTgS2DH2lG7?L>7F1`f&S~3u1#KNy`E*arx2tgCh_y@^sL8Hjbbb z4G%F34b$VF|3&Y;mmd#wJb3Gvauti8;PAuPay7j1?F0zH&W65>#dr;5bTXfIC@{)P zOc#p@Ub%cIi?fxgH>JyA36^Kk(>K}6F}~AnvTkyk6wTl!x}X?DyOCX>4)CVZaP^pD zRQ-9HlxH#N&`f-C=?{wtl^>@F2b!3qy>X~afBXqfb-~h-N>VjWAeAbWV-^{(8g!F} z_n4>UyYeU_sle-QUa-doICQUJUS;Ke8Vfp`a&4&u*yMo z`vidQ217fOo^GG}Z~_5N1~ZevQ^;3-gf#Z5gG0|HV&9zSstNW^-U^Bd)S@2;L^oIn zT1|88HMr@)jlY3om@;_uDo8@#(e|A;@|W`9UL8EsmaA<=$L~$y_{YG3qZ^<(NZ-X$ z%ueG%o?{56-#R@DekiYe1_qs28YvT!Qx^qW*%Ecb5OF{}ZB_du!DNBxn3j|}_{ zGT?c_cJ`P#yMFe6_c`a!zFXg)qxbM|*T=ZGi(GnN%HiVaK{YoUkGb#+;~Z(re@_&c zd<|EB`3&4(_r8#Kx&10aH4qQ0R=S3=M>KIP z{%$tb4P^X3;#>gNi_cqVy6Z`li2>733m6ms2E#Y~=;TG8l1m>Vg77aWArD&*`2qrB zw$SXaBffZy<{F)yD9AP0*-lw^ZarSI?Pl1^v83|13Geqgv@n*`G+X^G6&(*v)ueMK$hC2 z2cu8u_n#Bt_M?1c;3EUSiwtl+@J|7+ecey{c=L0~*yo%HJu5h?JXaPGIcI_ANMZhX zbZs<5o^wcL)*Bh_O&pF5$D_V~^TE{ns)wuxM_wLq z@a!0a8mC@TwO=f; z&qN%S(cgTTjPy%e)|=N3WPC8?r<}mjXvTu7zhm!>HTuDB+Uz>G!i~9J^}AJDt_$d##*l7!2tgR z^6+wI3ALs6Q zBkFj-;BVOE?fv5r@VOpcs!lO_+F!5TB=DoZm6Nc@Bm#iF!BjRj zozhYqs8n}Sa@3JGTL4xcPMcJDo#293j^C)fM1WA3RZ>$~>d1HFAVZL{dLGm5r;_8! zBoJRQYMl7)Tyz0#P^I{&KQi!}mJ=Y-^4RP@D@KwQcs3 z0)YS0c%rOYN4LN>j>3x?qBp_6{0LxOI8x}bO9D$tjk77^w^#-haIhCb<+34M!_jQU5nDq+ z7X5}-PIU9Cr}n{ql#dL2WZ-v|f%o?E?(?1_v;R4}=2+>q9ZwPtl^!fc1w@Aj?70vp%sLn!$cG0Ua5WthHlE|k(FG%Z zPE>qrF&uOhU_gTl7+BKhz_l!%KJq$fjVvv()i>_(rMyU8kOSCHhji`yF_!( z3%-P4Ss(tW0wLTFZ0v94<(B|gGr`d%C=zCAkmWL-ZBd;ZTe|#}9 zA#Iea$5i568`pWzG4Z1}olp!n5(C+3|$Ou(sNF@}rjzb4qw8)O66m z)5<8Lw2v#a+tEM$d=EkG1|m~VWVN8c7jitjbe+`f>LUE1* zp32$?CRqO0zny^yAO}>RvFFQ}j~so7!r3tek@!0PvFG0}Qq~{;yW+90YLweK*ReeP zt04i2fOP}aL;Fb(Vqf(fXcMu49;aYacHkW*GWgL{U&JBJfY%?;!6&XO-PopRKKc=e zA!!$2d<{N|vIldUY!ZD2Ml)k_sPS7aWO-2#DD24a=GTe)0LF&Ny=$4jmq=h1}sC~Y(=9hgI^pf1am+!#*r+Am)e#Y|lC1g!JoxsQ1c zN7hlbZXkmROJ@Sp=oOc_K~=A~!7#!b#p++U=@Qc?%BLRyaH3tV{e~%D9q@xs2cwzb z9xe$2vV8YRaIBF7^hFhY>~(#DUXW@K#cPzN{$jg4=qYpIPU@U2VB)KACj@*Gs4WxF zhVnxeBEIYk!SDEvLo*Y(q3k5CUjiB%adJ&Acd@`Vcs~8m7ks)wmm&vTHe6@6LrT z4&!2hdlRKkJj!tdget`@8o^LkXk#!l*v3i^G)@y8jnAtj=i&m!BCyKF_LHX=?4ID!&2`K zx{;ua5XUBU`q~uchzWS3*rdn>reEsCjY53+&J9W4=x_dJs;_WtEl2HLC}}FatK{1X zMUgI2Vwp)BOG7k#RDNNb?2=&EwW&;|fMIp=X|$KC2E`*zVeyN`0gK68tY$1CZ<@!K zmZ`L0U{s~CCpFTHrpx5@$6@GjoFO%Kh{<+3;LjYb;O>v!TpWL)Zk)}T^sys?|7 zJ5%)XV7ZxyUJeLpP#QDXzS*r*Te0}7k=b^Dm?8Ut+xrh9xbg4ki!FhUSlI4nAn(8`QTg| z?BHVwU<;rxpD5|`dl-nUu%j74ULq4$rS?V#7xEuoNG1HJKQi!d|u~^_R-jL>T~oy)D;$N9rjNyeAcUl-OI=uIE$5oEzxp<(Y;J&XCF^ z$Nenq`3Q~|7jS8CmUE>nmvUgm?Aho^<~a)=&ZwynlGl zsm+OtF?ePMW31$WvFQwOV;}x^-~Gp)ct2&|xq*Xac5hf=y0(#1}nHcs zZ+Zyg8GAV}BogjwB#}!heAQ|DMo|CME|37E7Y|QfsdfXnKsvzSK#otFk)+!xi7GNN z3RR3yZ^q?Qq_LvXS!2^jV?pW|jDyY!7~A!4Y<PL0Ety47TyXA_%h<&$7srBSHfnJ9_Ca z4+5d(Dc4}cqoiQd_RuKnO?xnoLo!p-jHEt1dEk;`c_u#zU~_ITQc&dv9lSBsThx*J zUaR`%fi?g}Hf?YMb3Jiq43RtZHnq|Ad#WFN0KnEk@-HfJpFYt?0XZ+q`VgN!Vr8ob ziw*L;PPrQ(Y~K+AADiZCj2^yAMouAbW@uJkU*sK4waf`^iurNj*qhkO#blk~i7x{n zAD=Roa>X_#V}-B+hWxj`<}msnNyTx3qaQ3jSmZ|wJOF%@j|_Zd;PW%Up8b{w@BjEq z_Feb+=URI+{N|spJ&fT}xUUh+=`q_Jwdd0S5p(|VTk9=B9FCD7%8OWg#sJtG)y*zV z-0m-{>lyVzpqsPr5;huq!fNq6yc_l`bi9ixF!hobqgbNDc3F&XPE@Vd&&d@w(eyiM zSq=nPjD8sV&~wqZ6%7A^3po7uqck$#{p)Y|xB#73*TD3!rx}h)@J|%)1q)kSGlyiRzPC`)87C?4V7$1IN07n^a?uB)Z;67(x3E zyAIMc3UjI#d=rBq1td>o;(<>CoRq1>cMN?Zj!$CBHy26Tm?k!SgR2WCXnC-~p+1V~ zLjWT@q{XD)cwr--jYpYHEH+lK2*I(K$Oo@9q0N=3EZ`hraDE(AIT3VF7AQ$N$97L5cXR>f662wtR~5<=3AD{{Vet;3EUs#rzrHZ~wzR_ha`R=Ov%K zaXwhQ+3X(Aj_2G!k^S8LPqXI(wXFc$?i?)KX*8f+&Ym|{JBpr7h~VN||8venhP9+I z_I$Iyl?HUQ6CExitRV`t#Wc8xumjgv_G}wx+AJ4_$FE!nunQu6navG^_5jFH-)Yj# zmnjv3eO~^_#57Zksjbo<4u!$?OxL5X;CT8hM`Q4eN53)a4_#vhdp)O>>vPwPd?yx`c%4bT zbF5EeN{rIikrSeRd`c@1eE1~5i3=M5rU6;?;_#bq2e3BjH4h>J#|DU%+F2!`jf`)3 z9Eo(;Xs6!*a_xez?|Xh4071adB}ni$w`&buAqHI&Wuw4*48Q)Tyn~O(Jk;c~Y8Ih$ z_P4)$7XAbDk%5m4Gy~sd&-~c^h9x%aJNGP`-mN|RyN631us6>E(EZN2us&gn%#sKvysQj?^AU`(M*Q%7Y=VhR zxo}e7;{<_Rkc*QZCJ5=IFop(&G~LGAb2^fN9XuGvt+8h=t>v&y?BO@A*!za=?vn^6 zZs~(JCgXsM7-B6)`wbT|`ZE`4eopxj4*;Pfc%$kQp^np^sk$ZZa@}yjOgWAB`;Ui! z%jzVvlhuik)gaOj@AVLnt`LK}IgigHuZdYK-bSV@(( zlV&HP^wV_e6P#{Z#Rjv%jeq`^Cq8rGxA&@{IV~?Pdl7ma6>W=sHBiWbi~8@V!Hrq+ zwXKI##FyXvQ{Dvpw0H2#*SGl?^TY-HNBPLWM+QEb0ryOP?6zmoCxP!Mu>CT7^~0;soI4!>;G$8SdE=Sp>c5L~%}to)3F++>eXZoOi)Jd}F&O*znMu^KH*N zG{_M5K9WYx^m3xy7V_-_&g*Dt&r31USN}LNwU}xK0ItZn(e`dSplGVp_pLed1Y}Ir z^o<(r#D5F>#1?Sf=abP1dhS&0-1quVKHuUt|!w_f!7xcvwY>*fognwUJn7`6B4~X1KF6v zqc?n_-spF53h~7R5bi{VXk*95c!EJT|EWf~(tpP{KK+q~eD&S&NgNxE!bg0#4<;|| za7}Cd>wDeQ>-sF)#4tF+l@jLhjlu9o=+MkPK6n9*;a6XM^TpTS{3*V}%m@oK_8a)66NXt|Dp0VW-FkBLzP!M{5ktQ7L7q-M=Twn~# z3PridM(}*`?ZcNmc5te^v8Npp@>gLmsr9MU{4^sD64kgA_nFm?egG)1k&j1`5~&Fw z+zA?BBb|XvS40%(D4WDhl&Y|75|v9-xbo;DKQ}|j}v6o5_a;lXd5vv*;eUH-EF`2}Ck1t0)D3OEbqtUQ| zN8SK6Lg^!gwwM@)A45V)2_`;#&`Dre06LyFSOezo6V#5edH%$pqo4s71SvK-e~}{y z>cOQ*V7X|*1b#?vcqDdnCEn}ipT2nFK@|pL4QBjCstu;ZQ66NN1~mA_8Hn&J_8GBq zjissnnA(6IbO?Sz`H2qz9k7EoQlpRihJBK`eFjZ%Gm#9w;V!EzA7ldZFoX%#LOcDKOT zpx`DyzQhq(8vOqWjR`53lm^zOF))UWVizKQX8LkDCWK0?7CU&l0H_#Z;?zdoa%0!8 zV330al*ZS8`qvyP93%)ozxV(^K0baA;PaFAf&4>ffW5-m`eWby*XHXlzWMXNUHNl= z_x!qVUH+*c=K?;E&;2ZRbhzx9a8cRf?4Tj0x}HPfA?AoYt8|8}7@ctNQ07eITrmm> zSC@|ZaU_rbq8&rX$N%UhOqKH(2G4N$z#*A46`WkfpkWYVt{@|erb@@y5p}qghx{Hd z3={9rUmU~pc;~P2DCB7zNY-r~q<4hXJoVVU+En&q>d*UE0PisNU?(K*KDkLI3FN_q zk5IuLU@H4qK5y~Ig(7;=V ztJ;16RhI{x+6Wt0Ft~#J3R>SA1`AOpAh9;S8MFPHoj5Br5Mz^a=#k;u5jlowWtaiQ z>9}c3fkWr=9>uzDo+30qdeKi8F>zkHVKs-}{OP}Z@%2CdmoL8k_y4!t;6AgsR(|54 z_L(j|U>_OyhsXf?@VlS*Pyev}=Fk7?r*)n_*`w^z)|(zr7(49C)AQg8n(c3e<(x$v zCMifP)99Jf&hmI92C1}w%W(QDmUa&0xp*$E-#K-Azlh_5DS2ZFN%=D3V&x<9<$q{{-4rg75(S^WO#-~PLQ58&JUOkV_J`iufMHec|20AK&KUncwv zHy@CX4E*jhz(4={Ha{-oT=UHMj1lz=%sKq^KYj7%?9uao0A!c$Ij|=H8<$WfHN!rUg>(n6pM^TFzm?0F$0_Ueo2*vxM}jrHDpoDa#5y!@vg0Ptn{60pH%z@*M#ov^gX zAZ-SNMl7NZhJNRE^n0nWY$mc)lK1Y4`>r{XI6mI{BmlooDL%)oH&0`ztagM*08{W| zg2#x7NnxzCd^oXDnG?r&4@DYzC?W@8ia1~BhNnVg#Ykl{AY|acpBNA$uZ$cL$!<6w z1k_;5jmQ}@yP$iPPi$N+zID;p*Imwh`M^9ND`?yLOapMS~T?CCr-^&Jzew?p1J3IX)xf+Y1J1oO5Wf+96LrcHBYy zy(qehqp*<POp^W%W@ zT`)6o#_G+riEz9flLM27MD0YMd}XjZ6EX5;M3U-J=iKZ_h+>nCI2fG*^){%@c~T|1 z8bm&Rkxfi}pt#3+6u}R5z$dojZn$z0=fn|hC)1c1NBRbg3k#bq7~Ie|SNItKd~yO9 zTm0t{tT+1|Ph_YW2ql-c%0!-MDVxg3Xq%_Tu~u@3jy$%1`d|LH{F2eXeDT-+@qhcL zN@Emlo|SWGbpkrhO*I9X001BWNklvhmlm5#q+I0Mge-dA%o$Z&g4j!_!X28XGyG-EoeOI;!4r z#;8*r@Qhm?IV!RrohSJGQMXSmkH+x%_0RGEfV-xSAhUAvv_uj+o?T!~ViSPHyt`(l ziN%&ONhk4`n81n=(0x1vXjC6gwr=RdMaKr6TVVo_Pg2KbCwnLpRx!vcOYNXEDBmnL z7h}YPZP5S$y~Kk&73P@0=wfV=G!ZAT<23xlP#pG<9fHt73N~``7+cKQyQ<=Yk=|3t z0|T;gQyXJ!OuHzfkoz1&8+dHL$sY###=kUHZjsTOrHLuVFC}{aDPVbzvVmqb@F`Bc zR@bp@@UrtGris-&q(j~v3!}m$*Ea=GL8=T{CH>YpWa? zT|LY@Xy79+CIUf78!;3u7+>$aS6WXu`$f@z$~Oi)~*KlL0Ql8#x9b)Bp+BM_eI?Y0pzh7 z=vXOBl@Q=!p%;gYGHiI50%qH>nRpb2106Q_0=DC5yjAXII-c+?X^Ah6Whp0GIfcRB z?2e--)#AKsfx8)WFaelK5bp#Ya6WqoLKTttsp zNHpNX?^!k6wJk#A*sf2zs4eWyVvh*g# zJ46HhIWE7@0{{zTl9++H1k&C3T~-bl;fy>=aSj;l8jRkF3kEzYs+5yxx;mhd6bb_v zvQ;v%5g|E{8x3s) zwl_BVV?Qdoox4~*sEf6BtYc7dX<>_QG|D84050jG_ex*jD}F;-mg=$DVqQ=`g{qA` z#P6vYzb3|iH^vm3)l2osO7o-LI1#*hJ)mE(@f?TC{rkKHZj?^Q-FC*|dhFU+t{oxh z^I*5i^)*93dlPJ4mxr`&Hgb*rdPoCOi-+y8b5%ch*8O@~uH$zbF6Nu*aS#9tF?wge zi!yQ7kh=1EVC}6=-vL0i{>4Y2wbi!ObPor8=UfI^CQf8+KJ6M_JvN`yPF%Je#|EI6 zP?ci<22@RKYGeqGYsP;9CDy@gJf3SeI|*Y~(O!4lN}C^=k`+_F;E)NMIJrbnzwtIU zT?SE3e{I;;<5iv=!W=OAhNC=m87V$>nrr>;`MC6k0WNsw{j5Xc`+3UG_9K9MINnqy zp~UPj+~v0~yXa8N!sxgIsP%R=W!y9PlT~C%mgzRjkRy}wB8iZjz6qCX5)P1n7N0&M z^1n}l`wp_irL2Rr`M0M2{OcwDnLuoIj`%YHUon&TB1p$#r_?%4jK=Awdc_&g1f_Au z0?Tn@1DfEVrZ_I_5?k6XxLn6`^o`jYHfH$MkQ@Xbp#9hrHhQg%r@9`FwX3_@Nka%B z0luXR8d=DX;zSgG{Qg2z8Zep~Zy&F>5uBa|22iffH9Q6mYg&9^9oha*8L0C$?&_Gq zPAMCmSn_ieu&9M-Je{x%4Je9Z1;RLEylOf1!7uHM)Qg(omO-9DG&Ut$5yWaYQzJpu zAbUCdYx{Ftb#mi}Gmi2-8lyY;Rl4zx|1$*gH=P$qk+=Nn;sSMlDvZBN?h-rQG+2v; zoh13GSA@VeX8eKMm8O5});2tx4ffd^H=k>#1ICkY+0%A-V!Iai!D9Wb4Kevp12chT z^c)r=<`cg3nd|iFxF3Fz$_o$SlNN=k3Q9jaaUBhIehm4=R^( z6I43-E|r0npn^b%jGDhi5U4$CI?E55ar%`{>KMCU1My!#xk>e>UCjA?!rlLp!$UE^ zjthqy!`qubF@W!DGtujdxYo7#gWXCBMG}mOi(PyEiZ?@Bk#aF_(__V=z$cTX1+#^T%`${2_GNu z^xzrHP7Yir!EkkXFj?igd{+}W@pGxe31)r6M_X$r5!@Na=+p){QOb8M^!VH{;X`K? zSnB}JiB)G1=T(3u6&t8p-i z8Mj>%Tv4roL}Rt>=x+I`Qi6y(7R*frO8MMTh3cUEG{<>?)`>^OazIwotJW~`TnUS^ zHhIc3jShOo7lKmU#xN$DFNZ{u)n|;%;?B#_59Zz?~# zd2-_Ve)xHG4!!e_4Qe4b+{U_Btrplhr#=r5JNeAPJ$Kq;XIATGxtyT20`#}jqB-T$=HIriz_ibGE2-T_0b#K^dy96Orm znza%vZo)5KRsDh14nAU#ySBzWYu!x;w=meSA5RjD{jf<_)bN&bRMu{;5d%%QGNRJ zotJc}(43?yEH+M?^RUbUsBdiY!e$J+K=5Xu<9E4++yz>hIGd>`vk0Mu`z$zm>T;bJ z76Y#C66bJjd>eE^~0-w*eX z&IECj(d3|0R5?r+A}u;@+L126^;^pIPES+`t337CpFRzIBj24si+&g*fAFT$Jv=@z zrwlE7Nc_#sHnqExVZ>UFIpX?+ETyWpk07{NzsF&rB>)$@b+LSBFX<@|9ByH+xNjoR zFzDS}!FLagH}fCdA;1=PY�u#E#U?@(Pm35v%6xj_5KU*tys@5M~A`WvvhrtMQ!hRf3$lWneNQJLuo znxgb3J1+2(oIVKb2K+Yv@}Pf^C|2OLfh6tqqu=rxqq^!lx!pqFg^P%AW!%d}MA#Vb zjsYg*e4|SjN?s{PW~Vm92F$WC#Mv$+ZKCWxC5|CPKrHhQK*6yXQ;$#LKaLv+9MxF?*FXFtTJ!GIMVM|l7750 z{GKEyfxFf^L6bi1Vk;gQ36+4%`Q6-?A63<9V6z32i9zu$f^eL}S0A#+D$x=Ud?|aw zY6s!ig{L>w1H2{=_a}znhR>y;ZpOkmTtwq8-I|HKVi*@ywqqSz*U-505F$Q!DaVdx zWuv+2E4dy9Fp7*o>ck7I6yr;?3pEYQxuD))5HMz`Q?bV|w#-2o37mXk*7(xHj&d1@ z@eGI<{Hh08X-F;}MCpfvIflD)5NmnoY6no<#kj81M?{#nPID*^w*9IL0 zcj`iZ))MW}fjNaZ(rH+Un+HAw26RxjM%j-5((fyBeFE@fZ9j?MJdPi5@Ay@`98J8y zW@Z#Syv&6;*(bFii;!hH$#S}5dHI}NqvW52by?#jNcx01dDd1u4hbjPTwVLd(tsKx zDnN60V+^x7T*H{U)X&NY7W@_30F)RzY8v2dml8kRr}SqCD5q?HOe&2Kxg`qYg1W*p zp6I(K2h3%uV`FwyF@`i^&)3kDUOhVaF;3fW6*F(kTN(O+*>K1}Mtv#6H$GS9CuT7= z%r%f8#v3!SgpYFe++sA$C-ke(Cz}_5i>@Hcz(bkbp_fE}Ap;Gf|yn^dx7WFn4n~0TF-6Z{6kFMPZb1|E~F=4acbez*L!?DNWS!mRCh!n zt9%JoFT1F!sf=;K4PFOpcC$AC!%nO6(MA|!l7=As<0&13#d2~*pBJUkHHZEch`5Ge zY&y^}3}bj3qsBqyCW^0h!T1blIMVTxBW1^1IO@N3vDOhNOQ){GSCESHU=bN9tZo7H zJ06VBeWn4;i1UO_OeP7ttL2Em639ydiC9mmY#TsjtJ5@<_YAAMq1u}uL=w&%MDtli zo6kbN1&!^-I{^fTWThKdM0a0lFJiAaFlEd;os>J1f>qF&o9Tk@s$H>Xjx}xtCpMjL z@1hZG6wftst^KlVgRKNuHC8#(ZuWPw;F_rB(g<`v6_?;=FRY%y^=1G^*z;YVjT1Uv z^*eJ8Z2cJ-f@KVvHKxtH(={gK2zMQWh)f-AIL0pfpe-Qf5T^ZL7m+wBPK`aCjv&`` z7!$>f$(1p59QB>iYB#n!F71LFzVasacnWLV+x4g0CV9>$(Et?MJ?bvclZ467qZIFa6yuBx$;w;g+*+@mCZ zN+7nnKwK{u?PM_UKPbx0LPeCI}8^Z{aF}gFEM;V9x5VJM*bgz2*5C`o{mR!TLINSazp-a2yF(ilwP+} zT_4uQ^(Gq#MMyfv**R7&#n=O*IW}IZQf6~1&33L{e7U^@=waxt5!JT39*T8x_yd62 zhil@6;p_vg2N2b9CMtdOv||^N=_+ZM!v`nO>w=l~#z7n31R@X}!uF6h$Q4JaGc^O+ zoizJN`{dri1xH_aZ9!e`s&p4<2R4lXU}kD^h2;7)Q^Ca2c5nQ_BtFcYW6jdhzYN+K zDH!!r9sh-U4k0^S!vmM{u;fbD3fu)o`m2<`>n8wjMo5la#N?UI<|dh%RqB>^R-+7H zZ>aP-@y+jTb|mR`ZqloRk{Qr4#z8pi#8tS?cpj% z<)F`)((bxKw>)j05Jqf1oFA~1C@O4sYWbpy_q>mzp3d+9GykWb#%ZIaj9vVxqKoY1 z9m187sNbW(?C)HNmvHwzlykSj4e}aPkaim7G*@!+bOgYg6UL6%)U5t~Wi3H~$zU-M z;^eBjRik8KZBdl<15Mhci|2t3n-{I9!oB-Ivxd+$7ejZU;2ZY!9seN%<9F@Oo6i6u z*H0k+*kSzGU7sef9oNdp&pT4U_woA6YBC(Zld!#vG8dB(LPH_owEeCVw+3j(f}(On zo5y}aSkQ@SakBxvDo8yc zZ~s1q@6N|~hcOLu0-9)y=){GTExK#bR0bj(B}l%B7oiH);OMwe9{mNL$cEz`D56;h zC6NfBU30j(GB~&=uh@RF6!%H>&#Bmu!+DLk!sZrd^ofZ_1g=wdY;;HbD(a0D037AL zZi2`uF=m0f_KT@_+t(cLQwn>*Ova(hJw5mKhL;DgT@Sks@iP&u*Xa{NG~@2p6i4O0 zQICTG&c%L$;EP~t-?$_Qj{lu*alHIr{lrmebzU~x~w0ul1p&2LzAzG2cw3MU$ChZ z&-8`|FC?lsK&IuYZGjSHg1$JW}b0&k1GhF=G3{{vfo@;Wk z8M|D%@aRYC2t}85ngfikUII7D{N1~$pfA)Zr7v1BA>E$L%@0gg7_3WD2}Af0dXN7)P+PM5%?pa za}|tS5I0h_DlXikh3@AnuYSLem+=IDGr2Wmh&~r{+cjd>tRS!Y@-TcThG_XV|3i2# zw?_SGc&wzxXXD@scV|U;L|0_I;Q-3IT5PVC3r$yyS4{91{X%GL2!JW87PEV^D(dr~ zb2td(bYh)@eE^0$S464A)>!H@Mh({vRj|SFB?A>w zD6v(V0(NTDL5cAp?3olwF-OcYPiI#I^4KX8Yj*-^#0C|Kv+gBEvAMa56wYoT zR|fsOCbWu>#HhZiX^m}^DJLw2hzoteAQW3P_oh{jA;1AX7%{v5Xd(pnM`{1Y#@gI+Vn)jWl=V@MQR9e zD{jqi-xF)-TWHjsjr#+_!GN>_5T3l4cfTOsLa#?HFE zR0*P;-D@J3C+_V7$?IBgtdY&atmQ&d&pYJXdL_t3v$)!xAaa>jK!f6P4AM@g>z{Vl z=j#27tB5JP*l7E%bZ8h4A}as6b1ruuDn<~fUGO$|cZ=64HU>Mu4V$r#D>=Hn0~(yl z2<>hjMlEd(f~Qx7Xbdv8wwcW_GOD!4u5s+#kh6&!d&^}tBCU4*;7EQf$7Mib*)Bb25@#=Y$z0&+}(qk@3#i)I0l3 z&}E~7$;j84a2x`WOUn@y$6|u2boe7KNwCBr#(bBaE-^^8aRNla1z8#a01-Czj#py{ zBJd$7_>K$P#)FAG+7=62xp5Snacw)I6nYa}JIg~zyhh*gh}NfIgcjmTV`4l{!+~q3 zSpXqy{J|nybK-Qc74WXbY=qC;0mK$5obutga;|-MpZ@S_FQT$qW79$(KEAb4e260^ zcPY8yvz(?^)W8@nMV>YjTi+Sl9sScsEiRwaAA7Oez6KfzK@df}#s3xQfZqs~5reh&T^L`}O+`XiI}kggf-DgFQ= zimsu17M3{INqQM;w{_QQdtEogo3aapICMJJk=wfK!#`33IBTlFkjc1C25ZpO1y^<& z_tkngT~Is;h7+&pG+_6u9RYxfA%0CF!MN@CS>f2DUSNIP`B5e}hkLOx?g0|&;T~SS zZtj!?JN9%tEt9**PdvI3K}!?O3@$k1r5cRf?LlG`BRl`DAMDyeme)X(8>{l61uIwm z3yNL}Y}1&P65wyA{3ag&u0)ZzSwx)!6KOJ&>?YURtoP=esbK+=bmovrUFcdFr~K`4rb z+n6I`j9^#anDK$l@E#(J%Maq*oav;XwGP?MwI-_IY-7PgchHXIW`L75HO_}_yvR8N zU_4j3#c`sG{sfWsz>jE*Yl-y2BRdZs+L5C`0_!!6m9LW(va0WOY4$q2z)b$N%tlyI@>8EwiIG#Oo`f9p;#(jg6xmBH5 zZhB#+S4^BzTeAa;7etJP5WWVpyF{rC` zZ(!4rE1#Z}Ew~UGtBzor!nk51PQK1><3?~_*K73Kxc(*|0It+96G@;G!i}zz=maW6 z$70$U!?MXoJ#&%9Z4!j0kLfr<`zq+VsvX*0OntCeOXRhd4Nkk28RtS1!#3fwM9>9g z-GEgi$xtBszm#+wj&59F zd5fU79YDDH(P*Q9yCI#vey2Bl6I!M+tP?&myJC}iac`MqvxT8MRhJ2kZ<}KqD-D0?| z-Fx^8x7xj~=02>Iy5j!4W=u(G} zZngs8001BWNklcku|k*uy)jcTrPT&RpL-)H@+@434iGgL|SH5_L<96%KL z7K5zc=c?Hn34*dGhru0NXx3QG8PsuAQ|fDL-#D?dD<@oLY=lv690LS<<}x zr5rBlDgtxX2S6>={T8d=)Gq;kUxIpwpJmxSL2mQ%Vy-9I+fJ9}P8joY7=!}oB&`XP z*IQSR8bhFA9YLo&`sIklnRBq`0HRr2p-{!PG0>>4#OeEuY!UFbjVXEyc2nfHjd8J6 z55_@Ed+c5MksoGU9zq&-0qq*Lj@9tg=&%e9ro5UYo5W>Gs;LY&bj_FHa z-^aB^>){>jC7J;&_9tD-_J-+=0P?4h-ihU<<2rnp1Q769562MDOF3?Cq|Ec$u;wy7?~B#`YpQ z<5&=WQ-;sBm|er*#vk&6<*}*l`iqV0ax|~L&?Pv|VG&2qc@PONay7ARtg5ik2#2@_ z+t$GcxDdk-nF{D~j>(eAtq~Q38NNl+>-WKZg(NQtktO~lFtWF#Z&XIuN1O&$w za~6B9;?{U{8_Rh@4EviO4d5{Z@}f76#zGT6ENuAOLB}_CegmuB)C3$z@my2vw|N%1 z+#|a%IBd^%?ujjul&y!m4kqr=Hxb8I4=qdqU-^_O11@uPas`5{Zt89L9=;D?a)N8n z*f~+iM`k}NY=&3WcC@jIcY<2pa zjwZ}S8kz5%)5BBN*akx^nk~_CjAAbLJr15V_h#84GY&ZC-Lm~iZ$7$HqJSWUGvlu3 zJU~;f)PpNngF8HJ(0SFMaMvalk)!q(5vM!ujQ^Iv+4xt9207(dJGIR9Jak(`ghiyw;C*?kN>Fz&CRv+%@hMmSq>1#a9b4^my zh+X$<+EwVw`vPiU%9(q>1hH+Qzl-X3^8j#VlSEHR(oOqWNRg|a1$5gC&QGd==6cO) zb+L_X%+H*AlhMhc2511<)lAvh(7~6JRZ{r!vU0SJ!0S|QsCpl66~^0^;*zD_hmbQM zWHPqy&|`TwPJ3fUaoPhbbnE2SpzF8sRcHGQC`@hj4`-y0955L~PGaG^Qh749m=juZMoXb6abu-XjGFP*XUEc~* z4Tgt>t^))(^gHd8d61|{V^}i@5MhmQ6<)8K`1y1&a#foj9BI8(Y#8wHI4lv#I=w<9m6j1+FgI-bP)$=20{bDr)Y5iWx@8(AU?1mzjKS8Wx|HN)?}<97!o5m3#Ocpj{`Rr2>3oh>P=qwm(PaI z>cCiljz2Djj6iN9SfQlNN9E^tCA7o(Eq-~fVHnZF=VBC2EIOO^$!h2;N}X|(3E_*; z4h(tPJBM&K9}}l+;kkm-?Ko+h&YeC|t%m{?=5mNbQ3LBXhifj{t|FaB{KX9Y(=H~H zy(8Z>w5dOeTjL%2n|7NU&-Q=it7&{U3s+!Ke=j0KI{CS*vLxPGozbJ(j<6TO>TY}l zAyirM_%QExU2HG&;(8z~S+p;)?ZXEMEpB{rz2I*SCMYs6W%jiF8ej0yi4-tagd{5c zeorJB%Rovpot1&IO_j6m2KFO(l(RqexygzXRGOlgM%VCkPOJcXjw+IZX%hCpDkrCamjphTwVQLn;LjIp)ZD3iax?Kt`N=gr@{0i0%yuuLg$ZRyf7GOwxVF8TOC*c^+- zNnM~wxjLG{sRMiJ?H-v%t%6m26Kw$Z+@S{dDtnmi+Ik3|9qjM(^VI%Iy$sB_-pRy? zNKAUS^?7tOl4|pVp2n1GJ=}zV0o@a!F-Erx?>Y~>@7z^u4bl=0(hehh=SMsW6jq6^ zen&XU@$Vav$nHa9Z-BZ-{pg?{nx)$=UiTw;UAV@Tj_dn7{Yzdx-qBa~SefQ0iqRe4 zfg0%v^uE3>uHCbm^9hA^Tg^BpAG7hrVAo8<&(VXwViBnS`rFugZNS|ccbm4=PVD=z zxNgc@d)?V2@0DHK{K7QoE7pxg&Xc1@X4m9*cm16|0KCn&Pjy)--F#=Zvf4Vq-P|kB zLWd&w^YJ~a#KHted+aJj+r^BI#hPn`^4x7JaL))B#IkfTOO|REQ<;rQ+G`^YUCpsj zz(Ri9zL!wIK*nac80(@A#}$ENx$mB|jc(F%#!o|BNY+tgm#Ki;s1vI={Fm*$<9B6G z)GZv_HaoU$b!^+Vt&ZL4*hzP6baY}T9pl7KPHgk$_df6aAMS@|f2&br@7iP4tXZq7 zR;~Fb>_LNWgwXHlS;>FfQv*QYRT`rs*wK=79XpXuP?M243sDce(|{1g+*melv%AYX zMClQ+?ur-S8M^p4*Yxd>r*YBupn%xW02MnA-nU8R{c(E>?QK0wcFrg_Rr&QOAjlX{ z_Y8j>YQ3;mMpFAevJQ_~&tTK%pXWOXg)QJ}h8cDW-uZNhw|h6T9Z*aS)#;+3vK^s| zm>H<2pcn>LfH&+Ajz>C(BeWfu2Xn@8>#2dVN1AOQ&6O~QP82X;n`PrYAiZhj8h0Z% z>is&Px{$^b`cfekYHd8L2zD>=3qYZPhC0v*B=2~re9?#-c#m;xD=yJABDDRfdR9$| z)X$}oMH|j|E&SU@IXZ8rp@L@Wp7pHfbmH>ui=aT=h)1jO0}0DOo_*Q z1xdEvwCUt}Ew&p#LS&}DPqIwVKHzH5Ms884smWHnS zx4cgH4#XYUx2f$Q6Ptgtvf=S-apWBaQ!hb7D31paYpY$2Cs5mSYYL$5i_d4*N&gILC zAehhkv~h?@o~3UL@OLk6XIJ3`{*F@`U~X>;dDttf?WVBHF7vEkty`kB1IP6DK{ z)UbaPJ#Q9_Ks`f!@@;rK-tgWvpK{*SzdeMpH8ZfR-9L?enPb_9FefF@k9BRm{NVrpc-52Fv{C+voR5ir-o?oh<#45XAiC9Qjt z2!goU!9RV9vwK z5}soYHep^haj@X+X$CX$C)qD2a21V;)+K+7or@)sdVTnDaAmXJrV1P42#- zC!`JkV{gekLZicG#D0BS90ln2?{po8T*>vB;Gly>XRaaGq8g2g_7_}`2Rq40Vz7#)9eZym6S!Hkbe>sd-dIl8&wd{$PFkMvFYTkT z&g1Lg#3m+gAd4r%1o}%|cf7*Zez2l~0g0vt4|f$2qz>P!p>nfw-H6jWZ}g!a=RhT!e>_y(E!NnIZlDyQ=d^S1ZZG9$tqZ0_O1J zM}=lxY?bUCNAM=>=+=r7n1v`gFywZ(7D_~z%fnG9gm`pcIjvXf&xP%OKTr`CB6-GZ z+CtAZ!rAnis5!lUwPe? zj?-7o=Ls!n9rpb5H&BVRS67wOFgIjZ8?PT_;yM3*x???!QYG8$(*7?`!-oXlOA7H}i1gI2)x++K}o%85}VcVC{F6Kq@%eKRgHbzGZNdY>ug8 zhK%a=CQ`%2g%w*xzX*CT8;#srne>T%b3tNo?YEd3&Xik6Yj<42*S5mz_z4~ED1xYM zRILwI5eOe|Bi-ex=Qr0TV@(Hj=-y$Hgn{oe9Wl3=Oy8OLWt#lkFkEL7 zUc`5xp69*t>U1S+mom&5tN6=i4oYJ6iPPG3R7Yd>d`czo`+PbPHALtk0rJeBl?KZ4 z2J20@x==Kc5?tjxZwb%6f3G7wuzPkrVejzgIBlC$p~U60nN(THMz z&}>8OgmGqDCeu9SxCiMt=Fmy_&92&p%d&|~dC2=;eKVjls|5B^2Zkr;Y)s1jtt@yGp3z|Q zINJMEi*+4pAd{N~hKCxcqVzkjuF76AVVk;|jFD#a+AZ#&_qyw#pHkHc`&rS`o>}fp zUHDRm`Ns3+!!w}=7Ioi$;qo>p>8|OCyOwa;5r>727rvl+kYPwuXrvzUhW==mvFLq5 zkcr=%XHA^NY~4d%&%}E#6He|=>?yJTDFw;d3JfKO&5f%`KNW-Z3*zVsan7L3A{STNLUjoQk$k|FgR=JSQeVJ`lfkq> z5n`3+u;G0`S?faE>YimD>j8=iIU~K0sDp6QEoZk7c083Zhg!xn_|84t@iMR&dfsM*)?%^K#%yI-Z$wYb7xtQ90z|9&r>~A&-|wQ8NkC^Vz+>Mm4k&FAh@>8$C2?*= zZbgMKoS1-sJ_p3R?t8_AOkQr!9fpFD`eb`)o-0FzyzHUW|8lAx#tMU3l@H@ z{+^@t?#kuml3pCi{L`{u#<92Vb6|dqfRFnCy#0ASi9X{s;10#(M~mK%l@zo4KV7ae z{zd8EUh)QtjD~+2J}C2T%Y($L`T{vqLVV5nMq4uo_w)~xlLJ_`Bz%XSsaJ_Xs)9(? z9vMQWB!k=?N7hi))01-GOPx!J1?-bGj6q=-yxK00Q8wE8tZw%$%+=Y#2TcahJjfOFO_oX4KmMuTM@E}WlrS`X?^g+C1Q7=VybL<5r| zUUD&WNin0cP2%~s%?Zz-ZH1?9qDGe4EaI2d6_va4u$9Zme4|R-)0H%$CE@VIEPe$R z^4?B)wCHTxPvH$%DQ5kWJKX>8fs2BQ#=7uk>cSd6uR)XRjUg zpDr0T01;^~9a7ucaE^R|K^CUM=TEb$*F4wZ=3#uyws$5R{o{l#=QhUV3WQ=jq0vptbGI6;K`_41W2$MwJ!@^l|EPB{GMpthz`uu#Tm6CTN0_MGbegZ(dVrpt>uPL&P;}$!|%NX!soQz{9 zCrZOK$ksAra7wRIy+ngMGZw0djwTk)M&SIl6u%VAyNcUX+O4pA5fl`~O*vP@)D4$m zw&5X-NkK`7IJgXu_g={}xp{wV7wh~@dY@*ghZtGB(A3r)%O%^YFYS=_CXa&#$3dD8 zz&MN)W#n8>*oewPIqjeQz-RcitJ35e3V5^@c3OwH^U_|KAA5gqRh<8h9D?P%NebyJ z|MT{r#?H83d6uqmgB3{V^Ib2o!}-txv;+tK4NHklj1lukKHG(Tg#{oz23*k+F!S%v zn@b^bDfBB18-yMIe&O}8xP_ZvcH*tOy0(;#HnRH`*v6)cN7Zv}g9D3MxqC?6E9Oyg z&bYYY%34Ek2F%I~6rv*rvLI7}v)=y9%eB#PGCc7;nh)#e4Gh0)2bh;b|I@0n0i#xX z(EwC=1O&G#s{|L0H{J)BkjZh`Il5R(T_RXOUe%7}422UzDpDdt%ERTeS)8hSwwV4z zO&!)2vzzTL95h+Dsu`O~s^kPh)#~77hud=X5m7OC&z;3+I{=*+C850w6 z5DN8XX0PIO$rAf*H%)^+j^edcyDPOkG`;)#hQ5`#kUsfF{g+zF5}~FU`+VmH(Mbad zd#BP!>hg+?;N`5sFm?n|Xi}ih*%|Ib_$w1sqja7UF^yUkX3gyoj6a-moDf zY=`N;A<)|aTV|?aOA!8>c}SojKuU?&Ip4B8^j?kbZNiM;&RWTnm+flzCSA^)Sc?xw z`N8Bl99NLDuh46ARM4MNlxIJI*$mimUA&)8y8UwdQ#t zsPCB#ESDu`Xje}$;`W{#{-+VBvvP*~ zlV>X!`3!zJE0m$D!PhfCou+!mn3_q^^5(B?_;%)d{@X=j}$C zKP@i=R6;qU9V}MFnn5M96{$KJW@<&z6C3LjGRT;En!2Ppbg-*5p^!M?Sr92x29#MY zK|eaLh8sLR+UOW1_)m?`HCD+7(j1Q7O=(`gKdt9&XE-hDvvmk&dOfzTrq%vs-a>dL zYGxC%x%WLge81WpzaH(1AK|cFb;E_Mb{eZL)e|q6hAQ=COhg~Wl$sR2?;H)vf1f+? z6~>>zlk2l7ga(2a2~0;Z^T(rGcp|IMq7p^#7TxzM&MLHx+Ehv#Le;z(;u^k{Foq9s zeC0;RLJ~FgK!@@3AgX0Qx0r-1Fm$jC{n6Z3aiHKt2e z2J2S)N{unB-}Cn_PmsDYicH$sInn>y1h@yPgAptXg>vKr!<2*2jAkT^@LBJ@bfNWx zgR~try`C?gZrYMraZH)P)Q(4LfZ|)W?<)m+YKpf$&u>mlqjn{8+X1!ARK&=->M5Qd z9CVA$r0uajPar2EEiR8A@w-Qug3+3MlZ(uFNm5R3-o%_}8r9!scdUgrxKGFBj8KE+ z77$rosS_;cwv5 zkRjF~_DyPf(>s9*m0_a~qzZt1%N71AlM&j)E}jV;2`JyBd2LcjM)`Vr+f7T$N69;Ja7%zG6dYd+v9Y*21nr&%=wSOM5A1EJ5Y#5 znDVlcM^6drV&zH6<7JUwYFPxF5vEc~--xKwMvhgLH&EkwL-2zb>^kqw0kj%WYZ5ki z1CPNW(N1PV6(~s9^M{Yq1^5f){c*kAJf@fCU1yd>!S-#hYSvp8625_Zj^^PcV1e?f zO$}@JT=$1+x8ci_`XD|t)WIE7>n?yd5T^vd5AV`kX=VI3GY{cBo5=<|e55|oqv5zX zYsXp}(0o)Lmy1Ue3Cv_UL-O%?J!s;F<6<@hKO`OD;E#87qVC_nX8~`7lzELY1$$Q) zY=|eviGq6__cWo2B<7v2$s zrBt2gNHnSHHT27nhf7oxUzvpSS39l0(qob_{uKW&rM%oA>CiX0ZR>?s&ZVXh^MIfz zlYzSDMr11j{L-=Q0|oNZo5ITkQFl)TMR+kOr;zMubS5P)Y?A?3h{n!I*~Rl00sPB9 zYc?8&jkI{a``X+&h}>~fp_;Q4_G(l|Ho*Y8e&+Q!rL6SX9rMl8VtEvQ|1tB+5JlFV zqhC$-u91h8B)Q71CeG+i0P4Wt+5to4NCiikH-?|@N#IeSbLspx?zPAQJ?=-lpbJBu zT{#iSl4Z@y^xPO~8v+KQ4HlO@M?r({Ds@~V&L012m`DA(ne&m=@-?X3jJtGZ*Qy{+7dT`;NmG)A$SfaTy-+>4%UbLgB zLv69M3ccGPPr|obxBGyKc1<>}1AgN=@qCTfESBRJtX`{YUf^GRF*_}3;l5wFHSBl$ z+MG1>XRyu(gF{5M>a7M1yF3b3Zl|PYCd|PV2z&ybTZOxc+q*7ZpuCxbp+QYD6k~mf zV-r;{FhWOJNihwntGfK|wQ|8`Ve1ufzZS;otR?SoR_CadrKSx7{dpqZ%Q44w6^DzE z4Jyx!B6E>2o<`Tehz&&;r{Q4{LsIwUC-Q-7VgXqm3@+cB!{hCc$a;Wg2iv6JR*({@$z%xs_vtwqzeblB07#bOi0A;=t}WO z={RxZ{JvDMkssb@aDE-lV`Nl>sTi}Iq&XTv#s;vnjM2eHx8$x_Fne@HP6rACfl=Z*>*WcH@m2HYlXSVUlMH8eotHJTIx8aooNnFTj zkEV7wiyz~t94<!R z{MoX#h}E;stLcqXs$TEKLsyHUbLLP((p43uC#^%M#l{0TSBrmnzq ziK&U8JBm&R!mu}rxw!)?NW$Ui=!v~t7O-sxk*?bF#lQ62@-((eMz;P*Yv?_#hR;Ap zQmJ4A{9U7bZCED>)Yj6JYW=GXk)alZt9MxZ>y~1)N>Q1raHtbaR}vaS+dVv>`^5B` z7$Y>E>m6eJOyZsvAeZX7n~YQLLe)?|W{)E=>JOZlgde4D^BqC{ zS$UdSdM#j_`YZ%z{^#J3tn0kVx7bSS*X})(YjrWxIAN^9T2)5#0sc2)&g+Aep(+n7gLX3J$jChmE z>c@NrwMQ1932euGp&VoprU-Xw7k5HWsTCAkvUYAW)6picv%ePNw_zSIQ7JkNygMI2 z>GrdP#WXy^6ZVLdwc81jMFFxw1!C6p!1ZX$PI*)FAym8F<*PD>t7rLkL;PvZ-K6gx zdbQ0TaL_mKy`jQ92G)B`6`R;eL!*50ltF{F~aFVUw z7^ebI7!7HCk`p0;k9ZT;-+-p;pw355egQ<;bA`|vymTOLhRklvA5e#Vlm%Cx>+ zpI8yYIv%l7>2=o)dj@qdh?2dI3_G>w$oyb10K8mO(Vromu0l<)*D#ei5?+V=9ad2^ z=j(wp>~(G?IqHeMsR2N(9?iIQkriH64Fz^BzvREfM!5=)04vc13Y1*VC|r)piW-*H z~?80jV8C2g}1{*JRzM@P(tR5nX_TU<6MOqjk5)nLcb6N2(Z>z75F2;_x_& z{z}i<*p`yC!6Lt$Ep_!ut}S8khjyhEcm+Ro@;gR2?qw>6piWHSnTh;VoE-ba{?yvy zxl}$Od6Ti0kEUT8==Js4+*FN-z~1vh%P~-9@q!Ko_V9?Z-mtbMU2LzmtezwJmD^0U zS#*xrgP2iF2kl{?j~!7cb1n1OXfw_fp(JfxTwL=jJ(kL24TRtsHofqcY0);+Vq?DR zFdN-F+a%*2R#f*VP{K#dqQXjgA3N)N#%${-Un_&t z+$!EXc>#wzi!#F8BVA3mR*B4(vG0;k!fiYLT6&y+TPD>gOK z!bxqaweUnw7v@F7+)}$>^b)cy|L~X9AOqX}$y!17QPoq zuDHQnT>iDwOfyO-@eZ*lHl+G=%sYN;sqxwUj3z-pQAO`i9gZVpIl5|_ET{p&UZ#-f z?ueA~6Yw+}{t;RJfIsZo9s`>%P@( z&OmSL>5zJiJvje+J;#rs;h?^lHeeR`s6<&X$xx2m_5dj}ua%#*E+qXjP<2uQCtSw2 z@B><#+@;Zb2SimzxGilZ3PuQ0l)LSh<}lrtT6dW%Ox)9n(%U~IeM&nVHT~79^34LR zfjGXFmpmU6LYyd6n3sLpc(a5UZ`b_|`@cODZNcFV_(^#sl}FE6IW6ibM+KuEx0&ls z(&3Mb5OjlY0JuAfN~zyw37RtYu^epw8Vn@kX_Rpxs^})Ph!_5*^DWzGArS!F*miNV z6)nS?vh%F>v@l++nJA%x`7;1}oPVcHZi=nl9`63EZZCATpz<7)7Ay1}dgX4Qd@D3R zp=#~iXTVs6*X)8V2Wty3F$yuB<-e4SXBE<6z!##eJ{6HG?+wc=;SX=}9G?8r#Hq=Y z8?bw6c!@xavT@l>!!@;(j4G!NS5$m~!wBEAF(pUX!~TeDV7{&oEjh+g_9E#0BM;s1 zJ;${u;T?f7mpNiqkq*Wt0>>Csf*u7jymsL8py50vIm=KqtxcZ2!ODOutKDs81ND6W zT2g)#M?L#6y!Q7;zrn$I+;-54*45#FiWiaEQl1EG8f_u zbm1d{(=pvNxuIw0``Q}mSZkg5=Ym_tQ(#hnROkDtGQKgH(%9c~)GuHT)QBxar;R~O z3~nNeW+JlZ>fSvmLKby0vZ!SO&C}NqW`>%(q8}5;3DAdv7oBldp`=&~58Vh}9wuTv zBbQ2$93yo}-A-UHs!2Wmj(C(N8jOxMXdHsv_#3$Zeyi5UBwT7NG?MXNTM$+l`khZ7bmVV-Y}e>S*(t*~Gg1dHyZW_MWPSd#Ak4SF>En;@@=!!x!}$e}qi0 zodSh$zbV}0gM7q%*{&#dwy1i=!8^AMjW~Ulrf0Ebg4LHV6Tms#(6I;{Up>xCtGg=5 z0K_ePF;iL$y{;uoM5*{+{iEpjWa7-Otgt!9Tp6HXoD)<+^xh`lG@plx)Ll7Z9xa7RM!m?D408W*9Ld} zN3r)wPlP$4tpq%?3y@w}ewXSsFFF!K<9p26 z0)PG3(*nyj_HsUU=@#t;!Z0Cf`SlrvAI2TfV# z_G-35!7D!W!@flV<17KW_DIB7Lp7kDBtsQ^BO8>*Vr?PTSLZ^&CN$9<`MsYP>-MKe zubHb?n%&dX56cPy<9hHiUkQap1@BAJhtDRe^UAL8oPVo+lN`M5_hv;~;zJ=tWAS~A zV2{FV2M2%&ZUl8b07kh(NU@j9C{u&l(I#SX7!2y=#u9}0R)A&$ar$6m$5dZoNf&q! z4BOF^1sTjNhexAHZT)mIAd9lMO1qmSx9?kCEPCJl({NK50f_U_&ho#7X-C;)s<;$S5% z4vHd~2$A&?9LU?)Fp#yJr(6IbYpK3j?Hy#1qjz+{@1rzIOXAX`cAnZ^me~y}BJ3)5 z!^$X0{tai}hAipB7~m9_^n^UtDRP4?Th+8`;YTBmb zACuCl5E=lA{;*N;xK6ym2B56KiZshIq_08GxkiegU*(31V z8^a62eZ&EMc+{t)TTH-70Ni_9H&erN94u}pj%ZCu^iAJz`mjMlUF}Z16)R(omSt#r zijUeW?@_=#&PG8GWp-V@>pa=CYAlBDKVK-vX`L_aLe3>7n}i(v)NN0gErw59^EBO- zi><{|Ox`6i(vLf)WC0nhr^GL;2gv*}A;G@N)<8rBk`=y;z#0VmR!cothW3k}wp3*Z zga}A0vJ~qrKuLb;*p4M8!+`A}$5gw`fU=J)qO@PJhpCfJp2C_~9j&6c4G@7L#f@EN zN9G5RnqmBo(oGNou7gB*LN_+2c@3__Q^$gk`8Ak#QYELSr!Xw3%%~U0?Ofp1VR*&3 zuTIO!4t|5pa%qF1#G2@=>1z-IF;o25^VC5DiYnJsoPnpf*U{xqm4>WTj1pAdZCOKo z-#uL`aru!sjIx!z_pa*<&fjBoU@BLUdNll`H51!`j~vOx;Z4ek{sdJ#XauuE0B(EoTddf ztkS`S`s*^V*r*MaIZWtzlyZs&ba)h?%(~JImFwFL{>i#{$T~@5;o;c218XslE`Y@# zYAVQt2?6UP2%OXd2ULqb11lzUT09e?uSc8vtfA;}as^8_2q6hVzUg!~DtlYOGjh%) z3HBn?s#x=nn640|xnn)qLN|gx*}_X)5ktSEh8XoX&)BwyOCdHf1za|s_QZ%bpP#C| z8>PRly-_op^xzIxQ$zud4LWY>hO`kMV?vtj`S9aT6PR#SwhpXLO3xpe$V2GG zG+G&_ggg#tu5s}nrmG6Fb*9Hd-~_v=B0`4wrOa|UCC2eHPML;(W?P;ld~OdTH2z$X zdcBJ(6D{(qGkSFY+p=xyEeh7^MKomcZb5t41u^5wek6+4q_yn&QO?d1tMb8240+ui zLr+tsS23g9dABBb*5XbyvPH7|iX~2rFtN8ZM?XsIo9&LG6h|@hK0RUV-njf5Pyi04 z9`?As(Kx5r)%ohc(^gmZbuS#(*mH}L2Qg>v3BZ<>Q_F2Pb)d~=IKW=?UhH_u8w-z~ z>YP;xZR`%&jEWUuO4K!TKcRn(*L2sk@X-K1(jUK;p))L)S^A5!xc5?nj4))Y!l^A- zDOArE2(iLcJ7{1UsEXlX>+)S7{?V8T%Ve?1`w@GCfhYRWGVs&LRkeD_foUA-X1C0` zxHF)*qYF6upsnBVG8Y#NE3P=K{;gAAJ7XCYh3eU14V(xD)?j`Vg3)vPvU8k3=QnDUglAHk7@2(d#Yj^hydNc-Mgduur-6KdstR3Tu|E@m z=VGA;x{iO*G(^Og`<1@~@7cDYKUXccqwh~7KN&tHMtKxZgAcBLN<0?No2_=#6p)0X zCE{B2VB-Nc?95Z@<4n3{)~HCln_0F4J5}>z5B}`_K^~rPKt^SbIKYDb(EQKqtn)LV zd$5Q0(;Qwj#+)PR`D|<4OIq^vTYo?#IsZ6~hw#{Ed>`OT*xiwGAZ7>S{8418!fZLB zLEO^AC)iUv|Li?XhcevNWgb+#@hh-~Xdau(pK2ZU1s@!gYCL;>#6Z#JzAbZ$gaNM1 zYXg!uX7MCg1}%;(z0J%m8|WXX%4YZ0o$7kjNw-=Fy1`Gc zXD557f{$PVZWaB!xpRtre>#K0c9vDsoFTe3ZA4YK>(swM({qt>7#S1?@rq~>9L%}` zu)jNW_4|OJOnm;{!GqQkZqvagU?+fjY_*p2?;e&&A7B5rsNTBnQ+MNMGU+^}Tiz=y zvp%C2*r|KwJsC<%;*# zMa0{Ux86HK1weu)14F2=-pC=WXU(fWL~ZgRTjjL1f_`f`XNf4*6a0S+1AmP{03Fl{ zaSA=I077(Sygb}8TmrpmPV2sc$gibCX|J}l3xidjx2ALBRml(}Lut{Vi+j1gUTvce z#E|*_ilSI;{~__QS^4n4T2ZWM2;kRbx}AL|OY}cQ)$RPR>1KUiIP0t7Xo#;58T@A= z`#Bod|0zm_`hTItMfuet@xR)yW?U4%dahQsVDSI8dO`Q)s0y8@^8N2m{I4bcee2B=MSsD*9$6_R$y#xfu>S*`K+{72 literal 0 HcmV?d00001 diff --git a/Lesson5/assignment/box-img-sm.png b/Lesson5/assignment/box-img-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..466e7097e3d2a107209588dc65c5412000467e1a GIT binary patch literal 5412 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 literal 0 HcmV?d00001 diff --git a/Lesson5/assignment/build/contracts/Migrations.json b/Lesson5/assignment/build/contracts/Migrations.json new file mode 100644 index 000000000..ee480236d --- /dev/null +++ b/Lesson5/assignment/build/contracts/Migrations.json @@ -0,0 +1,827 @@ +{ + "contractName": "Migrations", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "new_address", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "last_completed_migration", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "completed", + "type": "uint256" + } + ], + "name": "setCompleted", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + } + ], + "bytecode": "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102db8061005e6000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610224565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc61022a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024f565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610220578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b6102c65a03f1151561021c57600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ac57806001819055505b505600a165627a7a72305820f74a275d9647f978368d81d227ed79bd3075f4ef88a2d965d283745f9b68a7310029", + "deployedBytecode": "0x606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610224565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc61022a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024f565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610220578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b6102c65a03f1151561021c57600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ac57806001819055505b505600a165627a7a72305820f74a275d9647f978368d81d227ed79bd3075f4ef88a2d965d283745f9b68a7310029", + "sourceMap": "25:467:0:-;;;177:51;;;;;;;;213:10;205:5;;:18;;;;;;;;;;;;;;;;;;25:467;;;;;;", + "deployedSourceMap": "25:467:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;332:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;73:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;232:96;;;;;;;;;;;;;;;;;;;;;;;;;;332:158;387:19;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;420:11;387:45;;438:8;:21;;;460:24;;438:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;142:26;332:158;;:::o;73:36::-;;;;:::o;49:20::-;;;;;;;;;;;;;:::o;232:96::-;160:5;;;;;;;;;;;146:19;;:10;:19;;;142:26;;;314:9;287:24;:36;;;;142:26;232:96;:::o", + "source": "pragma solidity ^0.4.4;\n\ncontract Migrations {\n address public owner;\n uint public last_completed_migration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n function Migrations() {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) restricted {\n last_completed_migration = completed;\n }\n\n function upgrade(address new_address) restricted {\n Migrations upgraded = Migrations(new_address);\n upgraded.setCompleted(last_completed_migration);\n }\n}\n", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/Migrations.sol", + "ast": { + "attributes": { + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/Migrations.sol", + "exportedSymbols": { + "Migrations": [ + 56 + ] + } + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "^", + "0.4", + ".4" + ] + }, + "id": 1, + "name": "PragmaDirective", + "src": "0:23:0" + }, + { + "attributes": { + "baseContracts": [ + null + ], + "contractDependencies": [ + null + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 56 + ], + "name": "Migrations", + "scope": 57 + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "owner", + "scope": 56, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 2, + "name": "ElementaryTypeName", + "src": "49:7:0" + } + ], + "id": 3, + "name": "VariableDeclaration", + "src": "49:20:0" + }, + { + "attributes": { + "constant": false, + "name": "last_completed_migration", + "scope": 56, + "stateVariable": true, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 4, + "name": "ElementaryTypeName", + "src": "73:4:0" + } + ], + "id": 5, + "name": "VariableDeclaration", + "src": "73:36:0" + }, + { + "attributes": { + "name": "restricted", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 6, + "name": "ParameterList", + "src": "133:2:0" + }, + { + "children": [ + { + "attributes": { + "falseBody": null + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 7, + "name": "Identifier", + "src": "146:3:0" + } + ], + "id": 8, + "name": "MemberAccess", + "src": "146:10:0" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 3, + "type": "address", + "value": "owner" + }, + "id": 9, + "name": "Identifier", + "src": "160:5:0" + } + ], + "id": 10, + "name": "BinaryOperation", + "src": "146:19:0" + }, + { + "id": 11, + "name": "PlaceholderStatement", + "src": "167:1:0" + } + ], + "id": 12, + "name": "IfStatement", + "src": "142:26:0" + } + ], + "id": 13, + "name": "Block", + "src": "136:37:0" + } + ], + "id": 14, + "name": "ModifierDefinition", + "src": "114:59:0" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": true, + "modifiers": [ + null + ], + "name": "Migrations", + "payable": false, + "scope": 56, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 15, + "name": "ParameterList", + "src": "196:2:0" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 16, + "name": "ParameterList", + "src": "199:0:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 3, + "type": "address", + "value": "owner" + }, + "id": 17, + "name": "Identifier", + "src": "205:5:0" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 18, + "name": "Identifier", + "src": "213:3:0" + } + ], + "id": 19, + "name": "MemberAccess", + "src": "213:10:0" + } + ], + "id": 20, + "name": "Assignment", + "src": "205:18:0" + } + ], + "id": 21, + "name": "ExpressionStatement", + "src": "205:18:0" + } + ], + "id": 22, + "name": "Block", + "src": "199:29:0" + } + ], + "id": 23, + "name": "FunctionDefinition", + "src": "177:51:0" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "setCompleted", + "payable": false, + "scope": 56, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "completed", + "scope": 35, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 24, + "name": "ElementaryTypeName", + "src": "254:4:0" + } + ], + "id": 25, + "name": "VariableDeclaration", + "src": "254:14:0" + } + ], + "id": 26, + "name": "ParameterList", + "src": "253:16:0" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 29, + "name": "ParameterList", + "src": "281:0:0" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 14, + "type": "modifier ()", + "value": "restricted" + }, + "id": 27, + "name": "Identifier", + "src": "270:10:0" + } + ], + "id": 28, + "name": "ModifierInvocation", + "src": "270:10:0" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 5, + "type": "uint256", + "value": "last_completed_migration" + }, + "id": 30, + "name": "Identifier", + "src": "287:24:0" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 25, + "type": "uint256", + "value": "completed" + }, + "id": 31, + "name": "Identifier", + "src": "314:9:0" + } + ], + "id": 32, + "name": "Assignment", + "src": "287:36:0" + } + ], + "id": 33, + "name": "ExpressionStatement", + "src": "287:36:0" + } + ], + "id": 34, + "name": "Block", + "src": "281:47:0" + } + ], + "id": 35, + "name": "FunctionDefinition", + "src": "232:96:0" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "upgrade", + "payable": false, + "scope": 56, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "new_address", + "scope": 55, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 36, + "name": "ElementaryTypeName", + "src": "349:7:0" + } + ], + "id": 37, + "name": "VariableDeclaration", + "src": "349:19:0" + } + ], + "id": 38, + "name": "ParameterList", + "src": "348:21:0" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 41, + "name": "ParameterList", + "src": "381:0:0" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 14, + "type": "modifier ()", + "value": "restricted" + }, + "id": 39, + "name": "Identifier", + "src": "370:10:0" + } + ], + "id": 40, + "name": "ModifierInvocation", + "src": "370:10:0" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 43 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "upgraded", + "scope": 55, + "stateVariable": false, + "storageLocation": "default", + "type": "contract Migrations", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "contractScope": null, + "name": "Migrations", + "referencedDeclaration": 56, + "type": "contract Migrations" + }, + "id": 42, + "name": "UserDefinedTypeName", + "src": "387:10:0" + } + ], + "id": 43, + "name": "VariableDeclaration", + "src": "387:19:0" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "contract Migrations", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 56, + "type": "type(contract Migrations)", + "value": "Migrations" + }, + "id": 44, + "name": "Identifier", + "src": "409:10:0" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 37, + "type": "address", + "value": "new_address" + }, + "id": 45, + "name": "Identifier", + "src": "420:11:0" + } + ], + "id": 46, + "name": "FunctionCall", + "src": "409:23:0" + } + ], + "id": 47, + "name": "VariableDeclarationStatement", + "src": "387:45:0" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "setCompleted", + "referencedDeclaration": 35, + "type": "function (uint256) external" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 43, + "type": "contract Migrations", + "value": "upgraded" + }, + "id": 48, + "name": "Identifier", + "src": "438:8:0" + } + ], + "id": 50, + "name": "MemberAccess", + "src": "438:21:0" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 5, + "type": "uint256", + "value": "last_completed_migration" + }, + "id": 51, + "name": "Identifier", + "src": "460:24:0" + } + ], + "id": 52, + "name": "FunctionCall", + "src": "438:47:0" + } + ], + "id": 53, + "name": "ExpressionStatement", + "src": "438:47:0" + } + ], + "id": 54, + "name": "Block", + "src": "381:109:0" + } + ], + "id": 55, + "name": "FunctionDefinition", + "src": "332:158:0" + } + ], + "id": 56, + "name": "ContractDefinition", + "src": "25:467:0" + } + ], + "id": 57, + "name": "SourceUnit", + "src": "0:493:0" + }, + "compiler": { + "name": "solc", + "version": "0.4.18+commit.9cf6e910.Emscripten.clang" + }, + "networks": { + "1517198540932": { + "events": {}, + "links": {}, + "address": "0x1da27ed50a7d8914aba3c6e117145ef38c2634e1" + } + }, + "schemaVersion": "1.0.1", + "updatedAt": "2018-01-29T04:22:48.573Z" +} \ No newline at end of file diff --git a/Lesson5/assignment/build/contracts/Ownable.json b/Lesson5/assignment/build/contracts/Ownable.json new file mode 100644 index 000000000..005c9a156 --- /dev/null +++ b/Lesson5/assignment/build/contracts/Ownable.json @@ -0,0 +1,847 @@ +{ + "contractName": "Ownable", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + } + ], + "bytecode": "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102858061005e6000396000f30060606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610051578063f2fde38b146100a6575b600080fd5b341561005c57600080fd5b6100646100df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100b157600080fd5b6100dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610104565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561015f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561019b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820e85d5b0f98bdc9ff7356637e82a9d12fdf280eaaf113db03841d2ea1ba7e5aa40029", + "deployedBytecode": "0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610051578063f2fde38b146100a6575b600080fd5b341561005c57600080fd5b6100646100df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100b157600080fd5b6100dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610104565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561015f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561019b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820e85d5b0f98bdc9ff7356637e82a9d12fdf280eaaf113db03841d2ea1ba7e5aa40029", + "sourceMap": "217:787:1:-;;;469:55;;;;;;;;509:10;501:5;;:18;;;;;;;;;;;;;;;;;;217:787;;;;;;", + "deployedSourceMap": "217:787:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20;;;;;;;;;;;;;:::o;832:169::-;653:5;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;928:1;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o", + "source": "pragma solidity ^0.4.18;\n\n\n/**\n * @title Ownable\n * @dev The Ownable contract has an owner address, and provides basic authorization control\n * functions, this simplifies the implementation of \"user permissions\".\n */\ncontract Ownable {\n address public owner;\n\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n\n /**\n * @dev The Ownable constructor sets the original `owner` of the contract to the sender\n * account.\n */\n function Ownable() public {\n owner = msg.sender;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(msg.sender == owner);\n _;\n }\n\n /**\n * @dev Allows the current owner to transfer control of the contract to a newOwner.\n * @param newOwner The address to transfer ownership to.\n */\n function transferOwnership(address newOwner) public onlyOwner {\n require(newOwner != address(0));\n OwnershipTransferred(owner, newOwner);\n owner = newOwner;\n }\n\n}", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/Ownable.sol", + "ast": { + "attributes": { + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/Ownable.sol", + "exportedSymbols": { + "Ownable": [ + 112 + ] + } + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "^", + "0.4", + ".18" + ] + }, + "id": 58, + "name": "PragmaDirective", + "src": "0:24:1" + }, + { + "attributes": { + "baseContracts": [ + null + ], + "contractDependencies": [ + null + ], + "contractKind": "contract", + "documentation": "@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 112 + ], + "name": "Ownable", + "scope": 113 + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "owner", + "scope": 112, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 59, + "name": "ElementaryTypeName", + "src": "238:7:1" + } + ], + "id": 60, + "name": "VariableDeclaration", + "src": "238:20:1" + }, + { + "attributes": { + "anonymous": false, + "name": "OwnershipTransferred" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "indexed": true, + "name": "previousOwner", + "scope": 66, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 61, + "name": "ElementaryTypeName", + "src": "291:7:1" + } + ], + "id": 62, + "name": "VariableDeclaration", + "src": "291:29:1" + }, + { + "attributes": { + "constant": false, + "indexed": true, + "name": "newOwner", + "scope": 66, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 63, + "name": "ElementaryTypeName", + "src": "322:7:1" + } + ], + "id": 64, + "name": "VariableDeclaration", + "src": "322:24:1" + } + ], + "id": 65, + "name": "ParameterList", + "src": "290:57:1" + } + ], + "id": 66, + "name": "EventDefinition", + "src": "264:84:1" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": true, + "modifiers": [ + null + ], + "name": "Ownable", + "payable": false, + "scope": 112, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 67, + "name": "ParameterList", + "src": "485:2:1" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 68, + "name": "ParameterList", + "src": "495:0:1" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 60, + "type": "address", + "value": "owner" + }, + "id": 69, + "name": "Identifier", + "src": "501:5:1" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 70, + "name": "Identifier", + "src": "509:3:1" + } + ], + "id": 71, + "name": "MemberAccess", + "src": "509:10:1" + } + ], + "id": 72, + "name": "Assignment", + "src": "501:18:1" + } + ], + "id": 73, + "name": "ExpressionStatement", + "src": "501:18:1" + } + ], + "id": 74, + "name": "Block", + "src": "495:29:1" + } + ], + "id": 75, + "name": "FunctionDefinition", + "src": "469:55:1" + }, + { + "attributes": { + "name": "onlyOwner", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 76, + "name": "ParameterList", + "src": "622:2:1" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 587, + "type": "function (bool) pure", + "value": "require" + }, + "id": 77, + "name": "Identifier", + "src": "631:7:1" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 78, + "name": "Identifier", + "src": "639:3:1" + } + ], + "id": 79, + "name": "MemberAccess", + "src": "639:10:1" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 60, + "type": "address", + "value": "owner" + }, + "id": 80, + "name": "Identifier", + "src": "653:5:1" + } + ], + "id": 81, + "name": "BinaryOperation", + "src": "639:19:1" + } + ], + "id": 82, + "name": "FunctionCall", + "src": "631:28:1" + } + ], + "id": 83, + "name": "ExpressionStatement", + "src": "631:28:1" + }, + { + "id": 84, + "name": "PlaceholderStatement", + "src": "665:1:1" + } + ], + "id": 85, + "name": "Block", + "src": "625:46:1" + } + ], + "id": 86, + "name": "ModifierDefinition", + "src": "604:67:1" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "transferOwnership", + "payable": false, + "scope": 112, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "newOwner", + "scope": 111, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 87, + "name": "ElementaryTypeName", + "src": "859:7:1" + } + ], + "id": 88, + "name": "VariableDeclaration", + "src": "859:16:1" + } + ], + "id": 89, + "name": "ParameterList", + "src": "858:18:1" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 92, + "name": "ParameterList", + "src": "894:0:1" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 86, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 90, + "name": "Identifier", + "src": "884:9:1" + } + ], + "id": 91, + "name": "ModifierInvocation", + "src": "884:9:1" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 587, + "type": "function (bool) pure", + "value": "require" + }, + "id": 93, + "name": "Identifier", + "src": "900:7:1" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 88, + "type": "address", + "value": "newOwner" + }, + "id": 94, + "name": "Identifier", + "src": "908:8:1" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)", + "value": "address" + }, + "id": 95, + "name": "ElementaryTypeNameExpression", + "src": "920:7:1" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": null, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 96, + "name": "Literal", + "src": "928:1:1" + } + ], + "id": 97, + "name": "FunctionCall", + "src": "920:10:1" + } + ], + "id": 98, + "name": "BinaryOperation", + "src": "908:22:1" + } + ], + "id": 99, + "name": "FunctionCall", + "src": "900:31:1" + } + ], + "id": 100, + "name": "ExpressionStatement", + "src": "900:31:1" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 66, + "type": "function (address,address)", + "value": "OwnershipTransferred" + }, + "id": 101, + "name": "Identifier", + "src": "937:20:1" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 60, + "type": "address", + "value": "owner" + }, + "id": 102, + "name": "Identifier", + "src": "958:5:1" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 88, + "type": "address", + "value": "newOwner" + }, + "id": 103, + "name": "Identifier", + "src": "965:8:1" + } + ], + "id": 104, + "name": "FunctionCall", + "src": "937:37:1" + } + ], + "id": 105, + "name": "ExpressionStatement", + "src": "937:37:1" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 60, + "type": "address", + "value": "owner" + }, + "id": 106, + "name": "Identifier", + "src": "980:5:1" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 88, + "type": "address", + "value": "newOwner" + }, + "id": 107, + "name": "Identifier", + "src": "988:8:1" + } + ], + "id": 108, + "name": "Assignment", + "src": "980:16:1" + } + ], + "id": 109, + "name": "ExpressionStatement", + "src": "980:16:1" + } + ], + "id": 110, + "name": "Block", + "src": "894:107:1" + } + ], + "id": 111, + "name": "FunctionDefinition", + "src": "832:169:1" + } + ], + "id": 112, + "name": "ContractDefinition", + "src": "217:787:1" + } + ], + "id": 113, + "name": "SourceUnit", + "src": "0:1004:1" + }, + "compiler": { + "name": "solc", + "version": "0.4.18+commit.9cf6e910.Emscripten.clang" + }, + "networks": { + "1517198540932": { + "events": {}, + "links": {}, + "address": "0xdf88e8c516e25dbe495285a8ef80faccae00af3f" + } + }, + "schemaVersion": "1.0.1", + "updatedAt": "2018-01-29T04:22:48.571Z" +} \ No newline at end of file diff --git a/Lesson5/assignment/build/contracts/Payroll.json b/Lesson5/assignment/build/contracts/Payroll.json new file mode 100644 index 000000000..01cebe3eb --- /dev/null +++ b/Lesson5/assignment/build/contracts/Payroll.json @@ -0,0 +1,5314 @@ +{ + "contractName": "Payroll", + "abi": [ + { + "constant": false, + "inputs": [], + "name": "hasEnoughFund", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSalary", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "calculateRunway", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "employeeId", + "type": "address" + }, + { + "name": "salary", + "type": "uint256" + } + ], + "name": "updateEmployee", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "addFund", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "oldAddress", + "type": "address" + }, + { + "name": "newAddress", + "type": "address" + } + ], + "name": "changePaymentAddress", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "getPaid", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "employees", + "outputs": [ + { + "name": "id", + "type": "address" + }, + { + "name": "salary", + "type": "uint256" + }, + { + "name": "lastPayday", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "employeeId", + "type": "address" + } + ], + "name": "removeEmployee", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "employeeId", + "type": "address" + }, + { + "name": "salary", + "type": "uint256" + } + ], + "name": "addEmployee", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + } + ], + "bytecode": "0x60606040526000600155341561001457600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611449806100a46000396000f3006060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806323fed09e146100bf5780632e46eb1d146100ec5780634ec19512146101155780635e91d8ec1461013e5780638da5cb5b14610180578063a2f09dfa146101d5578063bc456c42146101f3578063cf41d6f81461024b578063d067894714610260578063d108177a146102e7578063e7fd9a1314610320578063f2fde38b14610362575b600080fd5b34156100ca57600080fd5b6100d261039b565b604051808215151515815260200191505060405180910390f35b34156100f757600080fd5b6100ff6103ac565b6040518082815260200191505060405180910390f35b341561012057600080fd5b6101286103b2565b6040518082815260200191505060405180910390f35b341561014957600080fd5b61017e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506103e5565b005b341561018b57600080fd5b6101936105ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd6105d3565b6040518082815260200191505060405180910390f35b34156101fe57600080fd5b610249600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061064e565b005b341561025657600080fd5b61025e6109b7565b005b341561026b57600080fd5b610297600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c39565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34156102f257600080fd5b61031e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c83565b005b341561032b57600080fd5b610360600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e4b565b005b341561036d57600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061107a565b005b6000806103a66103b2565b11905090565b60015481565b60006103e06001543073ffffffffffffffffffffffffffffffffffffffff16316111d090919063ffffffff16565b905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561044357600080fd5b826000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156104cc57600080fd5b6104d5846111eb565b6104f0670de0b6b3a7640000846113ab90919063ffffffff16565b915061055b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461054d846001546113e690919063ffffffff16565b61140490919063ffffffff16565b60018190555081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561063157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106aa57600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561073357600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107bb57600080fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055505050505050565b6000336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a4257600080fd5b610a98600a600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113e690919063ffffffff16565b91504282101515610aa557fe5b3073ffffffffffffffffffffffffffffffffffffffff1631600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411151515610b0a57fe5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501515610c3557600080fd5b5050565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cdf57600080fd5b806000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610d6857600080fd5b610d71826111eb565b610dc8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460015461140490919063ffffffff16565b600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea757600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f2f57600080fd5b6060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff168152602001610f72670de0b6b3a7640000856113ab90919063ffffffff16565b815260200142815250600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061106f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001546113e690919063ffffffff16565b600181905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561111257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082848115156111de57fe5b0490508091505092915050565b6000611299600a61128b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544203600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546113ab90919063ffffffff16565b6111d090919063ffffffff16565b9050803073ffffffffffffffffffffffffffffffffffffffff1631101515156112be57fe5b42600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156113a757600080fd5b5050565b60008060008414156113c057600091506113df565b82840290508284828115156113d157fe5b041415156113db57fe5b8091505b5092915050565b60008082840190508381101515156113fa57fe5b8091505092915050565b600082821115151561141257fe5b8183039050929150505600a165627a7a72305820246647ad05112ff8326c22881d7e9a680450994514aab57144787d1dbf6b82bd0029", + "deployedBytecode": "0x6060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806323fed09e146100bf5780632e46eb1d146100ec5780634ec19512146101155780635e91d8ec1461013e5780638da5cb5b14610180578063a2f09dfa146101d5578063bc456c42146101f3578063cf41d6f81461024b578063d067894714610260578063d108177a146102e7578063e7fd9a1314610320578063f2fde38b14610362575b600080fd5b34156100ca57600080fd5b6100d261039b565b604051808215151515815260200191505060405180910390f35b34156100f757600080fd5b6100ff6103ac565b6040518082815260200191505060405180910390f35b341561012057600080fd5b6101286103b2565b6040518082815260200191505060405180910390f35b341561014957600080fd5b61017e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506103e5565b005b341561018b57600080fd5b6101936105ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd6105d3565b6040518082815260200191505060405180910390f35b34156101fe57600080fd5b610249600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061064e565b005b341561025657600080fd5b61025e6109b7565b005b341561026b57600080fd5b610297600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c39565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34156102f257600080fd5b61031e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c83565b005b341561032b57600080fd5b610360600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610e4b565b005b341561036d57600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061107a565b005b6000806103a66103b2565b11905090565b60015481565b60006103e06001543073ffffffffffffffffffffffffffffffffffffffff16316111d090919063ffffffff16565b905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561044357600080fd5b826000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156104cc57600080fd5b6104d5846111eb565b6104f0670de0b6b3a7640000846113ab90919063ffffffff16565b915061055b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461054d846001546113e690919063ffffffff16565b61140490919063ffffffff16565b60018190555081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561063157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106aa57600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561073357600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107bb57600080fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015590505082600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055505050505050565b6000336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a4257600080fd5b610a98600a600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113e690919063ffffffff16565b91504282101515610aa557fe5b3073ffffffffffffffffffffffffffffffffffffffff1631600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411151515610b0a57fe5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549081150290604051600060405180830381858888f193505050501515610c3557600080fd5b5050565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cdf57600080fd5b806000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610d6857600080fd5b610d71826111eb565b610dc8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460015461140490919063ffffffff16565b600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea757600080fd5b816000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f2f57600080fd5b6060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff168152602001610f72670de0b6b3a7640000856113ab90919063ffffffff16565b815260200142815250600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061106f600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001546113e690919063ffffffff16565b600181905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561111257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082848115156111de57fe5b0490508091505092915050565b6000611299600a61128b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544203600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546113ab90919063ffffffff16565b6111d090919063ffffffff16565b9050803073ffffffffffffffffffffffffffffffffffffffff1631101515156112be57fe5b42600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156113a757600080fd5b5050565b60008060008414156113c057600091506113df565b82840290508284828115156113d157fe5b041415156113db57fe5b8091505b5092915050565b60008082840190508381101515156113fa57fe5b8091505092915050565b600082821115151561141257fe5b8183039050929150505600a165627a7a72305820246647ad05112ff8326c22881d7e9a680450994514aab57144787d1dbf6b82bd0029", + "sourceMap": "113:2936:2:-;;;356:1;329:28;;770:54;;;;;;;;509:10:1;501:5;;:18;;;;;;;;;;;;;;;;;;807:10:2;799:5;;:18;;;;;;;;;;;;;;;;;;113:2936;;;;;;", + "deployedSourceMap": "113:2936:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;329:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2072:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1651:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1974:88:2;;;;;;;;;;;;;;;;;;;;;;;2764:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2272:352;;;;;;;;;;;;;;382:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1414:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:85:2;2211:4;2254:1;2234:17;:15;:17::i;:::-;:21;2227:28;;2177:85;:::o;329:28::-;;;;:::o;2072:95::-;2108:4;2131:29;2148:11;;2131:4;:12;;;:16;;:29;;;;:::i;:::-;2124:36;;2072:95;:::o;1651:313::-;1787:14;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1732:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;1753:24;1766:10;1753:12;:24::i;:::-;1804:19;1815:7;1804:6;:10;;:19;;;;:::i;:::-;1787:36;;1847:60;1878:9;:21;1888:10;1878:21;;;;;;;;;;;;;;;:28;;;1847:26;1863:9;1847:11;;:15;;:26;;;;:::i;:::-;:30;;:60;;;;:::i;:::-;1833:11;:74;;;;1948:9;1917;:21;1927:10;1917:21;;;;;;;;;;;;;;;:28;;:40;;;;629:1;1651:313;;;:::o;238:20:1:-;;;;;;;;;;;;;:::o;1974:88:2:-;2020:4;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;2043:4;:12;;;2036:19;;1974:88;:::o;2764:283::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;2859:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;2888:10;738:3;710:9;:21;720:10;710:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;702:40;;;;;;;;2934:9;:21;2944:10;2934:21;;;;;;;;;;;;;;;2910:9;:21;2920:10;2910:21;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2992:10;2965:9;:21;2975:10;2965:21;;;;;;;;;;;;;;;:24;;;:37;;;;;;;;;;;;;;;;;;3019:9;:21;3029:10;3019:21;;;;;;;;;;;;;;;;3012:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;542:1;629;2764:283;;:::o;2272:352::-;2326:15;2305:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;2344:49;313:10;2344:9;:21;2354:10;2344:21;;;;;;;;;;;;;;;:32;;;:36;;:49;;;;:::i;:::-;2326:67;;2423:3;2410:10;:16;2403:24;;;;;;2476:4;:12;;;2444:9;:21;2454:10;2444:21;;;;;;;;;;;;;;;:28;;;:44;;2437:52;;;;;;2534:10;2499:9;:21;2509:10;2499:21;;;;;;;;;;;;;;;:32;;:45;;;;2554:9;:21;2564:10;2554:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:33;;:63;2588:9;:21;2598:10;2588:21;;;;;;;;;;;;;;;:28;;;2554:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2272:352;;:::o;382:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1414:227::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1482:10;528:3;500:9;:21;510:10;500:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;;492:40;;;;;;;;1503:24;1516:10;1503:12;:24::i;:::-;1551:45;1567:9;:21;1577:10;1567:21;;;;;;;;;;;;;;;:28;;;1551:11;;:15;;:45;;;;:::i;:::-;1537:11;:59;;;;1613:9;:21;1623:10;1613:21;;;;;;;;;;;;;;;;1606:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;629:1;1414:227;:::o;1156:248::-;613:5;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;1237:10;738:3;710:9;:21;720:10;710:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:31;;;702:40;;;;;;;;1282:46;;;;;;;;;1291:10;1282:46;;;;;;1303:19;1314:7;1303:6;:10;;:19;;;;:::i;:::-;1282:46;;;;1324:3;1282:46;;;1258:9;:21;1268:10;1258:21;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1352:45;1368:9;:21;1378:10;1368:21;;;;;;;;;;;;;;;:28;;;1352:11;;:15;;:45;;;;:::i;:::-;1338:11;:59;;;;629:1;1156:248;;:::o;832:169:1:-;613:5:2;;;;;;;;;;;598:20;;:10;:20;;;590:29;;;;;;;;928:1:1;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o;458:265:3:-;516:7;605:9;621:1;617;:5;;;;;;;;605:17;;717:1;710:8;;458:265;;;;;:::o;834:312:2:-;894:12;909:89;313:10;909:72;948:9;:21;958:10;948:21;;;;;;;;;;;;;;;:32;;;942:3;:38;909:9;:21;919:10;909:21;;;;;;;;;;;;;;;:28;;;:32;;:72;;;;:::i;:::-;:76;;:89;;;;:::i;:::-;894:104;;1031:7;1015:4;:12;;;:23;;1008:31;;;;;;1084:3;1049:9;:21;1059:10;1049:21;;;;;;;;;;;;;;;:32;;:38;;;;1097:9;:21;1107:10;1097:21;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:33;;:42;1131:7;1097:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;834:312;;:::o;203:173:3:-;261:7;316:9;285:1;280;:6;276:35;;;303:1;296:8;;;;276:35;332:1;328;:5;316:17;;355:1;350;346;:5;;;;;;;;:10;339:18;;;;;;370:1;363:8;;203:173;;;;;;:::o;1008:129::-;1066:7;1081:9;1097:1;1093;:5;1081:17;;1116:1;1111;:6;;1104:14;;;;;;1131:1;1124:8;;1008:129;;;;;:::o;836:110::-;894:7;921:1;916;:6;;909:14;;;;;;940:1;936;:5;929:12;;836:110;;;;:::o", + "source": "/*作业请提交在这个目录下*/\npragma solidity ^0.4.14;\nimport './Ownable.sol';\nimport './SafeMath.sol';\n\ncontract Payroll is Ownable {\n \n using SafeMath for uint;\n \n struct Employee {\n address id;\n uint salary;\n uint lastPayday;\n }\n \n uint constant payDuration = 10 seconds;\n uint public totalSalary = 0;\n address owner;\n mapping (address => Employee) public employees;\n \n\n modifier employeeExist(address employeeId){\n require(employees[employeeId].id != 0x0);\n _;\n }\n \n modifier onlyOwner(){\n require(msg.sender == owner);\n _;\n }\n \n modifier employeeNotExist(address employeeId){\n require(employees[employeeId].id == 0x0);\n _;\n }\n \n function Payroll() {\n owner = msg.sender;\n }\n \n function _partialPaid(address employeeID) private {\n uint payment = employees[employeeID].salary.mul(now - employees[employeeID].lastPayday).div(payDuration);\n assert(this.balance >= payment);\n employees[employeeID].lastPayday = now;\n employees[employeeID].id.transfer(payment);\n }\n \n function addEmployee(address employeeId, uint salary) onlyOwner employeeNotExist(employeeId){\n employees[employeeId] = Employee(employeeId, salary.mul(1 ether), now);\n totalSalary = totalSalary.add(employees[employeeId].salary);\n }\n \n function removeEmployee(address employeeId) onlyOwner employeeExist(employeeId){\n _partialPaid(employeeId);\n totalSalary = totalSalary.sub(employees[employeeId].salary);\n delete employees[employeeId];\n }\n \n function updateEmployee(address employeeId, uint salary) onlyOwner employeeExist(employeeId){\n _partialPaid(employeeId);\n uint newSalary = salary.mul(1 ether);\n totalSalary = totalSalary.add(newSalary).sub(employees[employeeId].salary);\n employees[employeeId].salary = newSalary;\n }\n \n function addFund() payable onlyOwner returns (uint) {\n return this.balance;\n }\n \n function calculateRunway() returns (uint) {\n return this.balance.div(totalSalary);\n }\n \n function hasEnoughFund() returns (bool) {\n return calculateRunway() > 0;\n }\n \n function getPaid() employeeExist(msg.sender){\n uint nextPayday = employees[msg.sender].lastPayday.add(payDuration);\n assert(nextPayday < now);\n assert(employees[msg.sender].salary <= this.balance);\n employees[msg.sender].lastPayday = nextPayday;\n employees[msg.sender].id.transfer(employees[msg.sender].salary);\n }\n \n //增加 changePaymentAddress 函数,更改员工的薪水支付地址,思考一下能否使用modifier整合某个功能\n function changePaymentAddress (address oldAddress, address newAddress) onlyOwner employeeExist(oldAddress) employeeNotExist(newAddress) {\n employees[newAddress] = employees[oldAddress];\n employees[newAddress].id = newAddress;\n delete employees[oldAddress];\n }\n}", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/Payroll.sol", + "ast": { + "attributes": { + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/Payroll.sol", + "exportedSymbols": { + "Payroll": [ + 474 + ] + } + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "^", + "0.4", + ".14" + ] + }, + "id": 114, + "name": "PragmaDirective", + "src": "38:24:2" + }, + { + "attributes": { + "SourceUnit": 113, + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/Ownable.sol", + "file": "./Ownable.sol", + "scope": 475, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 115, + "name": "ImportDirective", + "src": "63:23:2" + }, + { + "attributes": { + "SourceUnit": 573, + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/SafeMath.sol", + "file": "./SafeMath.sol", + "scope": 475, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 116, + "name": "ImportDirective", + "src": "87:24:2" + }, + { + "attributes": { + "contractDependencies": [ + 112 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 474, + 112 + ], + "name": "Payroll", + "scope": 475 + }, + "children": [ + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "contractScope": null, + "name": "Ownable", + "referencedDeclaration": 112, + "type": "contract Ownable" + }, + "id": 117, + "name": "UserDefinedTypeName", + "src": "133:7:2" + } + ], + "id": 118, + "name": "InheritanceSpecifier", + "src": "133:7:2" + }, + { + "children": [ + { + "attributes": { + "contractScope": null, + "name": "SafeMath", + "referencedDeclaration": 572, + "type": "library SafeMath" + }, + "id": 119, + "name": "UserDefinedTypeName", + "src": "158:8:2" + }, + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 120, + "name": "ElementaryTypeName", + "src": "171:4:2" + } + ], + "id": 121, + "name": "UsingForDirective", + "src": "152:24:2" + }, + { + "attributes": { + "canonicalName": "Payroll.Employee", + "name": "Employee", + "scope": 474, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "id", + "scope": 128, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 122, + "name": "ElementaryTypeName", + "src": "212:7:2" + } + ], + "id": 123, + "name": "VariableDeclaration", + "src": "212:10:2" + }, + { + "attributes": { + "constant": false, + "name": "salary", + "scope": 128, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 124, + "name": "ElementaryTypeName", + "src": "232:4:2" + } + ], + "id": 125, + "name": "VariableDeclaration", + "src": "232:11:2" + }, + { + "attributes": { + "constant": false, + "name": "lastPayday", + "scope": 128, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 126, + "name": "ElementaryTypeName", + "src": "253:4:2" + } + ], + "id": 127, + "name": "VariableDeclaration", + "src": "253:15:2" + } + ], + "id": 128, + "name": "StructDefinition", + "src": "186:89:2" + }, + { + "attributes": { + "constant": true, + "name": "payDuration", + "scope": 474, + "stateVariable": true, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 129, + "name": "ElementaryTypeName", + "src": "285:4:2" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "3130", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": "seconds", + "token": "number", + "type": "int_const 10", + "value": "10" + }, + "id": 130, + "name": "Literal", + "src": "313:10:2" + } + ], + "id": 131, + "name": "VariableDeclaration", + "src": "285:38:2" + }, + { + "attributes": { + "constant": false, + "name": "totalSalary", + "scope": 474, + "stateVariable": true, + "storageLocation": "default", + "type": "uint256", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 132, + "name": "ElementaryTypeName", + "src": "329:4:2" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": null, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 133, + "name": "Literal", + "src": "356:1:2" + } + ], + "id": 134, + "name": "VariableDeclaration", + "src": "329:28:2" + }, + { + "attributes": { + "constant": false, + "name": "owner", + "scope": 474, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 135, + "name": "ElementaryTypeName", + "src": "363:7:2" + } + ], + "id": 136, + "name": "VariableDeclaration", + "src": "363:13:2" + }, + { + "attributes": { + "constant": false, + "name": "employees", + "scope": 474, + "stateVariable": true, + "storageLocation": "default", + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "type": "mapping(address => struct Payroll.Employee storage ref)" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 137, + "name": "ElementaryTypeName", + "src": "391:7:2" + }, + { + "attributes": { + "contractScope": null, + "name": "Employee", + "referencedDeclaration": 128, + "type": "struct Payroll.Employee storage pointer" + }, + "id": 138, + "name": "UserDefinedTypeName", + "src": "402:8:2" + } + ], + "id": 139, + "name": "Mapping", + "src": "382:29:2" + } + ], + "id": 140, + "name": "VariableDeclaration", + "src": "382:46:2" + }, + { + "attributes": { + "name": "employeeExist", + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "employeeId", + "scope": 155, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 141, + "name": "ElementaryTypeName", + "src": "463:7:2" + } + ], + "id": 142, + "name": "VariableDeclaration", + "src": "463:18:2" + } + ], + "id": 143, + "name": "ParameterList", + "src": "462:20:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 587, + "type": "function (bool) pure", + "value": "require" + }, + "id": 144, + "name": "Identifier", + "src": "492:7:2" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "id", + "referencedDeclaration": 123, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 145, + "name": "Identifier", + "src": "500:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 142, + "type": "address", + "value": "employeeId" + }, + "id": 146, + "name": "Identifier", + "src": "510:10:2" + } + ], + "id": 147, + "name": "IndexAccess", + "src": "500:21:2" + } + ], + "id": 148, + "name": "MemberAccess", + "src": "500:24:2" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "307830", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": null, + "token": "number", + "type": "int_const 0", + "value": "0x0" + }, + "id": 149, + "name": "Literal", + "src": "528:3:2" + } + ], + "id": 150, + "name": "BinaryOperation", + "src": "500:31:2" + } + ], + "id": 151, + "name": "FunctionCall", + "src": "492:40:2" + } + ], + "id": 152, + "name": "ExpressionStatement", + "src": "492:40:2" + }, + { + "id": 153, + "name": "PlaceholderStatement", + "src": "542:1:2" + } + ], + "id": 154, + "name": "Block", + "src": "482:68:2" + } + ], + "id": 155, + "name": "ModifierDefinition", + "src": "440:110:2" + }, + { + "attributes": { + "name": "onlyOwner", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 156, + "name": "ParameterList", + "src": "578:2:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 587, + "type": "function (bool) pure", + "value": "require" + }, + "id": 157, + "name": "Identifier", + "src": "590:7:2" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 158, + "name": "Identifier", + "src": "598:3:2" + } + ], + "id": 159, + "name": "MemberAccess", + "src": "598:10:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 136, + "type": "address", + "value": "owner" + }, + "id": 160, + "name": "Identifier", + "src": "613:5:2" + } + ], + "id": 161, + "name": "BinaryOperation", + "src": "598:20:2" + } + ], + "id": 162, + "name": "FunctionCall", + "src": "590:29:2" + } + ], + "id": 163, + "name": "ExpressionStatement", + "src": "590:29:2" + }, + { + "id": 164, + "name": "PlaceholderStatement", + "src": "629:1:2" + } + ], + "id": 165, + "name": "Block", + "src": "580:57:2" + } + ], + "id": 166, + "name": "ModifierDefinition", + "src": "560:77:2" + }, + { + "attributes": { + "name": "employeeNotExist", + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "employeeId", + "scope": 181, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 167, + "name": "ElementaryTypeName", + "src": "673:7:2" + } + ], + "id": 168, + "name": "VariableDeclaration", + "src": "673:18:2" + } + ], + "id": 169, + "name": "ParameterList", + "src": "672:20:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 587, + "type": "function (bool) pure", + "value": "require" + }, + "id": 170, + "name": "Identifier", + "src": "702:7:2" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "id", + "referencedDeclaration": 123, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 171, + "name": "Identifier", + "src": "710:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 168, + "type": "address", + "value": "employeeId" + }, + "id": 172, + "name": "Identifier", + "src": "720:10:2" + } + ], + "id": 173, + "name": "IndexAccess", + "src": "710:21:2" + } + ], + "id": 174, + "name": "MemberAccess", + "src": "710:24:2" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "307830", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": null, + "token": "number", + "type": "int_const 0", + "value": "0x0" + }, + "id": 175, + "name": "Literal", + "src": "738:3:2" + } + ], + "id": 176, + "name": "BinaryOperation", + "src": "710:31:2" + } + ], + "id": 177, + "name": "FunctionCall", + "src": "702:40:2" + } + ], + "id": 178, + "name": "ExpressionStatement", + "src": "702:40:2" + }, + { + "id": 179, + "name": "PlaceholderStatement", + "src": "752:1:2" + } + ], + "id": 180, + "name": "Block", + "src": "692:68:2" + } + ], + "id": 181, + "name": "ModifierDefinition", + "src": "647:113:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": true, + "modifiers": [ + null + ], + "name": "Payroll", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 182, + "name": "ParameterList", + "src": "786:2:2" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 183, + "name": "ParameterList", + "src": "789:0:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 136, + "type": "address", + "value": "owner" + }, + "id": 184, + "name": "Identifier", + "src": "799:5:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 185, + "name": "Identifier", + "src": "807:3:2" + } + ], + "id": 186, + "name": "MemberAccess", + "src": "807:10:2" + } + ], + "id": 187, + "name": "Assignment", + "src": "799:18:2" + } + ], + "id": 188, + "name": "ExpressionStatement", + "src": "799:18:2" + } + ], + "id": 189, + "name": "Block", + "src": "789:35:2" + } + ], + "id": 190, + "name": "FunctionDefinition", + "src": "770:54:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "modifiers": [ + null + ], + "name": "_partialPaid", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "private" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "employeeID", + "scope": 236, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 191, + "name": "ElementaryTypeName", + "src": "856:7:2" + } + ], + "id": 192, + "name": "VariableDeclaration", + "src": "856:18:2" + } + ], + "id": 193, + "name": "ParameterList", + "src": "855:20:2" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 194, + "name": "ParameterList", + "src": "884:0:2" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 196 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "payment", + "scope": 236, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 195, + "name": "ElementaryTypeName", + "src": "894:4:2" + } + ], + "id": 196, + "name": "VariableDeclaration", + "src": "894:12:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "div", + "referencedDeclaration": 527, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "mul", + "referencedDeclaration": 509, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "salary", + "referencedDeclaration": 125, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 197, + "name": "Identifier", + "src": "909:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 192, + "type": "address", + "value": "employeeID" + }, + "id": 198, + "name": "Identifier", + "src": "919:10:2" + } + ], + "id": 199, + "name": "IndexAccess", + "src": "909:21:2" + } + ], + "id": 200, + "name": "MemberAccess", + "src": "909:28:2" + } + ], + "id": 201, + "name": "MemberAccess", + "src": "909:32:2" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "-", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 586, + "type": "uint256", + "value": "now" + }, + "id": 202, + "name": "Identifier", + "src": "942:3:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "lastPayday", + "referencedDeclaration": 127, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 203, + "name": "Identifier", + "src": "948:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 192, + "type": "address", + "value": "employeeID" + }, + "id": 204, + "name": "Identifier", + "src": "958:10:2" + } + ], + "id": 205, + "name": "IndexAccess", + "src": "948:21:2" + } + ], + "id": 206, + "name": "MemberAccess", + "src": "948:32:2" + } + ], + "id": 207, + "name": "BinaryOperation", + "src": "942:38:2" + } + ], + "id": 208, + "name": "FunctionCall", + "src": "909:72:2" + } + ], + "id": 209, + "name": "MemberAccess", + "src": "909:76:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 131, + "type": "uint256", + "value": "payDuration" + }, + "id": 210, + "name": "Identifier", + "src": "986:11:2" + } + ], + "id": 211, + "name": "FunctionCall", + "src": "909:89:2" + } + ], + "id": 212, + "name": "VariableDeclarationStatement", + "src": "894:104:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 575, + "type": "function (bool) pure", + "value": "assert" + }, + "id": 213, + "name": "Identifier", + "src": "1008:6:2" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balance", + "referencedDeclaration": null, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 601, + "type": "contract Payroll", + "value": "this" + }, + "id": 214, + "name": "Identifier", + "src": "1015:4:2" + } + ], + "id": 215, + "name": "MemberAccess", + "src": "1015:12:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 196, + "type": "uint256", + "value": "payment" + }, + "id": 216, + "name": "Identifier", + "src": "1031:7:2" + } + ], + "id": 217, + "name": "BinaryOperation", + "src": "1015:23:2" + } + ], + "id": 218, + "name": "FunctionCall", + "src": "1008:31:2" + } + ], + "id": 219, + "name": "ExpressionStatement", + "src": "1008:31:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "member_name": "lastPayday", + "referencedDeclaration": 127, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 220, + "name": "Identifier", + "src": "1049:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 192, + "type": "address", + "value": "employeeID" + }, + "id": 221, + "name": "Identifier", + "src": "1059:10:2" + } + ], + "id": 222, + "name": "IndexAccess", + "src": "1049:21:2" + } + ], + "id": 223, + "name": "MemberAccess", + "src": "1049:32:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 586, + "type": "uint256", + "value": "now" + }, + "id": 224, + "name": "Identifier", + "src": "1084:3:2" + } + ], + "id": 225, + "name": "Assignment", + "src": "1049:38:2" + } + ], + "id": 226, + "name": "ExpressionStatement", + "src": "1049:38:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transfer", + "referencedDeclaration": null, + "type": "function (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "id", + "referencedDeclaration": 123, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 227, + "name": "Identifier", + "src": "1097:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 192, + "type": "address", + "value": "employeeID" + }, + "id": 228, + "name": "Identifier", + "src": "1107:10:2" + } + ], + "id": 229, + "name": "IndexAccess", + "src": "1097:21:2" + } + ], + "id": 230, + "name": "MemberAccess", + "src": "1097:24:2" + } + ], + "id": 231, + "name": "MemberAccess", + "src": "1097:33:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 196, + "type": "uint256", + "value": "payment" + }, + "id": 232, + "name": "Identifier", + "src": "1131:7:2" + } + ], + "id": 233, + "name": "FunctionCall", + "src": "1097:42:2" + } + ], + "id": 234, + "name": "ExpressionStatement", + "src": "1097:42:2" + } + ], + "id": 235, + "name": "Block", + "src": "884:262:2" + } + ], + "id": 236, + "name": "FunctionDefinition", + "src": "834:312:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "addEmployee", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "employeeId", + "scope": 272, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 237, + "name": "ElementaryTypeName", + "src": "1177:7:2" + } + ], + "id": 238, + "name": "VariableDeclaration", + "src": "1177:18:2" + }, + { + "attributes": { + "constant": false, + "name": "salary", + "scope": 272, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 239, + "name": "ElementaryTypeName", + "src": "1197:4:2" + } + ], + "id": 240, + "name": "VariableDeclaration", + "src": "1197:11:2" + } + ], + "id": 241, + "name": "ParameterList", + "src": "1176:33:2" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 247, + "name": "ParameterList", + "src": "1248:0:2" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 166, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 242, + "name": "Identifier", + "src": "1210:9:2" + } + ], + "id": 243, + "name": "ModifierInvocation", + "src": "1210:9:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 181, + "type": "modifier (address)", + "value": "employeeNotExist" + }, + "id": 244, + "name": "Identifier", + "src": "1220:16:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 238, + "type": "address", + "value": "employeeId" + }, + "id": 245, + "name": "Identifier", + "src": "1237:10:2" + } + ], + "id": 246, + "name": "ModifierInvocation", + "src": "1220:28:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 248, + "name": "Identifier", + "src": "1258:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 238, + "type": "address", + "value": "employeeId" + }, + "id": 249, + "name": "Identifier", + "src": "1268:10:2" + } + ], + "id": 250, + "name": "IndexAccess", + "src": "1258:21:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": true, + "lValueRequested": false, + "names": [ + null + ], + "type": "struct Payroll.Employee memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 128, + "type": "type(struct Payroll.Employee storage pointer)", + "value": "Employee" + }, + "id": 251, + "name": "Identifier", + "src": "1282:8:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 238, + "type": "address", + "value": "employeeId" + }, + "id": 252, + "name": "Identifier", + "src": "1291:10:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "mul", + "referencedDeclaration": 509, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 240, + "type": "uint256", + "value": "salary" + }, + "id": 253, + "name": "Identifier", + "src": "1303:6:2" + } + ], + "id": 254, + "name": "MemberAccess", + "src": "1303:10:2" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "31", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": "ether", + "token": "number", + "type": "int_const 1000000000000000000", + "value": "1" + }, + "id": 255, + "name": "Literal", + "src": "1314:7:2" + } + ], + "id": 256, + "name": "FunctionCall", + "src": "1303:19:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 586, + "type": "uint256", + "value": "now" + }, + "id": 257, + "name": "Identifier", + "src": "1324:3:2" + } + ], + "id": 258, + "name": "FunctionCall", + "src": "1282:46:2" + } + ], + "id": 259, + "name": "Assignment", + "src": "1258:70:2" + } + ], + "id": 260, + "name": "ExpressionStatement", + "src": "1258:70:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 134, + "type": "uint256", + "value": "totalSalary" + }, + "id": 261, + "name": "Identifier", + "src": "1338:11:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 571, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 134, + "type": "uint256", + "value": "totalSalary" + }, + "id": 262, + "name": "Identifier", + "src": "1352:11:2" + } + ], + "id": 263, + "name": "MemberAccess", + "src": "1352:15:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "salary", + "referencedDeclaration": 125, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 264, + "name": "Identifier", + "src": "1368:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 238, + "type": "address", + "value": "employeeId" + }, + "id": 265, + "name": "Identifier", + "src": "1378:10:2" + } + ], + "id": 266, + "name": "IndexAccess", + "src": "1368:21:2" + } + ], + "id": 267, + "name": "MemberAccess", + "src": "1368:28:2" + } + ], + "id": 268, + "name": "FunctionCall", + "src": "1352:45:2" + } + ], + "id": 269, + "name": "Assignment", + "src": "1338:59:2" + } + ], + "id": 270, + "name": "ExpressionStatement", + "src": "1338:59:2" + } + ], + "id": 271, + "name": "Block", + "src": "1248:156:2" + } + ], + "id": 272, + "name": "FunctionDefinition", + "src": "1156:248:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "removeEmployee", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "employeeId", + "scope": 302, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 273, + "name": "ElementaryTypeName", + "src": "1438:7:2" + } + ], + "id": 274, + "name": "VariableDeclaration", + "src": "1438:18:2" + } + ], + "id": 275, + "name": "ParameterList", + "src": "1437:20:2" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 281, + "name": "ParameterList", + "src": "1493:0:2" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 166, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 276, + "name": "Identifier", + "src": "1458:9:2" + } + ], + "id": 277, + "name": "ModifierInvocation", + "src": "1458:9:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 155, + "type": "modifier (address)", + "value": "employeeExist" + }, + "id": 278, + "name": "Identifier", + "src": "1468:13:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 274, + "type": "address", + "value": "employeeId" + }, + "id": 279, + "name": "Identifier", + "src": "1482:10:2" + } + ], + "id": 280, + "name": "ModifierInvocation", + "src": "1468:25:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 236, + "type": "function (address)", + "value": "_partialPaid" + }, + "id": 282, + "name": "Identifier", + "src": "1503:12:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 274, + "type": "address", + "value": "employeeId" + }, + "id": 283, + "name": "Identifier", + "src": "1516:10:2" + } + ], + "id": 284, + "name": "FunctionCall", + "src": "1503:24:2" + } + ], + "id": 285, + "name": "ExpressionStatement", + "src": "1503:24:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 134, + "type": "uint256", + "value": "totalSalary" + }, + "id": 286, + "name": "Identifier", + "src": "1537:11:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sub", + "referencedDeclaration": 547, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 134, + "type": "uint256", + "value": "totalSalary" + }, + "id": 287, + "name": "Identifier", + "src": "1551:11:2" + } + ], + "id": 288, + "name": "MemberAccess", + "src": "1551:15:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "salary", + "referencedDeclaration": 125, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 289, + "name": "Identifier", + "src": "1567:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 274, + "type": "address", + "value": "employeeId" + }, + "id": 290, + "name": "Identifier", + "src": "1577:10:2" + } + ], + "id": 291, + "name": "IndexAccess", + "src": "1567:21:2" + } + ], + "id": 292, + "name": "MemberAccess", + "src": "1567:28:2" + } + ], + "id": 293, + "name": "FunctionCall", + "src": "1551:45:2" + } + ], + "id": 294, + "name": "Assignment", + "src": "1537:59:2" + } + ], + "id": 295, + "name": "ExpressionStatement", + "src": "1537:59:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "delete", + "prefix": true, + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 296, + "name": "Identifier", + "src": "1613:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 274, + "type": "address", + "value": "employeeId" + }, + "id": 297, + "name": "Identifier", + "src": "1623:10:2" + } + ], + "id": 298, + "name": "IndexAccess", + "src": "1613:21:2" + } + ], + "id": 299, + "name": "UnaryOperation", + "src": "1606:28:2" + } + ], + "id": 300, + "name": "ExpressionStatement", + "src": "1606:28:2" + } + ], + "id": 301, + "name": "Block", + "src": "1493:148:2" + } + ], + "id": 302, + "name": "FunctionDefinition", + "src": "1414:227:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "updateEmployee", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "employeeId", + "scope": 346, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 303, + "name": "ElementaryTypeName", + "src": "1675:7:2" + } + ], + "id": 304, + "name": "VariableDeclaration", + "src": "1675:18:2" + }, + { + "attributes": { + "constant": false, + "name": "salary", + "scope": 346, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 305, + "name": "ElementaryTypeName", + "src": "1695:4:2" + } + ], + "id": 306, + "name": "VariableDeclaration", + "src": "1695:11:2" + } + ], + "id": 307, + "name": "ParameterList", + "src": "1674:33:2" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 313, + "name": "ParameterList", + "src": "1743:0:2" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 166, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 308, + "name": "Identifier", + "src": "1708:9:2" + } + ], + "id": 309, + "name": "ModifierInvocation", + "src": "1708:9:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 155, + "type": "modifier (address)", + "value": "employeeExist" + }, + "id": 310, + "name": "Identifier", + "src": "1718:13:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 304, + "type": "address", + "value": "employeeId" + }, + "id": 311, + "name": "Identifier", + "src": "1732:10:2" + } + ], + "id": 312, + "name": "ModifierInvocation", + "src": "1718:25:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 236, + "type": "function (address)", + "value": "_partialPaid" + }, + "id": 314, + "name": "Identifier", + "src": "1753:12:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 304, + "type": "address", + "value": "employeeId" + }, + "id": 315, + "name": "Identifier", + "src": "1766:10:2" + } + ], + "id": 316, + "name": "FunctionCall", + "src": "1753:24:2" + } + ], + "id": 317, + "name": "ExpressionStatement", + "src": "1753:24:2" + }, + { + "attributes": { + "assignments": [ + 319 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "newSalary", + "scope": 346, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 318, + "name": "ElementaryTypeName", + "src": "1787:4:2" + } + ], + "id": 319, + "name": "VariableDeclaration", + "src": "1787:14:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "mul", + "referencedDeclaration": 509, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 306, + "type": "uint256", + "value": "salary" + }, + "id": 320, + "name": "Identifier", + "src": "1804:6:2" + } + ], + "id": 321, + "name": "MemberAccess", + "src": "1804:10:2" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "31", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": "ether", + "token": "number", + "type": "int_const 1000000000000000000", + "value": "1" + }, + "id": 322, + "name": "Literal", + "src": "1815:7:2" + } + ], + "id": 323, + "name": "FunctionCall", + "src": "1804:19:2" + } + ], + "id": 324, + "name": "VariableDeclarationStatement", + "src": "1787:36:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 134, + "type": "uint256", + "value": "totalSalary" + }, + "id": 325, + "name": "Identifier", + "src": "1833:11:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sub", + "referencedDeclaration": 547, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 571, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 134, + "type": "uint256", + "value": "totalSalary" + }, + "id": 326, + "name": "Identifier", + "src": "1847:11:2" + } + ], + "id": 327, + "name": "MemberAccess", + "src": "1847:15:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 319, + "type": "uint256", + "value": "newSalary" + }, + "id": 328, + "name": "Identifier", + "src": "1863:9:2" + } + ], + "id": 329, + "name": "FunctionCall", + "src": "1847:26:2" + } + ], + "id": 330, + "name": "MemberAccess", + "src": "1847:30:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "salary", + "referencedDeclaration": 125, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 331, + "name": "Identifier", + "src": "1878:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 304, + "type": "address", + "value": "employeeId" + }, + "id": 332, + "name": "Identifier", + "src": "1888:10:2" + } + ], + "id": 333, + "name": "IndexAccess", + "src": "1878:21:2" + } + ], + "id": 334, + "name": "MemberAccess", + "src": "1878:28:2" + } + ], + "id": 335, + "name": "FunctionCall", + "src": "1847:60:2" + } + ], + "id": 336, + "name": "Assignment", + "src": "1833:74:2" + } + ], + "id": 337, + "name": "ExpressionStatement", + "src": "1833:74:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "member_name": "salary", + "referencedDeclaration": 125, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 338, + "name": "Identifier", + "src": "1917:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 304, + "type": "address", + "value": "employeeId" + }, + "id": 339, + "name": "Identifier", + "src": "1927:10:2" + } + ], + "id": 340, + "name": "IndexAccess", + "src": "1917:21:2" + } + ], + "id": 341, + "name": "MemberAccess", + "src": "1917:28:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 319, + "type": "uint256", + "value": "newSalary" + }, + "id": 342, + "name": "Identifier", + "src": "1948:9:2" + } + ], + "id": 343, + "name": "Assignment", + "src": "1917:40:2" + } + ], + "id": 344, + "name": "ExpressionStatement", + "src": "1917:40:2" + } + ], + "id": 345, + "name": "Block", + "src": "1743:221:2" + } + ], + "id": 346, + "name": "FunctionDefinition", + "src": "1651:313:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "addFund", + "payable": true, + "scope": 474, + "stateMutability": "payable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 347, + "name": "ParameterList", + "src": "1990:2:2" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "scope": 357, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 350, + "name": "ElementaryTypeName", + "src": "2020:4:2" + } + ], + "id": 351, + "name": "VariableDeclaration", + "src": "2020:4:2" + } + ], + "id": 352, + "name": "ParameterList", + "src": "2019:6:2" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 166, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 348, + "name": "Identifier", + "src": "2001:9:2" + } + ], + "id": 349, + "name": "ModifierInvocation", + "src": "2001:9:2" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 352 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balance", + "referencedDeclaration": null, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 601, + "type": "contract Payroll", + "value": "this" + }, + "id": 353, + "name": "Identifier", + "src": "2043:4:2" + } + ], + "id": 354, + "name": "MemberAccess", + "src": "2043:12:2" + } + ], + "id": 355, + "name": "Return", + "src": "2036:19:2" + } + ], + "id": 356, + "name": "Block", + "src": "2026:36:2" + } + ], + "id": 357, + "name": "FunctionDefinition", + "src": "1974:88:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "modifiers": [ + null + ], + "name": "calculateRunway", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 358, + "name": "ParameterList", + "src": "2096:2:2" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "scope": 369, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 359, + "name": "ElementaryTypeName", + "src": "2108:4:2" + } + ], + "id": 360, + "name": "VariableDeclaration", + "src": "2108:4:2" + } + ], + "id": 361, + "name": "ParameterList", + "src": "2107:6:2" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 361 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "div", + "referencedDeclaration": 527, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balance", + "referencedDeclaration": null, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 601, + "type": "contract Payroll", + "value": "this" + }, + "id": 362, + "name": "Identifier", + "src": "2131:4:2" + } + ], + "id": 363, + "name": "MemberAccess", + "src": "2131:12:2" + } + ], + "id": 364, + "name": "MemberAccess", + "src": "2131:16:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 134, + "type": "uint256", + "value": "totalSalary" + }, + "id": 365, + "name": "Identifier", + "src": "2148:11:2" + } + ], + "id": 366, + "name": "FunctionCall", + "src": "2131:29:2" + } + ], + "id": 367, + "name": "Return", + "src": "2124:36:2" + } + ], + "id": 368, + "name": "Block", + "src": "2114:53:2" + } + ], + "id": 369, + "name": "FunctionDefinition", + "src": "2072:95:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "modifiers": [ + null + ], + "name": "hasEnoughFund", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 370, + "name": "ParameterList", + "src": "2199:2:2" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "scope": 380, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 371, + "name": "ElementaryTypeName", + "src": "2211:4:2" + } + ], + "id": 372, + "name": "VariableDeclaration", + "src": "2211:4:2" + } + ], + "id": 373, + "name": "ParameterList", + "src": "2210:6:2" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 373 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 369, + "type": "function () returns (uint256)", + "value": "calculateRunway" + }, + "id": 374, + "name": "Identifier", + "src": "2234:15:2" + } + ], + "id": 375, + "name": "FunctionCall", + "src": "2234:17:2" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": null, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 376, + "name": "Literal", + "src": "2254:1:2" + } + ], + "id": 377, + "name": "BinaryOperation", + "src": "2234:21:2" + } + ], + "id": 378, + "name": "Return", + "src": "2227:28:2" + } + ], + "id": 379, + "name": "Block", + "src": "2217:45:2" + } + ], + "id": 380, + "name": "FunctionDefinition", + "src": "2177:85:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "getPaid", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 381, + "name": "ParameterList", + "src": "2288:2:2" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 386, + "name": "ParameterList", + "src": "2316:0:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 155, + "type": "modifier (address)", + "value": "employeeExist" + }, + "id": 382, + "name": "Identifier", + "src": "2291:13:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 383, + "name": "Identifier", + "src": "2305:3:2" + } + ], + "id": 384, + "name": "MemberAccess", + "src": "2305:10:2" + } + ], + "id": 385, + "name": "ModifierInvocation", + "src": "2291:25:2" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 388 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "nextPayday", + "scope": 437, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint", + "type": "uint256" + }, + "id": 387, + "name": "ElementaryTypeName", + "src": "2326:4:2" + } + ], + "id": 388, + "name": "VariableDeclaration", + "src": "2326:15:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 571, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "lastPayday", + "referencedDeclaration": 127, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 389, + "name": "Identifier", + "src": "2344:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 390, + "name": "Identifier", + "src": "2354:3:2" + } + ], + "id": 391, + "name": "MemberAccess", + "src": "2354:10:2" + } + ], + "id": 392, + "name": "IndexAccess", + "src": "2344:21:2" + } + ], + "id": 393, + "name": "MemberAccess", + "src": "2344:32:2" + } + ], + "id": 394, + "name": "MemberAccess", + "src": "2344:36:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 131, + "type": "uint256", + "value": "payDuration" + }, + "id": 395, + "name": "Identifier", + "src": "2381:11:2" + } + ], + "id": 396, + "name": "FunctionCall", + "src": "2344:49:2" + } + ], + "id": 397, + "name": "VariableDeclarationStatement", + "src": "2326:67:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 575, + "type": "function (bool) pure", + "value": "assert" + }, + "id": 398, + "name": "Identifier", + "src": "2403:6:2" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 388, + "type": "uint256", + "value": "nextPayday" + }, + "id": 399, + "name": "Identifier", + "src": "2410:10:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 586, + "type": "uint256", + "value": "now" + }, + "id": 400, + "name": "Identifier", + "src": "2423:3:2" + } + ], + "id": 401, + "name": "BinaryOperation", + "src": "2410:16:2" + } + ], + "id": 402, + "name": "FunctionCall", + "src": "2403:24:2" + } + ], + "id": 403, + "name": "ExpressionStatement", + "src": "2403:24:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 575, + "type": "function (bool) pure", + "value": "assert" + }, + "id": 404, + "name": "Identifier", + "src": "2437:6:2" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "salary", + "referencedDeclaration": 125, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 405, + "name": "Identifier", + "src": "2444:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 406, + "name": "Identifier", + "src": "2454:3:2" + } + ], + "id": 407, + "name": "MemberAccess", + "src": "2454:10:2" + } + ], + "id": 408, + "name": "IndexAccess", + "src": "2444:21:2" + } + ], + "id": 409, + "name": "MemberAccess", + "src": "2444:28:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balance", + "referencedDeclaration": null, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 601, + "type": "contract Payroll", + "value": "this" + }, + "id": 410, + "name": "Identifier", + "src": "2476:4:2" + } + ], + "id": 411, + "name": "MemberAccess", + "src": "2476:12:2" + } + ], + "id": 412, + "name": "BinaryOperation", + "src": "2444:44:2" + } + ], + "id": 413, + "name": "FunctionCall", + "src": "2437:52:2" + } + ], + "id": 414, + "name": "ExpressionStatement", + "src": "2437:52:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "member_name": "lastPayday", + "referencedDeclaration": 127, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 415, + "name": "Identifier", + "src": "2499:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 416, + "name": "Identifier", + "src": "2509:3:2" + } + ], + "id": 417, + "name": "MemberAccess", + "src": "2509:10:2" + } + ], + "id": 418, + "name": "IndexAccess", + "src": "2499:21:2" + } + ], + "id": 419, + "name": "MemberAccess", + "src": "2499:32:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 388, + "type": "uint256", + "value": "nextPayday" + }, + "id": 420, + "name": "Identifier", + "src": "2534:10:2" + } + ], + "id": 421, + "name": "Assignment", + "src": "2499:45:2" + } + ], + "id": 422, + "name": "ExpressionStatement", + "src": "2499:45:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transfer", + "referencedDeclaration": null, + "type": "function (uint256)" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "id", + "referencedDeclaration": 123, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 423, + "name": "Identifier", + "src": "2554:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 424, + "name": "Identifier", + "src": "2564:3:2" + } + ], + "id": 425, + "name": "MemberAccess", + "src": "2564:10:2" + } + ], + "id": 426, + "name": "IndexAccess", + "src": "2554:21:2" + } + ], + "id": 427, + "name": "MemberAccess", + "src": "2554:24:2" + } + ], + "id": 428, + "name": "MemberAccess", + "src": "2554:33:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "salary", + "referencedDeclaration": 125, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 429, + "name": "Identifier", + "src": "2588:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "referencedDeclaration": null, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 584, + "type": "msg", + "value": "msg" + }, + "id": 430, + "name": "Identifier", + "src": "2598:3:2" + } + ], + "id": 431, + "name": "MemberAccess", + "src": "2598:10:2" + } + ], + "id": 432, + "name": "IndexAccess", + "src": "2588:21:2" + } + ], + "id": 433, + "name": "MemberAccess", + "src": "2588:28:2" + } + ], + "id": 434, + "name": "FunctionCall", + "src": "2554:63:2" + } + ], + "id": 435, + "name": "ExpressionStatement", + "src": "2554:63:2" + } + ], + "id": 436, + "name": "Block", + "src": "2316:308:2" + } + ], + "id": 437, + "name": "FunctionDefinition", + "src": "2272:352:2" + }, + { + "attributes": { + "constant": false, + "implemented": true, + "isConstructor": false, + "name": "changePaymentAddress", + "payable": false, + "scope": 474, + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "oldAddress", + "scope": 473, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 438, + "name": "ElementaryTypeName", + "src": "2795:7:2" + } + ], + "id": 439, + "name": "VariableDeclaration", + "src": "2795:18:2" + }, + { + "attributes": { + "constant": false, + "name": "newAddress", + "scope": 473, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "type": "address" + }, + "id": 440, + "name": "ElementaryTypeName", + "src": "2815:7:2" + } + ], + "id": 441, + "name": "VariableDeclaration", + "src": "2815:18:2" + } + ], + "id": 442, + "name": "ParameterList", + "src": "2794:40:2" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 451, + "name": "ParameterList", + "src": "2900:0:2" + }, + { + "attributes": { + "arguments": [ + null + ] + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 166, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 443, + "name": "Identifier", + "src": "2835:9:2" + } + ], + "id": 444, + "name": "ModifierInvocation", + "src": "2835:9:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 155, + "type": "modifier (address)", + "value": "employeeExist" + }, + "id": 445, + "name": "Identifier", + "src": "2845:13:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 439, + "type": "address", + "value": "oldAddress" + }, + "id": 446, + "name": "Identifier", + "src": "2859:10:2" + } + ], + "id": 447, + "name": "ModifierInvocation", + "src": "2845:25:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 181, + "type": "modifier (address)", + "value": "employeeNotExist" + }, + "id": 448, + "name": "Identifier", + "src": "2871:16:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 441, + "type": "address", + "value": "newAddress" + }, + "id": 449, + "name": "Identifier", + "src": "2888:10:2" + } + ], + "id": 450, + "name": "ModifierInvocation", + "src": "2871:28:2" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 452, + "name": "Identifier", + "src": "2910:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 441, + "type": "address", + "value": "newAddress" + }, + "id": 453, + "name": "Identifier", + "src": "2920:10:2" + } + ], + "id": 454, + "name": "IndexAccess", + "src": "2910:21:2" + }, + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 455, + "name": "Identifier", + "src": "2934:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 439, + "type": "address", + "value": "oldAddress" + }, + "id": 456, + "name": "Identifier", + "src": "2944:10:2" + } + ], + "id": 457, + "name": "IndexAccess", + "src": "2934:21:2" + } + ], + "id": 458, + "name": "Assignment", + "src": "2910:45:2" + } + ], + "id": 459, + "name": "ExpressionStatement", + "src": "2910:45:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "member_name": "id", + "referencedDeclaration": 123, + "type": "address" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 460, + "name": "Identifier", + "src": "2965:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 441, + "type": "address", + "value": "newAddress" + }, + "id": 461, + "name": "Identifier", + "src": "2975:10:2" + } + ], + "id": 462, + "name": "IndexAccess", + "src": "2965:21:2" + } + ], + "id": 463, + "name": "MemberAccess", + "src": "2965:24:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 441, + "type": "address", + "value": "newAddress" + }, + "id": 464, + "name": "Identifier", + "src": "2992:10:2" + } + ], + "id": 465, + "name": "Assignment", + "src": "2965:37:2" + } + ], + "id": 466, + "name": "ExpressionStatement", + "src": "2965:37:2" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "delete", + "prefix": true, + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "struct Payroll.Employee storage ref" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 140, + "type": "mapping(address => struct Payroll.Employee storage ref)", + "value": "employees" + }, + "id": 467, + "name": "Identifier", + "src": "3019:9:2" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 439, + "type": "address", + "value": "oldAddress" + }, + "id": 468, + "name": "Identifier", + "src": "3029:10:2" + } + ], + "id": 469, + "name": "IndexAccess", + "src": "3019:21:2" + } + ], + "id": 470, + "name": "UnaryOperation", + "src": "3012:28:2" + } + ], + "id": 471, + "name": "ExpressionStatement", + "src": "3012:28:2" + } + ], + "id": 472, + "name": "Block", + "src": "2900:147:2" + } + ], + "id": 473, + "name": "FunctionDefinition", + "src": "2764:283:2" + } + ], + "id": 474, + "name": "ContractDefinition", + "src": "113:2936:2" + } + ], + "id": 475, + "name": "SourceUnit", + "src": "38:3011:2" + }, + "compiler": { + "name": "solc", + "version": "0.4.18+commit.9cf6e910.Emscripten.clang" + }, + "networks": { + "1517198540932": { + "events": {}, + "links": {}, + "address": "0xe33d32f10ff05174fc5579fb028292a7addd7f38" + } + }, + "schemaVersion": "1.0.1", + "updatedAt": "2018-01-29T04:22:48.575Z" +} \ No newline at end of file diff --git a/Lesson5/assignment/build/contracts/SafeMath.json b/Lesson5/assignment/build/contracts/SafeMath.json new file mode 100644 index 000000000..af7538312 --- /dev/null +++ b/Lesson5/assignment/build/contracts/SafeMath.json @@ -0,0 +1,1353 @@ +{ + "contractName": "SafeMath", + "abi": [], + "bytecode": "0x60606040523415600e57600080fd5b603580601b6000396000f3006060604052600080fd00a165627a7a72305820ff3aa4d3b29a07bf52fccfbbdddfc7ef8310a37d71b56ec1cc35aa67640103300029", + "deployedBytecode": "0x6060604052600080fd00a165627a7a72305820ff3aa4d3b29a07bf52fccfbbdddfc7ef8310a37d71b56ec1cc35aa67640103300029", + "sourceMap": "117:1022:3:-;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "117:1022:3:-;;;;;", + "source": "pragma solidity ^0.4.18;\n\n\n/**\n * @title SafeMath\n * @dev Math operations with safety checks that throw on error\n */\nlibrary SafeMath {\n\n /**\n * @dev Multiplies two numbers, throws on overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n assert(c / a == b);\n return c;\n }\n\n /**\n * @dev Integer division of two numbers, truncating the quotient.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n // assert(b > 0); // Solidity automatically throws when dividing by 0\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n return c;\n }\n\n /**\n * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n assert(b <= a);\n return a - b;\n }\n\n /**\n * @dev Adds two numbers, throws on overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n assert(c >= a);\n return c;\n }\n}", + "sourcePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/SafeMath.sol", + "ast": { + "attributes": { + "absolutePath": "/home/juicebox/Desktop/guigulive-operation/Lesson5/assignment/contracts/SafeMath.sol", + "exportedSymbols": { + "SafeMath": [ + 572 + ] + } + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "^", + "0.4", + ".18" + ] + }, + "id": 476, + "name": "PragmaDirective", + "src": "0:24:3" + }, + { + "attributes": { + "baseContracts": [ + null + ], + "contractDependencies": [ + null + ], + "contractKind": "library", + "documentation": "@title SafeMath\n@dev Math operations with safety checks that throw on error", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 572 + ], + "name": "SafeMath", + "scope": 573 + }, + "children": [ + { + "attributes": { + "constant": true, + "implemented": true, + "isConstructor": false, + "modifiers": [ + null + ], + "name": "mul", + "payable": false, + "scope": 572, + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "a", + "scope": 509, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 477, + "name": "ElementaryTypeName", + "src": "216:7:3" + } + ], + "id": 478, + "name": "VariableDeclaration", + "src": "216:9:3" + }, + { + "attributes": { + "constant": false, + "name": "b", + "scope": 509, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 479, + "name": "ElementaryTypeName", + "src": "227:7:3" + } + ], + "id": 480, + "name": "VariableDeclaration", + "src": "227:9:3" + } + ], + "id": 481, + "name": "ParameterList", + "src": "215:22:3" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "scope": 509, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 482, + "name": "ElementaryTypeName", + "src": "261:7:3" + } + ], + "id": 483, + "name": "VariableDeclaration", + "src": "261:7:3" + } + ], + "id": 484, + "name": "ParameterList", + "src": "260:9:3" + }, + { + "children": [ + { + "attributes": { + "falseBody": null + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 478, + "type": "uint256", + "value": "a" + }, + "id": 485, + "name": "Identifier", + "src": "280:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": null, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 486, + "name": "Literal", + "src": "285:1:3" + } + ], + "id": 487, + "name": "BinaryOperation", + "src": "280:6:3" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 484 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "subdenomination": null, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 488, + "name": "Literal", + "src": "303:1:3" + } + ], + "id": 489, + "name": "Return", + "src": "296:8:3" + } + ], + "id": 490, + "name": "Block", + "src": "288:23:3" + } + ], + "id": 491, + "name": "IfStatement", + "src": "276:35:3" + }, + { + "attributes": { + "assignments": [ + 493 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "c", + "scope": 509, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 492, + "name": "ElementaryTypeName", + "src": "316:7:3" + } + ], + "id": 493, + "name": "VariableDeclaration", + "src": "316:9:3" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "*", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 478, + "type": "uint256", + "value": "a" + }, + "id": 494, + "name": "Identifier", + "src": "328:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 480, + "type": "uint256", + "value": "b" + }, + "id": 495, + "name": "Identifier", + "src": "332:1:3" + } + ], + "id": 496, + "name": "BinaryOperation", + "src": "328:5:3" + } + ], + "id": 497, + "name": "VariableDeclarationStatement", + "src": "316:17:3" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 575, + "type": "function (bool) pure", + "value": "assert" + }, + "id": 498, + "name": "Identifier", + "src": "339:6:3" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "/", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 493, + "type": "uint256", + "value": "c" + }, + "id": 499, + "name": "Identifier", + "src": "346:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 478, + "type": "uint256", + "value": "a" + }, + "id": 500, + "name": "Identifier", + "src": "350:1:3" + } + ], + "id": 501, + "name": "BinaryOperation", + "src": "346:5:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 480, + "type": "uint256", + "value": "b" + }, + "id": 502, + "name": "Identifier", + "src": "355:1:3" + } + ], + "id": 503, + "name": "BinaryOperation", + "src": "346:10:3" + } + ], + "id": 504, + "name": "FunctionCall", + "src": "339:18:3" + } + ], + "id": 505, + "name": "ExpressionStatement", + "src": "339:18:3" + }, + { + "attributes": { + "functionReturnParameters": 484 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 493, + "type": "uint256", + "value": "c" + }, + "id": 506, + "name": "Identifier", + "src": "370:1:3" + } + ], + "id": 507, + "name": "Return", + "src": "363:8:3" + } + ], + "id": 508, + "name": "Block", + "src": "270:106:3" + } + ], + "id": 509, + "name": "FunctionDefinition", + "src": "203:173:3" + }, + { + "attributes": { + "constant": true, + "implemented": true, + "isConstructor": false, + "modifiers": [ + null + ], + "name": "div", + "payable": false, + "scope": 572, + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "a", + "scope": 527, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 510, + "name": "ElementaryTypeName", + "src": "471:7:3" + } + ], + "id": 511, + "name": "VariableDeclaration", + "src": "471:9:3" + }, + { + "attributes": { + "constant": false, + "name": "b", + "scope": 527, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 512, + "name": "ElementaryTypeName", + "src": "482:7:3" + } + ], + "id": 513, + "name": "VariableDeclaration", + "src": "482:9:3" + } + ], + "id": 514, + "name": "ParameterList", + "src": "470:22:3" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "scope": 527, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 515, + "name": "ElementaryTypeName", + "src": "516:7:3" + } + ], + "id": 516, + "name": "VariableDeclaration", + "src": "516:7:3" + } + ], + "id": 517, + "name": "ParameterList", + "src": "515:9:3" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 519 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "c", + "scope": 527, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 518, + "name": "ElementaryTypeName", + "src": "605:7:3" + } + ], + "id": 519, + "name": "VariableDeclaration", + "src": "605:9:3" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "/", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 511, + "type": "uint256", + "value": "a" + }, + "id": 520, + "name": "Identifier", + "src": "617:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 513, + "type": "uint256", + "value": "b" + }, + "id": 521, + "name": "Identifier", + "src": "621:1:3" + } + ], + "id": 522, + "name": "BinaryOperation", + "src": "617:5:3" + } + ], + "id": 523, + "name": "VariableDeclarationStatement", + "src": "605:17:3" + }, + { + "attributes": { + "functionReturnParameters": 517 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 519, + "type": "uint256", + "value": "c" + }, + "id": 524, + "name": "Identifier", + "src": "717:1:3" + } + ], + "id": 525, + "name": "Return", + "src": "710:8:3" + } + ], + "id": 526, + "name": "Block", + "src": "525:198:3" + } + ], + "id": 527, + "name": "FunctionDefinition", + "src": "458:265:3" + }, + { + "attributes": { + "constant": true, + "implemented": true, + "isConstructor": false, + "modifiers": [ + null + ], + "name": "sub", + "payable": false, + "scope": 572, + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "a", + "scope": 547, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 528, + "name": "ElementaryTypeName", + "src": "849:7:3" + } + ], + "id": 529, + "name": "VariableDeclaration", + "src": "849:9:3" + }, + { + "attributes": { + "constant": false, + "name": "b", + "scope": 547, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 530, + "name": "ElementaryTypeName", + "src": "860:7:3" + } + ], + "id": 531, + "name": "VariableDeclaration", + "src": "860:9:3" + } + ], + "id": 532, + "name": "ParameterList", + "src": "848:22:3" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "scope": 547, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 533, + "name": "ElementaryTypeName", + "src": "894:7:3" + } + ], + "id": 534, + "name": "VariableDeclaration", + "src": "894:7:3" + } + ], + "id": 535, + "name": "ParameterList", + "src": "893:9:3" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 575, + "type": "function (bool) pure", + "value": "assert" + }, + "id": 536, + "name": "Identifier", + "src": "909:6:3" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 531, + "type": "uint256", + "value": "b" + }, + "id": 537, + "name": "Identifier", + "src": "916:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 529, + "type": "uint256", + "value": "a" + }, + "id": 538, + "name": "Identifier", + "src": "921:1:3" + } + ], + "id": 539, + "name": "BinaryOperation", + "src": "916:6:3" + } + ], + "id": 540, + "name": "FunctionCall", + "src": "909:14:3" + } + ], + "id": 541, + "name": "ExpressionStatement", + "src": "909:14:3" + }, + { + "attributes": { + "functionReturnParameters": 535 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "-", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 529, + "type": "uint256", + "value": "a" + }, + "id": 542, + "name": "Identifier", + "src": "936:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 531, + "type": "uint256", + "value": "b" + }, + "id": 543, + "name": "Identifier", + "src": "940:1:3" + } + ], + "id": 544, + "name": "BinaryOperation", + "src": "936:5:3" + } + ], + "id": 545, + "name": "Return", + "src": "929:12:3" + } + ], + "id": 546, + "name": "Block", + "src": "903:43:3" + } + ], + "id": 547, + "name": "FunctionDefinition", + "src": "836:110:3" + }, + { + "attributes": { + "constant": true, + "implemented": true, + "isConstructor": false, + "modifiers": [ + null + ], + "name": "add", + "payable": false, + "scope": 572, + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "name": "a", + "scope": 571, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 548, + "name": "ElementaryTypeName", + "src": "1021:7:3" + } + ], + "id": 549, + "name": "VariableDeclaration", + "src": "1021:9:3" + }, + { + "attributes": { + "constant": false, + "name": "b", + "scope": 571, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 550, + "name": "ElementaryTypeName", + "src": "1032:7:3" + } + ], + "id": 551, + "name": "VariableDeclaration", + "src": "1032:9:3" + } + ], + "id": 552, + "name": "ParameterList", + "src": "1020:22:3" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "name": "", + "scope": 571, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 553, + "name": "ElementaryTypeName", + "src": "1066:7:3" + } + ], + "id": 554, + "name": "VariableDeclaration", + "src": "1066:7:3" + } + ], + "id": 555, + "name": "ParameterList", + "src": "1065:9:3" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 557 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "name": "c", + "scope": 571, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "value": null, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 556, + "name": "ElementaryTypeName", + "src": "1081:7:3" + } + ], + "id": 557, + "name": "VariableDeclaration", + "src": "1081:9:3" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 549, + "type": "uint256", + "value": "a" + }, + "id": 558, + "name": "Identifier", + "src": "1093:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 551, + "type": "uint256", + "value": "b" + }, + "id": 559, + "name": "Identifier", + "src": "1097:1:3" + } + ], + "id": 560, + "name": "BinaryOperation", + "src": "1093:5:3" + } + ], + "id": 561, + "name": "VariableDeclarationStatement", + "src": "1081:17:3" + }, + { + "children": [ + { + "attributes": { + "argumentTypes": null, + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 575, + "type": "function (bool) pure", + "value": "assert" + }, + "id": 562, + "name": "Identifier", + "src": "1104:6:3" + }, + { + "attributes": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 557, + "type": "uint256", + "value": "c" + }, + "id": 563, + "name": "Identifier", + "src": "1111:1:3" + }, + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 549, + "type": "uint256", + "value": "a" + }, + "id": 564, + "name": "Identifier", + "src": "1116:1:3" + } + ], + "id": 565, + "name": "BinaryOperation", + "src": "1111:6:3" + } + ], + "id": 566, + "name": "FunctionCall", + "src": "1104:14:3" + } + ], + "id": 567, + "name": "ExpressionStatement", + "src": "1104:14:3" + }, + { + "attributes": { + "functionReturnParameters": 555 + }, + "children": [ + { + "attributes": { + "argumentTypes": null, + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 557, + "type": "uint256", + "value": "c" + }, + "id": 568, + "name": "Identifier", + "src": "1131:1:3" + } + ], + "id": 569, + "name": "Return", + "src": "1124:8:3" + } + ], + "id": 570, + "name": "Block", + "src": "1075:62:3" + } + ], + "id": 571, + "name": "FunctionDefinition", + "src": "1008:129:3" + } + ], + "id": 572, + "name": "ContractDefinition", + "src": "117:1022:3" + } + ], + "id": 573, + "name": "SourceUnit", + "src": "0:1139:3" + }, + "compiler": { + "name": "solc", + "version": "0.4.18+commit.9cf6e910.Emscripten.clang" + }, + "networks": { + "1517198540932": { + "events": {}, + "links": {}, + "address": "0x76703312b3055b67df2a1b43cf6f2113041ccc2a" + } + }, + "schemaVersion": "1.0.1", + "updatedAt": "2018-01-29T04:22:48.572Z" +} \ No newline at end of file diff --git a/Lesson5/assignment/config/env.js b/Lesson5/assignment/config/env.js new file mode 100644 index 000000000..5d0ab7b79 --- /dev/null +++ b/Lesson5/assignment/config/env.js @@ -0,0 +1,28 @@ +// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be +// injected into the application via DefinePlugin in Webpack configuration. + +var REACT_APP = /^REACT_APP_/i; + +function getClientEnvironment(publicUrl) { + var processEnv = Object + .keys(process.env) + .filter(key => REACT_APP.test(key)) + .reduce((env, key) => { + env[key] = JSON.stringify(process.env[key]); + return env; + }, { + // Useful for determining whether we’re running in production mode. + // Most importantly, it switches React into the correct mode. + 'NODE_ENV': JSON.stringify( + process.env.NODE_ENV || 'development' + ), + // Useful for resolving the correct path to static assets in `public`. + // For example, . + // This should only be used as an escape hatch. Normally you would put + // images into the `src` and `import` them in code to get their paths. + 'PUBLIC_URL': JSON.stringify(publicUrl) + }); + return {'process.env': processEnv}; +} + +module.exports = getClientEnvironment; diff --git a/Lesson5/assignment/config/jest/cssTransform.js b/Lesson5/assignment/config/jest/cssTransform.js new file mode 100644 index 000000000..aa17d127a --- /dev/null +++ b/Lesson5/assignment/config/jest/cssTransform.js @@ -0,0 +1,12 @@ +// This is a custom Jest transformer turning style imports into empty objects. +// http://facebook.github.io/jest/docs/tutorial-webpack.html + +module.exports = { + process() { + return 'module.exports = {};'; + }, + getCacheKey(fileData, filename) { + // The output is always the same. + return 'cssTransform'; + }, +}; diff --git a/Lesson5/assignment/config/jest/fileTransform.js b/Lesson5/assignment/config/jest/fileTransform.js new file mode 100644 index 000000000..927eb305a --- /dev/null +++ b/Lesson5/assignment/config/jest/fileTransform.js @@ -0,0 +1,10 @@ +const path = require('path'); + +// This is a custom Jest transformer turning file imports into filenames. +// http://facebook.github.io/jest/docs/tutorial-webpack.html + +module.exports = { + process(src, filename) { + return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';'; + }, +}; diff --git a/Lesson5/assignment/config/paths.js b/Lesson5/assignment/config/paths.js new file mode 100644 index 000000000..96c3dfb11 --- /dev/null +++ b/Lesson5/assignment/config/paths.js @@ -0,0 +1,46 @@ +var path = require('path'); +var fs = require('fs'); + +// Make sure any symlinks in the project folder are resolved: +// https://github.com/facebookincubator/create-react-app/issues/637 +var appDirectory = fs.realpathSync(process.cwd()); +function resolveApp(relativePath) { + return path.resolve(appDirectory, relativePath); +} + +// We support resolving modules according to `NODE_PATH`. +// This lets you use absolute paths in imports inside large monorepos: +// https://github.com/facebookincubator/create-react-app/issues/253. + +// It works similar to `NODE_PATH` in Node itself: +// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders + +// We will export `nodePaths` as an array of absolute paths. +// It will then be used by Webpack configs. +// Jest doesn’t need this because it already handles `NODE_PATH` out of the box. + +// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored. +// Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims. +// https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421 + +var nodePaths = (process.env.NODE_PATH || '') + .split(process.platform === 'win32' ? ';' : ':') + .filter(Boolean) + .filter(folder => !path.isAbsolute(folder)) + .map(resolveApp); + +// config after eject: we're in ./config/ +module.exports = { + // Changed from build to build_webpack so smart contract compilations are not overwritten. + appBuild: resolveApp('build_webpack'), + appPublic: resolveApp('public'), + appHtml: resolveApp('public/index.html'), + appIndexJs: resolveApp('src/index.js'), + appPackageJson: resolveApp('package.json'), + appSrc: resolveApp('src'), + yarnLockFile: resolveApp('yarn.lock'), + testsSetup: resolveApp('src/setupTests.js'), + appNodeModules: resolveApp('node_modules'), + ownNodeModules: resolveApp('node_modules'), + nodePaths: nodePaths +}; diff --git a/Lesson5/assignment/config/polyfills.js b/Lesson5/assignment/config/polyfills.js new file mode 100644 index 000000000..7e601502b --- /dev/null +++ b/Lesson5/assignment/config/polyfills.js @@ -0,0 +1,14 @@ +if (typeof Promise === 'undefined') { + // Rejection tracking prevents a common issue where React gets into an + // inconsistent state due to an error, but it gets swallowed by a Promise, + // and the user has no idea what causes React's erratic future behavior. + require('promise/lib/rejection-tracking').enable(); + window.Promise = require('promise/lib/es6-extensions.js'); +} + +// fetch() polyfill for making API calls. +require('whatwg-fetch'); + +// Object.assign() is commonly used with React. +// It will use the native implementation if it's present and isn't buggy. +Object.assign = require('object-assign'); diff --git a/Lesson5/assignment/config/webpack.config.dev.js b/Lesson5/assignment/config/webpack.config.dev.js new file mode 100644 index 000000000..821743a2e --- /dev/null +++ b/Lesson5/assignment/config/webpack.config.dev.js @@ -0,0 +1,242 @@ +var autoprefixer = require('autoprefixer'); +var webpack = require('webpack'); +var HtmlWebpackPlugin = require('html-webpack-plugin'); +var CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +var InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); +var WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin'); +var getClientEnvironment = require('./env'); +var paths = require('./paths'); + + + +// Webpack uses `publicPath` to determine where the app is being served from. +// In development, we always serve from the root. This makes config easier. +var publicPath = '/'; +// `publicUrl` is just like `publicPath`, but we will provide it to our app +// as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript. +// Omit trailing slash as %PUBLIC_PATH%/xyz looks better than %PUBLIC_PATH%xyz. +var publicUrl = ''; +// Get environment variables to inject into our app. +var env = getClientEnvironment(publicUrl); + +// This is the development configuration. +// It is focused on developer experience and fast rebuilds. +// The production configuration is different and lives in a separate file. +module.exports = { + // You may want 'eval' instead if you prefer to see the compiled output in DevTools. + // See the discussion in https://github.com/facebookincubator/create-react-app/issues/343. + devtool: 'cheap-module-source-map', + // These are the "entry points" to our application. + // This means they will be the "root" imports that are included in JS bundle. + // The first two entry points enable "hot" CSS and auto-refreshes for JS. + entry: [ + // Include an alternative client for WebpackDevServer. A client's job is to + // connect to WebpackDevServer by a socket and get notified about changes. + // When you save a file, the client will either apply hot updates (in case + // of CSS changes), or refresh the page (in case of JS changes). When you + // make a syntax error, this client will display a syntax error overlay. + // Note: instead of the default WebpackDevServer client, we use a custom one + // to bring better experience for Create React App users. You can replace + // the line below with these two lines if you prefer the stock client: + // require.resolve('webpack-dev-server/client') + '?/', + // require.resolve('webpack/hot/dev-server'), + require.resolve('react-dev-utils/webpackHotDevClient'), + // We ship a few polyfills by default: + require.resolve('./polyfills'), + // Finally, this is your app's code: + paths.appIndexJs + // We include the app code last so that if there is a runtime error during + // initialization, it doesn't blow up the WebpackDevServer client, and + // changing JS code would still trigger a refresh. + ], + output: { + // Next line is not used in dev but WebpackDevServer crashes without it: + path: paths.appBuild, + // Add /* filename */ comments to generated require()s in the output. + pathinfo: true, + // This does not produce a real file. It's just the virtual path that is + // served by WebpackDevServer in development. This is the JS bundle + // containing code from all our entry points, and the Webpack runtime. + filename: 'static/js/bundle.js', + // This is the URL that app is served from. We use "/" in development. + publicPath: publicPath + }, + resolve: { + // This allows you to set a fallback for where Webpack should look for modules. + // We read `NODE_PATH` environment variable in `paths.js` and pass paths here. + // We use `fallback` instead of `root` because we want `node_modules` to "win" + // if there any conflicts. This matches Node resolution mechanism. + // https://github.com/facebookincubator/create-react-app/issues/253 + fallback: paths.nodePaths, + // These are the reasonable defaults supported by the Node ecosystem. + // We also include JSX as a common component filename extension to support + // some tools, although we do not recommend using it, see: + // https://github.com/facebookincubator/create-react-app/issues/290 + extensions: ['.js', '.json', '.jsx', ''], + alias: { + // Support React Native Web + // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ + 'react-native': 'react-native-web' + } + }, + + module: { + // First, run the linter. + // It's important to do this before Babel processes the JS. + preLoaders: [ + { + test: /\.(js|jsx)$/, + loader: 'eslint', + include: paths.appSrc, + } + ], + loaders: [ + // Default loader: load all assets that are not handled + // by other loaders with the url loader. + // Note: This list needs to be updated with every change of extensions + // the other loaders match. + // E.g., when adding a loader for a new supported file extension, + // we need to add the supported extension to this loader too. + // Add one new line in `exclude` for each loader. + // + // "file" loader makes sure those assets get served by WebpackDevServer. + // When you `import` an asset, you get its (virtual) filename. + // In production, they would get copied to the `build` folder. + // "url" loader works like "file" loader except that it embeds assets + // smaller than specified limit in bytes as data URLs to avoid requests. + // A missing `test` is equivalent to a match. + { + exclude: [ + /\.html$/, + /\.(js|jsx)$/, + /\.css$/, + /\.json$/, + /\.woff$/, + /\.woff2$/, + /\.(ttf|svg|eot)$/ + ], + loader: 'url', + query: { + limit: 10000, + name: 'static/media/[name].[hash:8].[ext]' + } + }, + // Process JS with Babel. + { + test: /\.(js|jsx)$/, + include: paths.appSrc, + loader: 'babel', + query: { + + // This is a feature of `babel-loader` for webpack (not Babel itself). + // It enables caching results in ./node_modules/.cache/babel-loader/ + // directory for faster rebuilds. + cacheDirectory: true + } + }, + // "postcss" loader applies autoprefixer to our CSS. + // "css" loader resolves paths in CSS and adds assets as dependencies. + // "style" loader turns CSS into JS modules that inject