{
  "abi": [],
  "bytecode": {
    "object": "0x602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
    "sourceMap": "196:14233:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
    "sourceMap": "196:14233:33:-:0;;;;;;;;",
    "linkReferences": {}
  },
  "methodIdentifiers": {},
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
    "id": 30302,
    "exportedSymbols": {
      "BridgeMessage": [
        30301
      ],
      "TypedMemView": [
        29602
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:14384:33",
    "nodes": [
      {
        "id": 29604,
        "nodeType": "PragmaDirective",
        "src": "46:22:33",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 29606,
        "nodeType": "ImportDirective",
        "src": "116:78:33",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "file": "@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "scope": 30302,
        "sourceUnit": 29603,
        "symbolAliases": [
          {
            "foreign": {
              "id": 29605,
              "name": "TypedMemView",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:12:33",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30301,
        "nodeType": "ContractDefinition",
        "src": "196:14233:33",
        "nodes": [
          {
            "id": 29609,
            "nodeType": "UsingForDirective",
            "src": "268:29:33",
            "libraryName": {
              "id": 29607,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "274:12:33",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 29608,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "291:5:33",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 29612,
            "nodeType": "UsingForDirective",
            "src": "302:31:33",
            "libraryName": {
              "id": 29610,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "308:12:33",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 29611,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "325:7:33",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 29620,
            "nodeType": "EnumDefinition",
            "src": "1497:196:33",
            "canonicalName": "BridgeMessage.Types",
            "members": [
              {
                "id": 29613,
                "name": "Invalid",
                "nodeType": "EnumValue",
                "src": "1518:7:33"
              },
              {
                "id": 29614,
                "name": "TokenId",
                "nodeType": "EnumValue",
                "src": "1540:7:33"
              },
              {
                "id": 29615,
                "name": "Message",
                "nodeType": "EnumValue",
                "src": "1562:7:33"
              },
              {
                "id": 29616,
                "name": "Transfer",
                "nodeType": "EnumValue",
                "src": "1584:8:33"
              },
              {
                "id": 29617,
                "name": "DeprecatedFastTransfer",
                "nodeType": "EnumValue",
                "src": "1607:22:33"
              },
              {
                "id": 29618,
                "name": "TransferToHook",
                "nodeType": "EnumValue",
                "src": "1644:14:33"
              },
              {
                "id": 29619,
                "name": "ExtraData",
                "nodeType": "EnumValue",
                "src": "1673:9:33"
              }
            ],
            "name": "Types"
          },
          {
            "id": 29625,
            "nodeType": "StructDefinition",
            "src": "1965:65:33",
            "canonicalName": "BridgeMessage.TokenId",
            "members": [
              {
                "constant": false,
                "id": 29622,
                "mutability": "mutable",
                "name": "domain",
                "nodeType": "VariableDeclaration",
                "scope": 29625,
                "src": "1990:13:33",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 29621,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1990:6:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 29624,
                "mutability": "mutable",
                "name": "id",
                "nodeType": "VariableDeclaration",
                "scope": 29625,
                "src": "2013:10:33",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 29623,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "2013:7:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "TokenId",
            "scope": 30301,
            "visibility": "public"
          },
          {
            "id": 29628,
            "nodeType": "VariableDeclaration",
            "src": "2080:42:33",
            "constant": true,
            "mutability": "constant",
            "name": "TOKEN_ID_LEN",
            "scope": 30301,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 29626,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2080:7:33",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3336",
              "id": 29627,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2120:2:33",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_36_by_1",
                "typeString": "int_const 36"
              },
              "value": "36"
            },
            "visibility": "private"
          },
          {
            "id": 29631,
            "nodeType": "VariableDeclaration",
            "src": "2160:43:33",
            "constant": true,
            "mutability": "constant",
            "name": "IDENTIFIER_LEN",
            "scope": 30301,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 29629,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2160:7:33",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "31",
              "id": 29630,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2202:1:33",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "private"
          },
          {
            "id": 29634,
            "nodeType": "VariableDeclaration",
            "src": "2209:42:33",
            "constant": true,
            "mutability": "constant",
            "name": "TRANSFER_LEN",
            "scope": 30301,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 29632,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2209:7:33",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3937",
              "id": 29633,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2249:2:33",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_97_by_1",
                "typeString": "int_const 97"
              },
              "value": "97"
            },
            "visibility": "private"
          },
          {
            "id": 29637,
            "nodeType": "VariableDeclaration",
            "src": "2340:52:33",
            "constant": true,
            "mutability": "constant",
            "name": "MIN_TRANSFER_HOOK_LEN",
            "scope": 30301,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 29635,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2340:7:33",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "313239",
              "id": 29636,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2389:3:33",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_129_by_1",
                "typeString": "int_const 129"
              },
              "value": "129"
            },
            "visibility": "private"
          },
          {
            "id": 29655,
            "nodeType": "ModifierDefinition",
            "src": "2699:101:33",
            "body": {
              "id": 29654,
              "nodeType": "Block",
              "src": "2744:56:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29649,
                            "name": "_t",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29642,
                            "src": "2778:2:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 29648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2771:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 29647,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "2771:6:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2771:10:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 29644,
                        "name": "_view",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29640,
                        "src": "2754:5:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 29646,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "assertType",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28678,
                      "src": "2754:16:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 29651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2754:28:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 29652,
                  "nodeType": "ExpressionStatement",
                  "src": "2754:28:33"
                },
                {
                  "id": 29653,
                  "nodeType": "PlaceholderStatement",
                  "src": "2792:1:33"
                }
              ]
            },
            "documentation": {
              "id": 29638,
              "nodeType": "StructuredDocumentation",
              "src": "2567:127:33",
              "text": " @notice Asserts a message is of type `_t`\n @param _view The message\n @param _t The expected type"
            },
            "name": "typeAssert",
            "parameters": {
              "id": 29643,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29640,
                  "mutability": "mutable",
                  "name": "_view",
                  "nodeType": "VariableDeclaration",
                  "scope": 29655,
                  "src": "2719:13:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29639,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "2719:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29642,
                  "mutability": "mutable",
                  "name": "_t",
                  "nodeType": "VariableDeclaration",
                  "scope": 29655,
                  "src": "2734:8:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Types_$29620",
                    "typeString": "enum BridgeMessage.Types"
                  },
                  "typeName": {
                    "id": 29641,
                    "name": "Types",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 29620,
                    "src": "2734:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2718:25:33"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29672,
            "nodeType": "FunctionDefinition",
            "src": "2995:141:33",
            "body": {
              "id": 29671,
              "nodeType": "Block",
              "src": "3064:72:33",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 29664,
                          "name": "_action",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29658,
                          "src": "3092:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 29663,
                        "name": "isTransfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29809,
                        "src": "3081:10:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29) pure returns (bool)"
                        }
                      },
                      "id": 29665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3081:19:33",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 29667,
                          "name": "_action",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29658,
                          "src": "3121:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 29666,
                        "name": "isTransferToHook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29824,
                        "src": "3104:16:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29) pure returns (bool)"
                        }
                      },
                      "id": 29668,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3104:25:33",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3081:48:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29662,
                  "id": 29670,
                  "nodeType": "Return",
                  "src": "3074:55:33"
                }
              ]
            },
            "documentation": {
              "id": 29656,
              "nodeType": "StructuredDocumentation",
              "src": "2859:131:33",
              "text": " @notice Checks that Action is valid type\n @param _action The action\n @return TRUE if action is valid"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isValidAction",
            "parameters": {
              "id": 29659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29658,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 29672,
                  "src": "3018:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29657,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "3018:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3017:17:33"
            },
            "returnParameters": {
              "id": 29662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29661,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29672,
                  "src": "3058:4:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29660,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3058:4:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3057:6:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29699,
            "nodeType": "FunctionDefinition",
            "src": "3293:241:33",
            "body": {
              "id": 29698,
              "nodeType": "Block",
              "src": "3367:167:33",
              "statements": [
                {
                  "assignments": [
                    29681
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29681,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 29698,
                      "src": "3377:12:33",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29680,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3377:7:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29685,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 29682,
                        "name": "_view",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29675,
                        "src": "3392:5:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 29683,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28863,
                      "src": "3392:9:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 29684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3392:11:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3377:26:33"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 29690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 29686,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29681,
                        "src": "3432:4:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 29689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 29687,
                          "name": "TOKEN_ID_LEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29628,
                          "src": "3440:12:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 29688,
                          "name": "TRANSFER_LEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29634,
                          "src": "3455:12:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3440:27:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3432:35:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 29695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 29691,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29681,
                        "src": "3483:4:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 29694,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 29692,
                          "name": "TOKEN_ID_LEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29628,
                          "src": "3491:12:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 29693,
                          "name": "MIN_TRANSFER_HOOK_LEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29637,
                          "src": "3506:21:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3491:36:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3483:44:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3432:95:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29679,
                  "id": 29697,
                  "nodeType": "Return",
                  "src": "3413:114:33"
                }
              ]
            },
            "documentation": {
              "id": 29673,
              "nodeType": "StructuredDocumentation",
              "src": "3142:146:33",
              "text": " @notice Checks that view is a valid message length\n @param _view The bytes string\n @return TRUE if message is valid"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isValidMessageLength",
            "parameters": {
              "id": 29676,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29675,
                  "mutability": "mutable",
                  "name": "_view",
                  "nodeType": "VariableDeclaration",
                  "scope": 29699,
                  "src": "3323:13:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29674,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "3323:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3322:15:33"
            },
            "returnParameters": {
              "id": 29679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29678,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29699,
                  "src": "3361:4:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29677,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3361:4:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3360:6:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29750,
            "nodeType": "FunctionDefinition",
            "src": "3703:379:33",
            "body": {
              "id": 29749,
              "nodeType": "Block",
              "src": "3870:212:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29716,
                            "name": "_action",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29704,
                            "src": "3902:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 29715,
                          "name": "isValidAction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29672,
                          "src": "3888:13:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                            "typeString": "function (bytes29) pure returns (bool)"
                          }
                        },
                        "id": 29717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3888:22:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21616374696f6e",
                        "id": 29718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3912:9:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_677bddb5fb0400bc8f0292043908c7b57427ef4ef8f2bd6107e675f051b2e46b",
                          "typeString": "literal_string \"!action\""
                        },
                        "value": "!action"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_677bddb5fb0400bc8f0292043908c7b57427ef4ef8f2bd6107e675f051b2e46b",
                          "typeString": "literal_string \"!action\""
                        }
                      ],
                      "id": 29714,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3880:7:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 29719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3880:42:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29720,
                  "nodeType": "ExpressionStatement",
                  "src": "3880:42:33"
                },
                {
                  "assignments": [
                    29725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29725,
                      "mutability": "mutable",
                      "name": "_views",
                      "nodeType": "VariableDeclaration",
                      "scope": 29749,
                      "src": "3932:23:33",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                        "typeString": "bytes29[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29723,
                          "name": "bytes29",
                          "nodeType": "ElementaryTypeName",
                          "src": "3932:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "id": 29724,
                        "nodeType": "ArrayTypeName",
                        "src": "3932:9:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                          "typeString": "bytes29[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29731,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "32",
                        "id": 29729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3972:1:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 29728,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "3958:13:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes29_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes29[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29726,
                          "name": "bytes29",
                          "nodeType": "ElementaryTypeName",
                          "src": "3962:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "id": 29727,
                        "nodeType": "ArrayTypeName",
                        "src": "3962:9:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                          "typeString": "bytes29[]"
                        }
                      }
                    },
                    "id": 29730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3958:16:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                      "typeString": "bytes29[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3932:42:33"
                },
                {
                  "expression": {
                    "id": 29736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 29732,
                        "name": "_views",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29725,
                        "src": "3984:6:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      },
                      "id": 29734,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 29733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3991:1:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3984:9:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 29735,
                      "name": "_tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29702,
                      "src": "3996:8:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "3984:20:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 29737,
                  "nodeType": "ExpressionStatement",
                  "src": "3984:20:33"
                },
                {
                  "expression": {
                    "id": 29742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 29738,
                        "name": "_views",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29725,
                        "src": "4014:6:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      },
                      "id": 29740,
                      "indexExpression": {
                        "hexValue": "31",
                        "id": 29739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4021:1:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4014:9:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 29741,
                      "name": "_action",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29704,
                      "src": "4026:7:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "4014:19:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 29743,
                  "nodeType": "ExpressionStatement",
                  "src": "4014:19:33"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29746,
                        "name": "_views",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29725,
                        "src": "4068:6:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      ],
                      "expression": {
                        "id": 29744,
                        "name": "TypedMemView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29602,
                        "src": "4050:12:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TypedMemView_$29602_$",
                          "typeString": "type(library TypedMemView)"
                        }
                      },
                      "id": 29745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "join",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29601,
                      "src": "4050:17:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes29[] memory) view returns (bytes memory)"
                      }
                    },
                    "id": 29747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4050:25:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 29713,
                  "id": 29748,
                  "nodeType": "Return",
                  "src": "4043:32:33"
                }
              ]
            },
            "documentation": {
              "id": 29700,
              "nodeType": "StructuredDocumentation",
              "src": "3540:158:33",
              "text": " @notice Formats an action message\n @param _tokenId The token ID\n @param _action The action\n @return The formatted message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 29707,
                    "name": "_tokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29702,
                    "src": "3810:8:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 29708,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "3820:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 29709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "TokenId",
                    "nodeType": "MemberAccess",
                    "src": "3820:13:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 29710,
                "modifierName": {
                  "id": 29706,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "3799:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3799:35:33"
              }
            ],
            "name": "formatMessage",
            "parameters": {
              "id": 29705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29702,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 29750,
                  "src": "3726:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29701,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "3726:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29704,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 29750,
                  "src": "3744:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29703,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "3744:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3725:35:33"
            },
            "returnParameters": {
              "id": 29713,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29712,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29750,
                  "src": "3852:12:33",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 29711,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3852:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3851:14:33"
            },
            "scope": 30301,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29768,
            "nodeType": "FunctionDefinition",
            "src": "4222:118:33",
            "body": {
              "id": 29767,
              "nodeType": "Block",
              "src": "4288:52:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 29761,
                                "name": "_view",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29753,
                                "src": "4317:5:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              "id": 29762,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "typeOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28776,
                              "src": "4317:12:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$bound_to$_t_bytes29_$",
                                "typeString": "function (bytes29) pure returns (uint40)"
                              }
                            },
                            "id": 29763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4317:14:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          ],
                          "id": 29760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4311:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint8_$",
                            "typeString": "type(uint8)"
                          },
                          "typeName": {
                            "id": 29759,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "4311:5:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4311:21:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 29758,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "4305:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 29765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4305:28:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  },
                  "functionReturnParameters": 29757,
                  "id": 29766,
                  "nodeType": "Return",
                  "src": "4298:35:33"
                }
              ]
            },
            "documentation": {
              "id": 29751,
              "nodeType": "StructuredDocumentation",
              "src": "4088:129:33",
              "text": " @notice Returns the type of the message\n @param _view The message\n @return The type of the message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "messageType",
            "parameters": {
              "id": 29754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29753,
                  "mutability": "mutable",
                  "name": "_view",
                  "nodeType": "VariableDeclaration",
                  "scope": 29768,
                  "src": "4243:13:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29752,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "4243:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4242:15:33"
            },
            "returnParameters": {
              "id": 29757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29756,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29768,
                  "src": "4281:5:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Types_$29620",
                    "typeString": "enum BridgeMessage.Types"
                  },
                  "typeName": {
                    "id": 29755,
                    "name": "Types",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 29620,
                    "src": "4281:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4280:7:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29794,
            "nodeType": "FunctionDefinition",
            "src": "4562:191:33",
            "body": {
              "id": 29793,
              "nodeType": "Block",
              "src": "4637:116:33",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 29785,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 29779,
                            "name": "_action",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29771,
                            "src": "4677:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 29778,
                          "name": "actionType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30058,
                          "src": "4666:10:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint8_$",
                            "typeString": "function (bytes29) pure returns (uint8)"
                          }
                        },
                        "id": 29780,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4666:19:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 29783,
                            "name": "_type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29773,
                            "src": "4695:5:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 29782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4689:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint8_$",
                            "typeString": "type(uint8)"
                          },
                          "typeName": {
                            "id": 29781,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "4689:5:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29784,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4689:12:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "4666:35:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_enum$_Types_$29620",
                        "typeString": "enum BridgeMessage.Types"
                      },
                      "id": 29790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 29787,
                            "name": "_action",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29771,
                            "src": "4729:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 29786,
                          "name": "messageType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29768,
                          "src": "4717:11:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_enum$_Types_$29620_$",
                            "typeString": "function (bytes29) pure returns (enum BridgeMessage.Types)"
                          }
                        },
                        "id": 29788,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4717:20:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 29789,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29773,
                        "src": "4741:5:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      },
                      "src": "4717:29:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4666:80:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29777,
                  "id": 29792,
                  "nodeType": "Return",
                  "src": "4647:99:33"
                }
              ]
            },
            "documentation": {
              "id": 29769,
              "nodeType": "StructuredDocumentation",
              "src": "4346:211:33",
              "text": " @notice Checks that the message is of the specified type\n @param _type the type to check for\n @param _action The message\n @return True if the message is of the specified type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isType",
            "parameters": {
              "id": 29774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29771,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 29794,
                  "src": "4578:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29770,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "4578:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29773,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 29794,
                  "src": "4595:11:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Types_$29620",
                    "typeString": "enum BridgeMessage.Types"
                  },
                  "typeName": {
                    "id": 29772,
                    "name": "Types",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 29620,
                    "src": "4595:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4577:30:33"
            },
            "returnParameters": {
              "id": 29777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29776,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29794,
                  "src": "4631:4:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29775,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4631:4:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4630:6:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29809,
            "nodeType": "FunctionDefinition",
            "src": "4923:121:33",
            "body": {
              "id": 29808,
              "nodeType": "Block",
              "src": "4989:55:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29803,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29797,
                        "src": "5013:7:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "expression": {
                          "id": 29804,
                          "name": "Types",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29620,
                          "src": "5022:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                            "typeString": "type(enum BridgeMessage.Types)"
                          }
                        },
                        "id": 29805,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "Transfer",
                        "nodeType": "MemberAccess",
                        "src": "5022:14:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      ],
                      "id": 29802,
                      "name": "isType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29794,
                      "src": "5006:6:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_enum$_Types_$29620_$returns$_t_bool_$",
                        "typeString": "function (bytes29,enum BridgeMessage.Types) pure returns (bool)"
                      }
                    },
                    "id": 29806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5006:31:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29801,
                  "id": 29807,
                  "nodeType": "Return",
                  "src": "4999:38:33"
                }
              ]
            },
            "documentation": {
              "id": 29795,
              "nodeType": "StructuredDocumentation",
              "src": "4759:159:33",
              "text": " @notice Checks that the message is of type Transfer\n @param _action The message\n @return True if the message is of type Transfer"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTransfer",
            "parameters": {
              "id": 29798,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29797,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 29809,
                  "src": "4943:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29796,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "4943:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4942:17:33"
            },
            "returnParameters": {
              "id": 29801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29800,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29809,
                  "src": "4983:4:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29799,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4983:4:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4982:6:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29824,
            "nodeType": "FunctionDefinition",
            "src": "5226:133:33",
            "body": {
              "id": 29823,
              "nodeType": "Block",
              "src": "5298:61:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29818,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29812,
                        "src": "5322:7:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "expression": {
                          "id": 29819,
                          "name": "Types",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29620,
                          "src": "5331:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                            "typeString": "type(enum BridgeMessage.Types)"
                          }
                        },
                        "id": 29820,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "TransferToHook",
                        "nodeType": "MemberAccess",
                        "src": "5331:20:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      ],
                      "id": 29817,
                      "name": "isType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29794,
                      "src": "5315:6:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_enum$_Types_$29620_$returns$_t_bool_$",
                        "typeString": "function (bytes29,enum BridgeMessage.Types) pure returns (bool)"
                      }
                    },
                    "id": 29821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5315:37:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29816,
                  "id": 29822,
                  "nodeType": "Return",
                  "src": "5308:44:33"
                }
              ]
            },
            "documentation": {
              "id": 29810,
              "nodeType": "StructuredDocumentation",
              "src": "5050:171:33",
              "text": " @notice Checks that the message is of type TransferToHook\n @param _action The message\n @return True if the message is of type TransferToHook"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTransferToHook",
            "parameters": {
              "id": 29813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29812,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 29824,
                  "src": "5252:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29811,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "5252:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5251:17:33"
            },
            "returnParameters": {
              "id": 29816,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29815,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29824,
                  "src": "5292:4:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29814,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5292:4:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5291:6:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29853,
            "nodeType": "FunctionDefinition",
            "src": "5595:288:33",
            "body": {
              "id": 29852,
              "nodeType": "Block",
              "src": "5731:152:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 29847,
                              "name": "Types",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29620,
                              "src": "5847:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 29848,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Transfer",
                            "nodeType": "MemberAccess",
                            "src": "5847:14:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 29846,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5840:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 29845,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "5840:6:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5840:22:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 29838,
                              "name": "Types",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29620,
                              "src": "5777:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 29839,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Transfer",
                            "nodeType": "MemberAccess",
                            "src": "5777:14:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          },
                          {
                            "id": 29840,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29827,
                            "src": "5793:3:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 29841,
                            "name": "_amnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29829,
                            "src": "5798:5:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 29842,
                            "name": "_detailsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29831,
                            "src": "5805:12:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 29836,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "5760:3:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 29837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "5760:16:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 29843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5760:58:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 29844,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "5760:62:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 29850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5760:116:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 29835,
                  "id": 29851,
                  "nodeType": "Return",
                  "src": "5741:135:33"
                }
              ]
            },
            "documentation": {
              "id": 29825,
              "nodeType": "StructuredDocumentation",
              "src": "5365:225:33",
              "text": " @notice Formats Transfer\n @param _to The recipient address as bytes32\n @param _amnt The transfer amount\n @param _detailsHash The hash of the token name, symbol, and decimals\n @return"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "formatTransfer",
            "parameters": {
              "id": 29832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29827,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 29853,
                  "src": "5628:11:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29826,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5628:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29829,
                  "mutability": "mutable",
                  "name": "_amnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 29853,
                  "src": "5649:13:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29828,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5649:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29831,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 29853,
                  "src": "5672:20:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29830,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5672:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5618:80:33"
            },
            "returnParameters": {
              "id": 29835,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29834,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29853,
                  "src": "5722:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29833,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "5722:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5721:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29888,
            "nodeType": "FunctionDefinition",
            "src": "6215:531:33",
            "body": {
              "id": 29887,
              "nodeType": "Block",
              "src": "6417:329:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 29882,
                              "name": "Types",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29620,
                              "src": "6717:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 29883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TransferToHook",
                            "nodeType": "MemberAccess",
                            "src": "6717:20:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 29881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6710:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 29880,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "6710:6:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29884,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6710:28:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 29871,
                              "name": "Types",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29620,
                              "src": "6501:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 29872,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TransferToHook",
                            "nodeType": "MemberAccess",
                            "src": "6501:20:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          },
                          {
                            "id": 29873,
                            "name": "_hook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29856,
                            "src": "6543:5:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 29874,
                            "name": "_amnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29858,
                            "src": "6570:5:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 29875,
                            "name": "_detailsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29860,
                            "src": "6597:12:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 29876,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29862,
                            "src": "6631:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 29877,
                            "name": "_extraData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29864,
                            "src": "6660:10:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "id": 29869,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "6446:3:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 29870,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "6446:33:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 29878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6446:242:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 29879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "6446:263:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 29885,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6446:293:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 29868,
                  "id": 29886,
                  "nodeType": "Return",
                  "src": "6427:312:33"
                }
              ]
            },
            "documentation": {
              "id": 29854,
              "nodeType": "StructuredDocumentation",
              "src": "5889:321:33",
              "text": " @notice Formats TransferToHook message\n @param _hook The hook that will handle this token transfer\n @param _amnt The transfer amount\n @param _detailsHash The hash of the token name, symbol, and decimals\n @param _extraData User-provided data for the receiving hook\n @return"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "formatTransferToHook",
            "parameters": {
              "id": 29865,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29856,
                  "mutability": "mutable",
                  "name": "_hook",
                  "nodeType": "VariableDeclaration",
                  "scope": 29888,
                  "src": "6254:13:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29855,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6254:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29858,
                  "mutability": "mutable",
                  "name": "_amnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 29888,
                  "src": "6277:13:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29857,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6277:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29860,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 29888,
                  "src": "6300:20:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29859,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6300:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29862,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 29888,
                  "src": "6330:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29861,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6330:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29864,
                  "mutability": "mutable",
                  "name": "_extraData",
                  "nodeType": "VariableDeclaration",
                  "scope": 29888,
                  "src": "6355:23:33",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 29863,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6355:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6244:140:33"
            },
            "returnParameters": {
              "id": 29868,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29867,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29888,
                  "src": "6408:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29866,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "6408:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6407:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29904,
            "nodeType": "FunctionDefinition",
            "src": "6893:175:33",
            "body": {
              "id": 29903,
              "nodeType": "Block",
              "src": "7001:67:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 29897,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29891,
                          "src": "7032:8:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                            "typeString": "struct BridgeMessage.TokenId memory"
                          }
                        },
                        "id": 29898,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "domain",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 29622,
                        "src": "7032:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "expression": {
                          "id": 29899,
                          "name": "_tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29891,
                          "src": "7049:8:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                            "typeString": "struct BridgeMessage.TokenId memory"
                          }
                        },
                        "id": 29900,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 29624,
                        "src": "7049:11:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29896,
                      "name": "formatTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        29904,
                        29928
                      ],
                      "referencedDeclaration": 29928,
                      "src": "7018:13:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$returns$_t_bytes29_$",
                        "typeString": "function (uint32,bytes32) pure returns (bytes29)"
                      }
                    },
                    "id": 29901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7018:43:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 29895,
                  "id": 29902,
                  "nodeType": "Return",
                  "src": "7011:50:33"
                }
              ]
            },
            "documentation": {
              "id": 29889,
              "nodeType": "StructuredDocumentation",
              "src": "6752:136:33",
              "text": " @notice Serializes a Token ID struct\n @param _tokenId The token id struct\n @return The formatted Token ID"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "formatTokenId",
            "parameters": {
              "id": 29892,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29891,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 29904,
                  "src": "6916:23:33",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                    "typeString": "struct BridgeMessage.TokenId"
                  },
                  "typeName": {
                    "id": 29890,
                    "name": "TokenId",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 29625,
                    "src": "6916:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenId_$29625_storage_ptr",
                      "typeString": "struct BridgeMessage.TokenId"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6915:25:33"
            },
            "returnParameters": {
              "id": 29895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29894,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29904,
                  "src": "6988:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29893,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "6988:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6987:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29928,
            "nodeType": "FunctionDefinition",
            "src": "7247:193:33",
            "body": {
              "id": 29927,
              "nodeType": "Block",
              "src": "7359:81:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 29922,
                              "name": "Types",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29620,
                              "src": "7418:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 29923,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TokenId",
                            "nodeType": "MemberAccess",
                            "src": "7418:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 29921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7411:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 29920,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "7411:6:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7411:21:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 29916,
                            "name": "_domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29907,
                            "src": "7393:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 29917,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29909,
                            "src": "7402:3:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 29914,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "7376:3:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 29915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "7376:16:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 29918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7376:30:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 29919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "7376:34:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 29925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7376:57:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 29913,
                  "id": 29926,
                  "nodeType": "Return",
                  "src": "7369:64:33"
                }
              ]
            },
            "documentation": {
              "id": 29905,
              "nodeType": "StructuredDocumentation",
              "src": "7074:168:33",
              "text": " @notice Creates a serialized Token ID from components\n @param _domain The domain\n @param _id The ID\n @return The formatted Token ID"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "formatTokenId",
            "parameters": {
              "id": 29910,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29907,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 29928,
                  "src": "7270:14:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29906,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7270:6:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29909,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 29928,
                  "src": "7286:11:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29908,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7286:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7269:29:33"
            },
            "returnParameters": {
              "id": 29913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29912,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29928,
                  "src": "7346:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29911,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "7346:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7345:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29960,
            "nodeType": "FunctionDefinition",
            "src": "7902:429:33",
            "body": {
              "id": 29959,
              "nodeType": "Block",
              "src": "8049:282:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 29945,
                                  "name": "_name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29931,
                                  "src": "8149:5:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 29944,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8143:5:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 29943,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8143:5:33",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8143:12:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 29947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "8143:19:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 29948,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29931,
                            "src": "8184:5:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 29951,
                                  "name": "_symbol",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29933,
                                  "src": "8217:7:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 29950,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8211:5:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 29949,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8211:5:33",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29952,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8211:14:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 29953,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "8211:21:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 29954,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29933,
                            "src": "8254:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          {
                            "id": 29955,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29935,
                            "src": "8283:9:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "id": 29941,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "8105:3:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 29942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "8105:16:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 29956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8105:205:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 29940,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "8078:9:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 29957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8078:246:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 29939,
                  "id": 29958,
                  "nodeType": "Return",
                  "src": "8059:265:33"
                }
              ]
            },
            "documentation": {
              "id": 29929,
              "nodeType": "StructuredDocumentation",
              "src": "7446:451:33",
              "text": " @notice Formats the keccak256 hash of the token details\n Token Details Format:\n      length of name cast to bytes - 32 bytes\n      name - x bytes (variable)\n      length of symbol cast to bytes - 32 bytes\n      symbol - x bytes (variable)\n      decimals - 1 byte\n @param _name The name\n @param _symbol The symbol\n @param _decimals The decimals\n @return The Details message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDetailsHash",
            "parameters": {
              "id": 29936,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29931,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 29960,
                  "src": "7935:19:33",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 29930,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7935:6:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29933,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 29960,
                  "src": "7964:21:33",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 29932,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7964:6:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29935,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 29960,
                  "src": "7995:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 29934,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "7995:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7925:91:33"
            },
            "returnParameters": {
              "id": 29939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29938,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29960,
                  "src": "8040:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29937,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8040:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8039:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 29983,
            "nodeType": "FunctionDefinition",
            "src": "8465:193:33",
            "body": {
              "id": 29982,
              "nodeType": "Block",
              "src": "8602:56:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 29977,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8645:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "hexValue": "34",
                            "id": 29978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8648:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            }
                          ],
                          "expression": {
                            "id": 29975,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29963,
                            "src": "8626:8:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 29976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "indexUint",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29151,
                          "src": "8626:18:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29,uint256,uint8) pure returns (uint256)"
                          }
                        },
                        "id": 29979,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8626:24:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "8619:6:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint32_$",
                        "typeString": "type(uint32)"
                      },
                      "typeName": {
                        "id": 29973,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8619:6:33",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 29980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8619:32:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 29972,
                  "id": 29981,
                  "nodeType": "Return",
                  "src": "8612:39:33"
                }
              ]
            },
            "documentation": {
              "id": 29961,
              "nodeType": "StructuredDocumentation",
              "src": "8337:123:33",
              "text": " @notice Retrieves the domain from a TokenID\n @param _tokenId The message\n @return The domain"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 29966,
                    "name": "_tokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29963,
                    "src": "8548:8:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 29967,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "8558:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 29968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "TokenId",
                    "nodeType": "MemberAccess",
                    "src": "8558:13:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 29969,
                "modifierName": {
                  "id": 29965,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "8537:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8537:35:33"
              }
            ],
            "name": "domain",
            "parameters": {
              "id": 29964,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29963,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 29983,
                  "src": "8481:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29962,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8481:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8480:18:33"
            },
            "returnParameters": {
              "id": 29972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29971,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29983,
                  "src": "8590:6:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29970,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8590:6:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8589:8:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30003,
            "nodeType": "FunctionDefinition",
            "src": "8784:214:33",
            "body": {
              "id": 30002,
              "nodeType": "Block",
              "src": "8918:80:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "34",
                        "id": 29998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8985:1:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      },
                      {
                        "hexValue": "3332",
                        "id": 29999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8988:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "expression": {
                        "id": 29996,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29986,
                        "src": "8970:8:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 29997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "index",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29121,
                      "src": "8970:14:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                      }
                    },
                    "id": 30000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8970:21:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 29995,
                  "id": 30001,
                  "nodeType": "Return",
                  "src": "8963:28:33"
                }
              ]
            },
            "documentation": {
              "id": 29984,
              "nodeType": "StructuredDocumentation",
              "src": "8664:115:33",
              "text": " @notice Retrieves the ID from a TokenID\n @param _tokenId The message\n @return The ID"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 29989,
                    "name": "_tokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29986,
                    "src": "8863:8:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 29990,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "8873:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 29991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "TokenId",
                    "nodeType": "MemberAccess",
                    "src": "8873:13:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 29992,
                "modifierName": {
                  "id": 29988,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "8852:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8852:35:33"
              }
            ],
            "name": "id",
            "parameters": {
              "id": 29987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29986,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 30003,
                  "src": "8796:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 29985,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8796:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8795:18:33"
            },
            "returnParameters": {
              "id": 29995,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29994,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30003,
                  "src": "8905:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29993,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8905:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8904:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30022,
            "nodeType": "FunctionDefinition",
            "src": "9117:258:33",
            "body": {
              "id": 30021,
              "nodeType": "Block",
              "src": "9254:121:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3136",
                        "id": 30018,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9365:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_16_by_1",
                          "typeString": "int_const 16"
                        },
                        "value": "16"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_16_by_1",
                          "typeString": "int_const 16"
                        }
                      ],
                      "expression": {
                        "id": 30016,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30006,
                        "src": "9343:8:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30017,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "indexAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29198,
                      "src": "9343:21:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256) pure returns (address)"
                      }
                    },
                    "id": 30019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9343:25:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 30015,
                  "id": 30020,
                  "nodeType": "Return",
                  "src": "9336:32:33"
                }
              ]
            },
            "documentation": {
              "id": 30004,
              "nodeType": "StructuredDocumentation",
              "src": "9004:108:33",
              "text": " @notice Retrieves the EVM ID\n @param _tokenId The message\n @return The EVM ID"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30009,
                    "name": "_tokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30006,
                    "src": "9199:8:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30010,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "9209:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "TokenId",
                    "nodeType": "MemberAccess",
                    "src": "9209:13:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30012,
                "modifierName": {
                  "id": 30008,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "9188:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9188:35:33"
              }
            ],
            "name": "evmId",
            "parameters": {
              "id": 30007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30006,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 30022,
                  "src": "9132:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30005,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9132:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9131:18:33"
            },
            "returnParameters": {
              "id": 30015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30014,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30022,
                  "src": "9241:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30013,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9241:7:33",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9240:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30040,
            "nodeType": "FunctionDefinition",
            "src": "9523:131:33",
            "body": {
              "id": 30039,
              "nodeType": "Block",
              "src": "9588:66:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 30034,
                            "name": "TOKEN_ID_LEN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29628,
                            "src": "9630:12:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "hexValue": "31",
                            "id": 30035,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9644:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "expression": {
                            "id": 30032,
                            "name": "_message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30025,
                            "src": "9611:8:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 30033,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "indexUint",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29151,
                          "src": "9611:18:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29,uint256,uint8) pure returns (uint256)"
                          }
                        },
                        "id": 30036,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9611:35:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 30031,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "9605:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": {
                        "id": 30030,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "9605:5:33",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 30037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9605:42:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 30029,
                  "id": 30038,
                  "nodeType": "Return",
                  "src": "9598:49:33"
                }
              ]
            },
            "documentation": {
              "id": 30023,
              "nodeType": "StructuredDocumentation",
              "src": "9381:137:33",
              "text": " @notice Retrieves the action identifier from message\n @param _message The action\n @return The message type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "msgType",
            "parameters": {
              "id": 30026,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30025,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 30040,
                  "src": "9540:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30024,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9540:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9539:18:33"
            },
            "returnParameters": {
              "id": 30029,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30028,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30040,
                  "src": "9581:5:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 30027,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9581:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9580:7:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30058,
            "nodeType": "FunctionDefinition",
            "src": "9792:121:33",
            "body": {
              "id": 30057,
              "nodeType": "Block",
              "src": "9859:54:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 30052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9900:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "hexValue": "31",
                            "id": 30053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9903:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "expression": {
                            "id": 30050,
                            "name": "_action",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30043,
                            "src": "9882:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 30051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "indexUint",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29151,
                          "src": "9882:17:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29,uint256,uint8) pure returns (uint256)"
                          }
                        },
                        "id": 30054,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9882:23:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 30049,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "9876:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": {
                        "id": 30048,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "9876:5:33",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 30055,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9876:30:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 30047,
                  "id": 30056,
                  "nodeType": "Return",
                  "src": "9869:37:33"
                }
              ]
            },
            "documentation": {
              "id": 30041,
              "nodeType": "StructuredDocumentation",
              "src": "9660:127:33",
              "text": " @notice Retrieves the identifier from action\n @param _action The action\n @return The action type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "actionType",
            "parameters": {
              "id": 30044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30043,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 30058,
                  "src": "9812:15:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30042,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9812:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9811:17:33"
            },
            "returnParameters": {
              "id": 30047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30046,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30058,
                  "src": "9852:5:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 30045,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9852:5:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9851:7:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30078,
            "nodeType": "FunctionDefinition",
            "src": "10080:246:33",
            "body": {
              "id": 30077,
              "nodeType": "Block",
              "src": "10236:90:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 30073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10313:1:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "hexValue": "3332",
                        "id": 30074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10316:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "expression": {
                        "id": 30071,
                        "name": "_transferAction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30061,
                        "src": "10291:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "index",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29121,
                      "src": "10291:21:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                      }
                    },
                    "id": 30075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10291:28:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 30070,
                  "id": 30076,
                  "nodeType": "Return",
                  "src": "10284:35:33"
                }
              ]
            },
            "documentation": {
              "id": 30059,
              "nodeType": "StructuredDocumentation",
              "src": "9919:156:33",
              "text": " @notice Retrieves the recipient from a Transfer\n @param _transferAction The message\n @return The recipient address as bytes32"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30064,
                    "name": "_transferAction",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30061,
                    "src": "10173:15:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30065,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "10190:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "Transfer",
                    "nodeType": "MemberAccess",
                    "src": "10190:14:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30067,
                "modifierName": {
                  "id": 30063,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "10162:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10162:43:33"
              }
            ],
            "name": "recipient",
            "parameters": {
              "id": 30062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30061,
                  "mutability": "mutable",
                  "name": "_transferAction",
                  "nodeType": "VariableDeclaration",
                  "scope": 30078,
                  "src": "10099:23:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30060,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "10099:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10098:25:33"
            },
            "returnParameters": {
              "id": 30070,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30069,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30078,
                  "src": "10223:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30068,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10223:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10222:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30097,
            "nodeType": "FunctionDefinition",
            "src": "10482:301:33",
            "body": {
              "id": 30096,
              "nodeType": "Block",
              "src": "10641:142:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3133",
                        "id": 30093,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10773:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_13_by_1",
                          "typeString": "int_const 13"
                        },
                        "value": "13"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_13_by_1",
                          "typeString": "int_const 13"
                        }
                      ],
                      "expression": {
                        "id": 30091,
                        "name": "_transferAction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30081,
                        "src": "10744:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "indexAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29198,
                      "src": "10744:28:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256) pure returns (address)"
                      }
                    },
                    "id": 30094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10744:32:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 30090,
                  "id": 30095,
                  "nodeType": "Return",
                  "src": "10737:39:33"
                }
              ]
            },
            "documentation": {
              "id": 30079,
              "nodeType": "StructuredDocumentation",
              "src": "10332:145:33",
              "text": " @notice Retrieves the EVM Recipient from a Transfer\n @param _transferAction The message\n @return The EVM Recipient"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30084,
                    "name": "_transferAction",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30081,
                    "src": "10578:15:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30085,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "10595:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "Transfer",
                    "nodeType": "MemberAccess",
                    "src": "10595:14:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30087,
                "modifierName": {
                  "id": 30083,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "10567:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10567:43:33"
              }
            ],
            "name": "evmRecipient",
            "parameters": {
              "id": 30082,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30081,
                  "mutability": "mutable",
                  "name": "_transferAction",
                  "nodeType": "VariableDeclaration",
                  "scope": 30097,
                  "src": "10504:23:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30080,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "10504:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10503:25:33"
            },
            "returnParameters": {
              "id": 30090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30089,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30097,
                  "src": "10628:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10628:7:33",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10627:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30112,
            "nodeType": "FunctionDefinition",
            "src": "10925:191:33",
            "body": {
              "id": 30111,
              "nodeType": "Block",
              "src": "10996:120:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3333",
                        "id": 30107,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11102:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_33_by_1",
                          "typeString": "int_const 33"
                        },
                        "value": "33"
                      },
                      {
                        "hexValue": "3332",
                        "id": 30108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11106:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_33_by_1",
                          "typeString": "int_const 33"
                        },
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "expression": {
                        "id": 30105,
                        "name": "_transferAction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30100,
                        "src": "11076:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30106,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "indexUint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29151,
                      "src": "11076:25:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint8) pure returns (uint256)"
                      }
                    },
                    "id": 30109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11076:33:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 30104,
                  "id": 30110,
                  "nodeType": "Return",
                  "src": "11069:40:33"
                }
              ]
            },
            "documentation": {
              "id": 30098,
              "nodeType": "StructuredDocumentation",
              "src": "10789:131:33",
              "text": " @notice Retrieves the amount from a Transfer\n @param _transferAction The message\n @return The amount"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "amnt",
            "parameters": {
              "id": 30101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30100,
                  "mutability": "mutable",
                  "name": "_transferAction",
                  "nodeType": "VariableDeclaration",
                  "scope": 30112,
                  "src": "10939:23:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30099,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "10939:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10938:25:33"
            },
            "returnParameters": {
              "id": 30104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30103,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30112,
                  "src": "10987:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 30102,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10987:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10986:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30127,
            "nodeType": "FunctionDefinition",
            "src": "11268:240:33",
            "body": {
              "id": 30126,
              "nodeType": "Block",
              "src": "11374:134:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3635",
                        "id": 30122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11494:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65_by_1",
                          "typeString": "int_const 65"
                        },
                        "value": "65"
                      },
                      {
                        "hexValue": "3332",
                        "id": 30123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11498:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_65_by_1",
                          "typeString": "int_const 65"
                        },
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "expression": {
                        "id": 30120,
                        "name": "_transferAction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30115,
                        "src": "11472:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "index",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29121,
                      "src": "11472:21:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                      }
                    },
                    "id": 30124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11472:29:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 30119,
                  "id": 30125,
                  "nodeType": "Return",
                  "src": "11465:36:33"
                }
              ]
            },
            "documentation": {
              "id": 30113,
              "nodeType": "StructuredDocumentation",
              "src": "11122:141:33",
              "text": " @notice Retrieves the detailsHash from a Transfer\n @param _transferAction The message\n @return The detailsHash"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "detailsHash",
            "parameters": {
              "id": 30116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30115,
                  "mutability": "mutable",
                  "name": "_transferAction",
                  "nodeType": "VariableDeclaration",
                  "scope": 30127,
                  "src": "11289:23:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30114,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "11289:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11288:25:33"
            },
            "returnParameters": {
              "id": 30119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30118,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30127,
                  "src": "11361:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30117,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11361:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11360:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30152,
            "nodeType": "FunctionDefinition",
            "src": "11640:217:33",
            "body": {
              "id": 30151,
              "nodeType": "Block",
              "src": "11779:78:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 30142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11811:1:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 30143,
                        "name": "TOKEN_ID_LEN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29628,
                        "src": "11814:12:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 30146,
                              "name": "Types",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29620,
                              "src": "11835:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 30147,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TokenId",
                            "nodeType": "MemberAccess",
                            "src": "11835:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 30145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11828:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 30144,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "11828:6:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 30148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11828:21:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 30140,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30130,
                        "src": "11796:8:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28929,
                      "src": "11796:14:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 30149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11796:54:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 30139,
                  "id": 30150,
                  "nodeType": "Return",
                  "src": "11789:61:33"
                }
              ]
            },
            "documentation": {
              "id": 30128,
              "nodeType": "StructuredDocumentation",
              "src": "11514:121:33",
              "text": " @notice Retrieves the token ID from a Message\n @param _message The message\n @return The ID"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30133,
                    "name": "_message",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30130,
                    "src": "11724:8:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30134,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "11734:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "Message",
                    "nodeType": "MemberAccess",
                    "src": "11734:13:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30136,
                "modifierName": {
                  "id": 30132,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "11713:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11713:35:33"
              }
            ],
            "name": "tokenId",
            "parameters": {
              "id": 30131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30130,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 30152,
                  "src": "11657:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30129,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "11657:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11656:18:33"
            },
            "returnParameters": {
              "id": 30139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30138,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30152,
                  "src": "11766:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30137,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "11766:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11765:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30171,
            "nodeType": "FunctionDefinition",
            "src": "12041:216:33",
            "body": {
              "id": 30170,
              "nodeType": "Block",
              "src": "12201:56:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3133",
                        "id": 30167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12247:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_13_by_1",
                          "typeString": "int_const 13"
                        },
                        "value": "13"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_13_by_1",
                          "typeString": "int_const 13"
                        }
                      ],
                      "expression": {
                        "id": 30165,
                        "name": "_transferAction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30155,
                        "src": "12218:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "indexAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29198,
                      "src": "12218:28:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256) pure returns (address)"
                      }
                    },
                    "id": 30168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12218:32:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 30164,
                  "id": 30169,
                  "nodeType": "Return",
                  "src": "12211:39:33"
                }
              ]
            },
            "documentation": {
              "id": 30153,
              "nodeType": "StructuredDocumentation",
              "src": "11863:173:33",
              "text": " @notice Retrieves the hook contract EVM address from a TransferWithHook\n @param _transferAction The message\n @return The hook contract address"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30158,
                    "name": "_transferAction",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30155,
                    "src": "12132:15:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30159,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "12149:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "TransferToHook",
                    "nodeType": "MemberAccess",
                    "src": "12149:20:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30161,
                "modifierName": {
                  "id": 30157,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "12121:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12121:49:33"
              }
            ],
            "name": "evmHook",
            "parameters": {
              "id": 30156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30155,
                  "mutability": "mutable",
                  "name": "_transferAction",
                  "nodeType": "VariableDeclaration",
                  "scope": 30171,
                  "src": "12058:23:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30154,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "12058:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12057:25:33"
            },
            "returnParameters": {
              "id": 30164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30163,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30171,
                  "src": "12188:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12188:7:33",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12187:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30191,
            "nodeType": "FunctionDefinition",
            "src": "12418:320:33",
            "body": {
              "id": 30190,
              "nodeType": "Block",
              "src": "12577:161:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3937",
                        "id": 30186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12724:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_97_by_1",
                          "typeString": "int_const 97"
                        },
                        "value": "97"
                      },
                      {
                        "hexValue": "3332",
                        "id": 30187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12728:2:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_97_by_1",
                          "typeString": "int_const 97"
                        },
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "expression": {
                        "id": 30184,
                        "name": "_transferAction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30174,
                        "src": "12702:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "index",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29121,
                      "src": "12702:21:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                      }
                    },
                    "id": 30188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12702:29:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 30183,
                  "id": 30189,
                  "nodeType": "Return",
                  "src": "12695:36:33"
                }
              ]
            },
            "documentation": {
              "id": 30172,
              "nodeType": "StructuredDocumentation",
              "src": "12263:150:33",
              "text": " @notice Retrieves the sender from a TransferWithHook\n @param _transferAction The message\n @return The sender as bytes32"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30177,
                    "name": "_transferAction",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30174,
                    "src": "12508:15:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30178,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "12525:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "TransferToHook",
                    "nodeType": "MemberAccess",
                    "src": "12525:20:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30180,
                "modifierName": {
                  "id": 30176,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "12497:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12497:49:33"
              }
            ],
            "name": "sender",
            "parameters": {
              "id": 30175,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30174,
                  "mutability": "mutable",
                  "name": "_transferAction",
                  "nodeType": "VariableDeclaration",
                  "scope": 30191,
                  "src": "12434:23:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30173,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "12434:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12433:25:33"
            },
            "returnParameters": {
              "id": 30183,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30182,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30191,
                  "src": "12564:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30181,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12564:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12563:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30220,
            "nodeType": "FunctionDefinition",
            "src": "12909:426:33",
            "body": {
              "id": 30219,
              "nodeType": "Block",
              "src": "13071:264:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30206,
                        "name": "MIN_TRANSFER_HOOK_LEN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29637,
                        "src": "13189:21:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 30211,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 30207,
                              "name": "_transferAction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30194,
                              "src": "13228:15:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 30208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28863,
                            "src": "13228:19:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29) pure returns (uint96)"
                            }
                          },
                          "id": 30209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13228:21:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "id": 30210,
                          "name": "MIN_TRANSFER_HOOK_LEN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29637,
                          "src": "13252:21:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13228:45:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 30214,
                              "name": "Types",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29620,
                              "src": "13298:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 30215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "ExtraData",
                            "nodeType": "MemberAccess",
                            "src": "13298:15:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 30213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13291:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 30212,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "13291:6:33",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 30216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13291:23:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 30204,
                        "name": "_transferAction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30194,
                        "src": "13150:15:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30205,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28929,
                      "src": "13150:21:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 30217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13150:178:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 30203,
                  "id": 30218,
                  "nodeType": "Return",
                  "src": "13131:197:33"
                }
              ]
            },
            "documentation": {
              "id": 30192,
              "nodeType": "StructuredDocumentation",
              "src": "12744:160:33",
              "text": " @notice Retrieves the extra data from a TransferWithHook\n @param _transferAction The message\n @return A TypedMemview of extraData"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30197,
                    "name": "_transferAction",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30194,
                    "src": "13002:15:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30198,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "13019:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "TransferToHook",
                    "nodeType": "MemberAccess",
                    "src": "13019:20:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30200,
                "modifierName": {
                  "id": 30196,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "12991:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12991:49:33"
              }
            ],
            "name": "extraData",
            "parameters": {
              "id": 30195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30194,
                  "mutability": "mutable",
                  "name": "_transferAction",
                  "nodeType": "VariableDeclaration",
                  "scope": 30220,
                  "src": "12928:23:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30193,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "12928:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12927:25:33"
            },
            "returnParameters": {
              "id": 30203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30202,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30220,
                  "src": "13058:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30201,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13058:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13057:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30258,
            "nodeType": "FunctionDefinition",
            "src": "13474:319:33",
            "body": {
              "id": 30257,
              "nodeType": "Block",
              "src": "13612:181:33",
              "statements": [
                {
                  "assignments": [
                    30234
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30234,
                      "mutability": "mutable",
                      "name": "_actionLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 30257,
                      "src": "13622:18:33",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 30233,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13622:7:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30240,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 30239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 30235,
                          "name": "_message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30223,
                          "src": "13643:8:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "id": 30236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28863,
                        "src": "13643:12:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$",
                          "typeString": "function (bytes29) pure returns (uint96)"
                        }
                      },
                      "id": 30237,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13643:14:33",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 30238,
                      "name": "TOKEN_ID_LEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29628,
                      "src": "13660:12:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13643:29:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13622:50:33"
                },
                {
                  "assignments": [
                    30242
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30242,
                      "mutability": "mutable",
                      "name": "_type",
                      "nodeType": "VariableDeclaration",
                      "scope": 30257,
                      "src": "13682:12:33",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "typeName": {
                        "id": 30241,
                        "name": "uint40",
                        "nodeType": "ElementaryTypeName",
                        "src": "13682:6:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30249,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 30246,
                            "name": "_message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30223,
                            "src": "13712:8:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 30245,
                          "name": "msgType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30040,
                          "src": "13704:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint8_$",
                            "typeString": "function (bytes29) pure returns (uint8)"
                          }
                        },
                        "id": 30247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13704:17:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 30244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "13697:6:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint40_$",
                        "typeString": "type(uint40)"
                      },
                      "typeName": {
                        "id": 30243,
                        "name": "uint40",
                        "nodeType": "ElementaryTypeName",
                        "src": "13697:6:33",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 30248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13697:25:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13682:40:33"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30252,
                        "name": "TOKEN_ID_LEN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29628,
                        "src": "13754:12:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 30253,
                        "name": "_actionLen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30234,
                        "src": "13768:10:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 30254,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30242,
                        "src": "13780:5:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 30250,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30223,
                        "src": "13739:8:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28929,
                      "src": "13739:14:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 30255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13739:47:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 30232,
                  "id": 30256,
                  "nodeType": "Return",
                  "src": "13732:54:33"
                }
              ]
            },
            "documentation": {
              "id": 30221,
              "nodeType": "StructuredDocumentation",
              "src": "13341:128:33",
              "text": " @notice Retrieves the action data from a Message\n @param _message The message\n @return The action"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 30226,
                    "name": "_message",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30223,
                    "src": "13557:8:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  {
                    "expression": {
                      "id": 30227,
                      "name": "Types",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29620,
                      "src": "13567:5:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                        "typeString": "type(enum BridgeMessage.Types)"
                      }
                    },
                    "id": 30228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "Message",
                    "nodeType": "MemberAccess",
                    "src": "13567:13:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Types_$29620",
                      "typeString": "enum BridgeMessage.Types"
                    }
                  }
                ],
                "id": 30229,
                "modifierName": {
                  "id": 30225,
                  "name": "typeAssert",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 29655,
                  "src": "13546:10:33",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes29_$_t_enum$_Types_$29620_$",
                    "typeString": "modifier (bytes29,enum BridgeMessage.Types)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13546:35:33"
              }
            ],
            "name": "action",
            "parameters": {
              "id": 30224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30223,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 30258,
                  "src": "13490:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30222,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13490:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13489:18:33"
            },
            "returnParameters": {
              "id": 30232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30231,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30258,
                  "src": "13599:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30230,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13599:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13598:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30285,
            "nodeType": "FunctionDefinition",
            "src": "13926:234:33",
            "body": {
              "id": 30284,
              "nodeType": "Block",
              "src": "13998:162:33",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 30267,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30261,
                        "src": "14033:8:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 30266,
                      "name": "isValidMessageLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29699,
                      "src": "14012:20:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                        "typeString": "function (bytes29) pure returns (bool)"
                      }
                    },
                    "id": 30268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14012:30:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 30279,
                  "nodeType": "IfStatement",
                  "src": "14008:106:33",
                  "trueBody": {
                    "id": 30278,
                    "nodeType": "Block",
                    "src": "14044:70:33",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 30273,
                                    "name": "Types",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29620,
                                    "src": "14088:5:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                      "typeString": "type(enum BridgeMessage.Types)"
                                    }
                                  },
                                  "id": 30274,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "Message",
                                  "nodeType": "MemberAccess",
                                  "src": "14088:13:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Types_$29620",
                                    "typeString": "enum BridgeMessage.Types"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Types_$29620",
                                    "typeString": "enum BridgeMessage.Types"
                                  }
                                ],
                                "id": 30272,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14081:6:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint40_$",
                                  "typeString": "type(uint40)"
                                },
                                "typeName": {
                                  "id": 30271,
                                  "name": "uint40",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14081:6:33",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 30275,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14081:21:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            ],
                            "expression": {
                              "id": 30269,
                              "name": "_message",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30261,
                              "src": "14065:8:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 30270,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "castTo",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28690,
                            "src": "14065:15:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29,uint40) pure returns (bytes29)"
                            }
                          },
                          "id": 30276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14065:38:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "functionReturnParameters": 30265,
                        "id": 30277,
                        "nodeType": "Return",
                        "src": "14058:45:33"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 30280,
                        "name": "TypedMemView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29602,
                        "src": "14130:12:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TypedMemView_$29602_$",
                          "typeString": "type(library TypedMemView)"
                        }
                      },
                      "id": 30281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nullView",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28528,
                      "src": "14130:21:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes29_$",
                        "typeString": "function () pure returns (bytes29)"
                      }
                    },
                    "id": 30282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14130:23:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 30265,
                  "id": 30283,
                  "nodeType": "Return",
                  "src": "14123:30:33"
                }
              ]
            },
            "documentation": {
              "id": 30259,
              "nodeType": "StructuredDocumentation",
              "src": "13799:122:33",
              "text": " @notice Converts to a Message\n @param _message The message\n @return The newly typed message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tryAsMessage",
            "parameters": {
              "id": 30262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30261,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 30285,
                  "src": "13948:16:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30260,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13948:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13947:18:33"
            },
            "returnParameters": {
              "id": 30265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30264,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30285,
                  "src": "13989:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30263,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13989:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13988:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30300,
            "nodeType": "FunctionDefinition",
            "src": "14300:127:33",
            "body": {
              "id": 30299,
              "nodeType": "Block",
              "src": "14370:57:33",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 30294,
                            "name": "_view",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30288,
                            "src": "14400:5:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 30293,
                          "name": "tryAsMessage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30285,
                          "src": "14387:12:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (bytes29)"
                          }
                        },
                        "id": 30295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14387:19:33",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "assertValid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28598,
                      "src": "14387:31:33",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes29)"
                      }
                    },
                    "id": 30297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14387:33:33",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 30292,
                  "id": 30298,
                  "nodeType": "Return",
                  "src": "14380:40:33"
                }
              ]
            },
            "documentation": {
              "id": 30286,
              "nodeType": "StructuredDocumentation",
              "src": "14166:129:33",
              "text": " @notice Asserts that the message is of type Message\n @param _view The message\n @return The message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mustBeMessage",
            "parameters": {
              "id": 30289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30288,
                  "mutability": "mutable",
                  "name": "_view",
                  "nodeType": "VariableDeclaration",
                  "scope": 30300,
                  "src": "14323:13:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30287,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14323:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14322:15:33"
            },
            "returnParameters": {
              "id": 30292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30291,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30300,
                  "src": "14361:7:33",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30290,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14361:7:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14360:9:33"
            },
            "scope": 30301,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          30301
        ],
        "name": "BridgeMessage",
        "scope": 30302
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 33
}