{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "messageHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "leafIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "destinationAndNonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "committedRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Dispatch",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_MESSAGE_BODY_BYTES",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "count",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_destinationDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipientAddress",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_messageBody",
          "type": "bytes"
        }
      ],
      "name": "dispatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b506040516104db3803806104db8339818101604052602081101561003357600080fd5b50516000805463ffffffff90921663ffffffff1990921691909117905561047c8061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638d3638f4116100505780638d3638f4146100a1578063b95a2001146100c2578063fa31de01146100e557610072565b806306661abd14610077578063522ae0021461009157806367a6771d14610099575b600080fd5b61007f61019f565b60408051918252519081900360200190f35b61007f6101ac565b61007f6101b2565b6100a96101b8565b6040805163ffffffff9092168252519081900360200190f35b6100a9600480360360208110156100d857600080fd5b503563ffffffff166101c4565b61019d600480360360608110156100fb57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561012857600080fd5b82018360208201111561013a57600080fd5b8035906020019184600183028401116401000000008311171561015c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101dc945050505050565b005b6001805481019081905590565b61080081565b60035481565b60005463ffffffff1681565b60026020526000908152604090205463ffffffff1681565b6108008151111561024e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff838116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000081166001918516918201851617909155815490926102aa9116338488888861037f565b805160208201209091506102be8684610455565b67ffffffffffffffff1660016102d261019f565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a600354866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061041057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103d3565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b63ffffffff1660209190911b67ffffffff0000000016179056fea164736f6c6343000706000a",
    "sourceMap": "149:1672:59:-:0;;;369:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;369:64:59;406:11;:20;;-1:-1:-1;406:20:59;;;;;;;;;;;-1:-1:-1;;;;149:1672:59;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638d3638f4116100505780638d3638f4146100a1578063b95a2001146100c2578063fa31de01146100e557610072565b806306661abd14610077578063522ae0021461009157806367a6771d14610099575b600080fd5b61007f61019f565b60408051918252519081900360200190f35b61007f6101ac565b61007f6101b2565b6100a96101b8565b6040805163ffffffff9092168252519081900360200190f35b6100a9600480360360208110156100d857600080fd5b503563ffffffff166101c4565b61019d600480360360608110156100fb57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561012857600080fd5b82018360208201111561013a57600080fd5b8035906020019184600183028401116401000000008311171561015c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101dc945050505050565b005b6001805481019081905590565b61080081565b60035481565b60005463ffffffff1681565b60026020526000908152604090205463ffffffff1681565b6108008151111561024e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff838116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000081166001918516918201851617909155815490926102aa9116338488888861037f565b805160208201209091506102be8684610455565b67ffffffffffffffff1660016102d261019f565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a600354866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061041057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103d3565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b63ffffffff1660209190911b67ffffffff0000000016179056fea164736f6c6343000706000a",
    "sourceMap": "149:1672:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1523:104;;;:::i;:::-;;;;;;;;;;;;;;;;304:58;;;:::i;270:28::-;;;:::i;173:25::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;225:39;;;;;;;;;;;;;;;;-1:-1:-1;225:39:59;;;;:::i;636:881::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:881:59;;-1:-1:-1;636:881:59;;-1:-1:-1;;;;;636:881:59:i;:::-;;1523:104;1585:7;;;:11;;1575:21;;;;1523:104;:::o;304:58::-;353:9;304:58;:::o;270:28::-;;;;:::o;173:25::-;;;;;;:::o;225:39::-;;;;;;;;;;;;;;;:::o;636:881::-;353:9;792:12;:19;:45;;784:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:26;;;;864:13;880:26;;;:6;:26;;;;;;;916:39;;;880:26;;;;945:10;;;916:39;;;;;;1024:11;;880:26;;989:216;;1024:11;1073:10;880:26;;1152:17;1183:12;989:21;:216::i;:::-;1296:19;;;;;;965:240;;-1:-1:-1;1403:48:59;1424:18;1444:6;1403:20;:48::i;:::-;1330:180;;1388:1;1378:7;:5;:7::i;:::-;:11;1352:12;1330:180;1465:13;;1492:8;1330:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;636:881;;;;;;:::o;979:482:73:-;1207:12;1284:13;1315:7;1340:6;1364:18;1400:10;1428:12;1250:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1231:223;;979:482;;;;;;;;:::o;1633:186:59:-;1775:37;;1800:2;1776:26;;;;;;1775:37;;1633:186::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "MAX_MESSAGE_BODY_BYTES()": "522ae002",
    "committedRoot()": "67a6771d",
    "count()": "06661abd",
    "dispatch(uint32,bytes32,bytes)": "fa31de01",
    "localDomain()": "8d3638f4",
    "nonces(uint32)": "b95a2001"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/test/utils/MockHome.sol",
    "id": 42718,
    "exportedSymbols": {
      "Message": [
        45831
      ],
      "MockHome": [
        42717
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:1776:59",
    "nodes": [
      {
        "id": 42567,
        "nodeType": "PragmaDirective",
        "src": "46:22:59",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 42569,
        "nodeType": "ImportDirective",
        "src": "70:77:59",
        "absolutePath": "packages/contracts-core/contracts/libs/Message.sol",
        "file": "@nomad-xyz/contracts-core/contracts/libs/Message.sol",
        "scope": 42718,
        "sourceUnit": 45832,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42568,
              "name": "Message",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "78:7:59",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42717,
        "nodeType": "ContractDefinition",
        "src": "149:1672:59",
        "nodes": [
          {
            "id": 42571,
            "nodeType": "VariableDeclaration",
            "src": "173:25:59",
            "constant": false,
            "functionSelector": "8d3638f4",
            "mutability": "mutable",
            "name": "localDomain",
            "scope": 42717,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 42570,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "173:6:59",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 42573,
            "nodeType": "VariableDeclaration",
            "src": "204:15:59",
            "constant": false,
            "mutability": "mutable",
            "name": "counter",
            "scope": 42717,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 42572,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "204:7:59",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42577,
            "nodeType": "VariableDeclaration",
            "src": "225:39:59",
            "constant": false,
            "functionSelector": "b95a2001",
            "mutability": "mutable",
            "name": "nonces",
            "scope": 42717,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
              "typeString": "mapping(uint32 => uint32)"
            },
            "typeName": {
              "id": 42576,
              "keyType": {
                "id": 42574,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "233:6:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              },
              "nodeType": "Mapping",
              "src": "225:25:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                "typeString": "mapping(uint32 => uint32)"
              },
              "valueType": {
                "id": 42575,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "243:6:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 42579,
            "nodeType": "VariableDeclaration",
            "src": "270:28:59",
            "constant": false,
            "functionSelector": "67a6771d",
            "mutability": "mutable",
            "name": "committedRoot",
            "scope": 42717,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 42578,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "270:7:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 42586,
            "nodeType": "VariableDeclaration",
            "src": "304:58:59",
            "constant": true,
            "functionSelector": "522ae002",
            "mutability": "constant",
            "name": "MAX_MESSAGE_BODY_BYTES",
            "scope": 42717,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 42580,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "304:7:59",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_rational_2048_by_1",
                "typeString": "int_const 2048"
              },
              "id": 42585,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "32",
                "id": 42581,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "353:1:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "2"
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "commonType": {
                  "typeIdentifier": "t_rational_1024_by_1",
                  "typeString": "int_const 1024"
                },
                "id": 42584,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "hexValue": "32",
                  "id": 42582,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "357:1:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "hexValue": "3130",
                  "id": 42583,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "360:2:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_10_by_1",
                    "typeString": "int_const 10"
                  },
                  "value": "10"
                },
                "src": "357:5:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1024_by_1",
                  "typeString": "int_const 1024"
                }
              },
              "src": "353:9:59",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2048_by_1",
                "typeString": "int_const 2048"
              }
            },
            "visibility": "public"
          },
          {
            "id": 42596,
            "nodeType": "FunctionDefinition",
            "src": "369:64:59",
            "body": {
              "id": 42595,
              "nodeType": "Block",
              "src": "396:37:59",
              "statements": [
                {
                  "expression": {
                    "id": 42593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42591,
                      "name": "localDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42571,
                      "src": "406:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 42592,
                      "name": "domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42588,
                      "src": "420:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "406:20:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 42594,
                  "nodeType": "ExpressionStatement",
                  "src": "406:20:59"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "parameters": {
              "id": 42589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42588,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 42596,
                  "src": "381:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 42587,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "381:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "380:15:59"
            },
            "returnParameters": {
              "id": 42590,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "396:0:59"
            },
            "scope": 42717,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 42608,
            "nodeType": "EventDefinition",
            "src": "439:191:59",
            "anonymous": false,
            "name": "Dispatch",
            "parameters": {
              "id": 42607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42598,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "messageHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 42608,
                  "src": "463:27:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42597,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "463:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42600,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "leafIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 42608,
                  "src": "500:25:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42599,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "500:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42602,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "destinationAndNonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 42608,
                  "src": "535:34:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 42601,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "535:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42604,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 42608,
                  "src": "579:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42603,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "579:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42606,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "scope": 42608,
                  "src": "610:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 42605,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "610:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "453:176:59"
            }
          },
          {
            "id": 42682,
            "nodeType": "FunctionDefinition",
            "src": "636:881:59",
            "body": {
              "id": 42681,
              "nodeType": "Block",
              "src": "774:743:59",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 42621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 42618,
                            "name": "_messageBody",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42614,
                            "src": "792:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 42619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "792:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 42620,
                          "name": "MAX_MESSAGE_BODY_BYTES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42586,
                          "src": "815:22:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "792:45:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6d736720746f6f206c6f6e67",
                        "id": 42622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "839:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_93c2a0d343c23d45eece2e90501aea90bce8ebac49296b5b7f0fa68afe6e7d03",
                          "typeString": "literal_string \"msg too long\""
                        },
                        "value": "msg too long"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_93c2a0d343c23d45eece2e90501aea90bce8ebac49296b5b7f0fa68afe6e7d03",
                          "typeString": "literal_string \"msg too long\""
                        }
                      ],
                      "id": 42617,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "784:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 42623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "784:70:59",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42624,
                  "nodeType": "ExpressionStatement",
                  "src": "784:70:59"
                },
                {
                  "assignments": [
                    42626
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42626,
                      "mutability": "mutable",
                      "name": "_nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 42681,
                      "src": "864:13:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 42625,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "864:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42630,
                  "initialValue": {
                    "baseExpression": {
                      "id": 42627,
                      "name": "nonces",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42577,
                      "src": "880:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                        "typeString": "mapping(uint32 => uint32)"
                      }
                    },
                    "id": 42629,
                    "indexExpression": {
                      "id": 42628,
                      "name": "_destinationDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42610,
                      "src": "887:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "880:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "864:42:59"
                },
                {
                  "expression": {
                    "id": 42637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 42631,
                        "name": "nonces",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42577,
                        "src": "916:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                          "typeString": "mapping(uint32 => uint32)"
                        }
                      },
                      "id": 42633,
                      "indexExpression": {
                        "id": 42632,
                        "name": "_destinationDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42610,
                        "src": "923:18:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "916:26:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 42636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 42634,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42626,
                        "src": "945:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 42635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "954:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "945:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "916:39:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 42638,
                  "nodeType": "ExpressionStatement",
                  "src": "916:39:59"
                },
                {
                  "assignments": [
                    42640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42640,
                      "mutability": "mutable",
                      "name": "_message",
                      "nodeType": "VariableDeclaration",
                      "scope": 42681,
                      "src": "965:21:59",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 42639,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "965:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42660,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 42643,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42571,
                        "src": "1024:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 42650,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "1073:3:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 42651,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "1073:10:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 42649,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1065:7:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 42648,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1065:7:59",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 42652,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1065:19:59",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 42647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1057:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 42646,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1057:7:59",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 42653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1057:28:59",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 42645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1049:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 42644,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1049:7:59",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1049:37:59",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 42655,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42626,
                        "src": "1100:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42656,
                        "name": "_destinationDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42610,
                        "src": "1120:18:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42657,
                        "name": "_recipientAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42612,
                        "src": "1152:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 42658,
                        "name": "_messageBody",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42614,
                        "src": "1183:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 42641,
                        "name": "Message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45831,
                        "src": "989:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Message_$45831_$",
                          "typeString": "type(library Message)"
                        }
                      },
                      "id": 42642,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "formatMessage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45648,
                      "src": "989:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$_t_uint32_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint32,bytes32,uint32,uint32,bytes32,bytes memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 42659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "989:216:59",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "965:240:59"
                },
                {
                  "assignments": [
                    42662
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42662,
                      "mutability": "mutable",
                      "name": "_messageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 42681,
                      "src": "1273:20:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 42661,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1273:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42666,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 42664,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42640,
                        "src": "1306:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 42663,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "1296:9:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 42665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1296:19:59",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1273:42:59"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 42668,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42662,
                        "src": "1352:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 42672,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 42669,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42696,
                            "src": "1378:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 42670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1378:7:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 42671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1388:1:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "1378:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 42674,
                            "name": "_destinationDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42610,
                            "src": "1424:18:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 42675,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42626,
                            "src": "1444:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 42673,
                          "name": "_destinationAndNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42716,
                          "src": "1403:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_uint64_$",
                            "typeString": "function (uint32,uint32) pure returns (uint64)"
                          }
                        },
                        "id": 42676,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1403:48:59",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 42677,
                        "name": "committedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42579,
                        "src": "1465:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 42678,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42640,
                        "src": "1492:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 42667,
                      "name": "Dispatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42608,
                      "src": "1330:8:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint64_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint64,bytes32,bytes memory)"
                      }
                    },
                    "id": 42679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1330:180:59",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42680,
                  "nodeType": "EmitStatement",
                  "src": "1325:185:59"
                }
              ]
            },
            "functionSelector": "fa31de01",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "dispatch",
            "parameters": {
              "id": 42615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42610,
                  "mutability": "mutable",
                  "name": "_destinationDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 42682,
                  "src": "663:25:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 42609,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "663:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42612,
                  "mutability": "mutable",
                  "name": "_recipientAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 42682,
                  "src": "698:25:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42611,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "698:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42614,
                  "mutability": "mutable",
                  "name": "_messageBody",
                  "nodeType": "VariableDeclaration",
                  "scope": 42682,
                  "src": "733:25:59",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 42613,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "733:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "653:111:59"
            },
            "returnParameters": {
              "id": 42616,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "774:0:59"
            },
            "scope": 42717,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42696,
            "nodeType": "FunctionDefinition",
            "src": "1523:104:59",
            "body": {
              "id": 42695,
              "nodeType": "Block",
              "src": "1565:62:59",
              "statements": [
                {
                  "expression": {
                    "id": 42691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42687,
                      "name": "counter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42573,
                      "src": "1575:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 42690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 42688,
                        "name": "counter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42573,
                        "src": "1585:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 42689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1595:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "1585:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1575:21:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 42692,
                  "nodeType": "ExpressionStatement",
                  "src": "1575:21:59"
                },
                {
                  "expression": {
                    "id": 42693,
                    "name": "counter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 42573,
                    "src": "1613:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 42686,
                  "id": 42694,
                  "nodeType": "Return",
                  "src": "1606:14:59"
                }
              ]
            },
            "functionSelector": "06661abd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "parameters": {
              "id": 42683,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1537:2:59"
            },
            "returnParameters": {
              "id": 42686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42685,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 42696,
                  "src": "1556:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 42684,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1556:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1555:9:59"
            },
            "scope": 42717,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 42716,
            "nodeType": "FunctionDefinition",
            "src": "1633:186:59",
            "body": {
              "id": 42715,
              "nodeType": "Block",
              "src": "1758:61:59",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 42713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 42710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 42707,
                                "name": "_destination",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 42698,
                                "src": "1783:12:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 42706,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1776:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 42705,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "1776:6:59",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 42708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1776:20:59",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 42709,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1800:2:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "1776:26:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 42711,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "1775:28:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "id": 42712,
                      "name": "_nonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42700,
                      "src": "1806:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "1775:37:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 42704,
                  "id": 42714,
                  "nodeType": "Return",
                  "src": "1768:44:59"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_destinationAndNonce",
            "parameters": {
              "id": 42701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42698,
                  "mutability": "mutable",
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 42716,
                  "src": "1663:19:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 42697,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1663:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42700,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 42716,
                  "src": "1684:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 42699,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1684:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1662:36:59"
            },
            "returnParameters": {
              "id": 42704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42703,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 42716,
                  "src": "1746:6:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 42702,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1746:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1745:8:59"
            },
            "scope": 42717,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          42717
        ],
        "name": "MockHome",
        "scope": 42718
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 59
}