{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldUpdater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newUpdater",
          "type": "address"
        }
      ],
      "name": "NewUpdater",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "homeDomain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "Update",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "homeDomainHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum NomadBase.States",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updater",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "committedRoot()": "67a6771d",
    "homeDomainHash()": "45630b1a",
    "localDomain()": "8d3638f4",
    "owner()": "8da5cb5b",
    "renounceOwnership()": "715018a6",
    "state()": "c19d93fb",
    "transferOwnership(address)": "f2fde38b",
    "updater()": "df034cd0"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/NomadBase.sol",
    "id": 26383,
    "exportedSymbols": {
      "ECDSA": [
        23749
      ],
      "Initializable": [
        23234
      ],
      "Message": [
        28215
      ],
      "NomadBase": [
        26382
      ],
      "OwnableUpgradeable": [
        23168
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:4529:19",
    "nodes": [
      {
        "id": 26212,
        "nodeType": "PragmaDirective",
        "src": "46:22:19",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 26214,
        "nodeType": "ImportDirective",
        "src": "116:43:19",
        "absolutePath": "packages/contracts-core/contracts/libs/Message.sol",
        "file": "./libs/Message.sol",
        "scope": 26383,
        "sourceUnit": 28216,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26213,
              "name": "Message",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:7:19",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26216,
        "nodeType": "ImportDirective",
        "src": "206:69:19",
        "absolutePath": "node_modules/@openzeppelin/contracts/cryptography/ECDSA.sol",
        "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
        "scope": 26383,
        "sourceUnit": 23750,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26215,
              "name": "ECDSA",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "214:5:19",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26218,
        "nodeType": "ImportDirective",
        "src": "276:90:19",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "scope": 26383,
        "sourceUnit": 23235,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26217,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "284:13:19",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26220,
        "nodeType": "ImportDirective",
        "src": "367:101:19",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "scope": 26383,
        "sourceUnit": 23169,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26219,
              "name": "OwnableUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "375:18:19",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26382,
        "nodeType": "ContractDefinition",
        "src": "585:3989:19",
        "nodes": [
          {
            "id": 26229,
            "nodeType": "EnumDefinition",
            "src": "1076:73:19",
            "canonicalName": "NomadBase.States",
            "members": [
              {
                "id": 26226,
                "name": "UnInitialized",
                "nodeType": "EnumValue",
                "src": "1098:13:19"
              },
              {
                "id": 26227,
                "name": "Active",
                "nodeType": "EnumValue",
                "src": "1121:6:19"
              },
              {
                "id": 26228,
                "name": "Failed",
                "nodeType": "EnumValue",
                "src": "1137:6:19"
              }
            ],
            "name": "States"
          },
          {
            "id": 26231,
            "nodeType": "VariableDeclaration",
            "src": "1266:35:19",
            "constant": false,
            "functionSelector": "8d3638f4",
            "mutability": "immutable",
            "name": "localDomain",
            "scope": 26382,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 26230,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1266:6:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26233,
            "nodeType": "VariableDeclaration",
            "src": "1392:22:19",
            "constant": false,
            "functionSelector": "df034cd0",
            "mutability": "mutable",
            "name": "updater",
            "scope": 26382,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 26232,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1392:7:19",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26235,
            "nodeType": "VariableDeclaration",
            "src": "1453:19:19",
            "constant": false,
            "functionSelector": "c19d93fb",
            "mutability": "mutable",
            "name": "state",
            "scope": 26382,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_enum$_States_$26229",
              "typeString": "enum NomadBase.States"
            },
            "typeName": {
              "id": 26234,
              "name": "States",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26229,
              "src": "1453:6:19",
              "typeDescriptions": {
                "typeIdentifier": "t_enum$_States_$26229",
                "typeString": "enum NomadBase.States"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26237,
            "nodeType": "VariableDeclaration",
            "src": "1537:28:19",
            "constant": false,
            "functionSelector": "67a6771d",
            "mutability": "mutable",
            "name": "committedRoot",
            "scope": 26382,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 26236,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1537:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26241,
            "nodeType": "VariableDeclaration",
            "src": "1648:25:19",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 26382,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$47_storage",
              "typeString": "uint256[47]"
            },
            "typeName": {
              "baseType": {
                "id": 26238,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1648:7:19",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 26240,
              "length": {
                "hexValue": "3437",
                "id": 26239,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1656:2:19",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_47_by_1",
                  "typeString": "int_const 47"
                },
                "value": "47"
              },
              "nodeType": "ArrayTypeName",
              "src": "1648:11:19",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$47_storage_ptr",
                "typeString": "uint256[47]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 26252,
            "nodeType": "EventDefinition",
            "src": "2042:145:19",
            "anonymous": false,
            "documentation": {
              "id": 26242,
              "nodeType": "StructuredDocumentation",
              "src": "1721:316:19",
              "text": " @notice Emitted when update is made on Home\n or unconfirmed update root is submitted on Replica\n @param homeDomain Domain of home contract\n @param oldRoot Old merkle root\n @param newRoot New merkle root\n @param signature Updater's signature on `oldRoot` and `newRoot`"
            },
            "name": "Update",
            "parameters": {
              "id": 26251,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26244,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "homeDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 26252,
                  "src": "2064:25:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 26243,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2064:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26246,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26252,
                  "src": "2099:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26245,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2099:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26248,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26252,
                  "src": "2132:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26247,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2132:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26250,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 26252,
                  "src": "2165:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26249,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2165:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2054:132:19"
            }
          },
          {
            "id": 26259,
            "nodeType": "EventDefinition",
            "src": "2368:57:19",
            "anonymous": false,
            "documentation": {
              "id": 26253,
              "nodeType": "StructuredDocumentation",
              "src": "2193:170:19",
              "text": " @notice Emitted when Updater is rotated\n @param oldUpdater The address of the old updater\n @param newUpdater The address of the new updater"
            },
            "name": "NewUpdater",
            "parameters": {
              "id": 26258,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26255,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oldUpdater",
                  "nodeType": "VariableDeclaration",
                  "scope": 26259,
                  "src": "2385:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26254,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2385:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26257,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newUpdater",
                  "nodeType": "VariableDeclaration",
                  "scope": 26259,
                  "src": "2405:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2405:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2384:40:19"
            }
          },
          {
            "id": 26269,
            "nodeType": "FunctionDefinition",
            "src": "2477:76:19",
            "body": {
              "id": 26268,
              "nodeType": "Block",
              "src": "2510:43:19",
              "statements": [
                {
                  "expression": {
                    "id": 26266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26264,
                      "name": "localDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26231,
                      "src": "2520:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26265,
                      "name": "_localDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26261,
                      "src": "2534:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "2520:26:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 26267,
                  "nodeType": "ExpressionStatement",
                  "src": "2520:26:19"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "parameters": {
              "id": 26262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26261,
                  "mutability": "mutable",
                  "name": "_localDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 26269,
                  "src": "2489:19:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 26260,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2489:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2488:21:19"
            },
            "returnParameters": {
              "id": 26263,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2510:0:19"
            },
            "scope": 26382,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26289,
            "nodeType": "FunctionDefinition",
            "src": "2605:166:19",
            "body": {
              "id": 26288,
              "nodeType": "Block",
              "src": "2676:95:19",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 26276,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23067,
                      "src": "2686:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 26277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2686:16:19",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26278,
                  "nodeType": "ExpressionStatement",
                  "src": "2686:16:19"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26280,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26271,
                        "src": "2724:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26279,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26332,
                      "src": "2712:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 26281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2712:21:19",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26282,
                  "nodeType": "ExpressionStatement",
                  "src": "2712:21:19"
                },
                {
                  "expression": {
                    "id": 26286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26283,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26235,
                      "src": "2743:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$26229",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 26284,
                        "name": "States",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26229,
                        "src": "2751:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_States_$26229_$",
                          "typeString": "type(enum NomadBase.States)"
                        }
                      },
                      "id": 26285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Active",
                      "nodeType": "MemberAccess",
                      "src": "2751:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$26229",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "src": "2743:21:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_States_$26229",
                      "typeString": "enum NomadBase.States"
                    }
                  },
                  "id": 26287,
                  "nodeType": "ExpressionStatement",
                  "src": "2743:21:19"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 26274,
                "modifierName": {
                  "id": 26273,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23217,
                  "src": "2664:11:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2664:11:19"
              }
            ],
            "name": "__NomadBase_initialize",
            "parameters": {
              "id": 26272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26271,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 26289,
                  "src": "2637:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26270,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2637:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2636:18:19"
            },
            "returnParameters": {
              "id": 26275,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2676:0:19"
            },
            "scope": 26382,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26295,
            "nodeType": "FunctionDefinition",
            "src": "2905:64:19",
            "documentation": {
              "id": 26290,
              "nodeType": "StructuredDocumentation",
              "src": "2828:72:19",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\""
            },
            "functionSelector": "45630b1a",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "homeDomainHash",
            "parameters": {
              "id": 26291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2928:2:19"
            },
            "returnParameters": {
              "id": 26294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26293,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26295,
                  "src": "2960:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26292,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2960:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2959:9:19"
            },
            "scope": 26382,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 26312,
            "nodeType": "FunctionDefinition",
            "src": "3155:178:19",
            "body": {
              "id": 26311,
              "nodeType": "Block",
              "src": "3260:73:19",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 26306,
                            "name": "_homeDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26298,
                            "src": "3304:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "hexValue": "4e4f4d4144",
                            "id": 26307,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3317:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9575c28759500ffc4f6c6f4c4cadbcae7547a19ca8c280029c45619d5d101314",
                              "typeString": "literal_string \"NOMAD\""
                            },
                            "value": "NOMAD"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_9575c28759500ffc4f6c6f4c4cadbcae7547a19ca8c280029c45619d5d101314",
                              "typeString": "literal_string \"NOMAD\""
                            }
                          ],
                          "expression": {
                            "id": 26304,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "3287:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 26305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "3287:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 26308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3287:38:19",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 26303,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "3277:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 26309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3277:49:19",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 26302,
                  "id": 26310,
                  "nodeType": "Return",
                  "src": "3270:56:19"
                }
              ]
            },
            "documentation": {
              "id": 26296,
              "nodeType": "StructuredDocumentation",
              "src": "3028:122:19",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\"\n @param _homeDomain the Home domain to hash"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_homeDomainHash",
            "parameters": {
              "id": 26299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26298,
                  "mutability": "mutable",
                  "name": "_homeDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 26312,
                  "src": "3180:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 26297,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3180:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3179:20:19"
            },
            "returnParameters": {
              "id": 26302,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26301,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26312,
                  "src": "3247:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26300,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3247:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3246:9:19"
            },
            "scope": 26382,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26332,
            "nodeType": "FunctionDefinition",
            "src": "3439:179:19",
            "body": {
              "id": 26331,
              "nodeType": "Block",
              "src": "3490:128:19",
              "statements": [
                {
                  "assignments": [
                    26319
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26319,
                      "mutability": "mutable",
                      "name": "_oldUpdater",
                      "nodeType": "VariableDeclaration",
                      "scope": 26331,
                      "src": "3500:19:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 26318,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3500:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26321,
                  "initialValue": {
                    "id": 26320,
                    "name": "updater",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 26233,
                    "src": "3522:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3500:29:19"
                },
                {
                  "expression": {
                    "id": 26324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26322,
                      "name": "updater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26233,
                      "src": "3539:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26323,
                      "name": "_newUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26315,
                      "src": "3549:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3539:21:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 26325,
                  "nodeType": "ExpressionStatement",
                  "src": "3539:21:19"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 26327,
                        "name": "_oldUpdater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26319,
                        "src": "3586:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 26328,
                        "name": "_newUpdater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26315,
                        "src": "3599:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26326,
                      "name": "NewUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26259,
                      "src": "3575:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 26329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3575:36:19",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26330,
                  "nodeType": "EmitStatement",
                  "src": "3570:41:19"
                }
              ]
            },
            "documentation": {
              "id": 26313,
              "nodeType": "StructuredDocumentation",
              "src": "3339:95:19",
              "text": " @notice Set the Updater\n @param _newUpdater Address of the new Updater"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setUpdater",
            "parameters": {
              "id": 26316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26315,
                  "mutability": "mutable",
                  "name": "_newUpdater",
                  "nodeType": "VariableDeclaration",
                  "scope": 26332,
                  "src": "3460:19:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26314,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3460:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3459:21:19"
            },
            "returnParameters": {
              "id": 26317,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3490:0:19"
            },
            "scope": 26382,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26373,
            "nodeType": "FunctionDefinition",
            "src": "3903:392:19",
            "body": {
              "id": 26372,
              "nodeType": "Block",
              "src": "4052:243:19",
              "statements": [
                {
                  "assignments": [
                    26345
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26345,
                      "mutability": "mutable",
                      "name": "_digest",
                      "nodeType": "VariableDeclaration",
                      "scope": 26372,
                      "src": "4062:15:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 26344,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4062:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26355,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 26349,
                              "name": "homeDomainHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26295,
                              "src": "4120:14:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                "typeString": "function () view returns (bytes32)"
                              }
                            },
                            "id": 26350,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4120:16:19",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26351,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26335,
                            "src": "4138:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26352,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26337,
                            "src": "4148:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 26347,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "4103:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 26348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "4103:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 26353,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4103:54:19",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 26346,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "4080:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 26354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4080:87:19",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4062:105:19"
                },
                {
                  "expression": {
                    "id": 26361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26356,
                      "name": "_digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26345,
                      "src": "4177:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 26359,
                          "name": "_digest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26345,
                          "src": "4216:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 26357,
                          "name": "ECDSA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23749,
                          "src": "4187:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ECDSA_$23749_$",
                            "typeString": "type(library ECDSA)"
                          }
                        },
                        "id": 26358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 23748,
                        "src": "4187:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 26360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4187:37:19",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4177:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 26362,
                  "nodeType": "ExpressionStatement",
                  "src": "4177:47:19"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 26369,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 26365,
                              "name": "_digest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26345,
                              "src": "4256:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 26366,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26339,
                              "src": "4265:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 26363,
                              "name": "ECDSA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23749,
                              "src": "4242:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ECDSA_$23749_$",
                                "typeString": "type(library ECDSA)"
                              }
                            },
                            "id": 26364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recover",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23674,
                            "src": "4242:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (bytes32,bytes memory) pure returns (address)"
                            }
                          },
                          "id": 26367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4242:34:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 26368,
                          "name": "updater",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26233,
                          "src": "4280:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4242:45:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 26370,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4241:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 26343,
                  "id": 26371,
                  "nodeType": "Return",
                  "src": "4234:54:19"
                }
              ]
            },
            "documentation": {
              "id": 26333,
              "nodeType": "StructuredDocumentation",
              "src": "3624:274:19",
              "text": " @notice Checks that signature was signed by Updater\n @param _oldRoot Old merkle root\n @param _newRoot New merkle root\n @param _signature Signature on `_oldRoot` and `_newRoot`\n @return TRUE iff signature is valid signed by updater*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isUpdaterSignature",
            "parameters": {
              "id": 26340,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26335,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26373,
                  "src": "3941:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26334,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3941:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26337,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26373,
                  "src": "3967:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26336,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3967:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26339,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 26373,
                  "src": "3993:23:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26338,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3993:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3931:91:19"
            },
            "returnParameters": {
              "id": 26343,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26342,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26373,
                  "src": "4046:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26341,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4046:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4045:6:19"
            },
            "scope": 26382,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26381,
            "nodeType": "FunctionDefinition",
            "src": "4488:84:19",
            "body": {
              "id": 26380,
              "nodeType": "Block",
              "src": "4543:29:19",
              "statements": []
            },
            "baseFunctions": [
              23135
            ],
            "documentation": {
              "id": 26374,
              "nodeType": "StructuredDocumentation",
              "src": "4301:182:19",
              "text": " @dev should be impossible to renounce ownership;\n we override OpenZeppelin OwnableUpgradeable's\n implementation of renounceOwnership to make it a no-op"
            },
            "functionSelector": "715018a6",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 26378,
                "modifierName": {
                  "id": 26377,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "4533:9:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4533:9:19"
              }
            ],
            "name": "renounceOwnership",
            "overrides": {
              "id": 26376,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4524:8:19"
            },
            "parameters": {
              "id": 26375,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4514:2:19"
            },
            "returnParameters": {
              "id": 26379,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4543:0:19"
            },
            "scope": 26382,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 26222,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23234,
              "src": "616:13:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$23234",
                "typeString": "contract Initializable"
              }
            },
            "id": 26223,
            "nodeType": "InheritanceSpecifier",
            "src": "616:13:19"
          },
          {
            "baseName": {
              "id": 26224,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23168,
              "src": "631:18:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$23168",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 26225,
            "nodeType": "InheritanceSpecifier",
            "src": "631:18:19"
          }
        ],
        "contractDependencies": [
          23168,
          23234,
          23523
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 26221,
          "nodeType": "StructuredDocumentation",
          "src": "470:114:19",
          "text": " @title NomadBase\n @author Illusory Systems Inc.\n @notice Shared utilities between Home and Replica."
        },
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          26382,
          23168,
          23523,
          23234
        ],
        "name": "NomadBase",
        "scope": 26383
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 19
}