{
  "contractName": "Resolver",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity ^0.5.0;\n\nimport \"./ENS.sol\";\n\ncontract Resolver {\n    function setName(bytes32 node, string memory name) public;\n}\n\ncontract ReverseRegistrar {\n    // namehash('addr.reverse')\n    bytes32 public constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\n\n    ENS public ens;\n    Resolver public defaultResolver;\n\n    /**\n     * @dev Constructor\n     * @param ensAddr The address of the ENS registry.\n     * @param resolverAddr The address of the default reverse resolver.\n     */\n    constructor(ENS ensAddr, Resolver resolverAddr) public {\n        ens = ensAddr;\n        defaultResolver = resolverAddr;\n\n        // Assign ownership of the reverse record to our deployer\n        ReverseRegistrar oldRegistrar = ReverseRegistrar(ens.owner(ADDR_REVERSE_NODE));\n        if (address(oldRegistrar) != address(0x0)) {\n            oldRegistrar.claim(msg.sender);\n        }\n    }\n    \n    /**\n     * @dev Transfers ownership of the reverse ENS record associated with the\n     *      calling account.\n     * @param owner The address to set as the owner of the reverse record in ENS.\n     * @return The ENS node hash of the reverse record.\n     */\n    function claim(address owner) public returns (bytes32) {\n        return claimWithResolver(owner, address(0x0));\n    }\n\n    /**\n     * @dev Transfers ownership of the reverse ENS record associated with the\n     *      calling account.\n     * @param owner The address to set as the owner of the reverse record in ENS.\n     * @param resolver The address of the resolver to set; 0 to leave unchanged.\n     * @return The ENS node hash of the reverse record.\n     */\n    function claimWithResolver(address owner, address resolver) public returns (bytes32) {\n        bytes32 label = sha3HexAddress(msg.sender);\n        bytes32 node = keccak256(abi.encodePacked(ADDR_REVERSE_NODE, label));\n        address currentOwner = ens.owner(node);\n\n        // Update the resolver if required\n        if (resolver != address(0x0) && resolver != ens.resolver(node)) {\n            // Transfer the name to us first if it's not already\n            if (currentOwner != address(this)) {\n                ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, address(this));\n                currentOwner = address(this);\n            }\n            ens.setResolver(node, resolver);\n        }\n\n        // Update the owner if required\n        if (currentOwner != owner) {\n            ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, owner);\n        }\n\n        return node;\n    }\n\n    /**\n     * @dev Sets the `name()` record for the reverse ENS record associated with\n     * the calling account. First updates the resolver to the default reverse\n     * resolver if necessary.\n     * @param name The name to set for this address.\n     * @return The ENS node hash of the reverse record.\n     */\n    function setName(string memory name) public returns (bytes32) {\n        bytes32 node = claimWithResolver(address(this), address(defaultResolver));\n        defaultResolver.setName(node, name);\n        return node;\n    }\n\n    /**\n     * @dev Returns the node hash for a given account's reverse records.\n     * @param addr The address to hash\n     * @return The ENS node hash.\n     */\n    function node(address addr) public pure returns (bytes32) {\n        return keccak256(abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr)));\n    }\n\n    /**\n     * @dev An optimised function to compute the sha3 of the lower-case\n     *      hexadecimal representation of an Ethereum address.\n     * @param addr The address to hash\n     * @return The SHA3 hash of the lower-case hexadecimal encoding of the\n     *         input address.\n     */\n    function sha3HexAddress(address addr) private pure returns (bytes32 ret) {\n        addr;\n        ret; // Stop warning us about unused variables\n        assembly {\n            let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n\n            for { let i := 40 } gt(i, 0) { } {\n                i := sub(i, 1)\n                mstore8(i, byte(and(addr, 0xf), lookup))\n                addr := div(addr, 0x10)\n                i := sub(i, 1)\n                mstore8(i, byte(and(addr, 0xf), lookup))\n                addr := div(addr, 0x10)\n            }\n\n            ret := keccak256(0, 40)\n        }\n    }\n}\n",
  "sourcePath": "/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol",
  "ast": {
    "absolutePath": "/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol",
    "exportedSymbols": {
      "Resolver": [
        3041
      ],
      "ReverseRegistrar": [
        3257
      ]
    },
    "id": 3258,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3032,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:12"
      },
      {
        "absolutePath": "/Users/deaneigenmann/Documents/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 3033,
        "nodeType": "ImportDirective",
        "scope": 3258,
        "sourceUnit": 532,
        "src": "25:19:12",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 3041,
        "linearizedBaseContracts": [
          3041
        ],
        "name": "Resolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 3040,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3035,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3040,
                  "src": "87:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3034,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "87:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3037,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3040,
                  "src": "101:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3036,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "101:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "86:34:12"
            },
            "returnParameters": {
              "id": 3039,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "127:0:12"
            },
            "scope": 3041,
            "src": "70:58:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 3258,
        "src": "46:84:12"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 3257,
        "linearizedBaseContracts": [
          3257
        ],
        "name": "ReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3044,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 3257,
            "src": "196:110:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3042,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "196:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 3043,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "240:66:12",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3046,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 3257,
            "src": "313:14:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$531",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 3045,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 531,
              "src": "313:3:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$531",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3048,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 3257,
            "src": "333:31:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Resolver_$3041",
              "typeString": "contract Resolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 3047,
              "name": "Resolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3041,
              "src": "333:8:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Resolver_$3041",
                "typeString": "contract Resolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3088,
              "nodeType": "Block",
              "src": "593:332:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3055,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3046,
                      "src": "603:3:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$531",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3056,
                      "name": "ensAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3050,
                      "src": "609:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$531",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "603:13:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$531",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 3058,
                  "nodeType": "ExpressionStatement",
                  "src": "603:13:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3059,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3048,
                      "src": "626:15:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3041",
                        "typeString": "contract Resolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3060,
                      "name": "resolverAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3052,
                      "src": "644:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3041",
                        "typeString": "contract Resolver"
                      }
                    },
                    "src": "626:30:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3041",
                      "typeString": "contract Resolver"
                    }
                  },
                  "id": 3062,
                  "nodeType": "ExpressionStatement",
                  "src": "626:30:12"
                },
                {
                  "assignments": [
                    3064
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3064,
                      "name": "oldRegistrar",
                      "nodeType": "VariableDeclaration",
                      "scope": 3088,
                      "src": "733:29:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                        "typeString": "contract ReverseRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3063,
                        "name": "ReverseRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3257,
                        "src": "733:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                          "typeString": "contract ReverseRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3071,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3068,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3044,
                            "src": "792:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3066,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3046,
                            "src": "782:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$531",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 516,
                          "src": "782:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "782:28:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3065,
                      "name": "ReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3257,
                      "src": "765:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ReverseRegistrar_$3257_$",
                        "typeString": "type(contract ReverseRegistrar)"
                      }
                    },
                    "id": 3070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "765:46:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                      "typeString": "contract ReverseRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "733:78:12"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3073,
                          "name": "oldRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3064,
                          "src": "833:12:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                            "typeString": "contract ReverseRegistrar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                            "typeString": "contract ReverseRegistrar"
                          }
                        ],
                        "id": 3072,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "825:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "825:21:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 3076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "858:3:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "850:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3077,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "850:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "825:37:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3087,
                  "nodeType": "IfStatement",
                  "src": "821:98:12",
                  "trueBody": {
                    "id": 3086,
                    "nodeType": "Block",
                    "src": "864:55:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3082,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3335,
                                "src": "897:3:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "897:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3079,
                              "name": "oldRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3064,
                              "src": "878:12:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                "typeString": "contract ReverseRegistrar"
                              }
                            },
                            "id": 3081,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claim",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3104,
                            "src": "878:18:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) external returns (bytes32)"
                            }
                          },
                          "id": 3084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "878:30:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 3085,
                        "nodeType": "ExpressionStatement",
                        "src": "878:30:12"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 3089,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3050,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3089,
                  "src": "550:11:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$531",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3049,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 531,
                    "src": "550:3:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$531",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3052,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3089,
                  "src": "563:21:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Resolver_$3041",
                    "typeString": "contract Resolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3051,
                    "name": "Resolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3041,
                    "src": "563:8:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3041",
                      "typeString": "contract Resolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "549:36:12"
            },
            "returnParameters": {
              "id": 3054,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "593:0:12"
            },
            "scope": 3257,
            "src": "538:387:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3103,
              "nodeType": "Block",
              "src": "1251:62:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3097,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3091,
                        "src": "1286:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1301:3:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 3098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1293:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1293:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3096,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3197,
                      "src": "1268:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1268:38:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3095,
                  "id": 3102,
                  "nodeType": "Return",
                  "src": "1261:45:12"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@return The ENS node hash of the reverse record.",
            "id": 3104,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3091,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3104,
                  "src": "1211:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3090,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1211:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1210:15:12"
            },
            "returnParameters": {
              "id": 3095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3094,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3104,
                  "src": "1242:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3093,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1242:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1241:9:12"
            },
            "scope": 3257,
            "src": "1196:117:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3196,
              "nodeType": "Block",
              "src": "1746:786:12",
              "statements": [
                {
                  "assignments": [
                    3114
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3114,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 3196,
                      "src": "1756:13:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3113,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1756:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3119,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3116,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3335,
                          "src": "1787:3:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1787:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3115,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3256,
                      "src": "1772:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 3118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1772:26:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1756:42:12"
                },
                {
                  "assignments": [
                    3121
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3121,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3196,
                      "src": "1808:12:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3120,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1808:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3129,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3125,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3044,
                            "src": "1850:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3126,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3114,
                            "src": "1869:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3123,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3322,
                            "src": "1833:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1833:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1833:42:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3122,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3329,
                      "src": "1823:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1823:53:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1808:68:12"
                },
                {
                  "assignments": [
                    3131
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3131,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 3196,
                      "src": "1886:20:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3130,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1886:7:12",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3136,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3134,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3121,
                        "src": "1919:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3132,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3046,
                        "src": "1909:3:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$531",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 3133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 516,
                      "src": "1909:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 3135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1909:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1886:38:12"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3137,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3108,
                        "src": "1982:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3139,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2002:3:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 3138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1994:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1994:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1982:24:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3147,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3142,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3108,
                        "src": "2010:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3145,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3121,
                            "src": "2035:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3143,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3046,
                            "src": "2022:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$531",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "resolver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 523,
                          "src": "2022:12:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2022:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2010:30:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1982:58:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3180,
                  "nodeType": "IfStatement",
                  "src": "1978:372:12",
                  "trueBody": {
                    "id": 3179,
                    "nodeType": "Block",
                    "src": "2042:308:12",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3149,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "2125:12:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3151,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3358,
                                "src": "2149:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              ],
                              "id": 3150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2141:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2141:13:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2125:29:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3171,
                        "nodeType": "IfStatement",
                        "src": "2121:174:12",
                        "trueBody": {
                          "id": 3170,
                          "nodeType": "Block",
                          "src": "2156:139:12",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3157,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3044,
                                    "src": "2194:17:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3158,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3114,
                                    "src": "2213:5:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3160,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3358,
                                        "src": "2228:4:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      ],
                                      "id": 3159,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2220:7:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 3161,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2220:13:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3154,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3046,
                                    "src": "2174:3:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$531",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 3156,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 488,
                                  "src": "2174:19:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,bytes32,address) external"
                                  }
                                },
                                "id": 3162,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2174:60:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3163,
                              "nodeType": "ExpressionStatement",
                              "src": "2174:60:12"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3168,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 3164,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3131,
                                  "src": "2252:12:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3166,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3358,
                                      "src": "2275:4:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    ],
                                    "id": 3165,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2267:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 3167,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2267:13:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2252:28:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3169,
                              "nodeType": "ExpressionStatement",
                              "src": "2252:28:12"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3175,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3121,
                              "src": "2324:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3176,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3108,
                              "src": "2330:8:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3172,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3046,
                              "src": "2308:3:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$531",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 495,
                            "src": "2308:15:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 3177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2308:31:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3178,
                        "nodeType": "ExpressionStatement",
                        "src": "2308:31:12"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3181,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3131,
                      "src": "2404:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3182,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3106,
                      "src": "2420:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2404:21:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3193,
                  "nodeType": "IfStatement",
                  "src": "2400:104:12",
                  "trueBody": {
                    "id": 3192,
                    "nodeType": "Block",
                    "src": "2427:77:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3187,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3044,
                              "src": "2461:17:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3188,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3114,
                              "src": "2480:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3189,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3106,
                              "src": "2487:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3184,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3046,
                              "src": "2441:3:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$531",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3186,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 488,
                            "src": "2441:19:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 3190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2441:52:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3191,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:52:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3194,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3121,
                    "src": "2521:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3112,
                  "id": 3195,
                  "nodeType": "Return",
                  "src": "2514:11:12"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@param resolver The address of the resolver to set; 0 to leave unchanged.\n@return The ENS node hash of the reverse record.",
            "id": 3197,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3106,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3197,
                  "src": "1688:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1688:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3108,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3197,
                  "src": "1703:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3107,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1703:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1687:33:12"
            },
            "returnParameters": {
              "id": 3112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3111,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3197,
                  "src": "1737:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3110,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1737:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1736:9:12"
            },
            "scope": 3257,
            "src": "1661:871:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3224,
              "nodeType": "Block",
              "src": "2913:156:12",
              "statements": [
                {
                  "assignments": [
                    3205
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3205,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3224,
                      "src": "2923:12:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3204,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2923:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3214,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3208,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3358,
                            "src": "2964:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                              "typeString": "contract ReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                              "typeString": "contract ReverseRegistrar"
                            }
                          ],
                          "id": 3207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2956:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2956:13:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3211,
                            "name": "defaultResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3048,
                            "src": "2979:15:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Resolver_$3041",
                              "typeString": "contract Resolver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Resolver_$3041",
                              "typeString": "contract Resolver"
                            }
                          ],
                          "id": 3210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2971:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2971:24:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3206,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3197,
                      "src": "2938:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2938:58:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2923:73:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3218,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3205,
                        "src": "3030:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3219,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "3036:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3215,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3048,
                        "src": "3006:15:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Resolver_$3041",
                          "typeString": "contract Resolver"
                        }
                      },
                      "id": 3217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3040,
                      "src": "3006:23:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 3220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3006:35:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3221,
                  "nodeType": "ExpressionStatement",
                  "src": "3006:35:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3222,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3205,
                    "src": "3058:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3203,
                  "id": 3223,
                  "nodeType": "Return",
                  "src": "3051:11:12"
                }
              ]
            },
            "documentation": "@dev Sets the `name()` record for the reverse ENS record associated with\nthe calling account. First updates the resolver to the default reverse\nresolver if necessary.\n@param name The name to set for this address.\n@return The ENS node hash of the reverse record.",
            "id": 3225,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3199,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3225,
                  "src": "2868:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3198,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2867:20:12"
            },
            "returnParameters": {
              "id": 3203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3202,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3225,
                  "src": "2904:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3201,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2903:9:12"
            },
            "scope": 3257,
            "src": "2851:218:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3242,
              "nodeType": "Block",
              "src": "3295:92:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3235,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3044,
                            "src": "3339:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3237,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3227,
                                "src": "3373:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3236,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3256,
                              "src": "3358:14:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) pure returns (bytes32)"
                              }
                            },
                            "id": 3238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3358:20:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3233,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3322,
                            "src": "3322:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3322:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3322:57:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3232,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3329,
                      "src": "3312:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3312:68:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3231,
                  "id": 3241,
                  "nodeType": "Return",
                  "src": "3305:75:12"
                }
              ]
            },
            "documentation": "@dev Returns the node hash for a given account's reverse records.\n@param addr The address to hash\n@return The ENS node hash.",
            "id": 3243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3227,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3243,
                  "src": "3251:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3251:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3250:14:12"
            },
            "returnParameters": {
              "id": 3231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3230,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3243,
                  "src": "3286:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3229,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3286:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3285:9:12"
            },
            "scope": 3257,
            "src": "3237:150:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3255,
              "nodeType": "Block",
              "src": "3761:553:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3250,
                    "name": "addr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3245,
                    "src": "3771:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3251,
                  "nodeType": "ExpressionStatement",
                  "src": "3771:4:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3252,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3248,
                    "src": "3785:3:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3253,
                  "nodeType": "ExpressionStatement",
                  "src": "3785:3:12"
                },
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4096:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4059:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4108:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4236:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4224:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 3248,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4275:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4187:4:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 3254,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    for {\n        let i := 40\n    }\n    gt(i, 0)\n    {\n    }\n    {\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n    }\n    ret := keccak256(0, 40)\n}",
                  "src": "3840:474:12"
                }
              ]
            },
            "documentation": "@dev An optimised function to compute the sha3 of the lower-case\n     hexadecimal representation of an Ethereum address.\n@param addr The address to hash\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\n        input address.",
            "id": 3256,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3245,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3256,
                  "src": "3712:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3244,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3712:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3711:14:12"
            },
            "returnParameters": {
              "id": 3249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3248,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 3256,
                  "src": "3748:11:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3247,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3748:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3747:13:12"
            },
            "scope": 3257,
            "src": "3688:626:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 3258,
        "src": "132:4184:12"
      }
    ],
    "src": "0:4317:12"
  },
  "legacyAST": {
    "absolutePath": "/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol",
    "exportedSymbols": {
      "Resolver": [
        3041
      ],
      "ReverseRegistrar": [
        3257
      ]
    },
    "id": 3258,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3032,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:12"
      },
      {
        "absolutePath": "/Users/deaneigenmann/Documents/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 3033,
        "nodeType": "ImportDirective",
        "scope": 3258,
        "sourceUnit": 532,
        "src": "25:19:12",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 3041,
        "linearizedBaseContracts": [
          3041
        ],
        "name": "Resolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 3040,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3035,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3040,
                  "src": "87:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3034,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "87:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3037,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3040,
                  "src": "101:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3036,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "101:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "86:34:12"
            },
            "returnParameters": {
              "id": 3039,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "127:0:12"
            },
            "scope": 3041,
            "src": "70:58:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 3258,
        "src": "46:84:12"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 3257,
        "linearizedBaseContracts": [
          3257
        ],
        "name": "ReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3044,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 3257,
            "src": "196:110:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3042,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "196:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 3043,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "240:66:12",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3046,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 3257,
            "src": "313:14:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$531",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 3045,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 531,
              "src": "313:3:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$531",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3048,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 3257,
            "src": "333:31:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Resolver_$3041",
              "typeString": "contract Resolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 3047,
              "name": "Resolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3041,
              "src": "333:8:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Resolver_$3041",
                "typeString": "contract Resolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3088,
              "nodeType": "Block",
              "src": "593:332:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3055,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3046,
                      "src": "603:3:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$531",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3056,
                      "name": "ensAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3050,
                      "src": "609:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$531",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "603:13:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$531",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 3058,
                  "nodeType": "ExpressionStatement",
                  "src": "603:13:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3059,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3048,
                      "src": "626:15:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3041",
                        "typeString": "contract Resolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3060,
                      "name": "resolverAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3052,
                      "src": "644:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3041",
                        "typeString": "contract Resolver"
                      }
                    },
                    "src": "626:30:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3041",
                      "typeString": "contract Resolver"
                    }
                  },
                  "id": 3062,
                  "nodeType": "ExpressionStatement",
                  "src": "626:30:12"
                },
                {
                  "assignments": [
                    3064
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3064,
                      "name": "oldRegistrar",
                      "nodeType": "VariableDeclaration",
                      "scope": 3088,
                      "src": "733:29:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                        "typeString": "contract ReverseRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3063,
                        "name": "ReverseRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3257,
                        "src": "733:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                          "typeString": "contract ReverseRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3071,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3068,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3044,
                            "src": "792:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3066,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3046,
                            "src": "782:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$531",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 516,
                          "src": "782:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "782:28:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3065,
                      "name": "ReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3257,
                      "src": "765:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ReverseRegistrar_$3257_$",
                        "typeString": "type(contract ReverseRegistrar)"
                      }
                    },
                    "id": 3070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "765:46:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                      "typeString": "contract ReverseRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "733:78:12"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3073,
                          "name": "oldRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3064,
                          "src": "833:12:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                            "typeString": "contract ReverseRegistrar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                            "typeString": "contract ReverseRegistrar"
                          }
                        ],
                        "id": 3072,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "825:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "825:21:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 3076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "858:3:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "850:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3077,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "850:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "825:37:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3087,
                  "nodeType": "IfStatement",
                  "src": "821:98:12",
                  "trueBody": {
                    "id": 3086,
                    "nodeType": "Block",
                    "src": "864:55:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3082,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3335,
                                "src": "897:3:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "897:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3079,
                              "name": "oldRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3064,
                              "src": "878:12:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                "typeString": "contract ReverseRegistrar"
                              }
                            },
                            "id": 3081,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claim",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3104,
                            "src": "878:18:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) external returns (bytes32)"
                            }
                          },
                          "id": 3084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "878:30:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 3085,
                        "nodeType": "ExpressionStatement",
                        "src": "878:30:12"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 3089,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3050,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3089,
                  "src": "550:11:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$531",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3049,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 531,
                    "src": "550:3:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$531",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3052,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3089,
                  "src": "563:21:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Resolver_$3041",
                    "typeString": "contract Resolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3051,
                    "name": "Resolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3041,
                    "src": "563:8:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3041",
                      "typeString": "contract Resolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "549:36:12"
            },
            "returnParameters": {
              "id": 3054,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "593:0:12"
            },
            "scope": 3257,
            "src": "538:387:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3103,
              "nodeType": "Block",
              "src": "1251:62:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3097,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3091,
                        "src": "1286:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1301:3:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 3098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1293:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1293:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3096,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3197,
                      "src": "1268:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1268:38:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3095,
                  "id": 3102,
                  "nodeType": "Return",
                  "src": "1261:45:12"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@return The ENS node hash of the reverse record.",
            "id": 3104,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3091,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3104,
                  "src": "1211:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3090,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1211:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1210:15:12"
            },
            "returnParameters": {
              "id": 3095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3094,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3104,
                  "src": "1242:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3093,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1242:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1241:9:12"
            },
            "scope": 3257,
            "src": "1196:117:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3196,
              "nodeType": "Block",
              "src": "1746:786:12",
              "statements": [
                {
                  "assignments": [
                    3114
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3114,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 3196,
                      "src": "1756:13:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3113,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1756:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3119,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3116,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3335,
                          "src": "1787:3:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1787:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3115,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3256,
                      "src": "1772:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 3118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1772:26:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1756:42:12"
                },
                {
                  "assignments": [
                    3121
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3121,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3196,
                      "src": "1808:12:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3120,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1808:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3129,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3125,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3044,
                            "src": "1850:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3126,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3114,
                            "src": "1869:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3123,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3322,
                            "src": "1833:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1833:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1833:42:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3122,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3329,
                      "src": "1823:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1823:53:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1808:68:12"
                },
                {
                  "assignments": [
                    3131
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3131,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 3196,
                      "src": "1886:20:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3130,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1886:7:12",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3136,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3134,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3121,
                        "src": "1919:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3132,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3046,
                        "src": "1909:3:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$531",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 3133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 516,
                      "src": "1909:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 3135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1909:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1886:38:12"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3137,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3108,
                        "src": "1982:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3139,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2002:3:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 3138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1994:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1994:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1982:24:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3147,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3142,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3108,
                        "src": "2010:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3145,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3121,
                            "src": "2035:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3143,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3046,
                            "src": "2022:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$531",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "resolver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 523,
                          "src": "2022:12:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2022:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2010:30:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1982:58:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3180,
                  "nodeType": "IfStatement",
                  "src": "1978:372:12",
                  "trueBody": {
                    "id": 3179,
                    "nodeType": "Block",
                    "src": "2042:308:12",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3149,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "2125:12:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3151,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3358,
                                "src": "2149:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              ],
                              "id": 3150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2141:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2141:13:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2125:29:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3171,
                        "nodeType": "IfStatement",
                        "src": "2121:174:12",
                        "trueBody": {
                          "id": 3170,
                          "nodeType": "Block",
                          "src": "2156:139:12",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3157,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3044,
                                    "src": "2194:17:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3158,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3114,
                                    "src": "2213:5:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3160,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3358,
                                        "src": "2228:4:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      ],
                                      "id": 3159,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2220:7:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 3161,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2220:13:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3154,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3046,
                                    "src": "2174:3:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$531",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 3156,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 488,
                                  "src": "2174:19:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,bytes32,address) external"
                                  }
                                },
                                "id": 3162,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2174:60:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3163,
                              "nodeType": "ExpressionStatement",
                              "src": "2174:60:12"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3168,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 3164,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3131,
                                  "src": "2252:12:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3166,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3358,
                                      "src": "2275:4:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    ],
                                    "id": 3165,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2267:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 3167,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2267:13:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2252:28:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3169,
                              "nodeType": "ExpressionStatement",
                              "src": "2252:28:12"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3175,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3121,
                              "src": "2324:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3176,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3108,
                              "src": "2330:8:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3172,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3046,
                              "src": "2308:3:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$531",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 495,
                            "src": "2308:15:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 3177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2308:31:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3178,
                        "nodeType": "ExpressionStatement",
                        "src": "2308:31:12"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3181,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3131,
                      "src": "2404:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3182,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3106,
                      "src": "2420:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2404:21:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3193,
                  "nodeType": "IfStatement",
                  "src": "2400:104:12",
                  "trueBody": {
                    "id": 3192,
                    "nodeType": "Block",
                    "src": "2427:77:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3187,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3044,
                              "src": "2461:17:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3188,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3114,
                              "src": "2480:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3189,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3106,
                              "src": "2487:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3184,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3046,
                              "src": "2441:3:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$531",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3186,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 488,
                            "src": "2441:19:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 3190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2441:52:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3191,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:52:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3194,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3121,
                    "src": "2521:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3112,
                  "id": 3195,
                  "nodeType": "Return",
                  "src": "2514:11:12"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@param resolver The address of the resolver to set; 0 to leave unchanged.\n@return The ENS node hash of the reverse record.",
            "id": 3197,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3106,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3197,
                  "src": "1688:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1688:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3108,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3197,
                  "src": "1703:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3107,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1703:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1687:33:12"
            },
            "returnParameters": {
              "id": 3112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3111,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3197,
                  "src": "1737:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3110,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1737:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1736:9:12"
            },
            "scope": 3257,
            "src": "1661:871:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3224,
              "nodeType": "Block",
              "src": "2913:156:12",
              "statements": [
                {
                  "assignments": [
                    3205
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3205,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3224,
                      "src": "2923:12:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3204,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2923:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3214,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3208,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3358,
                            "src": "2964:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                              "typeString": "contract ReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$3257",
                              "typeString": "contract ReverseRegistrar"
                            }
                          ],
                          "id": 3207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2956:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2956:13:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3211,
                            "name": "defaultResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3048,
                            "src": "2979:15:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Resolver_$3041",
                              "typeString": "contract Resolver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Resolver_$3041",
                              "typeString": "contract Resolver"
                            }
                          ],
                          "id": 3210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2971:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2971:24:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3206,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3197,
                      "src": "2938:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2938:58:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2923:73:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3218,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3205,
                        "src": "3030:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3219,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "3036:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3215,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3048,
                        "src": "3006:15:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Resolver_$3041",
                          "typeString": "contract Resolver"
                        }
                      },
                      "id": 3217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3040,
                      "src": "3006:23:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 3220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3006:35:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3221,
                  "nodeType": "ExpressionStatement",
                  "src": "3006:35:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3222,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3205,
                    "src": "3058:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3203,
                  "id": 3223,
                  "nodeType": "Return",
                  "src": "3051:11:12"
                }
              ]
            },
            "documentation": "@dev Sets the `name()` record for the reverse ENS record associated with\nthe calling account. First updates the resolver to the default reverse\nresolver if necessary.\n@param name The name to set for this address.\n@return The ENS node hash of the reverse record.",
            "id": 3225,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3199,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3225,
                  "src": "2868:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3198,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2867:20:12"
            },
            "returnParameters": {
              "id": 3203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3202,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3225,
                  "src": "2904:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3201,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2903:9:12"
            },
            "scope": 3257,
            "src": "2851:218:12",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3242,
              "nodeType": "Block",
              "src": "3295:92:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3235,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3044,
                            "src": "3339:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3237,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3227,
                                "src": "3373:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3236,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3256,
                              "src": "3358:14:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) pure returns (bytes32)"
                              }
                            },
                            "id": 3238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3358:20:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3233,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3322,
                            "src": "3322:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3322:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3322:57:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3232,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3329,
                      "src": "3312:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3312:68:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3231,
                  "id": 3241,
                  "nodeType": "Return",
                  "src": "3305:75:12"
                }
              ]
            },
            "documentation": "@dev Returns the node hash for a given account's reverse records.\n@param addr The address to hash\n@return The ENS node hash.",
            "id": 3243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3227,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3243,
                  "src": "3251:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3251:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3250:14:12"
            },
            "returnParameters": {
              "id": 3231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3230,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3243,
                  "src": "3286:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3229,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3286:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3285:9:12"
            },
            "scope": 3257,
            "src": "3237:150:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3255,
              "nodeType": "Block",
              "src": "3761:553:12",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3250,
                    "name": "addr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3245,
                    "src": "3771:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3251,
                  "nodeType": "ExpressionStatement",
                  "src": "3771:4:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3252,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3248,
                    "src": "3785:3:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3253,
                  "nodeType": "ExpressionStatement",
                  "src": "3785:3:12"
                },
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4096:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4059:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4108:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4236:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4224:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 3248,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4275:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4187:4:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 3254,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    for {\n        let i := 40\n    }\n    gt(i, 0)\n    {\n    }\n    {\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n    }\n    ret := keccak256(0, 40)\n}",
                  "src": "3840:474:12"
                }
              ]
            },
            "documentation": "@dev An optimised function to compute the sha3 of the lower-case\n     hexadecimal representation of an Ethereum address.\n@param addr The address to hash\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\n        input address.",
            "id": 3256,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3245,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3256,
                  "src": "3712:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3244,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3712:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3711:14:12"
            },
            "returnParameters": {
              "id": 3249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3248,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 3256,
                  "src": "3748:11:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3247,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3748:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3747:13:12"
            },
            "scope": 3257,
            "src": "3688:626:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 3258,
        "src": "132:4184:12"
      }
    ],
    "src": "0:4317:12"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.0",
  "updatedAt": "2018-12-28T11:01:42.583Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}