{
  "contractName": "TransferAndCallMock",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "calledFallback",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "onTokenTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "mockTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wasCalled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"calledFallback\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"mockTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"wasCalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/TransferAndCallMock.sol\":\"TransferAndCallMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol\":{\"keccak256\":\"0xc5683b28527097379ed090b28bb46e17a50a2c57ddcb3c7e028fcd04ddc64aef\",\"urls\":[\"bzz-raw://639f6b6cf65382faea738e6326d6aeb289b8b030cf02f40c54bc45ec098eda6d\",\"dweb:/ipfs/QmQi7dFcKiwUxSbzhus4CxFTdNJvUsfiqY6i3bD4RdMQrn\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/TransferAndCallMock.sol\":{\"keccak256\":\"0x1fa5c621ad1556b152971d04560ebe7400fcf0ef342dbaa6cb10f136383a0843\",\"urls\":[\"bzz-raw://ace4e53ce53fb15ab85f2c7a489cece2da52dc665bafd3e85efa81fe176dca0c\",\"dweb:/ipfs/QmdxeBwCTBfG1iYdPGtXbp4QW17rypafTjwLv8RPpK4rr3\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]}},\"version\":1}",
  "bytecode": "0x60806040526000805460ff1916905534801561001a57600080fd5b506040516102ae3803806102ae8339818101604052602081101561003d57600080fd5b5051600080546001600160a01b0390921661010002610100600160a81b031990921691909117905561023a806100746000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063390f6426146100515780634554d23e1461006d578063a4c0ed3614610075578063c6803622146100fa575b600080fd5b610059610102565b604080519115158252519081900360200190f35b61005961010b565b6100596004803603606081101561008b57600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460018302840111640100000000831117156100ef57600080fd5b50909250905061011e565b6100596101f5565b60005460ff1681565b6000805460ff1916600190811790915590565b60008061016084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506101fe92505050565b600080546040805163a9059cbb60e01b81526001600160a01b038086166004830152602482018b90529151949550610100909204169263a9059cbb92604480840193602093929083900390910190829087803b1580156101bf57600080fd5b505af11580156101d3573d6000803e3d6000fd5b505050506040513d60208110156101e957600080fd5b50519695505050505050565b60005460ff1690565b602001519056fea265627a7a723158205d362d42d892010dedd59002b75cacd217b917ec0f4fbc5b0acc35f8e3e3afeb64736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063390f6426146100515780634554d23e1461006d578063a4c0ed3614610075578063c6803622146100fa575b600080fd5b610059610102565b604080519115158252519081900360200190f35b61005961010b565b6100596004803603606081101561008b57600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460018302840111640100000000831117156100ef57600080fd5b50909250905061011e565b6100596101f5565b60005460ff1681565b6000805460ff1916600190811790915590565b60008061016084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506101fe92505050565b600080546040805163a9059cbb60e01b81526001600160a01b038086166004830152602482018b90529151949550610100909204169263a9059cbb92604480840193602093929083900390910190829087803b1580156101bf57600080fd5b505af11580156101d3573d6000803e3d6000fd5b505050506040513d60208110156101e957600080fd5b50519695505050505050565b60005460ff1690565b602001519056fea265627a7a723158205d362d42d892010dedd59002b75cacd217b917ec0f4fbc5b0acc35f8e3e3afeb64736f6c63430005100032",
  "sourceMap": "152:779:47:-;;;234:5;205:34;;-1:-1:-1;;205:34:47;;;263:64;5:2:-1;;;;30:1;27;20:12;5:2;263:64:47;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;263:64:47;306:5;:14;;-1:-1:-1;;;;;306:14:47;;;;;-1:-1:-1;;;;;;306:14:47;;;;;;;;;152:779;;;;;;",
  "deployedSourceMap": "152:779:47:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;152:779:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;205:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;567:105;;;:::i;333:228::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;333:228:47;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;333:228:47;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;333:228:47;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;333:228:47;;-1:-1:-1;333:228:47;-1:-1:-1;333:228:47;:::i;678:86::-;;;:::i;205:34::-;;;;;;:::o;567:105::-;607:4;623:21;;-1:-1:-1;;623:21:47;640:4;623:21;;;;;;567:105;:::o;333:228::-;461:4;477:10;490:21;505:5;;490:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;490:14:47;;-1:-1:-1;;;490:21:47:i;:::-;528:5;;;:26;;;-1:-1:-1;;;528:26:47;;-1:-1:-1;;;;;528:26:47;;;;;;;;;;;;;;;477:34;;-1:-1:-1;528:5:47;;;;;;:14;;:26;;;;;;;;;;;;;;;;;;:5;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;528:26:47;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;528:26:47;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;528:26:47;;333:228;-1:-1:-1;;;;;;333:228:47:o;678:86::-;720:4;743:14;;;678:86;:::o;770:159::-;909:2;898:14;892:21;;870:53::o",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"../../../contracts/token/ERC677/ERC677Receiver.sol\";\n\n\ncontract TransferAndCallMock is ERC677Receiver {\n    bool public calledFallback = false;\n    ERC20 token;\n\n    constructor(ERC20 _token) public {\n        token = _token;\n    }\n\n    function onTokenTransfer(\n        address _sender,\n        uint256 _value,\n        bytes calldata _data\n    ) external returns (bool) {\n        address to = bytesToAddress(_data);\n        return token.transfer(to, _value);\n    }\n\n    function mockTransfer() public returns (bool) {\n        calledFallback = true;\n        return true;\n    }\n\n    function wasCalled() public view returns (bool) {\n        return calledFallback;\n    }\n\n    function bytesToAddress(bytes memory _data) internal view returns (address addr) {\n        assembly {\n            addr := mload(add(_data, 32))\n        }\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/TransferAndCallMock.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/TransferAndCallMock.sol",
    "exportedSymbols": {
      "TransferAndCallMock": [
        12019
      ]
    },
    "id": 12020,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11946,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:47"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 11947,
        "nodeType": "ImportDirective",
        "scope": 12020,
        "sourceUnit": 21850,
        "src": "25:63:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol",
        "file": "../../../contracts/token/ERC677/ERC677Receiver.sol",
        "id": 11948,
        "nodeType": "ImportDirective",
        "scope": 12020,
        "sourceUnit": 3210,
        "src": "89:60:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11949,
              "name": "ERC677Receiver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3209,
              "src": "184:14:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC677Receiver_$3209",
                "typeString": "contract ERC677Receiver"
              }
            },
            "id": 11950,
            "nodeType": "InheritanceSpecifier",
            "src": "184:14:47"
          }
        ],
        "contractDependencies": [
          3209
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 12019,
        "linearizedBaseContracts": [
          12019,
          3209
        ],
        "name": "TransferAndCallMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 11953,
            "name": "calledFallback",
            "nodeType": "VariableDeclaration",
            "scope": 12019,
            "src": "205:34:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 11951,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "205:4:47",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 11952,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "234:5:47",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 11955,
            "name": "token",
            "nodeType": "VariableDeclaration",
            "scope": 12019,
            "src": "245:11:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 11954,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "245:5:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11964,
              "nodeType": "Block",
              "src": "296:31:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11960,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11955,
                      "src": "306:5:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11961,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11957,
                      "src": "314:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "306:14:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 11963,
                  "nodeType": "ExpressionStatement",
                  "src": "306:14:47"
                }
              ]
            },
            "documentation": null,
            "id": 11965,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11957,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11965,
                  "src": "275:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11956,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "275:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "274:14:47"
            },
            "returnParameters": {
              "id": 11959,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "296:0:47"
            },
            "scope": 12019,
            "src": "263:64:47",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11988,
              "nodeType": "Block",
              "src": "467:94:47",
              "statements": [
                {
                  "assignments": [
                    11977
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11977,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 11988,
                      "src": "477:10:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 11976,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "477:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11981,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11979,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11971,
                        "src": "505:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 11978,
                      "name": "bytesToAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12018,
                      "src": "490:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) view returns (address)"
                      }
                    },
                    "id": 11980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "490:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "477:34:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11984,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11977,
                        "src": "543:2:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11985,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11969,
                        "src": "547:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11982,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11955,
                        "src": "528:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 11983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21493,
                      "src": "528:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 11986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "528:26:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11975,
                  "id": 11987,
                  "nodeType": "Return",
                  "src": "521:33:47"
                }
              ]
            },
            "documentation": null,
            "id": 11989,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onTokenTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11967,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "367:15:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "367:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11969,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "392:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "392:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11971,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "416:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11970,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "357:85:47"
            },
            "returnParameters": {
              "id": 11975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11974,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "461:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11973,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "461:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "460:6:47"
            },
            "scope": 12019,
            "src": "333:228:47",
            "stateMutability": "nonpayable",
            "superFunction": 3208,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12000,
              "nodeType": "Block",
              "src": "613:59:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11994,
                      "name": "calledFallback",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11953,
                      "src": "623:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 11995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "640:4:47",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "623:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11997,
                  "nodeType": "ExpressionStatement",
                  "src": "623:21:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 11998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "661:4:47",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 11993,
                  "id": 11999,
                  "nodeType": "Return",
                  "src": "654:11:47"
                }
              ]
            },
            "documentation": null,
            "id": 12001,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mockTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "588:2:47"
            },
            "returnParameters": {
              "id": 11993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12001,
                  "src": "607:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11991,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "607:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "606:6:47"
            },
            "scope": 12019,
            "src": "567:105:47",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12008,
              "nodeType": "Block",
              "src": "726:38:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12006,
                    "name": "calledFallback",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11953,
                    "src": "743:14:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12005,
                  "id": 12007,
                  "nodeType": "Return",
                  "src": "736:21:47"
                }
              ]
            },
            "documentation": null,
            "id": 12009,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "wasCalled",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12002,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "696:2:47"
            },
            "returnParameters": {
              "id": 12005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12009,
                  "src": "720:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12003,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "720:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "719:6:47"
            },
            "scope": 12019,
            "src": "678:86:47",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12017,
              "nodeType": "Block",
              "src": "851:78:47",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 12014,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "884:4:47",
                        "valueSize": 1
                      }
                    },
                    {
                      "_data": {
                        "declaration": 12011,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "902:5:47",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 12016,
                  "nodeType": "InlineAssembly",
                  "operations": "{ addr := mload(add(_data, 32)) }",
                  "src": "861:62:47"
                }
              ]
            },
            "documentation": null,
            "id": 12018,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bytesToAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12011,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 12018,
                  "src": "794:18:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12010,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "794:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "793:20:47"
            },
            "returnParameters": {
              "id": 12015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12014,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 12018,
                  "src": "837:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12013,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "837:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "836:14:47"
            },
            "scope": 12019,
            "src": "770:159:47",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 12020,
        "src": "152:779:47"
      }
    ],
    "src": "0:932:47"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/mocks/TransferAndCallMock.sol",
    "exportedSymbols": {
      "TransferAndCallMock": [
        12019
      ]
    },
    "id": 12020,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11946,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:47"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 11947,
        "nodeType": "ImportDirective",
        "scope": 12020,
        "sourceUnit": 21850,
        "src": "25:63:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol",
        "file": "../../../contracts/token/ERC677/ERC677Receiver.sol",
        "id": 11948,
        "nodeType": "ImportDirective",
        "scope": 12020,
        "sourceUnit": 3210,
        "src": "89:60:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11949,
              "name": "ERC677Receiver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3209,
              "src": "184:14:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC677Receiver_$3209",
                "typeString": "contract ERC677Receiver"
              }
            },
            "id": 11950,
            "nodeType": "InheritanceSpecifier",
            "src": "184:14:47"
          }
        ],
        "contractDependencies": [
          3209
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 12019,
        "linearizedBaseContracts": [
          12019,
          3209
        ],
        "name": "TransferAndCallMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 11953,
            "name": "calledFallback",
            "nodeType": "VariableDeclaration",
            "scope": 12019,
            "src": "205:34:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 11951,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "205:4:47",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 11952,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "234:5:47",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 11955,
            "name": "token",
            "nodeType": "VariableDeclaration",
            "scope": 12019,
            "src": "245:11:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 11954,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "245:5:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11964,
              "nodeType": "Block",
              "src": "296:31:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11960,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11955,
                      "src": "306:5:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11961,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11957,
                      "src": "314:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "306:14:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 11963,
                  "nodeType": "ExpressionStatement",
                  "src": "306:14:47"
                }
              ]
            },
            "documentation": null,
            "id": 11965,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11957,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11965,
                  "src": "275:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11956,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "275:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "274:14:47"
            },
            "returnParameters": {
              "id": 11959,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "296:0:47"
            },
            "scope": 12019,
            "src": "263:64:47",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11988,
              "nodeType": "Block",
              "src": "467:94:47",
              "statements": [
                {
                  "assignments": [
                    11977
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11977,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 11988,
                      "src": "477:10:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 11976,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "477:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11981,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11979,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11971,
                        "src": "505:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 11978,
                      "name": "bytesToAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12018,
                      "src": "490:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) view returns (address)"
                      }
                    },
                    "id": 11980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "490:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "477:34:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11984,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11977,
                        "src": "543:2:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11985,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11969,
                        "src": "547:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11982,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11955,
                        "src": "528:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 11983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21493,
                      "src": "528:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 11986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "528:26:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11975,
                  "id": 11987,
                  "nodeType": "Return",
                  "src": "521:33:47"
                }
              ]
            },
            "documentation": null,
            "id": 11989,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onTokenTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11967,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "367:15:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "367:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11969,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "392:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "392:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11971,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "416:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 11970,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "357:85:47"
            },
            "returnParameters": {
              "id": 11975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11974,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11989,
                  "src": "461:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11973,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "461:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "460:6:47"
            },
            "scope": 12019,
            "src": "333:228:47",
            "stateMutability": "nonpayable",
            "superFunction": 3208,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12000,
              "nodeType": "Block",
              "src": "613:59:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11994,
                      "name": "calledFallback",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11953,
                      "src": "623:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 11995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "640:4:47",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "623:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11997,
                  "nodeType": "ExpressionStatement",
                  "src": "623:21:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 11998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "661:4:47",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 11993,
                  "id": 11999,
                  "nodeType": "Return",
                  "src": "654:11:47"
                }
              ]
            },
            "documentation": null,
            "id": 12001,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mockTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "588:2:47"
            },
            "returnParameters": {
              "id": 11993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12001,
                  "src": "607:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11991,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "607:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "606:6:47"
            },
            "scope": 12019,
            "src": "567:105:47",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12008,
              "nodeType": "Block",
              "src": "726:38:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12006,
                    "name": "calledFallback",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11953,
                    "src": "743:14:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12005,
                  "id": 12007,
                  "nodeType": "Return",
                  "src": "736:21:47"
                }
              ]
            },
            "documentation": null,
            "id": 12009,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "wasCalled",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12002,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "696:2:47"
            },
            "returnParameters": {
              "id": 12005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12004,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12009,
                  "src": "720:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12003,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "720:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "719:6:47"
            },
            "scope": 12019,
            "src": "678:86:47",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12017,
              "nodeType": "Block",
              "src": "851:78:47",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 12014,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "884:4:47",
                        "valueSize": 1
                      }
                    },
                    {
                      "_data": {
                        "declaration": 12011,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "902:5:47",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 12016,
                  "nodeType": "InlineAssembly",
                  "operations": "{ addr := mload(add(_data, 32)) }",
                  "src": "861:62:47"
                }
              ]
            },
            "documentation": null,
            "id": 12018,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bytesToAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12011,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 12018,
                  "src": "794:18:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12010,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "794:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "793:20:47"
            },
            "returnParameters": {
              "id": 12015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12014,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 12018,
                  "src": "837:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12013,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "837:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "836:14:47"
            },
            "scope": 12019,
            "src": "770:159:47",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 12020,
        "src": "152:779:47"
      }
    ],
    "src": "0:932:47"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.375Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}