{
  "contractName": "EVMScriptRunner",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "EVMSCRIPT_REGISTRY_APP_ID",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EVMSCRIPT_REGISTRY_APP",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6060604052341561000f57600080fd5b6105878061001e6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360b1e0571461007257806380afdea8146100a35780639b3fdf4c146100d4578063d4aae0c414610105578063f92a79ff1461015a575b600080fd5b341561007d57600080fd5b6100856101f7565b60405180826000191660001916815260200191505060405180910390f35b34156100ae57600080fd5b6100b6610230565b60405180826000191660001916815260200191505060405180910390f35b34156100df57600080fd5b6100e7610236565b60405180826000191660001916815260200191505060405180910390f35b341561011057600080fd5b6101186102d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561016557600080fd5b6101b5600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506102f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902081565b60015481565b60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081525060130190506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006103006103fd565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836000604051602001526040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610390578082015181840152602081019050610375565b50505050905090810190601f1680156103bd5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15156103db57600080fd5b6102c65a03f115156103ec57600080fd5b505050604051805190509050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342c71f1d60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390206000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561053757600080fd5b6102c65a03f1151561054857600080fd5b50505060405180519050905080915050905600a165627a7a723058205afa819cbf100c4f71448cca86c188e2603b4fe34c3b5745723feb872ff74ab20029",
  "deployedBytecode": "0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360b1e0571461007257806380afdea8146100a35780639b3fdf4c146100d4578063d4aae0c414610105578063f92a79ff1461015a575b600080fd5b341561007d57600080fd5b6100856101f7565b60405180826000191660001916815260200191505060405180910390f35b34156100ae57600080fd5b6100b6610230565b60405180826000191660001916815260200191505060405180910390f35b34156100df57600080fd5b6100e7610236565b60405180826000191660001916815260200191505060405180910390f35b341561011057600080fd5b6101186102d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561016557600080fd5b6101b5600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506102f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902081565b60015481565b60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081525060130190506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006103006103fd565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836000604051602001526040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610390578082015181840152602081019050610375565b50505050905090810190601f1680156103bd5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15156103db57600080fd5b6102c65a03f115156103ec57600080fd5b505050604051805190509050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342c71f1d60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390206000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561053757600080fd5b6102c65a03f1151561054857600080fd5b50505060405180519050905080915050905600a165627a7a723058205afa819cbf100c4f71448cca86c188e2603b4fe34c3b5745723feb872ff74ab20029",
  "sourceMap": "162:1806:29:-;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "162:1806:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68:84:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;113:20:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;158:103:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;86:21:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:169:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68:84:31;120:32;;;;;;;;;;;;;;;;;;;68:84;:::o;113:20:19:-;;;;:::o;158:103:31:-;217:16;;;;;;;;;;;;;;;;;;;120:32;;;;;;;;;;;;;;;;;;;207:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;158:103;:::o;86:21:19:-;;;;;;;;;;;;;:::o;824:169:29:-;881:18;937:21;:19;:21::i;:::-;:39;;;977:7;937:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;911:75:29;;824:169;;;:::o;1021:200::-;1075:18;1105:20;1128:6;;;;;;;;;;;:13;;;217:16:31;;;;;;;;;;;;;;;;;;;120:32;;;;;;;;;;;;;;;;;;;207:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1128:37:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1105:60;;1201:12;1175:39;;1021:200;;:::o",
  "source": "pragma solidity ^0.4.18;\n\nimport \"../apps/AppStorage.sol\";\nimport \"./IEVMScriptExecutor.sol\";\nimport \"./IEVMScriptRegistry.sol\";\n\nimport \"./ScriptHelpers.sol\";\n\n\ncontract EVMScriptRunner is AppStorage, EVMScriptRegistryConstants {\n    using ScriptHelpers for bytes;\n\n    function runScript(bytes _script, bytes _input, address[] _blacklist) protectState internal returns (bytes output) {\n        // TODO: Too much data flying around, maybe extracting spec id here is cheaper\n        address executorAddr = getExecutor(_script);\n        require(executorAddr != address(0));\n\n        bytes memory calldataArgs = _script.encode(_input, _blacklist);\n        bytes4 sig = IEVMScriptExecutor(0).execScript.selector;\n\n        require(executorAddr.delegatecall(sig, calldataArgs));\n\n        return returnedDataDecoded();\n    }\n\n    function getExecutor(bytes _script) public view returns (IEVMScriptExecutor) {\n        return IEVMScriptExecutor(getExecutorRegistry().getScriptExecutor(_script));\n    }\n\n    // TODO: Internal\n    function getExecutorRegistry() internal view returns (IEVMScriptRegistry) {\n        address registryAddr = kernel.getApp(EVMSCRIPT_REGISTRY_APP);\n        return IEVMScriptRegistry(registryAddr);\n    }\n\n    /**\n    * @dev copies and returns last's call data. Needs to ABI decode first\n    */\n    function returnedDataDecoded() internal view returns (bytes ret) {\n        assembly {\n            let size := returndatasize\n            switch size\n            case 0 {}\n            default {\n                ret := mload(0x40) // free mem ptr get\n                mstore(0x40, add(ret, add(size, 0x20))) // free mem ptr set\n                returndatacopy(ret, 0x20, sub(size, 0x20)) // copy return data\n            }\n        }\n        return ret;\n    }\n\n    modifier protectState {\n        address preKernel = kernel;\n        bytes32 preAppId = appId;\n        _; // exec\n        require(kernel == preKernel);\n        require(appId == preAppId);\n    }\n}",
  "sourcePath": "@aragon/os/contracts/evmscript/EVMScriptRunner.sol",
  "ast": {
    "attributes": {
      "absolutePath": "@aragon/os/contracts/evmscript/EVMScriptRunner.sol",
      "exportedSymbols": {
        "EVMScriptRunner": [
          7846
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.4",
            ".18"
          ]
        },
        "id": 7712,
        "name": "PragmaDirective",
        "src": "0:24:29"
      },
      {
        "attributes": {
          "SourceUnit": 6871,
          "absolutePath": "@aragon/os/contracts/apps/AppStorage.sol",
          "file": "../apps/AppStorage.sol",
          "scope": 7847,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7713,
        "name": "ImportDirective",
        "src": "26:32:29"
      },
      {
        "attributes": {
          "SourceUnit": 7862,
          "absolutePath": "@aragon/os/contracts/evmscript/IEVMScriptExecutor.sol",
          "file": "./IEVMScriptExecutor.sol",
          "scope": 7847,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7714,
        "name": "ImportDirective",
        "src": "59:34:29"
      },
      {
        "attributes": {
          "SourceUnit": 7898,
          "absolutePath": "@aragon/os/contracts/evmscript/IEVMScriptRegistry.sol",
          "file": "./IEVMScriptRegistry.sol",
          "scope": 7847,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7715,
        "name": "ImportDirective",
        "src": "94:34:29"
      },
      {
        "attributes": {
          "SourceUnit": 8269,
          "absolutePath": "@aragon/os/contracts/evmscript/ScriptHelpers.sol",
          "file": "./ScriptHelpers.sol",
          "scope": 7847,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7716,
        "name": "ImportDirective",
        "src": "130:29:29"
      },
      {
        "attributes": {
          "contractDependencies": [
            6870,
            7877
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            7846,
            7877,
            6870
          ],
          "name": "EVMScriptRunner",
          "scope": 7847
        },
        "children": [
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "AppStorage",
                  "referencedDeclaration": 6870,
                  "type": "contract AppStorage"
                },
                "id": 7717,
                "name": "UserDefinedTypeName",
                "src": "190:10:29"
              }
            ],
            "id": 7718,
            "name": "InheritanceSpecifier",
            "src": "190:10:29"
          },
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "EVMScriptRegistryConstants",
                  "referencedDeclaration": 7877,
                  "type": "contract EVMScriptRegistryConstants"
                },
                "id": 7719,
                "name": "UserDefinedTypeName",
                "src": "202:26:29"
              }
            ],
            "id": 7720,
            "name": "InheritanceSpecifier",
            "src": "202:26:29"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ScriptHelpers",
                  "referencedDeclaration": 8268,
                  "type": "library ScriptHelpers"
                },
                "id": 7721,
                "name": "UserDefinedTypeName",
                "src": "241:13:29"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes storage pointer"
                },
                "id": 7722,
                "name": "ElementaryTypeName",
                "src": "259:5:29"
              }
            ],
            "id": 7723,
            "name": "UsingForDirective",
            "src": "235:30:29"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "runScript",
              "payable": false,
              "scope": 7846,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_script",
                      "scope": 7779,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 7724,
                        "name": "ElementaryTypeName",
                        "src": "290:5:29"
                      }
                    ],
                    "id": 7725,
                    "name": "VariableDeclaration",
                    "src": "290:13:29"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_input",
                      "scope": 7779,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 7726,
                        "name": "ElementaryTypeName",
                        "src": "305:5:29"
                      }
                    ],
                    "id": 7727,
                    "name": "VariableDeclaration",
                    "src": "305:12:29"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_blacklist",
                      "scope": 7779,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "type": "address"
                            },
                            "id": 7728,
                            "name": "ElementaryTypeName",
                            "src": "319:7:29"
                          }
                        ],
                        "id": 7729,
                        "name": "ArrayTypeName",
                        "src": "319:9:29"
                      }
                    ],
                    "id": 7730,
                    "name": "VariableDeclaration",
                    "src": "319:20:29"
                  }
                ],
                "id": 7731,
                "name": "ParameterList",
                "src": "289:51:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "output",
                      "scope": 7779,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 7734,
                        "name": "ElementaryTypeName",
                        "src": "372:5:29"
                      }
                    ],
                    "id": 7735,
                    "name": "VariableDeclaration",
                    "src": "372:12:29"
                  }
                ],
                "id": 7736,
                "name": "ParameterList",
                "src": "371:14:29"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 7845,
                      "type": "modifier ()",
                      "value": "protectState"
                    },
                    "id": 7732,
                    "name": "Identifier",
                    "src": "341:12:29"
                  }
                ],
                "id": 7733,
                "name": "ModifierInvocation",
                "src": "341:12:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7738
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "executorAddr",
                          "scope": 7779,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "type": "address"
                            },
                            "id": 7737,
                            "name": "ElementaryTypeName",
                            "src": "483:7:29"
                          }
                        ],
                        "id": 7738,
                        "name": "VariableDeclaration",
                        "src": "483:20:29"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IEVMScriptExecutor",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7795,
                              "type": "function (bytes memory) view returns (contract IEVMScriptExecutor)",
                              "value": "getExecutor"
                            },
                            "id": 7739,
                            "name": "Identifier",
                            "src": "506:11:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7725,
                              "type": "bytes memory",
                              "value": "_script"
                            },
                            "id": 7740,
                            "name": "Identifier",
                            "src": "518:7:29"
                          }
                        ],
                        "id": 7741,
                        "name": "FunctionCall",
                        "src": "506:20:29"
                      }
                    ],
                    "id": 7742,
                    "name": "VariableDeclarationStatement",
                    "src": "483:43:29"
                  },
                  {
                    "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": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 7743,
                            "name": "Identifier",
                            "src": "536:7:29"
                          },
                          {
                            "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": 7738,
                                  "type": "address",
                                  "value": "executorAddr"
                                },
                                "id": 7744,
                                "name": "Identifier",
                                "src": "544:12:29"
                              },
                              {
                                "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": 7745,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "560:7:29"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 7746,
                                    "name": "Literal",
                                    "src": "568:1:29"
                                  }
                                ],
                                "id": 7747,
                                "name": "FunctionCall",
                                "src": "560:10:29"
                              }
                            ],
                            "id": 7748,
                            "name": "BinaryOperation",
                            "src": "544:26:29"
                          }
                        ],
                        "id": 7749,
                        "name": "FunctionCall",
                        "src": "536:35:29"
                      }
                    ],
                    "id": 7750,
                    "name": "ExpressionStatement",
                    "src": "536:35:29"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7752
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "calldataArgs",
                          "scope": 7779,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes memory",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes storage pointer"
                            },
                            "id": 7751,
                            "name": "ElementaryTypeName",
                            "src": "582:5:29"
                          }
                        ],
                        "id": 7752,
                        "name": "VariableDeclaration",
                        "src": "582:25:29"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "encode",
                              "referencedDeclaration": 8005,
                              "type": "function (bytes memory,bytes memory,address[] memory) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7725,
                                  "type": "bytes memory",
                                  "value": "_script"
                                },
                                "id": 7753,
                                "name": "Identifier",
                                "src": "610:7:29"
                              }
                            ],
                            "id": 7754,
                            "name": "MemberAccess",
                            "src": "610:14:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7727,
                              "type": "bytes memory",
                              "value": "_input"
                            },
                            "id": 7755,
                            "name": "Identifier",
                            "src": "625:6:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7730,
                              "type": "address[] memory",
                              "value": "_blacklist"
                            },
                            "id": 7756,
                            "name": "Identifier",
                            "src": "633:10:29"
                          }
                        ],
                        "id": 7757,
                        "name": "FunctionCall",
                        "src": "610:34:29"
                      }
                    ],
                    "id": 7758,
                    "name": "VariableDeclarationStatement",
                    "src": "582:62:29"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7760
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "sig",
                          "scope": 7779,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes4",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes4",
                              "type": "bytes4"
                            },
                            "id": 7759,
                            "name": "ElementaryTypeName",
                            "src": "654:6:29"
                          }
                        ],
                        "id": 7760,
                        "name": "VariableDeclaration",
                        "src": "654:10:29"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "selector",
                          "referencedDeclaration": null,
                          "type": "bytes4"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "execScript",
                              "referencedDeclaration": 7860,
                              "type": "function (bytes memory,bytes memory,address[] memory) external returns (inaccessible dynamic type)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "contract IEVMScriptExecutor",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7861,
                                      "type": "type(contract IEVMScriptExecutor)",
                                      "value": "IEVMScriptExecutor"
                                    },
                                    "id": 7761,
                                    "name": "Identifier",
                                    "src": "667:18:29"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 7762,
                                    "name": "Literal",
                                    "src": "686:1:29"
                                  }
                                ],
                                "id": 7763,
                                "name": "FunctionCall",
                                "src": "667:21:29"
                              }
                            ],
                            "id": 7764,
                            "name": "MemberAccess",
                            "src": "667:32:29"
                          }
                        ],
                        "id": 7765,
                        "name": "MemberAccess",
                        "src": "667:41:29"
                      }
                    ],
                    "id": 7766,
                    "name": "VariableDeclarationStatement",
                    "src": "654:54:29"
                  },
                  {
                    "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": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 7767,
                            "name": "Identifier",
                            "src": "719:7:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "delegatecall",
                                  "referencedDeclaration": null,
                                  "type": "function () returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7738,
                                      "type": "address",
                                      "value": "executorAddr"
                                    },
                                    "id": 7768,
                                    "name": "Identifier",
                                    "src": "727:12:29"
                                  }
                                ],
                                "id": 7769,
                                "name": "MemberAccess",
                                "src": "727:25:29"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7760,
                                  "type": "bytes4",
                                  "value": "sig"
                                },
                                "id": 7770,
                                "name": "Identifier",
                                "src": "753:3:29"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7752,
                                  "type": "bytes memory",
                                  "value": "calldataArgs"
                                },
                                "id": 7771,
                                "name": "Identifier",
                                "src": "758:12:29"
                              }
                            ],
                            "id": 7772,
                            "name": "FunctionCall",
                            "src": "727:44:29"
                          }
                        ],
                        "id": 7773,
                        "name": "FunctionCall",
                        "src": "719:53:29"
                      }
                    ],
                    "id": 7774,
                    "name": "ExpressionStatement",
                    "src": "719:53:29"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 7736
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7821,
                              "type": "function () view returns (bytes memory)",
                              "value": "returnedDataDecoded"
                            },
                            "id": 7775,
                            "name": "Identifier",
                            "src": "790:19:29"
                          }
                        ],
                        "id": 7776,
                        "name": "FunctionCall",
                        "src": "790:21:29"
                      }
                    ],
                    "id": 7777,
                    "name": "Return",
                    "src": "783:28:29"
                  }
                ],
                "id": 7778,
                "name": "Block",
                "src": "386:432:29"
              }
            ],
            "id": 7779,
            "name": "FunctionDefinition",
            "src": "271:547:29"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getExecutor",
              "payable": false,
              "scope": 7846,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_script",
                      "scope": 7795,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 7780,
                        "name": "ElementaryTypeName",
                        "src": "845:5:29"
                      }
                    ],
                    "id": 7781,
                    "name": "VariableDeclaration",
                    "src": "845:13:29"
                  }
                ],
                "id": 7782,
                "name": "ParameterList",
                "src": "844:15:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 7795,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IEVMScriptExecutor",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IEVMScriptExecutor",
                          "referencedDeclaration": 7861,
                          "type": "contract IEVMScriptExecutor"
                        },
                        "id": 7783,
                        "name": "UserDefinedTypeName",
                        "src": "881:18:29"
                      }
                    ],
                    "id": 7784,
                    "name": "VariableDeclaration",
                    "src": "881:18:29"
                  }
                ],
                "id": 7785,
                "name": "ParameterList",
                "src": "880:20:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 7785
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IEVMScriptExecutor",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7861,
                              "type": "type(contract IEVMScriptExecutor)",
                              "value": "IEVMScriptExecutor"
                            },
                            "id": 7786,
                            "name": "Identifier",
                            "src": "918:18:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getScriptExecutor",
                                  "referencedDeclaration": 7896,
                                  "type": "function (bytes memory) view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "contract IEVMScriptRegistry",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 7812,
                                          "type": "function () view returns (contract IEVMScriptRegistry)",
                                          "value": "getExecutorRegistry"
                                        },
                                        "id": 7787,
                                        "name": "Identifier",
                                        "src": "937:19:29"
                                      }
                                    ],
                                    "id": 7788,
                                    "name": "FunctionCall",
                                    "src": "937:21:29"
                                  }
                                ],
                                "id": 7789,
                                "name": "MemberAccess",
                                "src": "937:39:29"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7781,
                                  "type": "bytes memory",
                                  "value": "_script"
                                },
                                "id": 7790,
                                "name": "Identifier",
                                "src": "977:7:29"
                              }
                            ],
                            "id": 7791,
                            "name": "FunctionCall",
                            "src": "937:48:29"
                          }
                        ],
                        "id": 7792,
                        "name": "FunctionCall",
                        "src": "918:68:29"
                      }
                    ],
                    "id": 7793,
                    "name": "Return",
                    "src": "911:75:29"
                  }
                ],
                "id": 7794,
                "name": "Block",
                "src": "901:92:29"
              }
            ],
            "id": 7795,
            "name": "FunctionDefinition",
            "src": "824:169:29"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getExecutorRegistry",
              "payable": false,
              "scope": 7846,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7796,
                "name": "ParameterList",
                "src": "1049:2:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 7812,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IEVMScriptRegistry",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IEVMScriptRegistry",
                          "referencedDeclaration": 7897,
                          "type": "contract IEVMScriptRegistry"
                        },
                        "id": 7797,
                        "name": "UserDefinedTypeName",
                        "src": "1075:18:29"
                      }
                    ],
                    "id": 7798,
                    "name": "VariableDeclaration",
                    "src": "1075:18:29"
                  }
                ],
                "id": 7799,
                "name": "ParameterList",
                "src": "1074:20:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7801
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "registryAddr",
                          "scope": 7812,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "type": "address"
                            },
                            "id": 7800,
                            "name": "ElementaryTypeName",
                            "src": "1105:7:29"
                          }
                        ],
                        "id": 7801,
                        "name": "VariableDeclaration",
                        "src": "1105:20:29"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getApp",
                              "referencedDeclaration": 9549,
                              "type": "function (bytes32) view external returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6857,
                                  "type": "contract IKernel",
                                  "value": "kernel"
                                },
                                "id": 7802,
                                "name": "Identifier",
                                "src": "1128:6:29"
                              }
                            ],
                            "id": 7803,
                            "name": "MemberAccess",
                            "src": "1128:13:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7876,
                              "type": "bytes32",
                              "value": "EVMSCRIPT_REGISTRY_APP"
                            },
                            "id": 7804,
                            "name": "Identifier",
                            "src": "1142:22:29"
                          }
                        ],
                        "id": 7805,
                        "name": "FunctionCall",
                        "src": "1128:37:29"
                      }
                    ],
                    "id": 7806,
                    "name": "VariableDeclarationStatement",
                    "src": "1105:60:29"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 7799
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IEVMScriptRegistry",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7897,
                              "type": "type(contract IEVMScriptRegistry)",
                              "value": "IEVMScriptRegistry"
                            },
                            "id": 7807,
                            "name": "Identifier",
                            "src": "1182:18:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7801,
                              "type": "address",
                              "value": "registryAddr"
                            },
                            "id": 7808,
                            "name": "Identifier",
                            "src": "1201:12:29"
                          }
                        ],
                        "id": 7809,
                        "name": "FunctionCall",
                        "src": "1182:32:29"
                      }
                    ],
                    "id": 7810,
                    "name": "Return",
                    "src": "1175:39:29"
                  }
                ],
                "id": 7811,
                "name": "Block",
                "src": "1095:126:29"
              }
            ],
            "id": 7812,
            "name": "FunctionDefinition",
            "src": "1021:200:29"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "returnedDataDecoded",
              "payable": false,
              "scope": 7846,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7813,
                "name": "ParameterList",
                "src": "1344:2:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "ret",
                      "scope": 7821,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 7814,
                        "name": "ElementaryTypeName",
                        "src": "1370:5:29"
                      }
                    ],
                    "id": 7815,
                    "name": "VariableDeclaration",
                    "src": "1370:9:29"
                  }
                ],
                "id": 7816,
                "name": "ParameterList",
                "src": "1369:11:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "ret": {
                            "declaration": 7815,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1525:3:29",
                            "valueSize": 1
                          }
                        },
                        {
                          "ret": {
                            "declaration": 7815,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1597:3:29",
                            "valueSize": 1
                          }
                        },
                        {
                          "ret": {
                            "declaration": 7815,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1671:3:29",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    let size := returndatasize\n    switch size\n    case 0 {\n    }\n    default {\n        ret := mload(0x40)\n        mstore(0x40, add(ret, add(size, 0x20)))\n        returndatacopy(ret, 0x20, sub(size, 0x20))\n    }\n}"
                    },
                    "children": [],
                    "id": 7817,
                    "name": "InlineAssembly",
                    "src": "1391:366:29"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 7816
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 7815,
                          "type": "bytes memory",
                          "value": "ret"
                        },
                        "id": 7818,
                        "name": "Identifier",
                        "src": "1758:3:29"
                      }
                    ],
                    "id": 7819,
                    "name": "Return",
                    "src": "1751:10:29"
                  }
                ],
                "id": 7820,
                "name": "Block",
                "src": "1381:387:29"
              }
            ],
            "id": 7821,
            "name": "FunctionDefinition",
            "src": "1316:452:29"
          },
          {
            "attributes": {
              "name": "protectState",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7822,
                "name": "ParameterList",
                "src": "1796:0:29"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7824
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "preKernel",
                          "scope": 7845,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "type": "address"
                            },
                            "id": 7823,
                            "name": "ElementaryTypeName",
                            "src": "1806:7:29"
                          }
                        ],
                        "id": 7824,
                        "name": "VariableDeclaration",
                        "src": "1806:17:29"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 6857,
                          "type": "contract IKernel",
                          "value": "kernel"
                        },
                        "id": 7825,
                        "name": "Identifier",
                        "src": "1826:6:29"
                      }
                    ],
                    "id": 7826,
                    "name": "VariableDeclarationStatement",
                    "src": "1806:26:29"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        7828
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "preAppId",
                          "scope": 7845,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 7827,
                            "name": "ElementaryTypeName",
                            "src": "1842:7:29"
                          }
                        ],
                        "id": 7828,
                        "name": "VariableDeclaration",
                        "src": "1842:16:29"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 6859,
                          "type": "bytes32",
                          "value": "appId"
                        },
                        "id": 7829,
                        "name": "Identifier",
                        "src": "1861:5:29"
                      }
                    ],
                    "id": 7830,
                    "name": "VariableDeclarationStatement",
                    "src": "1842:24:29"
                  },
                  {
                    "id": 7831,
                    "name": "PlaceholderStatement",
                    "src": "1876:1:29"
                  },
                  {
                    "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": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 7832,
                            "name": "Identifier",
                            "src": "1895:7:29"
                          },
                          {
                            "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": 6857,
                                  "type": "contract IKernel",
                                  "value": "kernel"
                                },
                                "id": 7833,
                                "name": "Identifier",
                                "src": "1903:6:29"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7824,
                                  "type": "address",
                                  "value": "preKernel"
                                },
                                "id": 7834,
                                "name": "Identifier",
                                "src": "1913:9:29"
                              }
                            ],
                            "id": 7835,
                            "name": "BinaryOperation",
                            "src": "1903:19:29"
                          }
                        ],
                        "id": 7836,
                        "name": "FunctionCall",
                        "src": "1895:28:29"
                      }
                    ],
                    "id": 7837,
                    "name": "ExpressionStatement",
                    "src": "1895:28:29"
                  },
                  {
                    "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": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 7838,
                            "name": "Identifier",
                            "src": "1933:7:29"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6859,
                                  "type": "bytes32",
                                  "value": "appId"
                                },
                                "id": 7839,
                                "name": "Identifier",
                                "src": "1941:5:29"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7828,
                                  "type": "bytes32",
                                  "value": "preAppId"
                                },
                                "id": 7840,
                                "name": "Identifier",
                                "src": "1950:8:29"
                              }
                            ],
                            "id": 7841,
                            "name": "BinaryOperation",
                            "src": "1941:17:29"
                          }
                        ],
                        "id": 7842,
                        "name": "FunctionCall",
                        "src": "1933:26:29"
                      }
                    ],
                    "id": 7843,
                    "name": "ExpressionStatement",
                    "src": "1933:26:29"
                  }
                ],
                "id": 7844,
                "name": "Block",
                "src": "1796:170:29"
              }
            ],
            "id": 7845,
            "name": "ModifierDefinition",
            "src": "1774:192:29"
          }
        ],
        "id": 7846,
        "name": "ContractDefinition",
        "src": "162:1806:29"
      }
    ],
    "id": 7847,
    "name": "SourceUnit",
    "src": "0:1968:29"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.18+commit.9cf6e910.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "1.0.1",
  "updatedAt": "2018-03-14T08:41:25.091Z"
}