{
  "contractName": "TestResolver",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "addr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "setAddr",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A test resolver implementation\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/makoto/work/ens/ethregistrar/contracts/TestResolver.sol\":\"TestResolver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/makoto/work/ens/ethregistrar/contracts/TestResolver.sol\":{\"keccak256\":\"0x75aab582892e005cc32f7a276734bbd318d6161f097d6a9a4ff20a2f751873c2\",\"urls\":[\"bzz-raw://97ffbc51e7ab031b36deeed4a2c00b265ea8667100af0beb7dc466a9b87ecbb2\",\"dweb:/ipfs/QmPRqeCfxk2TDeSuG7Y9sf6NQJxhLgjJLSJvM5mdPmzZqg\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061028f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a7146100465780633b3b57de146100ab578063d5fa2b0014610119575b600080fd5b6100916004803603602081101561005c57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610167565b604051808215151515815260200191505060405180910390f35b6100d7600480360360208110156100c157600080fd5b81019080803590602001909291905050506101c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101656004803603604081101561012f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610205565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101c25750633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8060008084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505056fea265627a7a7231582010408f353c0027f8015076fb440e1d0bb8cc33d9f62cb22569c096bb54cafef064736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a7146100465780633b3b57de146100ab578063d5fa2b0014610119575b600080fd5b6100916004803603602081101561005c57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610167565b604051808215151515815260200191505060405180910390f35b6100d7600480360360208110156100c157600080fd5b81019080803590602001909291905050506101c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101656004803603604081101561012f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610205565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101c25750633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8060008084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505056fea265627a7a7231582010408f353c0027f8015076fb440e1d0bb8cc33d9f62cb22569c096bb54cafef064736f6c63430005100032",
  "sourceMap": "72:461:15:-;;;145:28;8:9:-1;5:2;;;30:1;27;20:12;5:2;145:28:15;72:461;;;;;;",
  "deployedSourceMap": "72:461:15:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;72:461:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;179:152;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;179:152:15;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;337:97;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;337:97:15;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;440:91;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;440:91:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;179:152;247:4;285:10;270:25;;:11;:25;;;;:54;;;;314:10;299:25;;:11;:25;;;;270:54;263:61;;179:152;;;:::o;337:97::-;386:7;412:9;:15;422:4;412:15;;;;;;;;;;;;;;;;;;;;;405:22;;337:97;;;:::o;440:91::-;520:4;502:9;:15;512:4;502:15;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;440:91;;:::o",
  "source": "pragma solidity ^0.5.0;\n\n/**\n * @dev A test resolver implementation\n */\ncontract TestResolver {\n    mapping (bytes32 => address) addresses;\n\n    constructor() public {\n    }\n\n    function supportsInterface(bytes4 interfaceID) public pure returns (bool) {\n        return interfaceID == 0x01ffc9a7 || interfaceID == 0x3b3b57de;\n    }\n\n    function addr(bytes32 node) public view returns (address) {\n        return addresses[node];\n    }\n\n    function setAddr(bytes32 node, address addr) public {\n        addresses[node] = addr;\n    }\n}\n",
  "sourcePath": "/Users/makoto/work/ens/ethregistrar/contracts/TestResolver.sol",
  "ast": {
    "absolutePath": "/Users/makoto/work/ens/ethregistrar/contracts/TestResolver.sol",
    "exportedSymbols": {
      "TestResolver": [
        4467
      ]
    },
    "id": 4468,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4416,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:15"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@dev A test resolver implementation",
        "fullyImplemented": true,
        "id": 4467,
        "linearizedBaseContracts": [
          4467
        ],
        "name": "TestResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4420,
            "name": "addresses",
            "nodeType": "VariableDeclaration",
            "scope": 4467,
            "src": "100:38:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 4419,
              "keyType": {
                "id": 4417,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "109:7:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "100:28:15",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 4418,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "120:7:15",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4423,
              "nodeType": "Block",
              "src": "166:7:15",
              "statements": []
            },
            "documentation": null,
            "id": 4424,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4421,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "156:2:15"
            },
            "returnParameters": {
              "id": 4422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "166:0:15"
            },
            "scope": 4467,
            "src": "145:28:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4439,
              "nodeType": "Block",
              "src": "253:78:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 4433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4431,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "270:11:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30783031666663396137",
                        "id": 4432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "285:10:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_33540519_by_1",
                          "typeString": "int_const 33540519"
                        },
                        "value": "0x01ffc9a7"
                      },
                      "src": "270:25:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 4436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4434,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "299:11:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30783362336235376465",
                        "id": 4435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "314:10:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_993744862_by_1",
                          "typeString": "int_const 993744862"
                        },
                        "value": "0x3b3b57de"
                      },
                      "src": "299:25:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "270:54:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4430,
                  "id": 4438,
                  "nodeType": "Return",
                  "src": "263:61:15"
                }
              ]
            },
            "documentation": null,
            "id": 4440,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4426,
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 4440,
                  "src": "206:18:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 4425,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "206:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "205:20:15"
            },
            "returnParameters": {
              "id": 4430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4440,
                  "src": "247:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4428,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "247:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "246:6:15"
            },
            "scope": 4467,
            "src": "179:152:15",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4451,
              "nodeType": "Block",
              "src": "395:39:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4447,
                      "name": "addresses",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4420,
                      "src": "412:9:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 4449,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4448,
                      "name": "node",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4442,
                      "src": "422:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "412:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4446,
                  "id": 4450,
                  "nodeType": "Return",
                  "src": "405:22:15"
                }
              ]
            },
            "documentation": null,
            "id": 4452,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4442,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 4452,
                  "src": "351:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4441,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "351:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "350:14:15"
            },
            "returnParameters": {
              "id": 4446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4452,
                  "src": "386:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4444,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "386:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "385:9:15"
            },
            "scope": 4467,
            "src": "337:97:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4465,
              "nodeType": "Block",
              "src": "492:39:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4459,
                        "name": "addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4420,
                        "src": "502:9:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 4461,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4460,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4454,
                        "src": "512:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "502:15:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4462,
                      "name": "addr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4456,
                      "src": "520:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "502:22:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4464,
                  "nodeType": "ExpressionStatement",
                  "src": "502:22:15"
                }
              ]
            },
            "documentation": null,
            "id": 4466,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setAddr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4454,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 4466,
                  "src": "457:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4453,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "457:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4456,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 4466,
                  "src": "471:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "471:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "456:28:15"
            },
            "returnParameters": {
              "id": 4458,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "492:0:15"
            },
            "scope": 4467,
            "src": "440:91:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4468,
        "src": "72:461:15"
      }
    ],
    "src": "0:534:15"
  },
  "legacyAST": {
    "absolutePath": "/Users/makoto/work/ens/ethregistrar/contracts/TestResolver.sol",
    "exportedSymbols": {
      "TestResolver": [
        4467
      ]
    },
    "id": 4468,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4416,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:15"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@dev A test resolver implementation",
        "fullyImplemented": true,
        "id": 4467,
        "linearizedBaseContracts": [
          4467
        ],
        "name": "TestResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4420,
            "name": "addresses",
            "nodeType": "VariableDeclaration",
            "scope": 4467,
            "src": "100:38:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 4419,
              "keyType": {
                "id": 4417,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "109:7:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "100:28:15",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 4418,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "120:7:15",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4423,
              "nodeType": "Block",
              "src": "166:7:15",
              "statements": []
            },
            "documentation": null,
            "id": 4424,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4421,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "156:2:15"
            },
            "returnParameters": {
              "id": 4422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "166:0:15"
            },
            "scope": 4467,
            "src": "145:28:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4439,
              "nodeType": "Block",
              "src": "253:78:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 4433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4431,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "270:11:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30783031666663396137",
                        "id": 4432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "285:10:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_33540519_by_1",
                          "typeString": "int_const 33540519"
                        },
                        "value": "0x01ffc9a7"
                      },
                      "src": "270:25:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 4436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4434,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4426,
                        "src": "299:11:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30783362336235376465",
                        "id": 4435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "314:10:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_993744862_by_1",
                          "typeString": "int_const 993744862"
                        },
                        "value": "0x3b3b57de"
                      },
                      "src": "299:25:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "270:54:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4430,
                  "id": 4438,
                  "nodeType": "Return",
                  "src": "263:61:15"
                }
              ]
            },
            "documentation": null,
            "id": 4440,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4426,
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 4440,
                  "src": "206:18:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 4425,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "206:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "205:20:15"
            },
            "returnParameters": {
              "id": 4430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4440,
                  "src": "247:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4428,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "247:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "246:6:15"
            },
            "scope": 4467,
            "src": "179:152:15",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4451,
              "nodeType": "Block",
              "src": "395:39:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4447,
                      "name": "addresses",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4420,
                      "src": "412:9:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 4449,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4448,
                      "name": "node",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4442,
                      "src": "422:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "412:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4446,
                  "id": 4450,
                  "nodeType": "Return",
                  "src": "405:22:15"
                }
              ]
            },
            "documentation": null,
            "id": 4452,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4442,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 4452,
                  "src": "351:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4441,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "351:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "350:14:15"
            },
            "returnParameters": {
              "id": 4446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4452,
                  "src": "386:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4444,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "386:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "385:9:15"
            },
            "scope": 4467,
            "src": "337:97:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4465,
              "nodeType": "Block",
              "src": "492:39:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4459,
                        "name": "addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4420,
                        "src": "502:9:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 4461,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4460,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4454,
                        "src": "512:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "502:15:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4462,
                      "name": "addr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4456,
                      "src": "520:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "502:22:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4464,
                  "nodeType": "ExpressionStatement",
                  "src": "502:22:15"
                }
              ]
            },
            "documentation": null,
            "id": 4466,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setAddr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4454,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 4466,
                  "src": "457:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4453,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "457:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4456,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 4466,
                  "src": "471:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "471:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "456:28:15"
            },
            "returnParameters": {
              "id": 4458,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "492:0:15"
            },
            "scope": 4467,
            "src": "440:91:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4468,
        "src": "72:461:15"
      }
    ],
    "src": "0:534:15"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-06-17T12:57:44.952Z",
  "devdoc": {
    "details": "A test resolver implementation",
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}