{
  "contractName": "ENSRegistry",
  "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": 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"
    },
    {
      "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"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b503360008080600102815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506108e2806100776000396000f3fe608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be31461010357806306ab59231461017e57806314ab9038146101e357806316a25cbd146102325780631896f70a146102955780635b0fc9c3146102f0575b600080fd5b34801561009457600080fd5b506100c1600480360360208110156100ab57600080fd5b810190808035906020019092919050505061034b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010f57600080fd5b5061013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061038a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018a57600080fd5b506101e1600480360360608110156101a157600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103c9565b005b3480156101ef57600080fd5b506102306004803603604081101561020657600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061052c565b005b34801561023e57600080fd5b5061026b6004803603602081101561025557600080fd5b8101908080359060200190929190505050610629565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3480156102a157600080fd5b506102ee600480360360408110156102b857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061065c565b005b3480156102fc57600080fd5b506103496004803603604081101561031357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610789565b005b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561043957600080fd5b60008484604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905083857fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38260008083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561059c57600080fd5b827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156106cc57600080fd5b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107f957600080fd5b827fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505056fea165627a7a72305820677701d5cadf63f1a2ccf605294f0fd48f8ffd34613f05f21393888f0ba69a420029",
  "deployedBytecode": "0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be31461010357806306ab59231461017e57806314ab9038146101e357806316a25cbd146102325780631896f70a146102955780635b0fc9c3146102f0575b600080fd5b34801561009457600080fd5b506100c1600480360360208110156100ab57600080fd5b810190808035906020019092919050505061034b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010f57600080fd5b5061013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061038a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018a57600080fd5b506101e1600480360360608110156101a157600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103c9565b005b3480156101ef57600080fd5b506102306004803603604081101561020657600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061052c565b005b34801561023e57600080fd5b5061026b6004803603602081101561025557600080fd5b8101908080359060200190929190505050610629565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3480156102a157600080fd5b506102ee600480360360408110156102b857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061065c565b005b3480156102fc57600080fd5b506103496004803603604081101561031357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610789565b005b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561043957600080fd5b60008484604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905083857fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38260008083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561059c57600080fd5b827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156106cc57600080fd5b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156107f957600080fd5b827fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505056fea165627a7a72305820677701d5cadf63f1a2ccf605294f0fd48f8ffd34613f05f21393888f0ba69a420029",
  "sourceMap": "84:2892:8:-;;;496:69;8:9:-1;5:2;;;30:1;27;20:12;5:2;496:69:8;548:10;527:7;:12;535:3;527:12;;;;;;;;;;;;;:18;;;:31;;;;;;;;;;;;;;;;;;84:2892;;;;;;",
  "deployedSourceMap": "84:2892:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2596:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2596:110:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2596:110:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2319:104:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2319:104:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1269:253;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1269:253:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1269:253:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2019:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2019:140:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2019:140:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2874:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2874:99:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2874:99:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1697:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1697:174:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1697:174:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;804:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;804:153:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;804:153:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2596:110;2651:7;2677;:13;2685:4;2677:13;;;;;;;;;;;:22;;;;;;;;;;;;2670:29;;2596:110;;;:::o;2319:104::-;2371:7;2397;:13;2405:4;2397:13;;;;;;;;;;;:19;;;;;;;;;;;;2390:26;;2319:104;;;:::o;1269:253::-;1358:4;401:10;378:33;;:7;:13;386:4;378:13;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;370:42;;;;;;;;1374:15;1419:4;1425:5;1402:29;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1402:29:8;;;1392:40;;;;;;1374:58;;1462:5;1456:4;1447:28;1469:5;1447:28;;;;;;;;;;;;;;;;;;;;;;1510:5;1485:7;:16;1493:7;1485:16;;;;;;;;;;;:22;;;:30;;;;;;;;;;;;;;;;;;422:1;1269:253;;;;:::o;2019:140::-;2081:4;401:10;378:33;;:7;:13;386:4;378:13;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;370:42;;;;;;;;2109:4;2102:17;2115:3;2102:17;;;;;;;;;;;;;;;;;;;;;;2149:3;2129:7;:13;2137:4;2129:13;;;;;;;;;;;:17;;;:23;;;;;;;;;;;;;;;;;;2019:140;;;:::o;2874:99::-;2924:6;2949:7;:13;2957:4;2949:13;;;;;;;;;;;:17;;;;;;;;;;;;2942:24;;2874:99;;;:::o;1697:174::-;1770:4;401:10;378:33;;:7;:13;386:4;378:13;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;370:42;;;;;;;;1803:4;1791:27;1809:8;1791:27;;;;;;;;;;;;;;;;;;;;;;1856:8;1831:7;:13;1839:4;1831:13;;;;;;;;;;;:22;;;:33;;;;;;;;;;;;;;;;;;1697:174;;;:::o;804:153::-;871:4;401:10;378:33;;:7;:13;386:4;378:13;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;370:42;;;;;;;;901:4;892:21;907:5;892:21;;;;;;;;;;;;;;;;;;;;;;945:5;923:7;:13;931:4;923:13;;;;;;;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;804:153;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"./ENS.sol\";\n\n/**\n * The ENS registry contract.\n */\ncontract ENSRegistry is ENS {\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        require(records[node].owner == msg.sender);\n        _;\n    }\n\n    /**\n     * @dev Constructs a new ENS registrar.\n     */\n    constructor() public {\n        records[0x0].owner = msg.sender;\n    }\n\n    /**\n     * @dev Transfers ownership of a node to a new address. May only be called by the current 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) external only_owner(node) {\n        emit Transfer(node, owner);\n        records[node].owner = owner;\n    }\n\n    /**\n     * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be 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) external only_owner(node) {\n        bytes32 subnode = keccak256(abi.encodePacked(node, label));\n        emit NewOwner(node, label, owner);\n        records[subnode].owner = owner;\n    }\n\n    /**\n     * @dev 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) external only_owner(node) {\n        emit NewResolver(node, resolver);   \n        records[node].resolver = resolver;\n    }\n\n    /**\n     * @dev 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) external only_owner(node) {\n        emit NewTTL(node, ttl);\n        records[node].ttl = ttl;\n    }\n\n    /**\n     * @dev Returns the address that owns the specified node.\n     * @param node The specified node.\n     * @return address of the owner.\n     */\n    function owner(bytes32 node) external view returns (address) {\n        return records[node].owner;\n    }\n\n    /**\n     * @dev Returns the address of the resolver for the specified node.\n     * @param node The specified node.\n     * @return address of the resolver.\n     */\n    function resolver(bytes32 node) external view returns (address) {\n        return records[node].resolver;\n    }\n\n    /**\n     * @dev Returns the TTL of a node, and any records associated with it.\n     * @param node The specified node.\n     * @return ttl of the node.\n     */\n    function ttl(bytes32 node) external view returns (uint64) {\n        return records[node].ttl;\n    }\n\n}\n",
  "sourcePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
  "ast": {
    "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
    "exportedSymbols": {
      "ENSRegistry": [
        2794
      ]
    },
    "id": 2795,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2607,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 2608,
        "nodeType": "ImportDirective",
        "scope": 2795,
        "sourceUnit": 2606,
        "src": "25:19:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2609,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2605,
              "src": "108:3:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$2605",
                "typeString": "contract ENS"
              }
            },
            "id": 2610,
            "nodeType": "InheritanceSpecifier",
            "src": "108:3:8"
          }
        ],
        "contractDependencies": [
          2605
        ],
        "contractKind": "contract",
        "documentation": "The ENS registry contract.",
        "fullyImplemented": true,
        "id": 2794,
        "linearizedBaseContracts": [
          2794,
          2605
        ],
        "name": "ENSRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ENSRegistry.Record",
            "id": 2617,
            "members": [
              {
                "constant": false,
                "id": 2612,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 2617,
                "src": "142:13:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2611,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "142:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2614,
                "name": "resolver",
                "nodeType": "VariableDeclaration",
                "scope": 2617,
                "src": "165:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2613,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "165:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2616,
                "name": "ttl",
                "nodeType": "VariableDeclaration",
                "scope": 2617,
                "src": "191:10:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 2615,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "191:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "nodeType": "StructDefinition",
            "scope": 2794,
            "src": "118:90:8",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 2621,
            "name": "records",
            "nodeType": "VariableDeclaration",
            "scope": 2794,
            "src": "214:35:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
              "typeString": "mapping(bytes32 => struct ENSRegistry.Record)"
            },
            "typeName": {
              "id": 2620,
              "keyType": {
                "id": 2618,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "223:7:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "214:27:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                "typeString": "mapping(bytes32 => struct ENSRegistry.Record)"
              },
              "valueType": {
                "contractScope": null,
                "id": 2619,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 2617,
                "src": "234:6:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$2617_storage_ptr",
                  "typeString": "struct ENSRegistry.Record"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2636,
              "nodeType": "Block",
              "src": "360:70:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2626,
                              "name": "records",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2621,
                              "src": "378:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                                "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                              }
                            },
                            "id": 2628,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2627,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2623,
                              "src": "386:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "378:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$2617_storage",
                              "typeString": "struct ENSRegistry.Record storage ref"
                            }
                          },
                          "id": 2629,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2612,
                          "src": "378:19:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2630,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2809,
                            "src": "401:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "401:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "378:33:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2625,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2812,
                        2813
                      ],
                      "referencedDeclaration": 2812,
                      "src": "370:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "370:42:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2634,
                  "nodeType": "ExpressionStatement",
                  "src": "370:42:8"
                },
                {
                  "id": 2635,
                  "nodeType": "PlaceholderStatement",
                  "src": "422:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 2637,
            "name": "only_owner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 2624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2623,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2637,
                  "src": "346:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2622,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "346:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "345:14:8"
            },
            "src": "326:104:8",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2648,
              "nodeType": "Block",
              "src": "517:48:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2640,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "527:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2642,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 2641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "535:3:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "527:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2643,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2612,
                      "src": "527:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2644,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2809,
                        "src": "548:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 2645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "548:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "527:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2647,
                  "nodeType": "ExpressionStatement",
                  "src": "527:31:8"
                }
              ]
            },
            "documentation": "@dev Constructs a new ENS registrar.",
            "id": 2649,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2638,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "507:2:8"
            },
            "returnParameters": {
              "id": 2639,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "517:0:8"
            },
            "scope": 2794,
            "src": "496:69:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2671,
              "nodeType": "Block",
              "src": "877:80:8",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2660,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2651,
                        "src": "901:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2661,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2653,
                        "src": "907:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2659,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2541,
                      "src": "892:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 2662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "892:21:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2663,
                  "nodeType": "EmitStatement",
                  "src": "887:26:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2664,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "923:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2666,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2665,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2651,
                          "src": "931:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "923:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2667,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2612,
                      "src": "923:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2668,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2653,
                      "src": "945:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "923:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2670,
                  "nodeType": "ExpressionStatement",
                  "src": "923:27:8"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\n@param node The node to transfer ownership of.\n@param owner The address of the new owner.",
            "id": 2672,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2656,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2651,
                    "src": "871:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2657,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2655,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "860:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "860:16:8"
              }
            ],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2651,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2672,
                  "src": "822:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2650,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "822:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2653,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2672,
                  "src": "836:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2652,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "836:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "821:29:8"
            },
            "returnParameters": {
              "id": 2658,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "877:0:8"
            },
            "scope": 2794,
            "src": "804:153:8",
            "stateMutability": "nonpayable",
            "superFunction": 2576,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2707,
              "nodeType": "Block",
              "src": "1364:158:8",
              "statements": [
                {
                  "assignments": [
                    2685
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2685,
                      "name": "subnode",
                      "nodeType": "VariableDeclaration",
                      "scope": 2707,
                      "src": "1374:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2684,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1374:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2693,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2689,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2674,
                            "src": "1419:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2690,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2676,
                            "src": "1425:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2687,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2796,
                            "src": "1402:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 2688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1402:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 2691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1402:29:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2686,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2803,
                      "src": "1392:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1392:40:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1374:58:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2695,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2674,
                        "src": "1456:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2696,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2676,
                        "src": "1462:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2697,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2678,
                        "src": "1469:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2694,
                      "name": "NewOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2535,
                      "src": "1447:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address)"
                      }
                    },
                    "id": 2698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1447:28:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2699,
                  "nodeType": "EmitStatement",
                  "src": "1442:33:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2700,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "1485:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2702,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2701,
                          "name": "subnode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2685,
                          "src": "1493:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1485:16:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2703,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2612,
                      "src": "1485:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2704,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2678,
                      "src": "1510:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1485:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2706,
                  "nodeType": "ExpressionStatement",
                  "src": "1485:30:8"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be 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.",
            "id": 2708,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2681,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2674,
                    "src": "1358:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2682,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2680,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "1347:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1347:16:8"
              }
            ],
            "name": "setSubnodeOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2674,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2708,
                  "src": "1294:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2673,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1294:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2676,
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 2708,
                  "src": "1308:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2675,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1308:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2678,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2708,
                  "src": "1323:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2677,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1323:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1293:44:8"
            },
            "returnParameters": {
              "id": 2683,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1364:0:8"
            },
            "scope": 2794,
            "src": "1269:253:8",
            "stateMutability": "nonpayable",
            "superFunction": 2562,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2730,
              "nodeType": "Block",
              "src": "1776:95:8",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2719,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2710,
                        "src": "1803:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2720,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2712,
                        "src": "1809:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2718,
                      "name": "NewResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2547,
                      "src": "1791:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 2721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1791:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2722,
                  "nodeType": "EmitStatement",
                  "src": "1786:32:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2728,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2723,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "1831:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2725,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2724,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2710,
                          "src": "1839:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1831:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2726,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2614,
                      "src": "1831:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2727,
                      "name": "resolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2712,
                      "src": "1856:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1831:33:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2729,
                  "nodeType": "ExpressionStatement",
                  "src": "1831:33:8"
                }
              ]
            },
            "documentation": "@dev Sets the resolver address for the specified node.\n@param node The node to update.\n@param resolver The address of the resolver.",
            "id": 2731,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2715,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2710,
                    "src": "1770:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2716,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2714,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "1759:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1759:16:8"
              }
            ],
            "name": "setResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2713,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2710,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2731,
                  "src": "1718:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2709,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1718:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2712,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 2731,
                  "src": "1732:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2711,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1732:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1717:32:8"
            },
            "returnParameters": {
              "id": 2717,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1776:0:8"
            },
            "scope": 2794,
            "src": "1697:174:8",
            "stateMutability": "nonpayable",
            "superFunction": 2569,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2753,
              "nodeType": "Block",
              "src": "2087:72:8",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2742,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2733,
                        "src": "2109:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2743,
                        "name": "ttl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "2115:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 2741,
                      "name": "NewTTL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2553,
                      "src": "2102:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64)"
                      }
                    },
                    "id": 2744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2102:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2745,
                  "nodeType": "EmitStatement",
                  "src": "2097:22:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2746,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "2129:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2748,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2747,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2733,
                          "src": "2137:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2129:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2749,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "ttl",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2616,
                      "src": "2129:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2750,
                      "name": "ttl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2735,
                      "src": "2149:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "2129:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2752,
                  "nodeType": "ExpressionStatement",
                  "src": "2129:23:8"
                }
              ]
            },
            "documentation": "@dev Sets the TTL for the specified node.\n@param node The node to update.\n@param ttl The TTL in seconds.",
            "id": 2754,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2738,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2733,
                    "src": "2081:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2739,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2737,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "2070:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2070:16:8"
              }
            ],
            "name": "setTTL",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2733,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2754,
                  "src": "2035:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2732,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2035:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2735,
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 2754,
                  "src": "2049:10:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2734,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2049:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2034:26:8"
            },
            "returnParameters": {
              "id": 2740,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2087:0:8"
            },
            "scope": 2794,
            "src": "2019:140:8",
            "stateMutability": "nonpayable",
            "superFunction": 2583,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2766,
              "nodeType": "Block",
              "src": "2380:43:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2761,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2621,
                        "src": "2397:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 2763,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2762,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2756,
                        "src": "2405:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2397:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$2617_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 2764,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "owner",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2612,
                    "src": "2397:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2760,
                  "id": 2765,
                  "nodeType": "Return",
                  "src": "2390:26:8"
                }
              ]
            },
            "documentation": "@dev Returns the address that owns the specified node.\n@param node The specified node.\n@return address of the owner.",
            "id": 2767,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2756,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2767,
                  "src": "2334:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2755,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2334:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2333:14:8"
            },
            "returnParameters": {
              "id": 2760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2759,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2767,
                  "src": "2371:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2758,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2371:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2370:9:8"
            },
            "scope": 2794,
            "src": "2319:104:8",
            "stateMutability": "view",
            "superFunction": 2590,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2779,
              "nodeType": "Block",
              "src": "2660:46:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2774,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2621,
                        "src": "2677:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 2776,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2775,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2769,
                        "src": "2685:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2677:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$2617_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 2777,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "resolver",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2614,
                    "src": "2677:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2773,
                  "id": 2778,
                  "nodeType": "Return",
                  "src": "2670:29:8"
                }
              ]
            },
            "documentation": "@dev Returns the address of the resolver for the specified node.\n@param node The specified node.\n@return address of the resolver.",
            "id": 2780,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2769,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2780,
                  "src": "2614:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2768,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2614:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2613:14:8"
            },
            "returnParameters": {
              "id": 2773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2772,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2780,
                  "src": "2651:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2771,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2651:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2650:9:8"
            },
            "scope": 2794,
            "src": "2596:110:8",
            "stateMutability": "view",
            "superFunction": 2597,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2792,
              "nodeType": "Block",
              "src": "2932:41:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2787,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2621,
                        "src": "2949:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 2789,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2788,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2782,
                        "src": "2957:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2949:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$2617_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 2790,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "ttl",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2616,
                    "src": "2949:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2786,
                  "id": 2791,
                  "nodeType": "Return",
                  "src": "2942:24:8"
                }
              ]
            },
            "documentation": "@dev Returns the TTL of a node, and any records associated with it.\n@param node The specified node.\n@return ttl of the node.",
            "id": 2793,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ttl",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2782,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2793,
                  "src": "2887:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2781,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2887:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2886:14:8"
            },
            "returnParameters": {
              "id": 2786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2785,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2793,
                  "src": "2924:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2784,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2924:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2923:8:8"
            },
            "scope": 2794,
            "src": "2874:99:8",
            "stateMutability": "view",
            "superFunction": 2604,
            "visibility": "external"
          }
        ],
        "scope": 2795,
        "src": "84:2892:8"
      }
    ],
    "src": "0:2977:8"
  },
  "legacyAST": {
    "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
    "exportedSymbols": {
      "ENSRegistry": [
        2794
      ]
    },
    "id": 2795,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2607,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 2608,
        "nodeType": "ImportDirective",
        "scope": 2795,
        "sourceUnit": 2606,
        "src": "25:19:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2609,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2605,
              "src": "108:3:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$2605",
                "typeString": "contract ENS"
              }
            },
            "id": 2610,
            "nodeType": "InheritanceSpecifier",
            "src": "108:3:8"
          }
        ],
        "contractDependencies": [
          2605
        ],
        "contractKind": "contract",
        "documentation": "The ENS registry contract.",
        "fullyImplemented": true,
        "id": 2794,
        "linearizedBaseContracts": [
          2794,
          2605
        ],
        "name": "ENSRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ENSRegistry.Record",
            "id": 2617,
            "members": [
              {
                "constant": false,
                "id": 2612,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 2617,
                "src": "142:13:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2611,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "142:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2614,
                "name": "resolver",
                "nodeType": "VariableDeclaration",
                "scope": 2617,
                "src": "165:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2613,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "165:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2616,
                "name": "ttl",
                "nodeType": "VariableDeclaration",
                "scope": 2617,
                "src": "191:10:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 2615,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "191:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "nodeType": "StructDefinition",
            "scope": 2794,
            "src": "118:90:8",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 2621,
            "name": "records",
            "nodeType": "VariableDeclaration",
            "scope": 2794,
            "src": "214:35:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
              "typeString": "mapping(bytes32 => struct ENSRegistry.Record)"
            },
            "typeName": {
              "id": 2620,
              "keyType": {
                "id": 2618,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "223:7:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "214:27:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                "typeString": "mapping(bytes32 => struct ENSRegistry.Record)"
              },
              "valueType": {
                "contractScope": null,
                "id": 2619,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 2617,
                "src": "234:6:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$2617_storage_ptr",
                  "typeString": "struct ENSRegistry.Record"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2636,
              "nodeType": "Block",
              "src": "360:70:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2626,
                              "name": "records",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2621,
                              "src": "378:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                                "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                              }
                            },
                            "id": 2628,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2627,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2623,
                              "src": "386:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "378:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$2617_storage",
                              "typeString": "struct ENSRegistry.Record storage ref"
                            }
                          },
                          "id": 2629,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2612,
                          "src": "378:19:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2630,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2809,
                            "src": "401:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "401:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "378:33:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2625,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2812,
                        2813
                      ],
                      "referencedDeclaration": 2812,
                      "src": "370:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "370:42:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2634,
                  "nodeType": "ExpressionStatement",
                  "src": "370:42:8"
                },
                {
                  "id": 2635,
                  "nodeType": "PlaceholderStatement",
                  "src": "422:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 2637,
            "name": "only_owner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 2624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2623,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2637,
                  "src": "346:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2622,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "346:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "345:14:8"
            },
            "src": "326:104:8",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2648,
              "nodeType": "Block",
              "src": "517:48:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2640,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "527:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2642,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 2641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "535:3:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "527:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2643,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2612,
                      "src": "527:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2644,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2809,
                        "src": "548:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 2645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "548:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "527:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2647,
                  "nodeType": "ExpressionStatement",
                  "src": "527:31:8"
                }
              ]
            },
            "documentation": "@dev Constructs a new ENS registrar.",
            "id": 2649,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2638,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "507:2:8"
            },
            "returnParameters": {
              "id": 2639,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "517:0:8"
            },
            "scope": 2794,
            "src": "496:69:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2671,
              "nodeType": "Block",
              "src": "877:80:8",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2660,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2651,
                        "src": "901:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2661,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2653,
                        "src": "907:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2659,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2541,
                      "src": "892:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 2662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "892:21:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2663,
                  "nodeType": "EmitStatement",
                  "src": "887:26:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2664,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "923:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2666,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2665,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2651,
                          "src": "931:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "923:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2667,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2612,
                      "src": "923:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2668,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2653,
                      "src": "945:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "923:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2670,
                  "nodeType": "ExpressionStatement",
                  "src": "923:27:8"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\n@param node The node to transfer ownership of.\n@param owner The address of the new owner.",
            "id": 2672,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2656,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2651,
                    "src": "871:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2657,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2655,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "860:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "860:16:8"
              }
            ],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2651,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2672,
                  "src": "822:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2650,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "822:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2653,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2672,
                  "src": "836:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2652,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "836:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "821:29:8"
            },
            "returnParameters": {
              "id": 2658,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "877:0:8"
            },
            "scope": 2794,
            "src": "804:153:8",
            "stateMutability": "nonpayable",
            "superFunction": 2576,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2707,
              "nodeType": "Block",
              "src": "1364:158:8",
              "statements": [
                {
                  "assignments": [
                    2685
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2685,
                      "name": "subnode",
                      "nodeType": "VariableDeclaration",
                      "scope": 2707,
                      "src": "1374:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2684,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1374:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2693,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2689,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2674,
                            "src": "1419:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2690,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2676,
                            "src": "1425:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2687,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2796,
                            "src": "1402:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 2688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1402:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 2691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1402:29:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2686,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2803,
                      "src": "1392:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1392:40:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1374:58:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2695,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2674,
                        "src": "1456:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2696,
                        "name": "label",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2676,
                        "src": "1462:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2697,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2678,
                        "src": "1469:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2694,
                      "name": "NewOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2535,
                      "src": "1447:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address)"
                      }
                    },
                    "id": 2698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1447:28:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2699,
                  "nodeType": "EmitStatement",
                  "src": "1442:33:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2700,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "1485:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2702,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2701,
                          "name": "subnode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2685,
                          "src": "1493:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1485:16:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2703,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2612,
                      "src": "1485:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2704,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2678,
                      "src": "1510:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1485:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2706,
                  "nodeType": "ExpressionStatement",
                  "src": "1485:30:8"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be 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.",
            "id": 2708,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2681,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2674,
                    "src": "1358:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2682,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2680,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "1347:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1347:16:8"
              }
            ],
            "name": "setSubnodeOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2674,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2708,
                  "src": "1294:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2673,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1294:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2676,
                  "name": "label",
                  "nodeType": "VariableDeclaration",
                  "scope": 2708,
                  "src": "1308:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2675,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1308:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2678,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2708,
                  "src": "1323:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2677,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1323:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1293:44:8"
            },
            "returnParameters": {
              "id": 2683,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1364:0:8"
            },
            "scope": 2794,
            "src": "1269:253:8",
            "stateMutability": "nonpayable",
            "superFunction": 2562,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2730,
              "nodeType": "Block",
              "src": "1776:95:8",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2719,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2710,
                        "src": "1803:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2720,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2712,
                        "src": "1809:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2718,
                      "name": "NewResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2547,
                      "src": "1791:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 2721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1791:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2722,
                  "nodeType": "EmitStatement",
                  "src": "1786:32:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2728,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2723,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "1831:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2725,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2724,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2710,
                          "src": "1839:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1831:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2726,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2614,
                      "src": "1831:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2727,
                      "name": "resolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2712,
                      "src": "1856:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1831:33:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2729,
                  "nodeType": "ExpressionStatement",
                  "src": "1831:33:8"
                }
              ]
            },
            "documentation": "@dev Sets the resolver address for the specified node.\n@param node The node to update.\n@param resolver The address of the resolver.",
            "id": 2731,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2715,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2710,
                    "src": "1770:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2716,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2714,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "1759:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1759:16:8"
              }
            ],
            "name": "setResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2713,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2710,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2731,
                  "src": "1718:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2709,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1718:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2712,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 2731,
                  "src": "1732:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2711,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1732:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1717:32:8"
            },
            "returnParameters": {
              "id": 2717,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1776:0:8"
            },
            "scope": 2794,
            "src": "1697:174:8",
            "stateMutability": "nonpayable",
            "superFunction": 2569,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2753,
              "nodeType": "Block",
              "src": "2087:72:8",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2742,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2733,
                        "src": "2109:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2743,
                        "name": "ttl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "2115:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 2741,
                      "name": "NewTTL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2553,
                      "src": "2102:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64)"
                      }
                    },
                    "id": 2744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2102:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2745,
                  "nodeType": "EmitStatement",
                  "src": "2097:22:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2746,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2621,
                          "src": "2129:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                            "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                          }
                        },
                        "id": 2748,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2747,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2733,
                          "src": "2137:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2129:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$2617_storage",
                          "typeString": "struct ENSRegistry.Record storage ref"
                        }
                      },
                      "id": 2749,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "ttl",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2616,
                      "src": "2129:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2750,
                      "name": "ttl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2735,
                      "src": "2149:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "2129:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2752,
                  "nodeType": "ExpressionStatement",
                  "src": "2129:23:8"
                }
              ]
            },
            "documentation": "@dev Sets the TTL for the specified node.\n@param node The node to update.\n@param ttl The TTL in seconds.",
            "id": 2754,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2738,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2733,
                    "src": "2081:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 2739,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2737,
                  "name": "only_owner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2637,
                  "src": "2070:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2070:16:8"
              }
            ],
            "name": "setTTL",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2733,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2754,
                  "src": "2035:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2732,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2035:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2735,
                  "name": "ttl",
                  "nodeType": "VariableDeclaration",
                  "scope": 2754,
                  "src": "2049:10:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2734,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2049:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2034:26:8"
            },
            "returnParameters": {
              "id": 2740,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2087:0:8"
            },
            "scope": 2794,
            "src": "2019:140:8",
            "stateMutability": "nonpayable",
            "superFunction": 2583,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2766,
              "nodeType": "Block",
              "src": "2380:43:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2761,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2621,
                        "src": "2397:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 2763,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2762,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2756,
                        "src": "2405:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2397:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$2617_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 2764,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "owner",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2612,
                    "src": "2397:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2760,
                  "id": 2765,
                  "nodeType": "Return",
                  "src": "2390:26:8"
                }
              ]
            },
            "documentation": "@dev Returns the address that owns the specified node.\n@param node The specified node.\n@return address of the owner.",
            "id": 2767,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2756,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2767,
                  "src": "2334:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2755,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2334:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2333:14:8"
            },
            "returnParameters": {
              "id": 2760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2759,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2767,
                  "src": "2371:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2758,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2371:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2370:9:8"
            },
            "scope": 2794,
            "src": "2319:104:8",
            "stateMutability": "view",
            "superFunction": 2590,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2779,
              "nodeType": "Block",
              "src": "2660:46:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2774,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2621,
                        "src": "2677:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 2776,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2775,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2769,
                        "src": "2685:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2677:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$2617_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 2777,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "resolver",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2614,
                    "src": "2677:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2773,
                  "id": 2778,
                  "nodeType": "Return",
                  "src": "2670:29:8"
                }
              ]
            },
            "documentation": "@dev Returns the address of the resolver for the specified node.\n@param node The specified node.\n@return address of the resolver.",
            "id": 2780,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2769,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2780,
                  "src": "2614:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2768,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2614:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2613:14:8"
            },
            "returnParameters": {
              "id": 2773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2772,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2780,
                  "src": "2651:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2771,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2651:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2650:9:8"
            },
            "scope": 2794,
            "src": "2596:110:8",
            "stateMutability": "view",
            "superFunction": 2597,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2792,
              "nodeType": "Block",
              "src": "2932:41:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2787,
                        "name": "records",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2621,
                        "src": "2949:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Record_$2617_storage_$",
                          "typeString": "mapping(bytes32 => struct ENSRegistry.Record storage ref)"
                        }
                      },
                      "id": 2789,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2788,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2782,
                        "src": "2957:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2949:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$2617_storage",
                        "typeString": "struct ENSRegistry.Record storage ref"
                      }
                    },
                    "id": 2790,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "ttl",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2616,
                    "src": "2949:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2786,
                  "id": 2791,
                  "nodeType": "Return",
                  "src": "2942:24:8"
                }
              ]
            },
            "documentation": "@dev Returns the TTL of a node, and any records associated with it.\n@param node The specified node.\n@return ttl of the node.",
            "id": 2793,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ttl",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2782,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2793,
                  "src": "2887:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2781,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2887:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2886:14:8"
            },
            "returnParameters": {
              "id": 2786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2785,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2793,
                  "src": "2924:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2784,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2924:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2923:8:8"
            },
            "scope": 2794,
            "src": "2874:99:8",
            "stateMutability": "view",
            "superFunction": 2604,
            "visibility": "external"
          }
        ],
        "scope": 2795,
        "src": "84:2892:8"
      }
    ],
    "src": "0:2977:8"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.2",
  "updatedAt": "2019-04-23T16:17:13.331Z",
  "devdoc": {
    "methods": {
      "constructor": {
        "details": "Constructs a new ENS registrar."
      },
      "owner(bytes32)": {
        "details": "Returns the address that owns the specified node.",
        "params": {
          "node": "The specified node."
        },
        "return": "address of the owner."
      },
      "resolver(bytes32)": {
        "details": "Returns the address of the resolver for the specified node.",
        "params": {
          "node": "The specified node."
        },
        "return": "address of the resolver."
      },
      "setOwner(bytes32,address)": {
        "details": "Transfers ownership of a node to a new address. May only be called by the current owner of the node.",
        "params": {
          "node": "The node to transfer ownership of.",
          "owner": "The address of the new owner."
        }
      },
      "setResolver(bytes32,address)": {
        "details": "Sets the resolver address for the specified node.",
        "params": {
          "node": "The node to update.",
          "resolver": "The address of the resolver."
        }
      },
      "setSubnodeOwner(bytes32,bytes32,address)": {
        "details": "Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.",
        "params": {
          "label": "The hash of the label specifying the subnode.",
          "node": "The parent node.",
          "owner": "The address of the new owner."
        }
      },
      "setTTL(bytes32,uint64)": {
        "details": "Sets the TTL for the specified node.",
        "params": {
          "node": "The node to update.",
          "ttl": "The TTL in seconds."
        }
      },
      "ttl(bytes32)": {
        "details": "Returns the TTL of a node, and any records associated with it.",
        "params": {
          "node": "The specified node."
        },
        "return": "ttl of the node."
      }
    }
  },
  "userdoc": {
    "methods": {},
    "notice": "The ENS registry contract."
  }
}