{
  "contractName": "ENS",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_label",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "NewOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_resolver",
          "type": "address"
        }
      ],
      "name": "NewResolver",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_ttl",
          "type": "uint64"
        }
      ],
      "name": "NewTTL",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "resolver",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "ttl",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "label",
          "type": "bytes32"
        },
        {
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setSubnodeOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "setResolver",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "setTTL",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50336000808060010260001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061090b8061007b6000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be3146100f957806306ab59231461016a57806314ab9038146101c957806316a25cbd1461020e5780631896f70a146102675780635b0fc9c3146102b8575b600080fd5b34801561009457600080fd5b506100b76004803603810190808035600019169060200190929190505050610309565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010557600080fd5b506101286004803603810190808035600019169060200190929190505050610350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017657600080fd5b506101c760048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610397565b005b3480156101d557600080fd5b5061020c6004803603810190808035600019169060200190929190803567ffffffffffffffff169060200190929190505050610511565b005b34801561021a57600080fd5b5061023d6004803603810190808035600019169060200190929190505050610622565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561027357600080fd5b506102b66004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061065d565b005b3480156102c457600080fd5b506103076004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061079e565b005b6000806000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000833373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b848460405180836000191660001916815260200182600019166000191681526020019250505060405180910390209150836000191685600019167fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a382600080846000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561058957600080fd5b82600019167f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6000806000836000191660001916815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156106d557600080fd5b82600019167f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561081657600080fd5b82600019167fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582097ba2111660dc412b9c15e177cd0a1e767bc49d5bf518024459052c80cead56d0029",
  "deployedBytecode": "0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be3146100f957806306ab59231461016a57806314ab9038146101c957806316a25cbd1461020e5780631896f70a146102675780635b0fc9c3146102b8575b600080fd5b34801561009457600080fd5b506100b76004803603810190808035600019169060200190929190505050610309565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010557600080fd5b506101286004803603810190808035600019169060200190929190505050610350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017657600080fd5b506101c760048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610397565b005b3480156101d557600080fd5b5061020c6004803603810190808035600019169060200190929190803567ffffffffffffffff169060200190929190505050610511565b005b34801561021a57600080fd5b5061023d6004803603810190808035600019169060200190929190505050610622565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561027357600080fd5b506102b66004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061065d565b005b3480156102c457600080fd5b506103076004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061079e565b005b6000806000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000833373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b848460405180836000191660001916815260200182600019166000191681526020019250505060405180910390209150836000191685600019167fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a382600080846000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561058957600080fd5b82600019167f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6000806000836000191660001916815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156106d557600080fd5b82600019167f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561081657600080fd5b82600019167fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582097ba2111660dc412b9c15e177cd0a1e767bc49d5bf518024459052c80cead56d0029",
  "sourceMap": "93:2590:49:-;;;499:68;8:9:-1;5:2;;;30:1;27;20:12;5:2;499:68:49;550:10;531:7;:10;539:1;531:10;;;;;;;;;;;;;;;;:16;;;:29;;;;;;;;;;;;;;;;;;93:2590;;;;;;",
  "deployedSourceMap": "93:2590:49:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;841:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;841:112:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;646:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;646:106:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1847:224;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1847:224:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2548:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2548:133:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1045:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1045:101:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2241:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2241:164:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1387:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1387:146:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;841:112;898:7;924;:13;932:4;924:13;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;917:29;;841:112;;;:::o;646:106::-;700:7;726;:13;734:4;726:13;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;719:26;;646:106;;;:::o;1847:224::-;1950:11;1927:4;403:10;380:33;;:7;:13;388:4;380:13;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;;376:44;;;415:5;;;376:44;1974:4;1980:5;1964:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1950:36;;2011:5;1996:28;;;2005:4;1996:28;;;;2018:5;1996:28;;;;;;;;;;;;;;;;;;;;;;2059:5;2034:7;:16;2042:7;2034:16;;;;;;;;;;;;;;;;;:22;;;:30;;;;;;;;;;;;;;;;;;1847:224;;;;;:::o;2548:133::-;2601:4;403:10;380:33;;:7;:13;388:4;380:13;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;;376:44;;;415:5;;;376:44;2631:4;2624:17;;;;2637:3;2624:17;;;;;;;;;;;;;;;;;;;;;;2671:3;2651:7;:13;2659:4;2651:13;;;;;;;;;;;;;;;;;:17;;;:23;;;;;;;;;;;;;;;;;;2548:133;;;:::o;1045:101::-;1097:6;1122:7;:13;1130:4;1122:13;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;1115:24;;1045:101;;;:::o;2241:164::-;2305:4;403:10;380:33;;:7;:13;388:4;380:13;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;;376:44;;;415:5;;;376:44;2340:4;2328:27;;;;2346:8;2328:27;;;;;;;;;;;;;;;;;;;;;;2390:8;2365:7;:13;2373:4;2365:13;;;;;;;;;;;;;;;;;:22;;;:33;;;;;;;;;;;;;;;;;;2241:164;;;:::o;1387:146::-;1445:4;403:10;380:33;;:7;:13;388:4;380:13;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;;376:44;;;415:5;;;376:44;1477:4;1468:21;;;;1483:5;1468:21;;;;;;;;;;;;;;;;;;;;;;1521:5;1499:7;:13;1507:4;1499:13;;;;;;;;;;;;;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;1387:146;;;:::o",
  "source": "pragma solidity ^0.4.0;\n\n\nimport './AbstractENS.sol';\n\n/**\n * The ENS registry contract.\n */\ncontract ENS is AbstractENS {\n    struct Record {\n        address owner;\n        address resolver;\n        uint64 ttl;\n    }\n\n    mapping(bytes32=>Record) records;\n\n    // Permits modifications only by the owner of the specified node.\n    modifier only_owner(bytes32 node) {\n        if (records[node].owner != msg.sender) throw;\n        _;\n    }\n\n    /**\n     * Constructs a new ENS registrar.\n     */\n    function ENS() public {\n        records[0].owner = msg.sender;\n    }\n\n    /**\n     * Returns the address that owns the specified node.\n     */\n    function owner(bytes32 node) public constant returns (address) {\n        return records[node].owner;\n    }\n\n    /**\n     * Returns the address of the resolver for the specified node.\n     */\n    function resolver(bytes32 node) public constant returns (address) {\n        return records[node].resolver;\n    }\n\n    /**\n     * Returns the TTL of a node, and any records associated with it.\n     */\n    function ttl(bytes32 node) public constant returns (uint64) {\n        return records[node].ttl;\n    }\n\n    /**\n     * Transfers ownership of a node to a new address. May only be called by the current\n     * owner of the node.\n     * @param node The node to transfer ownership of.\n     * @param owner The address of the new owner.\n     */\n    function setOwner(bytes32 node, address owner) only_owner(node) public {\n        Transfer(node, owner);\n        records[node].owner = owner;\n    }\n\n    /**\n     * Transfers ownership of a subnode keccak256(node, label) to a new address. May only be\n     * called by the owner of the parent node.\n     * @param node The parent node.\n     * @param label The hash of the label specifying the subnode.\n     * @param owner The address of the new owner.\n     */\n    function setSubnodeOwner(bytes32 node, bytes32 label, address owner) only_owner(node) public {\n        var subnode = keccak256(node, label);\n        NewOwner(node, label, owner);\n        records[subnode].owner = owner;\n    }\n\n    /**\n     * Sets the resolver address for the specified node.\n     * @param node The node to update.\n     * @param resolver The address of the resolver.\n     */\n    function setResolver(bytes32 node, address resolver) only_owner(node) public {\n        NewResolver(node, resolver);\n        records[node].resolver = resolver;\n    }\n\n    /**\n     * Sets the TTL for the specified node.\n     * @param node The node to update.\n     * @param ttl The TTL in seconds.\n     */\n    function setTTL(bytes32 node, uint64 ttl) only_owner(node) public {\n        NewTTL(node, ttl);\n        records[node].ttl = ttl;\n    }\n}\n",
  "sourcePath": "@aragon/os/contracts/lib/ens/ENS.sol",
  "ast": {
    "absolutePath": "@aragon/os/contracts/lib/ens/ENS.sol",
    "exportedSymbols": {
      "ENS": [
        11104
      ]
    },
    "id": 11105,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10922,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:49"
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/ens/AbstractENS.sol",
        "file": "./AbstractENS.sol",
        "id": 10923,
        "nodeType": "ImportDirective",
        "scope": 11105,
        "sourceUnit": 10921,
        "src": "26:27:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10924,
              "name": "AbstractENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10920,
              "src": "109:11:49",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AbstractENS_$10920",
                "typeString": "contract AbstractENS"
              }
            },
            "id": 10925,
            "nodeType": "InheritanceSpecifier",
            "src": "109:11:49"
          }
        ],
        "contractDependencies": [
          10920
        ],
        "contractKind": "contract",
        "documentation": "The ENS registry contract.",
        "fullyImplemented": true,
        "id": 11104,
        "linearizedBaseContracts": [
          11104,
          10920
        ],
        "name": "ENS",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ENS.Record",
            "id": 10932,
            "members": [
              {
                "constant": false,
                "id": 10927,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 10932,
                "src": "151:13:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 10926,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "151:7:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 10929,
                "name": "resolver",
                "nodeType": "VariableDeclaration",
                "scope": 10932,
                "src": "174:16:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 10928,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "174:7:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 10931,
                "name": "ttl",
                "nodeType": "VariableDeclaration",
                "scope": 10932,
                "src": "200:10:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 10930,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "200:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "nodeType": "StructDefinition",
            "scope": 11104,
            "src": "127:90:49",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10936,
            "name": "records",
            "nodeType": "VariableDeclaration",
            "scope": 11104,
            "src": "223:32:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
              "typeString": "mapping(bytes32 => struct ENS.Record)"
            },
            "typeName": {
              "id": 10935,
              "keyType": {
                "id": 10933,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "231:7:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "223:24:49",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                "typeString": "mapping(bytes32 => struct ENS.Record)"
              },
              "valueType": {
                "contractScope": null,
                "id": 10934,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 10932,
                "src": "240:6:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$10932_storage_ptr",
                  "typeString": "struct ENS.Record"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10950,
              "nodeType": "Block",
              "src": "366:72:49",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 10946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 10940,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "380:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 10942,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 10941,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10938,
                          "src": "388:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "380:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 10943,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "380:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 10944,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12670,
                        "src": "403:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 10945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "403:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "380:33:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 10948,
                  "nodeType": "IfStatement",
                  "src": "376:44:49",
                  "trueBody": {
                    "id": 10947,
                    "nodeType": "Throw",
                    "src": "415:5:49"
                  }
                },
                {
                  "id": 10949,
                  "nodeType": "PlaceholderStatement",
                  "src": "430:1:49"
                }
              ]
            },
            "documentation": null,
            "id": 10951,
            "name": "only_owner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 10939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10938,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10951,
                  "src": "352:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10937,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "352:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "351:14:49"
            },
            "src": "332:106:49",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10962,
              "nodeType": "Block",
              "src": "521:46:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 10954,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "531:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 10956,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "539:1:49",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "531:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 10957,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "531:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 10958,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12670,
                        "src": "550:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 10959,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "550:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "531:29:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 10961,
                  "nodeType": "ExpressionStatement",
                  "src": "531:29:49"
                }
              ]
            },
            "documentation": "Constructs a new ENS registrar.",
            "id": 10963,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "ENS",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "511:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10953,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "521:0:49"
            },
            "scope": 11104,
            "src": "499:68:49",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10975,
              "nodeType": "Block",
              "src": "709:43:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10970,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "726:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                          "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                        }
                      },
                      "id": 10972,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10971,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10965,
                        "src": "734:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "726:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$10932_storage",
                        "typeString": "struct ENS.Record storage ref"
                      }
                    },
                    "id": 10973,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "owner",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 10927,
                    "src": "726:19:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 10969,
                  "id": 10974,
                  "nodeType": "Return",
                  "src": "719:26:49"
                }
              ]
            },
            "documentation": "Returns the address that owns the specified node.",
            "id": 10976,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10966,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10965,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10976,
                  "src": "661:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10964,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "661:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "660:14:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10968,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10976,
                  "src": "700:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10967,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "700:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "699:9:49"
            },
            "scope": 11104,
            "src": "646:106:49",
            "stateMutability": "view",
            "superFunction": 10849,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10988,
              "nodeType": "Block",
              "src": "907:46:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10983,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "924:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                          "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                        }
                      },
                      "id": 10985,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10984,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10978,
                        "src": "932:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "924:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$10932_storage",
                        "typeString": "struct ENS.Record storage ref"
                      }
                    },
                    "id": 10986,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "resolver",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 10929,
                    "src": "924:22:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 10982,
                  "id": 10987,
                  "nodeType": "Return",
                  "src": "917:29:49"
                }
              ]
            },
            "documentation": "Returns the address of the resolver for the specified node.",
            "id": 10989,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "resolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10978,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10989,
                  "src": "859:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10977,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "859:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "858:14:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10989,
                  "src": "898:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "898:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "897:9:49"
            },
            "scope": 11104,
            "src": "841:112:49",
            "stateMutability": "view",
            "superFunction": 10856,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11001,
              "nodeType": "Block",
              "src": "1105:41:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10996,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "1122:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                          "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                        }
                      },
                      "id": 10998,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10997,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10991,
                        "src": "1130:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1122:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$10932_storage",
                        "typeString": "struct ENS.Record storage ref"
                      }
                    },
                    "id": 10999,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "ttl",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 10931,
                    "src": "1122:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 10995,
                  "id": 11000,
                  "nodeType": "Return",
                  "src": "1115:24:49"
                }
              ]
            },
            "documentation": "Returns the TTL of a node, and any records associated with it.",
            "id": 11002,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ttl",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10991,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11002,
                  "src": "1058:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10990,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1058:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1057:14:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10995,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10994,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11002,
                  "src": "1097:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 10993,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1097:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1096:8:49"
            },
            "scope": 11104,
            "src": "1045:101:49",
            "stateMutability": "view",
            "superFunction": 10863,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11024,
              "nodeType": "Block",
              "src": "1458:75:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11013,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11004,
                        "src": "1477:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11014,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11006,
                        "src": "1483:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11012,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10907,
                      "src": "1468:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 11015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1468:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11016,
                  "nodeType": "ExpressionStatement",
                  "src": "1468:21:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11017,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "1499:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11019,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11018,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11004,
                          "src": "1507:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1499:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11020,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "1499:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11021,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11006,
                      "src": "1521:5:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1499:27:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11023,
                  "nodeType": "ExpressionStatement",
                  "src": "1499:27:49"
                }
              ]
            },
            "documentation": "Transfers ownership of a node to a new address. May only be called by the current\nowner of the node.\n@param node The node to transfer ownership of.\n@param owner The address of the new owner.",
            "id": 11025,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11009,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11004,
                    "src": "1445:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11010,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11008,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "1434:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1434:16:49"
              }
            ],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11004,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11025,
                  "src": "1405:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11003,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1405:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11006,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 11025,
                  "src": "1419:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1419:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1404:29:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1458:0:49"
            },
            "scope": 11104,
            "src": "1387:146:49",
            "stateMutability": "nonpayable",
            "superFunction": 10870,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11056,
              "nodeType": "Block",
              "src": "1940:131:49",
              "statements": [
                {
                  "assignments": [
                    11037
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11037,
                      "name": "subnode",
                      "nodeType": "VariableDeclaration",
                      "scope": 11057,
                      "src": "1950:11:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": null,
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11042,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11039,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11027,
                        "src": "1974:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11040,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11029,
                        "src": "1980:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 11038,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "1964:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 11041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1964:22:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1950:36:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11044,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11027,
                        "src": "2005:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11045,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11029,
                        "src": "2011:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11046,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11031,
                        "src": "2018:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11043,
                      "name": "NewOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10901,
                      "src": "1996:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address)"
                      }
                    },
                    "id": 11047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1996:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11048,
                  "nodeType": "ExpressionStatement",
                  "src": "1996:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11049,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "2034:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11051,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11050,
                          "name": "subnode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11037,
                          "src": "2042:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2034:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11052,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "2034:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11053,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11031,
                      "src": "2059:5:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2034:30:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11055,
                  "nodeType": "ExpressionStatement",
                  "src": "2034:30:49"
                }
              ]
            },
            "documentation": "Transfers ownership of a subnode keccak256(node, label) to a new address. May only be\ncalled by the owner of the parent node.\n@param node The parent node.\n@param label The hash of the label specifying the subnode.\n@param owner The address of the new owner.",
            "id": 11057,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11034,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11027,
                    "src": "1927:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11035,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11033,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "1916:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1916:16:49"
              }
            ],
            "name": "setSubnodeOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11027,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11057,
                  "src": "1872:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11026,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1872:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11029,
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 11057,
                  "src": "1886:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11028,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1886:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11031,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 11057,
                  "src": "1901:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11030,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1901:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1871:44:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11036,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1940:0:49"
            },
            "scope": 11104,
            "src": "1847:224:49",
            "stateMutability": "nonpayable",
            "superFunction": 10879,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11079,
              "nodeType": "Block",
              "src": "2318:87:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11068,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11059,
                        "src": "2340:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11069,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11061,
                        "src": "2346:8:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11067,
                      "name": "NewResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10913,
                      "src": "2328:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 11070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2328:27:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11071,
                  "nodeType": "ExpressionStatement",
                  "src": "2328:27:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11072,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "2365:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11074,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11073,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11059,
                          "src": "2373:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2365:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11075,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10929,
                      "src": "2365:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11076,
                      "name": "resolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11061,
                      "src": "2390:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2365:33:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11078,
                  "nodeType": "ExpressionStatement",
                  "src": "2365:33:49"
                }
              ]
            },
            "documentation": "Sets the resolver address for the specified node.\n@param node The node to update.\n@param resolver The address of the resolver.",
            "id": 11080,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11064,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11059,
                    "src": "2305:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11065,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11063,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "2294:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2294:16:49"
              }
            ],
            "name": "setResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11059,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11080,
                  "src": "2262:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11058,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2262:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11061,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 11080,
                  "src": "2276:16:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11060,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2276:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2261:32:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2318:0:49"
            },
            "scope": 11104,
            "src": "2241:164:49",
            "stateMutability": "nonpayable",
            "superFunction": 10886,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11102,
              "nodeType": "Block",
              "src": "2614:67:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11091,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11082,
                        "src": "2631:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11092,
                        "name": "ttl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11084,
                        "src": "2637:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 11090,
                      "name": "NewTTL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10919,
                      "src": "2624:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64)"
                      }
                    },
                    "id": 11093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2624:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11094,
                  "nodeType": "ExpressionStatement",
                  "src": "2624:17:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11095,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "2651:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11097,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11096,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11082,
                          "src": "2659:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2651:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11098,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "ttl",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10931,
                      "src": "2651:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11099,
                      "name": "ttl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11084,
                      "src": "2671:3:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "2651:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 11101,
                  "nodeType": "ExpressionStatement",
                  "src": "2651:23:49"
                }
              ]
            },
            "documentation": "Sets the TTL for the specified node.\n@param node The node to update.\n@param ttl The TTL in seconds.",
            "id": 11103,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11087,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11082,
                    "src": "2601:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11088,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11086,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "2590:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2590:16:49"
              }
            ],
            "name": "setTTL",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11082,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11103,
                  "src": "2564:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11081,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2564:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11084,
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 11103,
                  "src": "2578:10:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 11083,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2578:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2563:26:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11089,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2614:0:49"
            },
            "scope": 11104,
            "src": "2548:133:49",
            "stateMutability": "nonpayable",
            "superFunction": 10893,
            "visibility": "public"
          }
        ],
        "scope": 11105,
        "src": "93:2590:49"
      }
    ],
    "src": "0:2684:49"
  },
  "legacyAST": {
    "absolutePath": "@aragon/os/contracts/lib/ens/ENS.sol",
    "exportedSymbols": {
      "ENS": [
        11104
      ]
    },
    "id": 11105,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10922,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:49"
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/ens/AbstractENS.sol",
        "file": "./AbstractENS.sol",
        "id": 10923,
        "nodeType": "ImportDirective",
        "scope": 11105,
        "sourceUnit": 10921,
        "src": "26:27:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10924,
              "name": "AbstractENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10920,
              "src": "109:11:49",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AbstractENS_$10920",
                "typeString": "contract AbstractENS"
              }
            },
            "id": 10925,
            "nodeType": "InheritanceSpecifier",
            "src": "109:11:49"
          }
        ],
        "contractDependencies": [
          10920
        ],
        "contractKind": "contract",
        "documentation": "The ENS registry contract.",
        "fullyImplemented": true,
        "id": 11104,
        "linearizedBaseContracts": [
          11104,
          10920
        ],
        "name": "ENS",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ENS.Record",
            "id": 10932,
            "members": [
              {
                "constant": false,
                "id": 10927,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 10932,
                "src": "151:13:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 10926,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "151:7:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 10929,
                "name": "resolver",
                "nodeType": "VariableDeclaration",
                "scope": 10932,
                "src": "174:16:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 10928,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "174:7:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 10931,
                "name": "ttl",
                "nodeType": "VariableDeclaration",
                "scope": 10932,
                "src": "200:10:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 10930,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "200:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "nodeType": "StructDefinition",
            "scope": 11104,
            "src": "127:90:49",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10936,
            "name": "records",
            "nodeType": "VariableDeclaration",
            "scope": 11104,
            "src": "223:32:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
              "typeString": "mapping(bytes32 => struct ENS.Record)"
            },
            "typeName": {
              "id": 10935,
              "keyType": {
                "id": 10933,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "231:7:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "223:24:49",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                "typeString": "mapping(bytes32 => struct ENS.Record)"
              },
              "valueType": {
                "contractScope": null,
                "id": 10934,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 10932,
                "src": "240:6:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$10932_storage_ptr",
                  "typeString": "struct ENS.Record"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10950,
              "nodeType": "Block",
              "src": "366:72:49",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 10946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 10940,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "380:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 10942,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 10941,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10938,
                          "src": "388:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "380:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 10943,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "380:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 10944,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12670,
                        "src": "403:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 10945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "403:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "380:33:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 10948,
                  "nodeType": "IfStatement",
                  "src": "376:44:49",
                  "trueBody": {
                    "id": 10947,
                    "nodeType": "Throw",
                    "src": "415:5:49"
                  }
                },
                {
                  "id": 10949,
                  "nodeType": "PlaceholderStatement",
                  "src": "430:1:49"
                }
              ]
            },
            "documentation": null,
            "id": 10951,
            "name": "only_owner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 10939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10938,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10951,
                  "src": "352:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10937,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "352:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "351:14:49"
            },
            "src": "332:106:49",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10962,
              "nodeType": "Block",
              "src": "521:46:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 10954,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "531:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 10956,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "539:1:49",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "531:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 10957,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "531:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 10958,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12670,
                        "src": "550:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 10959,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "550:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "531:29:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 10961,
                  "nodeType": "ExpressionStatement",
                  "src": "531:29:49"
                }
              ]
            },
            "documentation": "Constructs a new ENS registrar.",
            "id": 10963,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "ENS",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "511:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10953,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "521:0:49"
            },
            "scope": 11104,
            "src": "499:68:49",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10975,
              "nodeType": "Block",
              "src": "709:43:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10970,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "726:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                          "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                        }
                      },
                      "id": 10972,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10971,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10965,
                        "src": "734:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "726:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$10932_storage",
                        "typeString": "struct ENS.Record storage ref"
                      }
                    },
                    "id": 10973,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "owner",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 10927,
                    "src": "726:19:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 10969,
                  "id": 10974,
                  "nodeType": "Return",
                  "src": "719:26:49"
                }
              ]
            },
            "documentation": "Returns the address that owns the specified node.",
            "id": 10976,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10966,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10965,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10976,
                  "src": "661:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10964,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "661:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "660:14:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10968,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10976,
                  "src": "700:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10967,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "700:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "699:9:49"
            },
            "scope": 11104,
            "src": "646:106:49",
            "stateMutability": "view",
            "superFunction": 10849,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10988,
              "nodeType": "Block",
              "src": "907:46:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10983,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "924:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                          "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                        }
                      },
                      "id": 10985,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10984,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10978,
                        "src": "932:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "924:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$10932_storage",
                        "typeString": "struct ENS.Record storage ref"
                      }
                    },
                    "id": 10986,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "resolver",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 10929,
                    "src": "924:22:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 10982,
                  "id": 10987,
                  "nodeType": "Return",
                  "src": "917:29:49"
                }
              ]
            },
            "documentation": "Returns the address of the resolver for the specified node.",
            "id": 10989,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "resolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10978,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10989,
                  "src": "859:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10977,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "859:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "858:14:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10989,
                  "src": "898:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "898:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "897:9:49"
            },
            "scope": 11104,
            "src": "841:112:49",
            "stateMutability": "view",
            "superFunction": 10856,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11001,
              "nodeType": "Block",
              "src": "1105:41:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10996,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10936,
                        "src": "1122:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                          "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                        }
                      },
                      "id": 10998,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10997,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10991,
                        "src": "1130:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1122:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$10932_storage",
                        "typeString": "struct ENS.Record storage ref"
                      }
                    },
                    "id": 10999,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "ttl",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 10931,
                    "src": "1122:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 10995,
                  "id": 11000,
                  "nodeType": "Return",
                  "src": "1115:24:49"
                }
              ]
            },
            "documentation": "Returns the TTL of a node, and any records associated with it.",
            "id": 11002,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ttl",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10991,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11002,
                  "src": "1058:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10990,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1058:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1057:14:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 10995,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10994,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11002,
                  "src": "1097:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 10993,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1097:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1096:8:49"
            },
            "scope": 11104,
            "src": "1045:101:49",
            "stateMutability": "view",
            "superFunction": 10863,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11024,
              "nodeType": "Block",
              "src": "1458:75:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11013,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11004,
                        "src": "1477:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11014,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11006,
                        "src": "1483:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11012,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10907,
                      "src": "1468:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 11015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1468:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11016,
                  "nodeType": "ExpressionStatement",
                  "src": "1468:21:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11017,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "1499:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11019,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11018,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11004,
                          "src": "1507:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1499:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11020,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "1499:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11021,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11006,
                      "src": "1521:5:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1499:27:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11023,
                  "nodeType": "ExpressionStatement",
                  "src": "1499:27:49"
                }
              ]
            },
            "documentation": "Transfers ownership of a node to a new address. May only be called by the current\nowner of the node.\n@param node The node to transfer ownership of.\n@param owner The address of the new owner.",
            "id": 11025,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11009,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11004,
                    "src": "1445:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11010,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11008,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "1434:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1434:16:49"
              }
            ],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11004,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11025,
                  "src": "1405:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11003,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1405:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11006,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 11025,
                  "src": "1419:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1419:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1404:29:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1458:0:49"
            },
            "scope": 11104,
            "src": "1387:146:49",
            "stateMutability": "nonpayable",
            "superFunction": 10870,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11056,
              "nodeType": "Block",
              "src": "1940:131:49",
              "statements": [
                {
                  "assignments": [
                    11037
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11037,
                      "name": "subnode",
                      "nodeType": "VariableDeclaration",
                      "scope": 11057,
                      "src": "1950:11:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": null,
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11042,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11039,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11027,
                        "src": "1974:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11040,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11029,
                        "src": "1980:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 11038,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "1964:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 11041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1964:22:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1950:36:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11044,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11027,
                        "src": "2005:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11045,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11029,
                        "src": "2011:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11046,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11031,
                        "src": "2018:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11043,
                      "name": "NewOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10901,
                      "src": "1996:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address)"
                      }
                    },
                    "id": 11047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1996:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11048,
                  "nodeType": "ExpressionStatement",
                  "src": "1996:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11049,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "2034:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11051,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11050,
                          "name": "subnode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11037,
                          "src": "2042:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2034:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11052,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10927,
                      "src": "2034:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11053,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11031,
                      "src": "2059:5:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2034:30:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11055,
                  "nodeType": "ExpressionStatement",
                  "src": "2034:30:49"
                }
              ]
            },
            "documentation": "Transfers ownership of a subnode keccak256(node, label) to a new address. May only be\ncalled by the owner of the parent node.\n@param node The parent node.\n@param label The hash of the label specifying the subnode.\n@param owner The address of the new owner.",
            "id": 11057,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11034,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11027,
                    "src": "1927:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11035,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11033,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "1916:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1916:16:49"
              }
            ],
            "name": "setSubnodeOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11027,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11057,
                  "src": "1872:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11026,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1872:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11029,
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 11057,
                  "src": "1886:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11028,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1886:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11031,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 11057,
                  "src": "1901:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11030,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1901:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1871:44:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11036,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1940:0:49"
            },
            "scope": 11104,
            "src": "1847:224:49",
            "stateMutability": "nonpayable",
            "superFunction": 10879,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11079,
              "nodeType": "Block",
              "src": "2318:87:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11068,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11059,
                        "src": "2340:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11069,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11061,
                        "src": "2346:8:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11067,
                      "name": "NewResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10913,
                      "src": "2328:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 11070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2328:27:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11071,
                  "nodeType": "ExpressionStatement",
                  "src": "2328:27:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11072,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "2365:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11074,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11073,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11059,
                          "src": "2373:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2365:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11075,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10929,
                      "src": "2365:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11076,
                      "name": "resolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11061,
                      "src": "2390:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2365:33:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11078,
                  "nodeType": "ExpressionStatement",
                  "src": "2365:33:49"
                }
              ]
            },
            "documentation": "Sets the resolver address for the specified node.\n@param node The node to update.\n@param resolver The address of the resolver.",
            "id": 11080,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11064,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11059,
                    "src": "2305:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11065,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11063,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "2294:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2294:16:49"
              }
            ],
            "name": "setResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11059,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11080,
                  "src": "2262:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11058,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2262:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11061,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 11080,
                  "src": "2276:16:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11060,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2276:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2261:32:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2318:0:49"
            },
            "scope": 11104,
            "src": "2241:164:49",
            "stateMutability": "nonpayable",
            "superFunction": 10886,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11102,
              "nodeType": "Block",
              "src": "2614:67:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11091,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11082,
                        "src": "2631:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11092,
                        "name": "ttl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11084,
                        "src": "2637:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 11090,
                      "name": "NewTTL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10919,
                      "src": "2624:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64)"
                      }
                    },
                    "id": 11093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2624:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11094,
                  "nodeType": "ExpressionStatement",
                  "src": "2624:17:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11095,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10936,
                          "src": "2651:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$10932_storage_$",
                            "typeString": "mapping(bytes32 => struct ENS.Record storage ref)"
                          }
                        },
                        "id": 11097,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11096,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11082,
                          "src": "2659:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2651:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$10932_storage",
                          "typeString": "struct ENS.Record storage ref"
                        }
                      },
                      "id": 11098,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "ttl",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10931,
                      "src": "2651:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11099,
                      "name": "ttl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11084,
                      "src": "2671:3:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "2651:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 11101,
                  "nodeType": "ExpressionStatement",
                  "src": "2651:23:49"
                }
              ]
            },
            "documentation": "Sets the TTL for the specified node.\n@param node The node to update.\n@param ttl The TTL in seconds.",
            "id": 11103,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11087,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11082,
                    "src": "2601:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11088,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11086,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10951,
                  "src": "2590:10:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2590:16:49"
              }
            ],
            "name": "setTTL",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11082,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 11103,
                  "src": "2564:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11081,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2564:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11084,
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 11103,
                  "src": "2578:10:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 11083,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2578:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2563:26:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 11089,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2614:0:49"
            },
            "scope": 11104,
            "src": "2548:133:49",
            "stateMutability": "nonpayable",
            "superFunction": 10893,
            "visibility": "public"
          }
        ],
        "scope": 11105,
        "src": "93:2590:49"
      }
    ],
    "src": "0:2684:49"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.1",
  "updatedAt": "2019-03-29T09:45:33.527Z",
  "devdoc": {
    "methods": {
      "setOwner(bytes32,address)": {
        "params": {
          "node": "The node to transfer ownership of.",
          "owner": "The address of the new owner."
        }
      },
      "setResolver(bytes32,address)": {
        "params": {
          "node": "The node to update.",
          "resolver": "The address of the resolver."
        }
      },
      "setSubnodeOwner(bytes32,bytes32,address)": {
        "params": {
          "label": "The hash of the label specifying the subnode.",
          "node": "The parent node.",
          "owner": "The address of the new owner."
        }
      },
      "setTTL(bytes32,uint64)": {
        "params": {
          "node": "The node to update.",
          "ttl": "The TTL in seconds."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "owner(bytes32)": {
        "notice": "Returns the address that owns the specified node."
      },
      "resolver(bytes32)": {
        "notice": "Returns the address of the resolver for the specified node."
      },
      "setOwner(bytes32,address)": {
        "notice": "Transfers ownership of a node to a new address. May only be called by the current owner of the node."
      },
      "setResolver(bytes32,address)": {
        "notice": "Sets the resolver address for the specified node."
      },
      "setSubnodeOwner(bytes32,bytes32,address)": {
        "notice": "Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node."
      },
      "setTTL(bytes32,uint64)": {
        "notice": "Sets the TTL for the specified node."
      },
      "ttl(bytes32)": {
        "notice": "Returns the TTL of a node, and any records associated with it."
      }
    }
  }
}