{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_localDomain",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldUpdater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newUpdater",
          "type": "address"
        }
      ],
      "name": "NewUpdater",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "messageHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": true,
          "internalType": "bytes",
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "Process",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousConfirmAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newConfirmAt",
          "type": "uint256"
        }
      ],
      "name": "SetConfirmation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timeout",
          "type": "uint256"
        }
      ],
      "name": "SetOptimisticTimeout",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "homeDomain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "Update",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "LEGACY_STATUS_NONE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEGACY_STATUS_PROCESSED",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEGACY_STATUS_PROVEN",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_root",
          "type": "bytes32"
        }
      ],
      "name": "acceptableRoot",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "confirmAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "homeDomainHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_remoteDomain",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_updater",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_optimisticSeconds",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "messages",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "optimisticSeconds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_leaf",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_proof",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "prove",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_proof",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "proveAndProcess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "remoteDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_root",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_confirmAt",
          "type": "uint256"
        }
      ],
      "name": "setConfirmation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_optimisticSeconds",
          "type": "uint256"
        }
      ],
      "name": "setOptimisticTimeout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updater",
          "type": "address"
        }
      ],
      "name": "setUpdater",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum NomadBase.States",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_oldRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "update",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updater",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b50604051612f18380380612f188339818101604052602081101561003357600080fd5b505160e081901b6001600160e01b03191660805263ffffffff16612eaf61006960003980610aed5280610b415250612eaf6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638d3638f4116100ee578063b1e3fb8c11610097578063df034cd011610071578063df034cd014610585578063e7e7a7b71461058d578063f2fde38b146105d8578063ffa1ad741461060b576101a3565b8063b1e3fb8c146104a2578063b31c01fb146104aa578063c19d93fb1461055c576101a3565b8063961681dc116100c8578063961681dc1461044a5780639d54f41914610452578063a3f81d6814610485576101a3565b80638d3638f4146103525780638da5cb5b14610373578063928bc4b2146103a4576101a3565b806345630b1a11610150578063715018a61161012a578063715018a61461031057806371bfb7b814610318578063885b5e2d14610335576101a3565b806345630b1a146102525780636188af0e1461025a57806367a6771d14610308576101a3565b80632e7bb32c116101815780632e7bb32c14610204578063371d30711461020c578063399926681461024a576101a3565b8063088b5ed3146101a857806318810b89146101cd5780632bbd59ca146101e7575b600080fd5b6101cb600480360360408110156101be57600080fd5b5080359060200135610629565b005b6101d56107a1565b60408051918252519081900360200190f35b6101d5600480360360208110156101fd57600080fd5b50356107a6565b6101d56107b8565b610236600480360361044081101561022357600080fd5b50803590602081019061042001356107bd565b604080519115158252519081900360200190f35b6101d56108a5565b6101d56108ab565b6101cb600480360361044081101561027157600080fd5b81019060208101813564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460018302840111640100000000831117156102c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550929350505061040082013590506108c5565b6101d5610975565b6101cb61097b565b6101d56004803603602081101561032e57600080fd5b5035610a25565b6101cb6004803603602081101561034b57600080fd5b5035610a37565b61035a610aeb565b6040805163ffffffff9092168252519081900360200190f35b61037b610b0f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610236600480360360208110156103ba57600080fd5b8101906020810181356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184600183028401116401000000008311171561040957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b2b945050505050565b61035a610fd4565b6101cb6004803603602081101561046857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fe0565b6102366004803603602081101561049b57600080fd5b5035611091565b6101d56110e5565b6101cb600480360360608110156104c057600080fd5b8135916020810135918101906060810160408201356401000000008111156104e757600080fd5b8201836020820111156104f957600080fd5b8035906020019184600183028401116401000000008311171561051b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110ea945050505050565b6105646112a0565b6040518082600281111561057457fe5b815260200191505060405180910390f35b61037b6112c1565b6101cb600480360360808110156105a357600080fd5b5063ffffffff8135169073ffffffffffffffffffffffffffffffffffffffff60208201351690604081013590606001356112dd565b6101cb600480360360208110156105ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611481565b6106136107a1565b6040805160ff9092168252519081900360200190f35b610631611623565b73ffffffffffffffffffffffffffffffffffffffff1661064f610b0f565b73ffffffffffffffffffffffffffffffffffffffff16146106d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811515806106dd575080155b61074857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616e277420736574207a65726f20726f6f7400000000000000000000000000604482015290519081900360640190fd5b60008281526099602090815260409182902080549084905582518181529182018490528251909285927fe906d465281862f8f37a1bdd7d810e50347f06b0b493701cca6ccb8e6a7b2694929081900390910190a2505050565b600081565b609a6020526000908152604090205481565b600181565b6000838152609a60205260408120546002141561083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c72656164792070726f636573736564000000000000000000000000000000604482015290519081900360640190fd5b60006108718585602080602002604051908101604052809291908260208002808284376000920191909152508791506116279050565b905061087c81611091565b15610898576000858152609a602052604090205550600161089e565b60009150505b9392505050565b60975481565b6096546000906108c09063ffffffff166116d2565b905090565b82516020808501919091206000818152609a9092526040909120546108e990611091565b806108fa57506108fa8184846107bd565b61096557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2170726f76650000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61096e84610b2b565b5050505050565b60665481565b610983611623565b73ffffffffffffffffffffffffffffffffffffffff166109a1610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610a2357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60996020526000908152604090205481565b610a3f611623565b73ffffffffffffffffffffffffffffffffffffffff16610a5d610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610adf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611747565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b600080610b38838261187e565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016610b8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118a4565b63ffffffff1614610bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2164657374696e6174696f6e0000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610c2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118d5565b6000818152609a6020526040902054909150610c4690611091565b610cb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2170726f76656e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60985460ff16600114610d2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f217265656e7472616e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556000818152609a6020526040902060029055610d8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611914565b73ffffffffffffffffffffffffffffffffffffffff1663ab2dc3f5610dd07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611927565b610dfb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611957565b610e267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716611988565b610e7b610e547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166119b9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016611a2a565b6040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ee5578181015183820152602001610ecd565b50505050905090810190601f168015610f125780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b50506040517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47092506001915083907fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890600090a45050609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590505b919050565b60965463ffffffff1681565b610fe8611623565b73ffffffffffffffffffffffffffffffffffffffff16611006610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461108857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611a6e565b600060018214156110a457506001610fcf565b60028214806110b1575081155b156110be57506000610fcf565b600082815260996020526040902054806110dc576000915050610fcf565b42101592915050565b600281565b606654831461115a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f742063757272656e74207570646174650000000000000000000000000000604482015290519081900360640190fd5b611165838383611af6565b6111d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b6111d8610a23565b6097546000838152609960209081526040808320429094019093556066859055609654835182815285518184015285518795899563ffffffff909416947f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b29489949384938401928601918190849084905b83811015611261578181015183820152602001611249565b50505050905090810190601f16801561128e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4505050565b60655474010000000000000000000000000000000000000000900460ff1681565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600054610100900460ff16806112f657506112f6611b88565b80611304575060005460ff16155b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156113bf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6113c884611b99565b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556096805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090911617905560668390558215611443576000838152609960205260409020600190555b61144c82611747565b801561096e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505050565b611489611623565b73ffffffffffffffffffffffffffffffffffffffff166114a7610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461152957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611595576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d286026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b8260005b60208110156116ca57600183821c16600085836020811061164857fe5b60200201519050816001141561168e57808460405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506116c0565b838160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093505b505060010161162b565b509392505050565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b609754801580159061175a57506105dc81115b156117d0576105dc8210156117d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f7074696d69737469632074696d656f757420746f6f206c6f77000000000000604482015290519081900360640190fd5b6301e13380821061184257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f7074696d69737469632074696d656f757420746f6f20686967680000000000604482015290519081900360640190fd5b60978290556040805183815290517fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb49181900360200190a15050565b81516000906020840161189964ffffffffff85168284611cfe565b925050505b92915050565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660286004611d5d565b6000806118e183611d7e565b6bffffffffffffffffffffffff16905060006118fc84611d92565b6bffffffffffffffffffffffff169091209392505050565b600061189e61192283611da6565b611dd7565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660046020611dda565b600061189e604c806119ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611d92565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff91909116036000611f85565b6060600080611a3884611d92565b6bffffffffffffffffffffffff1690506040519150819250611a5d8483602001612017565b508181016020016040529052919050565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b600080611b016108ab565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611b428161214d565b60655490915073ffffffffffffffffffffffffffffffffffffffff16611b68828561219e565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b6000611b933061222e565b15905090565b600054610100900460ff1680611bb25750611bb2611b88565b80611bc0575060005460ff16155b611c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff16158015611c7b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c83612234565b611c8c82611a6e565b606580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015611cfa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b600080611d0b8484612357565b9050604051811115611d1b575060005b80611d49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061089e565b611d548585856123c9565b95945050505050565b60008160200360080260ff16611d74858585611dda565b901c949350505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316602c6020611dda565b90565b600060ff8216611dec5750600061089e565b611df584611d92565b6bffffffffffffffffffffffff16611e108460ff8516612357565b1115611eef57611e51611e2285611d7e565b6bffffffffffffffffffffffff16611e3986611d92565b6bffffffffffffffffffffffff16858560ff166123dc565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eb4578181015183820152602001611e9c565b50505050905090810190601f168015611ee15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff161115611f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612de1603a913960400191505060405180910390fd5b600882026000611f5b86611d7e565b6bffffffffffffffffffffffff1690506000611f7683612537565b91909501511695945050505050565b600080611f9186611d7e565b6bffffffffffffffffffffffff169050611faa86612580565b611fbe85611fb88489612357565b90612357565b1115611fed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061200f565b611ff78186612357565b905061200b8364ffffffffff168286611cfe565b9150505b949350505050565b6000612022836125aa565b612077576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e1b6028913960400191505060405180910390fd5b612080836125bc565b6120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612e43602b913960400191505060405180910390fd5b60006120e084611d92565b6bffffffffffffffffffffffff16905060006120fb85611d7e565b6bffffffffffffffffffffffff16905060006040519050848111156121205760206060fd5b8285848460045afa50612143612135876125f9565b64ffffffffff1686856123c9565b9695505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461221057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612143868285856125ff565b3b151590565b600054610100900460ff168061224d575061224d611b88565b8061225b575060005460ff16155b6122b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561231657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61231e6127ed565b6123266128ff565b8015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b8181018281101561189e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b606060006123e986612a8f565b91505060006123f786612a8f565b915050600061240586612a8f565b915050600061241386612a8f565b915050838383836040516020018080612e6e603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a8201526050016021612d7082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b600061258b82611d92565b61259483611d7e565b016bffffffffffffffffffffffff169050919050565b60006125b582612b63565b1592915050565b60006125c7826125f9565b64ffffffffff1664ffffffffff14156125e257506000610fcf565b60006125ed83612580565b60405110199392505050565b60d81c90565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561267a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b8360ff16601b148061268f57508360ff16601c145b6126e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612dbf6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612740573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611d5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600054610100900460ff16806128065750612806611b88565b80612814575060005460ff16155b612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561232657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806129185750612918611b88565b80612926575060005460ff16155b61297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156129e157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60006129eb611623565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080601f5b600f8160ff161115612af75760ff600882021684901c612ab481612b8b565b61ffff16841793508160ff16601014612acf57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612a95565b50600f5b60ff8160ff161015612b5d5760ff600882021684901c612b1a81612b8b565b61ffff16831792508160ff16600014612b3557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612afb565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b6000612b9d60048360ff16901c612bbb565b60ff161760081b62ffff0016612bb282612bbb565b60ff1617919050565b600060f08083179060ff82161415612bd7576030915050610fcf565b8060ff1660f11415612bed576031915050610fcf565b8060ff1660f21415612c03576032915050610fcf565b8060ff1660f31415612c19576033915050610fcf565b8060ff1660f41415612c2f576034915050610fcf565b8060ff1660f51415612c45576035915050610fcf565b8060ff1660f61415612c5b576036915050610fcf565b8060ff1660f71415612c71576037915050610fcf565b8060ff1660f81415612c87576038915050610fcf565b8060ff1660f91415612c9d576039915050610fcf565b8060ff1660fa1415612cb3576061915050610fcf565b8060ff1660fb1415612cc9576062915050610fcf565b8060ff1660fc1415612cdf576063915050610fcf565b8060ff1660fd1415612cf5576064915050610fcf565b8060ff1660fe1415612d0b576065915050610fcf565b8060ff1660ff1415612d21576066915050610fcf565b5091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75652e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756554797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e20333220627974657354797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "633:12105:21:-:0;;;2819:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2819:59:21;2520:26:19;;;;-1:-1:-1;;;;;;2520:26:19;;;633:12105:21;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80638d3638f4116100ee578063b1e3fb8c11610097578063df034cd011610071578063df034cd014610585578063e7e7a7b71461058d578063f2fde38b146105d8578063ffa1ad741461060b576101a3565b8063b1e3fb8c146104a2578063b31c01fb146104aa578063c19d93fb1461055c576101a3565b8063961681dc116100c8578063961681dc1461044a5780639d54f41914610452578063a3f81d6814610485576101a3565b80638d3638f4146103525780638da5cb5b14610373578063928bc4b2146103a4576101a3565b806345630b1a11610150578063715018a61161012a578063715018a61461031057806371bfb7b814610318578063885b5e2d14610335576101a3565b806345630b1a146102525780636188af0e1461025a57806367a6771d14610308576101a3565b80632e7bb32c116101815780632e7bb32c14610204578063371d30711461020c578063399926681461024a576101a3565b8063088b5ed3146101a857806318810b89146101cd5780632bbd59ca146101e7575b600080fd5b6101cb600480360360408110156101be57600080fd5b5080359060200135610629565b005b6101d56107a1565b60408051918252519081900360200190f35b6101d5600480360360208110156101fd57600080fd5b50356107a6565b6101d56107b8565b610236600480360361044081101561022357600080fd5b50803590602081019061042001356107bd565b604080519115158252519081900360200190f35b6101d56108a5565b6101d56108ab565b6101cb600480360361044081101561027157600080fd5b81019060208101813564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460018302840111640100000000831117156102c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550929350505061040082013590506108c5565b6101d5610975565b6101cb61097b565b6101d56004803603602081101561032e57600080fd5b5035610a25565b6101cb6004803603602081101561034b57600080fd5b5035610a37565b61035a610aeb565b6040805163ffffffff9092168252519081900360200190f35b61037b610b0f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610236600480360360208110156103ba57600080fd5b8101906020810181356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184600183028401116401000000008311171561040957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b2b945050505050565b61035a610fd4565b6101cb6004803603602081101561046857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fe0565b6102366004803603602081101561049b57600080fd5b5035611091565b6101d56110e5565b6101cb600480360360608110156104c057600080fd5b8135916020810135918101906060810160408201356401000000008111156104e757600080fd5b8201836020820111156104f957600080fd5b8035906020019184600183028401116401000000008311171561051b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110ea945050505050565b6105646112a0565b6040518082600281111561057457fe5b815260200191505060405180910390f35b61037b6112c1565b6101cb600480360360808110156105a357600080fd5b5063ffffffff8135169073ffffffffffffffffffffffffffffffffffffffff60208201351690604081013590606001356112dd565b6101cb600480360360208110156105ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611481565b6106136107a1565b6040805160ff9092168252519081900360200190f35b610631611623565b73ffffffffffffffffffffffffffffffffffffffff1661064f610b0f565b73ffffffffffffffffffffffffffffffffffffffff16146106d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811515806106dd575080155b61074857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616e277420736574207a65726f20726f6f7400000000000000000000000000604482015290519081900360640190fd5b60008281526099602090815260409182902080549084905582518181529182018490528251909285927fe906d465281862f8f37a1bdd7d810e50347f06b0b493701cca6ccb8e6a7b2694929081900390910190a2505050565b600081565b609a6020526000908152604090205481565b600181565b6000838152609a60205260408120546002141561083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c72656164792070726f636573736564000000000000000000000000000000604482015290519081900360640190fd5b60006108718585602080602002604051908101604052809291908260208002808284376000920191909152508791506116279050565b905061087c81611091565b15610898576000858152609a602052604090205550600161089e565b60009150505b9392505050565b60975481565b6096546000906108c09063ffffffff166116d2565b905090565b82516020808501919091206000818152609a9092526040909120546108e990611091565b806108fa57506108fa8184846107bd565b61096557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2170726f76650000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61096e84610b2b565b5050505050565b60665481565b610983611623565b73ffffffffffffffffffffffffffffffffffffffff166109a1610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610a2357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60996020526000908152604090205481565b610a3f611623565b73ffffffffffffffffffffffffffffffffffffffff16610a5d610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610adf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611747565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b600080610b38838261187e565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016610b8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118a4565b63ffffffff1614610bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2164657374696e6174696f6e0000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610c2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118d5565b6000818152609a6020526040902054909150610c4690611091565b610cb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2170726f76656e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60985460ff16600114610d2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f217265656e7472616e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556000818152609a6020526040902060029055610d8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611914565b73ffffffffffffffffffffffffffffffffffffffff1663ab2dc3f5610dd07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611927565b610dfb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611957565b610e267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716611988565b610e7b610e547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166119b9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016611a2a565b6040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ee5578181015183820152602001610ecd565b50505050905090810190601f168015610f125780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b50506040517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47092506001915083907fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890600090a45050609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590505b919050565b60965463ffffffff1681565b610fe8611623565b73ffffffffffffffffffffffffffffffffffffffff16611006610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461108857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611a6e565b600060018214156110a457506001610fcf565b60028214806110b1575081155b156110be57506000610fcf565b600082815260996020526040902054806110dc576000915050610fcf565b42101592915050565b600281565b606654831461115a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f742063757272656e74207570646174650000000000000000000000000000604482015290519081900360640190fd5b611165838383611af6565b6111d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b6111d8610a23565b6097546000838152609960209081526040808320429094019093556066859055609654835182815285518184015285518795899563ffffffff909416947f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b29489949384938401928601918190849084905b83811015611261578181015183820152602001611249565b50505050905090810190601f16801561128e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4505050565b60655474010000000000000000000000000000000000000000900460ff1681565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600054610100900460ff16806112f657506112f6611b88565b80611304575060005460ff16155b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156113bf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6113c884611b99565b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556096805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090911617905560668390558215611443576000838152609960205260409020600190555b61144c82611747565b801561096e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505050565b611489611623565b73ffffffffffffffffffffffffffffffffffffffff166114a7610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461152957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611595576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d286026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b8260005b60208110156116ca57600183821c16600085836020811061164857fe5b60200201519050816001141561168e57808460405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506116c0565b838160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093505b505060010161162b565b509392505050565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b609754801580159061175a57506105dc81115b156117d0576105dc8210156117d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f7074696d69737469632074696d656f757420746f6f206c6f77000000000000604482015290519081900360640190fd5b6301e13380821061184257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f7074696d69737469632074696d656f757420746f6f20686967680000000000604482015290519081900360640190fd5b60978290556040805183815290517fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb49181900360200190a15050565b81516000906020840161189964ffffffffff85168284611cfe565b925050505b92915050565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660286004611d5d565b6000806118e183611d7e565b6bffffffffffffffffffffffff16905060006118fc84611d92565b6bffffffffffffffffffffffff169091209392505050565b600061189e61192283611da6565b611dd7565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660046020611dda565b600061189e604c806119ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611d92565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff91909116036000611f85565b6060600080611a3884611d92565b6bffffffffffffffffffffffff1690506040519150819250611a5d8483602001612017565b508181016020016040529052919050565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b600080611b016108ab565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611b428161214d565b60655490915073ffffffffffffffffffffffffffffffffffffffff16611b68828561219e565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b6000611b933061222e565b15905090565b600054610100900460ff1680611bb25750611bb2611b88565b80611bc0575060005460ff16155b611c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff16158015611c7b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c83612234565b611c8c82611a6e565b606580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015611cfa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b600080611d0b8484612357565b9050604051811115611d1b575060005b80611d49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061089e565b611d548585856123c9565b95945050505050565b60008160200360080260ff16611d74858585611dda565b901c949350505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316602c6020611dda565b90565b600060ff8216611dec5750600061089e565b611df584611d92565b6bffffffffffffffffffffffff16611e108460ff8516612357565b1115611eef57611e51611e2285611d7e565b6bffffffffffffffffffffffff16611e3986611d92565b6bffffffffffffffffffffffff16858560ff166123dc565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eb4578181015183820152602001611e9c565b50505050905090810190601f168015611ee15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff161115611f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612de1603a913960400191505060405180910390fd5b600882026000611f5b86611d7e565b6bffffffffffffffffffffffff1690506000611f7683612537565b91909501511695945050505050565b600080611f9186611d7e565b6bffffffffffffffffffffffff169050611faa86612580565b611fbe85611fb88489612357565b90612357565b1115611fed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061200f565b611ff78186612357565b905061200b8364ffffffffff168286611cfe565b9150505b949350505050565b6000612022836125aa565b612077576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e1b6028913960400191505060405180910390fd5b612080836125bc565b6120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612e43602b913960400191505060405180910390fd5b60006120e084611d92565b6bffffffffffffffffffffffff16905060006120fb85611d7e565b6bffffffffffffffffffffffff16905060006040519050848111156121205760206060fd5b8285848460045afa50612143612135876125f9565b64ffffffffff1686856123c9565b9695505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461221057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612143868285856125ff565b3b151590565b600054610100900460ff168061224d575061224d611b88565b8061225b575060005460ff16155b6122b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561231657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61231e6127ed565b6123266128ff565b8015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b8181018281101561189e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b606060006123e986612a8f565b91505060006123f786612a8f565b915050600061240586612a8f565b915050600061241386612a8f565b915050838383836040516020018080612e6e603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a8201526050016021612d7082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b600061258b82611d92565b61259483611d7e565b016bffffffffffffffffffffffff169050919050565b60006125b582612b63565b1592915050565b60006125c7826125f9565b64ffffffffff1664ffffffffff14156125e257506000610fcf565b60006125ed83612580565b60405110199392505050565b60d81c90565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561267a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b8360ff16601b148061268f57508360ff16601c145b6126e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612dbf6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612740573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611d5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600054610100900460ff16806128065750612806611b88565b80612814575060005460ff16155b612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561232657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806129185750612918611b88565b80612926575060005460ff16155b61297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156129e157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60006129eb611623565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080601f5b600f8160ff161115612af75760ff600882021684901c612ab481612b8b565b61ffff16841793508160ff16601014612acf57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612a95565b50600f5b60ff8160ff161015612b5d5760ff600882021684901c612b1a81612b8b565b61ffff16831792508160ff16600014612b3557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612afb565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b6000612b9d60048360ff16901c612bbb565b60ff161760081b62ffff0016612bb282612bbb565b60ff1617919050565b600060f08083179060ff82161415612bd7576030915050610fcf565b8060ff1660f11415612bed576031915050610fcf565b8060ff1660f21415612c03576032915050610fcf565b8060ff1660f31415612c19576033915050610fcf565b8060ff1660f41415612c2f576034915050610fcf565b8060ff1660f51415612c45576035915050610fcf565b8060ff1660f61415612c5b576036915050610fcf565b8060ff1660f71415612c71576037915050610fcf565b8060ff1660f81415612c87576038915050610fcf565b8060ff1660f91415612c9d576039915050610fcf565b8060ff1660fa1415612cb3576061915050610fcf565b8060ff1660fb1415612cc9576062915050610fcf565b8060ff1660fc1415612cdf576063915050610fcf565b8060ff1660fd1415612cf5576064915050610fcf565b8060ff1660fe1415612d0b576065915050610fcf565b8060ff1660ff1415612d21576066915050610fcf565b5091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75652e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756554797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e20333220627974657354797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "633:12105:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8789:349;;;;;;;;;;;;;;;;-1:-1:-1;8789:349:21;;;;;;;:::i;:::-;;909:55;;;:::i;:::-;;;;;;;;;;;;;;;;1538:43;;;;;;;;;;;;;;;;-1:-1:-1;1538:43:21;;:::i;970:66::-;;;:::i;10657:711::-;;;;;;;;;;;;;;;;-1:-1:-1;10657:711:21;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1292:32;;;:::i;11451:118::-;;;:::i;5844:374::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5844:374:21;;-1:-1:-1;5844:374:21;;-1:-1:-1;;;5844:374:21;;;;;-1:-1:-1;5844:374:21;:::i;1537:28:19:-;;;:::i;4488:84::-;;;:::i;1438:44:21:-;;;;;;;;;;;;;;;;-1:-1:-1;1438:44:21;;:::i;7956:155::-;;;;;;;;;;;;;;;;-1:-1:-1;7956:155:21;;:::i;1266:35:19:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1335:85:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6730:975:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6730:975:21;;-1:-1:-1;6730:975:21;;-1:-1:-1;;;;;6730:975:21:i;1195:26::-;;;:::i;8343:95::-;;;;;;;;;;;;;;;;-1:-1:-1;8343:95:21;;;;:::i;9505:486::-;;;;;;;;;;;;;;;;-1:-1:-1;9505:486:21;;:::i;1042:69::-;;;:::i;4542:722::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4542:722:21;;-1:-1:-1;4542:722:21;;-1:-1:-1;;;;;4542:722:21:i;1453:19:19:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1392:22;;;:::i;3537:517:21:-;;;;;;;;;;;;;;;;-1:-1:-1;3537:517:21;;;;;;;;;;;;;;;;;;;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;171:33:22:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8789:349:21;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8906:19:21;;::::1;::::0;:38:::1;;-1:-1:-1::0;8929:15:21;;8906:38:::1;8898:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8978:26;9007:16:::0;;;:9:::1;:16;::::0;;;;;;;;;;9033:29;;;;9077:54;;;;;;;::::1;::::0;;;;;9007:16;;9017:5;;9077:54:::1;::::0;;;;;;;;;::::1;1617:1:7;8789:349:21::0;;:::o;909:55::-;962:1;909:55;:::o;1538:43::-;;;;;;;;;;;;;:::o;970:66::-;1033:1;970:66;:::o;10657:711::-;10778:4;10931:15;;;:8;:15;;;;;;1108:1;10931:42;;10910:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11084:23;11110:43;11131:5;11138:6;11110:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11146:6:21;;-1:-1:-1;11110:20:21;;-1:-1:-1;11110:43:21:i;:::-;11084:69;;11224:31;11239:15;11224:14;:31::i;:::-;11220:120;;;11271:15;;;;:8;:15;;;;;:33;-1:-1:-1;11325:4:21;11318:11;;11220:120;11356:5;11349:12;;;10657:711;;;;;;:::o;1292:32::-;;;;:::o;11451:118::-;11549:12;;11507:7;;11533:29;;11549:12;;11533:15;:29::i;:::-;11526:36;;11451:118;:::o;5844:374::-;6009:19;;;;;;;;;;5986:20;6074:22;;;:8;:22;;;;;;;;6059:38;;:14;:38::i;:::-;:93;;;;6117:35;6123:12;6137:6;6145;6117:5;:35::i;:::-;6038:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6194:17;6202:8;6194:7;:17::i;:::-;;5844:374;;;;:::o;1537:28:19:-;;;;:::o;4488:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:84:19:o;1438:44:21:-;;;;;;;;;;;;;:::o;7956:155::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8063:41:21::1;8085:18;8063:21;:41::i;:::-;7956:155:::0;:::o;1266:35:19:-;;;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;6730:975:21:-;6786:13;;6876:15;:8;6786:13;6876:12;:15::i;:::-;6863:28;-1:-1:-1;6909:31:21;6929:11;6909:31;:16;:14;;;;:16::i;:::-;:31;;;6901:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:20;7032:11;:9;;;;:11::i;:::-;7076:22;;;;:8;:22;;;;;;7009:34;;-1:-1:-1;7061:38:21;;:14;:38::i;:::-;7053:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7164:7;;;;;:12;7156:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7201:7;:11;;;;;;7211:1;7268:22;;;:8;:22;;;;;1108:1;7268:48;;7376:21;:19;;;;:21::i;:::-;7358:47;;;7419:11;:9;;;;:11::i;:::-;7444:10;:8;;;;:10::i;:::-;7468:11;:9;;;;:11::i;:::-;7493:17;:9;:7;;;;:9::i;:::-;:15;;;:17::i;:::-;7358:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7567:31:21;;;;-1:-1:-1;7589:4:21;;-1:-1:-1;7575:12:21;;7567:31;;;;;-1:-1:-1;;7643:7:21;:11;;;;7653:1;7643:11;;;;;;7653:1;-1:-1:-1;6730:975:21;;;;:::o;1195:26::-;;;;;;:::o;8343:95::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8410:21:21::1;8422:8;8410:11;:21::i;9505:486::-:0;9565:4;1033:1;9693:29;;9689:46;;;-1:-1:-1;9731:4:21;9724:11;;9689:46;1108:1;9749:32;;;:63;;-1:-1:-1;9785:27:21;;9749:63;9745:93;;;-1:-1:-1;9833:5:21;9826:12;;9745:93;9849:13;9865:16;;;:9;:16;;;;;;9895:10;9891:53;;9928:5;9921:12;;;;;9891:53;9960:15;:24;;;9505:486;-1:-1:-1;;9505:486:21:o;1042:69::-;1108:1;1042:69;:::o;4542:722::-;4758:13;;4746:8;:25;4738:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4863:51;4883:8;4893;4903:10;4863:19;:51::i;:::-;4842:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4993:15;:13;:15::i;:::-;5107:17;;5067:19;;;;:9;:19;;;;;;;;5089:15;:35;;;5067:57;;;5166:13;:24;;;5212:12;;5205:52;;;;;;;;;;;;;5077:8;;5226;;5212:12;;;;;5205:52;;5246:10;;5205:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:722;;;:::o;1453:19:19:-;;;;;;;;;:::o;1392:22::-;;;;;;:::o;3537:517:21:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;3716:32:21::1;3739:8;3716:22;:32::i;:::-;3791:7;:11:::0;;;::::1;3801:1;3791:11;::::0;;3812:12:::1;:28:::0;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;3850:13:::1;:30:::0;;;3937:28;;3933:63:::1;;3967:25;::::0;;;:9:::1;:25;::::0;;;;3995:1:::1;3967:29:::0;;3933:63:::1;4006:41;4028:18;4006:21;:41::i;:::-;1794:14:8::0;1790:66;;;1840:5;1824:21;;;;;;3537:517:21;;;;;:::o;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;828:104:10:-;915:10;828:104;:::o;3852:558:26:-;4031:5;3992:16;4047:357;340:2;4067:1;:14;4047:357;;;4136:4;4121:11;;;4120:20;4102:15;4170:7;4131:1;4170:10;;;;;;;;;;;4154:26;;4198:7;4209:1;4198:12;4194:200;;;4268:5;4275:8;4251:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4241:44;;;;;;4230:55;;4194:200;;;4362:8;4372:5;4345:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4335:44;;;;;;4324:55;;4194:200;-1:-1:-1;;4083:3:26;;4047:357;;;;3852:558;;;;;:::o;3155:178:19:-;3287:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3277:49;;;;;;3155:178::o;11828:771:21:-;12110:17;;12141:13;;;;;:32;;;12169:4;12158:8;:15;12141:32;12137:115;;;12217:4;12195:18;:26;;12187:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12411:8;12390:18;:29;12382:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12499:17;:38;;;12552:40;;;;;;;;;;;;;;;;;11828:771;;:::o;13237:368:16:-;13341:10;;13307:7;;13496:4;13487:14;;13572:26;;;;13487:14;13341:10;13572:5;:26::i;:::-;13565:33;;;;13237:368;;;;;:::o;3003:127:27:-;3065:6;3097:25;:18;;;3116:2;3120:1;3097:18;:25::i;21799:298:16:-;21855:14;21881:12;21896;21900:7;21896:3;:12::i;:::-;21881:27;;;;21918:12;21933;21937:7;21933:3;:12::i;:::-;21918:27;;22060:21;;;;21964:127;-1:-1:-1;;;21964:127:16:o;3382:175:27:-;3473:7;3503:47;3530:19;3540:8;3530:9;:19::i;:::-;3503:26;:47::i;2487:121::-;2544:6;2576:24;:18;;;2544:6;2598:1;2576:18;:24::i;2824:121::-;2880:6;2912:25;:18;;;2931:2;2935:1;2912:18;:25::i;2661:111::-;2718:7;2744:21;:14;;;2759:1;2762:2;2744:14;:21::i;3679:152::-;3734:7;3760:64;509:2;;3790:14;:12;;;;:14::i;:::-;3760;;;;:64;3790:30;;;;;;3822:1;3760:14;:64::i;27680:614:16:-;27735:16;27763:11;27784:12;27799;27803:7;27799:3;:12::i;:::-;27784:27;;;;27929:4;27923:11;27916:18;;27984:3;27977:10;;28006:33;28019:7;28028:3;28034:4;28028:10;28006:12;:33::i;:::-;-1:-1:-1;28161:14:16;;;28177:4;28157:25;28151:4;28144:39;28224:17;;28058:230;;-1:-1:-1;28058:230:16:o;3439:179:19:-;3522:7;;;;3539:21;;;;;;;;;;;3575:36;;;3522:7;;;;3575:36;;;;;;;;;;;;;;;;;;;;;;;3439:179;;:::o;3903:392::-;4046:4;4062:15;4120:16;:14;:16::i;:::-;4138:8;4148;4103:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4080:87;;;;;;4062:105;;4187:37;4216:7;4187:28;:37::i;:::-;4280:7;;4177:47;;-1:-1:-1;4280:7:19;;4242:34;4177:47;4265:10;4242:13;:34::i;:::-;:45;;;;3903:392;-1:-1:-1;;;;;3903:392:19:o;1952:123:8:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;2605:166:19:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;2686:16:19::1;:14;:16::i;:::-;2712:21;2724:8;2712:11;:21::i;:::-;2743:5;:21:::0;;;::::1;::::0;::::1;::::0;;1790:66:8;;;;1840:5;1824:21;;;;;;1790:66;2605:166:19;;:::o;12397:443:16:-;12478:15;;12520:14;:4;12529;12520:8;:14::i;:::-;12505:29;;12657:4;12651:11;12645:4;12642:21;12639:2;;;-1:-1:-1;12690:1:16;12639:2;12728:9;12724:51;;12760:4;12753:11;;;;;12724:51;12794:39;12815:5;12822:4;12828;12794:20;:39::i;:::-;12784:49;12397:443;-1:-1:-1;;;;;12397:443:16:o;20525:191::-;20614:14;20697:6;20692:2;:11;20707:1;20691:17;20647:62;;20655:30;20661:7;20670:6;20678;20655:5;:30::i;:::-;20647:62;;;20525:191;-1:-1:-1;;;;20525:191:16:o;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::o;3197:115:27:-;3257:7;3283:22;:14;;;3298:2;3302;3283:14;:22::i;1167:127:29:-;1280:4;1167:127::o;19502:677:16:-;19587:14;19617:11;;;19613:37;;-1:-1:-1;19646:1:16;19631:17;;19613:37;19684:12;19688:7;19684:3;:12::i;:::-;19663:33;;:18;:6;:18;;;:10;:18::i;:::-;:33;19659:140;;;19719:68;19735:12;19739:7;19735:3;:12::i;:::-;19719:68;;19749:12;19753:7;19749:3;:12::i;:::-;19719:68;;19763:6;19779;19771:15;;19719;:68::i;:::-;19712:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:140;19826:2;19816:6;:12;;;;19808:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19929:1;19920:10;;19902:15;19955:12;19959:7;19955:3;:12::i;:::-;19940:27;;;;19977:13;19993:19;20002:9;19993:8;:19::i;:::-;20137:17;;;;20131:24;20127:36;;;-1:-1:-1;;;;;20031:142:16:o;16713:370::-;16814:7;16833:12;16848;16852:7;16848:3;:12::i;:::-;16833:27;;;;16950:12;16954:7;16950:3;:12::i;:::-;16921:26;16942:4;16921:16;:4;16930:6;16921:8;:16::i;:::-;:20;;:26::i;:::-;:41;16917:83;;;16985:4;16978:11;;;;;16917:83;17017:16;:4;17026:6;17017:8;:16::i;:::-;17010:23;;17050:26;17056:7;17050:26;;17065:4;17071;17050:5;:26::i;:::-;17043:33;;;16713:370;;;;;;;:::o;26400:910::-;26478:15;26513:16;26521:7;26513;:16::i;:::-;26505:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26592:16;26600:7;26592;:16::i;:::-;26584:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26666:12;26681;26685:7;26681:3;:12::i;:::-;26666:27;;;;26703:15;26721:12;26725:7;26721:3;:12::i;:::-;26703:30;;;;26744:11;26873:4;26867:11;26860:18;;26960:7;26955:3;26952:16;26949:2;;;27000:4;26994;26987:18;26949:2;27215:4;27206:7;27200:4;27191:7;27188:1;27181:5;27170:50;27166:55;27251:52;27272:15;27279:7;27272:6;:15::i;:::-;27251:52;;27289:7;27298:4;27251:20;:52::i;:::-;27241:62;26400:910;-1:-1:-1;;;;;;26400:910:16:o;3638:265:12:-;3837:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:69;;;;;;3638:265::o;1072:740::-;1150:7;1211:9;:16;1231:2;1211:22;1207:94;;1249:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:94;1651:4;1636:20;;1630:27;1696:4;1681:20;;1675:27;1749:4;1734:20;;1728:27;1367:9;1720:36;1783:22;1791:4;1720:36;1630:27;1675;1783:7;:22::i;737:413:9:-;1097:20;1135:8;;;737:413::o;935:126:7:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;:::-;1794:14:8::0;1790:66;;;1840:5;1824:21;;;;;;935:126:7;:::o;2553:172:15:-;2638:7;;;2663;;;;2655:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:426:16;11664:2;11660:27;;;11734:17;;;;11726:26;;;11799:17;11795:2;11791:26;;11563:289::o;18259:741::-;18405:17;18437:9;18450:15;18460:4;18450:9;:15::i;:::-;18434:31;;;18478:9;18491:15;18501:4;18491:9;:15::i;:::-;18475:31;;;18519:9;18532:17;18542:6;18532:9;:17::i;:::-;18516:33;;;18562:9;18575:17;18585:6;18575:9;:17::i;:::-;18559:33;;;18742:1;18804;18884;18946;18628:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18628:355:16;;;;;;;;;;;;;;;;;;;;;;18259:741;-1:-1:-1;;;;;;;;;;;18259:741:16:o;6845:366::-;7115:66;7085:12;;;;7064:131;;6970:235::o;16320:113::-;16373:7;16414:12;16418:7;16414:3;:12::i;:::-;16399;16403:7;16399:3;:12::i;:::-;:27;16392:34;;;;16320:113;;;:::o;7750:103::-;7807:4;7831:15;7838:7;7831:6;:15::i;:::-;7830:16;;7750:103;-1:-1:-1;;7750:103:16:o;8272:319::-;8329:8;8353:15;8360:7;8353:6;:15::i;:::-;:31;;8372:12;8353:31;8349:52;;;-1:-1:-1;8394:5:16;8387:12;;8349:52;8410:12;8425;8429:7;8425:3;:12::i;:::-;8568:4;8562:11;-1:-1:-1;8549:26:16;;8456:129;-1:-1:-1;;;8456:129:16:o;13797:276::-;14016:3;14012:17;;13886:181::o;1960:1414:12:-;2045:7;2960:66;2946:80;;;2938:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:1;:7;;3088:2;3083:7;:18;;;;3094:1;:7;;3099:2;3094:7;3083:18;3075:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:14;3252:24;3262:4;3268:1;3271;3274;3252:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3252:24:12;;;;;;-1:-1:-1;;3294:20:12;;;3286:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;759:64:10;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;;;;;759:64:10;:::o;1067:192:7:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:8;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o;4809:556:16:-;4863:13;;4919:2;4904:202;4927:2;4923:1;:6;;;4904:202;;;4973:13;4984:1;4980:5;;4973:13;;;;5010:14;4973:13;5010:7;:14::i;:::-;5001:23;;;;;;5042:1;:7;;5047:2;5042:7;5038:58;;5079:2;5069:12;;;;;5038:58;-1:-1:-1;4931:6:16;;4904:202;;;-1:-1:-1;5169:2:16;5154:205;5177:3;5173:1;:7;;;5154:205;;;5225:13;5236:1;5232:5;;5225:13;;;;5263:14;5225:13;5263:7;:14::i;:::-;5253:24;;;;;;5295:1;:6;;5300:1;5295:6;5291:58;;5332:2;5321:13;;;;;5291:58;-1:-1:-1;5183:6:16;;5154:205;;;;4809:556;;;:::o;7520:101::-;7610:4;7599:15;;;;;7520:101::o;4286:199::-;4336:14;4373:18;4389:1;4383:2;:7;;;;4373:9;:18::i;:::-;4362:29;;;4427:1;4415:13;;;4449;4459:2;4449:9;:13::i;:::-;4438:24;;;;4286:199;-1:-1:-1;4286:199:16:o;3073:1041::-;3125:10;3291:4;3286:9;;;;3337:15;;;;3333:35;;;3362:4;3355:11;;;;;3333:35;3386:7;:15;;3397:4;3386:15;3382:35;;;3411:4;3404:11;;;;;3382:35;3435:7;:15;;3446:4;3435:15;3431:35;;;3460:4;3453:11;;;;;3431:35;3484:7;:15;;3495:4;3484:15;3480:35;;;3509:4;3502:11;;;;;3480:35;3533:7;:15;;3544:4;3533:15;3529:35;;;3558:4;3551:11;;;;;3529:35;3582:7;:15;;3593:4;3582:15;3578:35;;;3607:4;3600:11;;;;;3578:35;3631:7;:15;;3642:4;3631:15;3627:35;;;3656:4;3649:11;;;;;3627:35;3680:7;:15;;3691:4;3680:15;3676:35;;;3705:4;3698:11;;;;;3676:35;3729:7;:15;;3740:4;3729:15;3725:35;;;3754:4;3747:11;;;;;3725:35;3778:7;:15;;3789:4;3778:15;3774:35;;;3803:4;3796:11;;;;;3774:35;3827:7;:15;;3838:4;3827:15;3823:35;;;3852:4;3845:11;;;;;3823:35;3876:7;:15;;3887:4;3876:15;3872:35;;;3901:4;3894:11;;;;;3872:35;3925:7;:15;;3936:4;3925:15;3921:35;;;3950:4;3943:11;;;;;3921:35;3974:7;:15;;3985:4;3974:15;3970:35;;;3999:4;3992:11;;;;;3970:35;4023:7;:15;;4034:4;4023:15;4019:35;;;4048:4;4041:11;;;;;4019:35;4072:7;:15;;4083:4;4072:15;4068:35;;;4097:4;4090:11;;;;;4068:35;3073:1041;;;;:::o",
    "linkReferences": {},
    "immutableReferences": {
      "26231": [
        {
          "start": 2797,
          "length": 32
        },
        {
          "start": 2881,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "LEGACY_STATUS_NONE()": "18810b89",
    "LEGACY_STATUS_PROCESSED()": "b1e3fb8c",
    "LEGACY_STATUS_PROVEN()": "2e7bb32c",
    "VERSION()": "ffa1ad74",
    "acceptableRoot(bytes32)": "a3f81d68",
    "committedRoot()": "67a6771d",
    "confirmAt(bytes32)": "71bfb7b8",
    "homeDomainHash()": "45630b1a",
    "initialize(uint32,address,bytes32,uint256)": "e7e7a7b7",
    "localDomain()": "8d3638f4",
    "messages(bytes32)": "2bbd59ca",
    "optimisticSeconds()": "39992668",
    "owner()": "8da5cb5b",
    "process(bytes)": "928bc4b2",
    "prove(bytes32,bytes32[32],uint256)": "371d3071",
    "proveAndProcess(bytes,bytes32[32],uint256)": "6188af0e",
    "remoteDomain()": "961681dc",
    "renounceOwnership()": "715018a6",
    "setConfirmation(bytes32,uint256)": "088b5ed3",
    "setOptimisticTimeout(uint256)": "885b5e2d",
    "setUpdater(address)": "9d54f419",
    "state()": "c19d93fb",
    "transferOwnership(address)": "f2fde38b",
    "update(bytes32,bytes32,bytes)": "b31c01fb",
    "updater()": "df034cd0"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/Replica.sol",
    "id": 27000,
    "exportedSymbols": {
      "IMessageRecipient": [
        27418
      ],
      "MerkleLib": [
        27988
      ],
      "Message": [
        28215
      ],
      "NomadBase": [
        26382
      ],
      "Replica": [
        26999
      ],
      "TypedMemView": [
        25621
      ],
      "Version0": [
        27006
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:12693:21",
    "nodes": [
      {
        "id": 26450,
        "nodeType": "PragmaDirective",
        "src": "46:22:21",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 26452,
        "nodeType": "ImportDirective",
        "src": "116:40:21",
        "absolutePath": "packages/contracts-core/contracts/Version0.sol",
        "file": "./Version0.sol",
        "scope": 27000,
        "sourceUnit": 27007,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26451,
              "name": "Version0",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:8:21",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26454,
        "nodeType": "ImportDirective",
        "src": "157:42:21",
        "absolutePath": "packages/contracts-core/contracts/NomadBase.sol",
        "file": "./NomadBase.sol",
        "scope": 27000,
        "sourceUnit": 26383,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26453,
              "name": "NomadBase",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "165:9:21",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26456,
        "nodeType": "ImportDirective",
        "src": "200:44:21",
        "absolutePath": "packages/contracts-core/contracts/libs/Merkle.sol",
        "file": "./libs/Merkle.sol",
        "scope": 27000,
        "sourceUnit": 27989,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26455,
              "name": "MerkleLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "208:9:21",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26458,
        "nodeType": "ImportDirective",
        "src": "245:43:21",
        "absolutePath": "packages/contracts-core/contracts/libs/Message.sol",
        "file": "./libs/Message.sol",
        "scope": 27000,
        "sourceUnit": 28216,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26457,
              "name": "Message",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "253:7:21",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26460,
        "nodeType": "ImportDirective",
        "src": "289:69:21",
        "absolutePath": "packages/contracts-core/contracts/interfaces/IMessageRecipient.sol",
        "file": "./interfaces/IMessageRecipient.sol",
        "scope": 27000,
        "sourceUnit": 27419,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26459,
              "name": "IMessageRecipient",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "297:17:21",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26462,
        "nodeType": "ImportDirective",
        "src": "405:78:21",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "file": "@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "scope": 27000,
        "sourceUnit": 25622,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26461,
              "name": "TypedMemView",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "413:12:21",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26999,
        "nodeType": "ContractDefinition",
        "src": "633:12105:21",
        "nodes": [
          {
            "id": 26470,
            "nodeType": "UsingForDirective",
            "src": "723:35:21",
            "libraryName": {
              "id": 26468,
              "name": "MerkleLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27988,
              "src": "729:9:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MerkleLib_$27988",
                "typeString": "library MerkleLib"
              }
            },
            "typeName": {
              "id": 26469,
              "name": "MerkleLib.Tree",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27451,
              "src": "743:14:21",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Tree_$27451_storage_ptr",
                "typeString": "struct MerkleLib.Tree"
              }
            }
          },
          {
            "id": 26473,
            "nodeType": "UsingForDirective",
            "src": "763:29:21",
            "libraryName": {
              "id": 26471,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25621,
              "src": "769:12:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$25621",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 26472,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "786:5:21",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 26476,
            "nodeType": "UsingForDirective",
            "src": "797:31:21",
            "libraryName": {
              "id": 26474,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25621,
              "src": "803:12:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$25621",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 26475,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "820:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 26479,
            "nodeType": "UsingForDirective",
            "src": "833:26:21",
            "libraryName": {
              "id": 26477,
              "name": "Message",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28215,
              "src": "839:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Message_$28215",
                "typeString": "library Message"
              }
            },
            "typeName": {
              "id": 26478,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "851:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 26485,
            "nodeType": "VariableDeclaration",
            "src": "909:55:21",
            "constant": true,
            "functionSelector": "18810b89",
            "mutability": "constant",
            "name": "LEGACY_STATUS_NONE",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 26480,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "909:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "30",
                  "id": 26483,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "962:1:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_0_by_1",
                    "typeString": "int_const 0"
                  },
                  "value": "0"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_0_by_1",
                    "typeString": "int_const 0"
                  }
                ],
                "id": 26482,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "954:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": {
                  "id": 26481,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "954:7:21",
                  "typeDescriptions": {}
                }
              },
              "id": 26484,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "954:10:21",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26494,
            "nodeType": "VariableDeclaration",
            "src": "970:66:21",
            "constant": true,
            "functionSelector": "2e7bb32c",
            "mutability": "constant",
            "name": "LEGACY_STATUS_PROVEN",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 26486,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "970:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "hexValue": "31",
                      "id": 26491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1033:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      }
                    ],
                    "id": 26490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "1025:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_uint256_$",
                      "typeString": "type(uint256)"
                    },
                    "typeName": {
                      "id": 26489,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1025:7:21",
                      "typeDescriptions": {}
                    }
                  },
                  "id": 26492,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "1025:10:21",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                ],
                "id": 26488,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1017:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": {
                  "id": 26487,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1017:7:21",
                  "typeDescriptions": {}
                }
              },
              "id": 26493,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1017:19:21",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26503,
            "nodeType": "VariableDeclaration",
            "src": "1042:69:21",
            "constant": true,
            "functionSelector": "b1e3fb8c",
            "mutability": "constant",
            "name": "LEGACY_STATUS_PROCESSED",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 26495,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1042:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "hexValue": "32",
                      "id": 26500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1108:1:21",
                      "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": 26499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "1100:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_uint256_$",
                      "typeString": "type(uint256)"
                    },
                    "typeName": {
                      "id": 26498,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1100:7:21",
                      "typeDescriptions": {}
                    }
                  },
                  "id": 26501,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "1100:10:21",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                ],
                "id": 26497,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1092:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": {
                  "id": 26496,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1092:7:21",
                  "typeDescriptions": {}
                }
              },
              "id": 26502,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1092:19:21",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26505,
            "nodeType": "VariableDeclaration",
            "src": "1195:26:21",
            "constant": false,
            "functionSelector": "961681dc",
            "mutability": "mutable",
            "name": "remoteDomain",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 26504,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1195:6:21",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26507,
            "nodeType": "VariableDeclaration",
            "src": "1292:32:21",
            "constant": false,
            "functionSelector": "39992668",
            "mutability": "mutable",
            "name": "optimisticSeconds",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 26506,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1292:7:21",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26509,
            "nodeType": "VariableDeclaration",
            "src": "1355:21:21",
            "constant": false,
            "mutability": "mutable",
            "name": "entered",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 26508,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1355:5:21",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "visibility": "private"
          },
          {
            "id": 26513,
            "nodeType": "VariableDeclaration",
            "src": "1438:44:21",
            "constant": false,
            "functionSelector": "71bfb7b8",
            "mutability": "mutable",
            "name": "confirmAt",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
              "typeString": "mapping(bytes32 => uint256)"
            },
            "typeName": {
              "id": 26512,
              "keyType": {
                "id": 26510,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1446:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1438:27:21",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                "typeString": "mapping(bytes32 => uint256)"
              },
              "valueType": {
                "id": 26511,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1457:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 26517,
            "nodeType": "VariableDeclaration",
            "src": "1538:43:21",
            "constant": false,
            "functionSelector": "2bbd59ca",
            "mutability": "mutable",
            "name": "messages",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 26516,
              "keyType": {
                "id": 26514,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1546:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1538:27:21",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 26515,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1557:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 26521,
            "nodeType": "VariableDeclaration",
            "src": "1664:25:21",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 26999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$45_storage",
              "typeString": "uint256[45]"
            },
            "typeName": {
              "baseType": {
                "id": 26518,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1664:7:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 26520,
              "length": {
                "hexValue": "3435",
                "id": 26519,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1672:2:21",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_45_by_1",
                  "typeString": "int_const 45"
                },
                "value": "45"
              },
              "nodeType": "ArrayTypeName",
              "src": "1664:11:21",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$45_storage_ptr",
                "typeString": "uint256[45]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 26530,
            "nodeType": "EventDefinition",
            "src": "2054:121:21",
            "anonymous": false,
            "documentation": {
              "id": 26522,
              "nodeType": "StructuredDocumentation",
              "src": "1737:312:21",
              "text": " @notice Emitted when message is processed\n @param messageHash The keccak256 hash of the message that was processed\n @param success TRUE if the call was executed successfully,\n FALSE if the call reverted or threw\n @param returnData the return data from the external call"
            },
            "name": "Process",
            "parameters": {
              "id": 26529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26524,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "messageHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 26530,
                  "src": "2077:27:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26523,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2077:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26526,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 26530,
                  "src": "2114:20:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26525,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2114:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26528,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "returnData",
                  "nodeType": "VariableDeclaration",
                  "scope": 26530,
                  "src": "2144:24:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26527,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2144:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2067:107:21"
            }
          },
          {
            "id": 26535,
            "nodeType": "EventDefinition",
            "src": "2323:44:21",
            "anonymous": false,
            "documentation": {
              "id": 26531,
              "nodeType": "StructuredDocumentation",
              "src": "2181:137:21",
              "text": " @notice Emitted when the value for optimisticTimeout is set\n @param timeout The new value for optimistic timeout"
            },
            "name": "SetOptimisticTimeout",
            "parameters": {
              "id": 26534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26533,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "timeout",
                  "nodeType": "VariableDeclaration",
                  "scope": 26535,
                  "src": "2350:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26532,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2350:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2349:17:21"
            }
          },
          {
            "id": 26544,
            "nodeType": "EventDefinition",
            "src": "2644:123:21",
            "anonymous": false,
            "documentation": {
              "id": 26536,
              "nodeType": "StructuredDocumentation",
              "src": "2373:266:21",
              "text": " @notice Emitted when a root's confirmation is modified by governance\n @param root The root for which confirmAt has been set\n @param previousConfirmAt The previous value of confirmAt\n @param newConfirmAt The new value of confirmAt"
            },
            "name": "SetConfirmation",
            "parameters": {
              "id": 26543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26538,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "scope": 26544,
                  "src": "2675:20:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26537,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2675:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26540,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "previousConfirmAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 26544,
                  "src": "2705:25:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26539,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2705:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26542,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newConfirmAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 26544,
                  "src": "2740:20:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26541,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2740:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2665:101:21"
            }
          },
          {
            "id": 26553,
            "nodeType": "FunctionDefinition",
            "src": "2819:59:21",
            "body": {
              "id": 26552,
              "nodeType": "Block",
              "src": "2876:2:21",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 26549,
                    "name": "_localDomain",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 26546,
                    "src": "2862:12:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 26550,
                "modifierName": {
                  "id": 26548,
                  "name": "NomadBase",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26382,
                  "src": "2852:9:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NomadBase_$26382_$",
                    "typeString": "type(contract NomadBase)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2852:23:21"
              }
            ],
            "name": "",
            "parameters": {
              "id": 26547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26546,
                  "mutability": "mutable",
                  "name": "_localDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 26553,
                  "src": "2831:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 26545,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2831:6:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2830:21:21"
            },
            "returnParameters": {
              "id": 26551,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2876:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26601,
            "nodeType": "FunctionDefinition",
            "src": "3537:517:21",
            "body": {
              "id": 26600,
              "nodeType": "Block",
              "src": "3706:348:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26568,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26558,
                        "src": "3739:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26567,
                      "name": "__NomadBase_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26289,
                      "src": "3716:22:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 26569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3716:32:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26570,
                  "nodeType": "ExpressionStatement",
                  "src": "3716:32:21"
                },
                {
                  "expression": {
                    "id": 26573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26571,
                      "name": "entered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26509,
                      "src": "3791:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31",
                      "id": 26572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3801:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "3791:11:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 26574,
                  "nodeType": "ExpressionStatement",
                  "src": "3791:11:21"
                },
                {
                  "expression": {
                    "id": 26577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26575,
                      "name": "remoteDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26505,
                      "src": "3812:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26576,
                      "name": "_remoteDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26556,
                      "src": "3827:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "3812:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 26578,
                  "nodeType": "ExpressionStatement",
                  "src": "3812:28:21"
                },
                {
                  "expression": {
                    "id": 26581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26579,
                      "name": "committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26237,
                      "src": "3850:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26580,
                      "name": "_committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26560,
                      "src": "3866:14:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3850:30:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 26582,
                  "nodeType": "ExpressionStatement",
                  "src": "3850:30:21"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 26588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 26583,
                      "name": "_committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26560,
                      "src": "3937:14:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 26586,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3963:1:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 26585,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3955:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 26584,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3955:7:21",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 26587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3955:10:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3937:28:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26595,
                  "nodeType": "IfStatement",
                  "src": "3933:63:21",
                  "trueBody": {
                    "expression": {
                      "id": 26593,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "baseExpression": {
                          "id": 26589,
                          "name": "confirmAt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26513,
                          "src": "3967:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                            "typeString": "mapping(bytes32 => uint256)"
                          }
                        },
                        "id": 26591,
                        "indexExpression": {
                          "id": 26590,
                          "name": "_committedRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26560,
                          "src": "3977:14:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "3967:25:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "hexValue": "31",
                        "id": 26592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3995:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "3967:29:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 26594,
                    "nodeType": "ExpressionStatement",
                    "src": "3967:29:21"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26597,
                        "name": "_optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26562,
                        "src": "4028:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 26596,
                      "name": "_setOptimisticTimeout",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26993,
                      "src": "4006:21:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 26598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4006:41:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26599,
                  "nodeType": "ExpressionStatement",
                  "src": "4006:41:21"
                }
              ]
            },
            "documentation": {
              "id": 26554,
              "nodeType": "StructuredDocumentation",
              "src": "2930:602:21",
              "text": " @notice Initialize the replica\n @dev Performs the following action:\n      - initializes inherited contracts\n      - initializes re-entrancy guard\n      - sets remote domain\n      - sets a trusted root, and pre-approves messages under it\n      - sets the optimistic timer\n @param _remoteDomain The domain of the Home contract this follows\n @param _updater The EVM id of the updater\n @param _committedRoot A trusted root from which to start the Replica\n @param _optimisticSeconds The time a new root must wait to be confirmed"
            },
            "functionSelector": "e7e7a7b7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 26565,
                "modifierName": {
                  "id": 26564,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23217,
                  "src": "3694:11:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3694:11:21"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 26563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26556,
                  "mutability": "mutable",
                  "name": "_remoteDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 26601,
                  "src": "3566:20:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 26555,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3566:6:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26558,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 26601,
                  "src": "3596:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26557,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3596:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26560,
                  "mutability": "mutable",
                  "name": "_committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26601,
                  "src": "3622:22:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26559,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3622:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26562,
                  "mutability": "mutable",
                  "name": "_optimisticSeconds",
                  "nodeType": "VariableDeclaration",
                  "scope": 26601,
                  "src": "3654:26:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26561,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3654:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3556:130:21"
            },
            "returnParameters": {
              "id": 26566,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3706:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26651,
            "nodeType": "FunctionDefinition",
            "src": "4542:722:21",
            "body": {
              "id": 26650,
              "nodeType": "Block",
              "src": "4658:606:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 26614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 26612,
                          "name": "_oldRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26604,
                          "src": "4746:8:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 26613,
                          "name": "committedRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26237,
                          "src": "4758:13:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "4746:25:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f742063757272656e7420757064617465",
                        "id": 26615,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4773:20:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_235ba1ee88c5f04f9c7219acae6b13ccc0885220e588a812ad0686cc8fa100e9",
                          "typeString": "literal_string \"not current update\""
                        },
                        "value": "not current update"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_235ba1ee88c5f04f9c7219acae6b13ccc0885220e588a812ad0686cc8fa100e9",
                          "typeString": "literal_string \"not current update\""
                        }
                      ],
                      "id": 26611,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4738:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4738:56:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26617,
                  "nodeType": "ExpressionStatement",
                  "src": "4738:56:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 26620,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26604,
                            "src": "4883:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26621,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26606,
                            "src": "4893:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26622,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26608,
                            "src": "4903:10:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 26619,
                          "name": "_isUpdaterSignature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26373,
                          "src": "4863:19:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 26623,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4863:51:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217570646174657220736967",
                        "id": 26624,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4928:14:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        },
                        "value": "!updater sig"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        }
                      ],
                      "id": 26618,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4842:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4842:110:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26626,
                  "nodeType": "ExpressionStatement",
                  "src": "4842:110:21"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 26627,
                      "name": "_beforeUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26998,
                      "src": "4993:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 26628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4993:15:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26629,
                  "nodeType": "ExpressionStatement",
                  "src": "4993:15:21"
                },
                {
                  "expression": {
                    "id": 26637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 26630,
                        "name": "confirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26513,
                        "src": "5067:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 26632,
                      "indexExpression": {
                        "id": 26631,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26606,
                        "src": "5077:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5067:19:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 26636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 26633,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "5089:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 26634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5089:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 26635,
                        "name": "optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26507,
                        "src": "5107:17:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5089:35:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5067:57:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 26638,
                  "nodeType": "ExpressionStatement",
                  "src": "5067:57:21"
                },
                {
                  "expression": {
                    "id": 26641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26639,
                      "name": "committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26237,
                      "src": "5166:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26640,
                      "name": "_newRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26606,
                      "src": "5182:8:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "5166:24:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 26642,
                  "nodeType": "ExpressionStatement",
                  "src": "5166:24:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 26644,
                        "name": "remoteDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26505,
                        "src": "5212:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 26645,
                        "name": "_oldRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26604,
                        "src": "5226:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 26646,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26606,
                        "src": "5236:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 26647,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26608,
                        "src": "5246:10:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 26643,
                      "name": "Update",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26252,
                      "src": "5205:6:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,bytes32,bytes32,bytes memory)"
                      }
                    },
                    "id": 26648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5205:52:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26649,
                  "nodeType": "EmitStatement",
                  "src": "5200:57:21"
                }
              ]
            },
            "documentation": {
              "id": 26602,
              "nodeType": "StructuredDocumentation",
              "src": "4113:424:21",
              "text": " @notice Called by external agent. Submits the signed update's new root,\n marks root's allowable confirmation time, and emits an `Update` event.\n @dev Reverts if update doesn't build off latest committedRoot\n or if signature is invalid.\n @param _oldRoot Old merkle root\n @param _newRoot New merkle root\n @param _signature Updater's signature on `_oldRoot` and `_newRoot`"
            },
            "functionSelector": "b31c01fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "update",
            "parameters": {
              "id": 26609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26604,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26651,
                  "src": "4567:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26603,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4567:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26606,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26651,
                  "src": "4593:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26605,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4593:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26608,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 26651,
                  "src": "4619:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26607,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4619:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4557:91:21"
            },
            "returnParameters": {
              "id": 26610,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4658:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 26689,
            "nodeType": "FunctionDefinition",
            "src": "5844:374:21",
            "body": {
              "id": 26688,
              "nodeType": "Block",
              "src": "5976:242:21",
              "statements": [
                {
                  "assignments": [
                    26664
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26664,
                      "mutability": "mutable",
                      "name": "_messageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 26688,
                      "src": "5986:20:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 26663,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5986:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26668,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 26666,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26654,
                        "src": "6019:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 26665,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "6009:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 26667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6009:19:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5986:42:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 26680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 26671,
                                "name": "messages",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26517,
                                "src": "6074:8:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                  "typeString": "mapping(bytes32 => bytes32)"
                                }
                              },
                              "id": 26673,
                              "indexExpression": {
                                "id": 26672,
                                "name": "_messageHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26664,
                                "src": "6083:12:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6074:22:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 26670,
                            "name": "acceptableRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26892,
                            "src": "6059:14:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (bytes32) view returns (bool)"
                            }
                          },
                          "id": 26674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6059:38:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 26676,
                              "name": "_messageHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26664,
                              "src": "6123:12:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 26677,
                              "name": "_proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26658,
                              "src": "6137:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                                "typeString": "bytes32[32] calldata"
                              }
                            },
                            {
                              "id": 26678,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26660,
                              "src": "6145:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                                "typeString": "bytes32[32] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 26675,
                            "name": "prove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26940,
                            "src": "6117:5:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_array$_t_bytes32_$32_calldata_ptr_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,bytes32[32] calldata,uint256) returns (bool)"
                            }
                          },
                          "id": 26679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6117:35:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6059:93:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2170726f7665",
                        "id": 26681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6166:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_756bd5c549d133a643e5d24c9b1373431d553508e5dcef74e87a0342cc836818",
                          "typeString": "literal_string \"!prove\""
                        },
                        "value": "!prove"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_756bd5c549d133a643e5d24c9b1373431d553508e5dcef74e87a0342cc836818",
                          "typeString": "literal_string \"!prove\""
                        }
                      ],
                      "id": 26669,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6038:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6038:146:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26683,
                  "nodeType": "ExpressionStatement",
                  "src": "6038:146:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26685,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26654,
                        "src": "6202:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 26684,
                      "name": "process",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26780,
                      "src": "6194:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory) returns (bool)"
                      }
                    },
                    "id": 26686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6194:17:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26687,
                  "nodeType": "ExpressionStatement",
                  "src": "6194:17:21"
                }
              ]
            },
            "documentation": {
              "id": 26652,
              "nodeType": "StructuredDocumentation",
              "src": "5270:569:21",
              "text": " @notice If necessary, attempts to prove the validity of provided\n         `_message`. If the message is successfully proven, then tries to\n         process the message\n @dev Reverts if `prove` call returns false\n @param _message A Nomad message coming from another chain :)\n @param _proof Merkle proof of inclusion for message's leaf (optional if\n        the message has already been proven).\n @param _index Index of leaf in home's merkle tree (optional if the\n        message has already been proven)."
            },
            "functionSelector": "6188af0e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proveAndProcess",
            "parameters": {
              "id": 26661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26654,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 26689,
                  "src": "5878:21:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26653,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5878:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26658,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 26689,
                  "src": "5909:27:21",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                    "typeString": "bytes32[32]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 26655,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5909:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 26657,
                    "length": {
                      "hexValue": "3332",
                      "id": 26656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5917:2:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5909:11:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$32_storage_ptr",
                      "typeString": "bytes32[32]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26660,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 26689,
                  "src": "5946:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26659,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5946:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5868:98:21"
            },
            "returnParameters": {
              "id": 26662,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5976:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 26780,
            "nodeType": "FunctionDefinition",
            "src": "6730:975:21",
            "body": {
              "id": 26779,
              "nodeType": "Block",
              "src": "6801:904:21",
              "statements": [
                {
                  "assignments": [
                    26698
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26698,
                      "mutability": "mutable",
                      "name": "_m",
                      "nodeType": "VariableDeclaration",
                      "scope": 26779,
                      "src": "6863:10:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 26697,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "6863:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26703,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 26701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6889:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "id": 26699,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26692,
                        "src": "6876:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 26700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24785,
                      "src": "6876:12:21",
                      "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": 26702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6876:15:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6863:28:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 26709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 26705,
                              "name": "_m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26698,
                              "src": "6909:2:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 26706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "destination",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28131,
                            "src": "6909:14:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29) pure returns (uint32)"
                            }
                          },
                          "id": 26707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6909:16:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 26708,
                          "name": "localDomain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26231,
                          "src": "6929:11:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "6909:31:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2164657374696e6174696f6e",
                        "id": 26710,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6942:14:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77",
                          "typeString": "literal_string \"!destination\""
                        },
                        "value": "!destination"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77",
                          "typeString": "literal_string \"!destination\""
                        }
                      ],
                      "id": 26704,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6901:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6901:56:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26712,
                  "nodeType": "ExpressionStatement",
                  "src": "6901:56:21"
                },
                {
                  "assignments": [
                    26714
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26714,
                      "mutability": "mutable",
                      "name": "_messageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 26779,
                      "src": "7009:20:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 26713,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7009:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26718,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 26715,
                        "name": "_m",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26698,
                        "src": "7032:2:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 26716,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25239,
                      "src": "7032:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes32)"
                      }
                    },
                    "id": 26717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7032:11:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7009:34:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "baseExpression": {
                              "id": 26721,
                              "name": "messages",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26517,
                              "src": "7076:8:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                "typeString": "mapping(bytes32 => bytes32)"
                              }
                            },
                            "id": 26723,
                            "indexExpression": {
                              "id": 26722,
                              "name": "_messageHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26714,
                              "src": "7085:12:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7076:22:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 26720,
                          "name": "acceptableRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26892,
                          "src": "7061:14:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32) view returns (bool)"
                          }
                        },
                        "id": 26724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7061:38:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2170726f76656e",
                        "id": 26725,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7101:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab",
                          "typeString": "literal_string \"!proven\""
                        },
                        "value": "!proven"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab",
                          "typeString": "literal_string \"!proven\""
                        }
                      ],
                      "id": 26719,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7053:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7053:58:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26727,
                  "nodeType": "ExpressionStatement",
                  "src": "7053:58:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 26731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 26729,
                          "name": "entered",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26509,
                          "src": "7164:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 26730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7175:1:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "7164:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217265656e7472616e74",
                        "id": 26732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7178:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9e958fe74d893e1217e2d07629ceead87e80598864f275cf1f944c1637267f25",
                          "typeString": "literal_string \"!reentrant\""
                        },
                        "value": "!reentrant"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9e958fe74d893e1217e2d07629ceead87e80598864f275cf1f944c1637267f25",
                          "typeString": "literal_string \"!reentrant\""
                        }
                      ],
                      "id": 26728,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7156:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7156:35:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26734,
                  "nodeType": "ExpressionStatement",
                  "src": "7156:35:21"
                },
                {
                  "expression": {
                    "id": 26737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26735,
                      "name": "entered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26509,
                      "src": "7201:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 26736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7211:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7201:11:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 26738,
                  "nodeType": "ExpressionStatement",
                  "src": "7201:11:21"
                },
                {
                  "expression": {
                    "id": 26743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 26739,
                        "name": "messages",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26517,
                        "src": "7268:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 26741,
                      "indexExpression": {
                        "id": 26740,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26714,
                        "src": "7277:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7268:22:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26742,
                      "name": "LEGACY_STATUS_PROCESSED",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26503,
                      "src": "7293:23:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "7268:48:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 26744,
                  "nodeType": "ExpressionStatement",
                  "src": "7268:48:21"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 26751,
                            "name": "_m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26698,
                            "src": "7419:2:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 26752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28080,
                          "src": "7419:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (uint32)"
                          }
                        },
                        "id": 26753,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7419:11:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 26754,
                            "name": "_m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26698,
                            "src": "7444:2:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 26755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nonce",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28113,
                          "src": "7444:8:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (uint32)"
                          }
                        },
                        "id": 26756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7444:10:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 26757,
                            "name": "_m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26698,
                            "src": "7468:2:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 26758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28095,
                          "src": "7468:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 26759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7468:11:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 26760,
                                "name": "_m",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26698,
                                "src": "7493:2:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              "id": 26761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "body",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28182,
                              "src": "7493:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                                "typeString": "function (bytes29) pure returns (bytes29)"
                              }
                            },
                            "id": 26762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7493:9:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 26763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "clone",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25485,
                          "src": "7493:15:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes29_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) view returns (bytes memory)"
                          }
                        },
                        "id": 26764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7493:17:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 26746,
                                "name": "_m",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26698,
                                "src": "7376:2:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              "id": 26747,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28162,
                              "src": "7376:19:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_address_$bound_to$_t_bytes29_$",
                                "typeString": "function (bytes29) pure returns (address)"
                              }
                            },
                            "id": 26748,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7376:21:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 26745,
                          "name": "IMessageRecipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27418,
                          "src": "7358:17:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IMessageRecipient_$27418_$",
                            "typeString": "type(contract IMessageRecipient)"
                          }
                        },
                        "id": 26749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7358:40:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMessageRecipient_$27418",
                          "typeString": "contract IMessageRecipient"
                        }
                      },
                      "id": 26750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "handle",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27417,
                      "src": "7358:47:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,uint32,bytes32,bytes memory) external"
                      }
                    },
                    "id": 26765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7358:162:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26766,
                  "nodeType": "ExpressionStatement",
                  "src": "7358:162:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 26768,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26714,
                        "src": "7575:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 26769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7589:4:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "",
                        "id": 26770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7595:2:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 26767,
                      "name": "Process",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26530,
                      "src": "7567:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bool_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,bool,bytes memory)"
                      }
                    },
                    "id": 26771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7567:31:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26772,
                  "nodeType": "EmitStatement",
                  "src": "7562:36:21"
                },
                {
                  "expression": {
                    "id": 26775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26773,
                      "name": "entered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26509,
                      "src": "7643:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31",
                      "id": 26774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7653:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7643:11:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 26776,
                  "nodeType": "ExpressionStatement",
                  "src": "7643:11:21"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 26777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7694:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 26696,
                  "id": 26778,
                  "nodeType": "Return",
                  "src": "7687:11:21"
                }
              ]
            },
            "documentation": {
              "id": 26690,
              "nodeType": "StructuredDocumentation",
              "src": "6224:501:21",
              "text": " @notice Given formatted message, attempts to dispatch\n message payload to end recipient.\n @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\n Reverts if formatted message's destination domain is not the Replica's domain,\n if message has not been proven,\n or if not enough gas is provided for the dispatch transaction.\n @param _message Formatted message\n @return _success TRUE iff dispatch transaction succeeded"
            },
            "functionSelector": "928bc4b2",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "process",
            "parameters": {
              "id": 26693,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26692,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 26780,
                  "src": "6747:21:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26691,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6747:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6746:23:21"
            },
            "returnParameters": {
              "id": 26696,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26695,
                  "mutability": "mutable",
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 26780,
                  "src": "6786:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26694,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6786:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6785:15:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26793,
            "nodeType": "FunctionDefinition",
            "src": "7956:155:21",
            "body": {
              "id": 26792,
              "nodeType": "Block",
              "src": "8053:58:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26789,
                        "name": "_optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26783,
                        "src": "8085:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 26788,
                      "name": "_setOptimisticTimeout",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26993,
                      "src": "8063:21:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 26790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8063:41:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26791,
                  "nodeType": "ExpressionStatement",
                  "src": "8063:41:21"
                }
              ]
            },
            "documentation": {
              "id": 26781,
              "nodeType": "StructuredDocumentation",
              "src": "7770:181:21",
              "text": " @notice Set optimistic timeout period for new roots\n @dev Only callable by owner (Governance)\n @param _optimisticSeconds New optimistic timeout period"
            },
            "functionSelector": "885b5e2d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 26786,
                "modifierName": {
                  "id": 26785,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8039:9:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8039:9:21"
              }
            ],
            "name": "setOptimisticTimeout",
            "parameters": {
              "id": 26784,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26783,
                  "mutability": "mutable",
                  "name": "_optimisticSeconds",
                  "nodeType": "VariableDeclaration",
                  "scope": 26793,
                  "src": "7986:26:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26782,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7986:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7985:28:21"
            },
            "returnParameters": {
              "id": 26787,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8053:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 26806,
            "nodeType": "FunctionDefinition",
            "src": "8343:95:21",
            "body": {
              "id": 26805,
              "nodeType": "Block",
              "src": "8400:38:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26802,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26796,
                        "src": "8422:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26801,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26332,
                      "src": "8410:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 26803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8410:21:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26804,
                  "nodeType": "ExpressionStatement",
                  "src": "8410:21:21"
                }
              ]
            },
            "documentation": {
              "id": 26794,
              "nodeType": "StructuredDocumentation",
              "src": "8117:221:21",
              "text": " @notice Set Updater role\n @dev MUST ensure that all roots signed by previous Updater have\n been relayed before calling. Only callable by owner (Governance)\n @param _updater New Updater"
            },
            "functionSelector": "9d54f419",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 26799,
                "modifierName": {
                  "id": 26798,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8390:9:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8390:9:21"
              }
            ],
            "name": "setUpdater",
            "parameters": {
              "id": 26797,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26796,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 26806,
                  "src": "8363:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26795,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8363:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8362:18:21"
            },
            "returnParameters": {
              "id": 26800,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8400:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 26849,
            "nodeType": "FunctionDefinition",
            "src": "8789:349:21",
            "body": {
              "id": 26848,
              "nodeType": "Block",
              "src": "8888:250:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 26826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 26822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 26817,
                            "name": "_root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26809,
                            "src": "8906:5:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 26820,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8923:1:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 26819,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8915:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 26818,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "8915:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 26821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8915:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8906:19:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 26825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 26823,
                            "name": "_confirmAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26811,
                            "src": "8929:10:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 26824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8943:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8929:15:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8906:38:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "63616e277420736574207a65726f20726f6f74",
                        "id": 26827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8946:21:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_59925984e9af0eda6915756e46f93548db8a4d846b3dfaa1ff2f97982e66d273",
                          "typeString": "literal_string \"can't set zero root\""
                        },
                        "value": "can't set zero root"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_59925984e9af0eda6915756e46f93548db8a4d846b3dfaa1ff2f97982e66d273",
                          "typeString": "literal_string \"can't set zero root\""
                        }
                      ],
                      "id": 26816,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8898:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8898:70:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26829,
                  "nodeType": "ExpressionStatement",
                  "src": "8898:70:21"
                },
                {
                  "assignments": [
                    26831
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26831,
                      "mutability": "mutable",
                      "name": "_previousConfirmAt",
                      "nodeType": "VariableDeclaration",
                      "scope": 26848,
                      "src": "8978:26:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 26830,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8978:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26835,
                  "initialValue": {
                    "baseExpression": {
                      "id": 26832,
                      "name": "confirmAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26513,
                      "src": "9007:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 26834,
                    "indexExpression": {
                      "id": 26833,
                      "name": "_root",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26809,
                      "src": "9017:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9007:16:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8978:45:21"
                },
                {
                  "expression": {
                    "id": 26840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 26836,
                        "name": "confirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26513,
                        "src": "9033:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 26838,
                      "indexExpression": {
                        "id": 26837,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26809,
                        "src": "9043:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9033:16:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26839,
                      "name": "_confirmAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26811,
                      "src": "9052:10:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9033:29:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 26841,
                  "nodeType": "ExpressionStatement",
                  "src": "9033:29:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 26843,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26809,
                        "src": "9093:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 26844,
                        "name": "_previousConfirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26831,
                        "src": "9100:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 26845,
                        "name": "_confirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26811,
                        "src": "9120:10:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 26842,
                      "name": "SetConfirmation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26544,
                      "src": "9077:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256)"
                      }
                    },
                    "id": 26846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9077:54:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26847,
                  "nodeType": "EmitStatement",
                  "src": "9072:59:21"
                }
              ]
            },
            "documentation": {
              "id": 26807,
              "nodeType": "StructuredDocumentation",
              "src": "8444:340:21",
              "text": " @notice Set confirmAt for a given root\n @dev To be used if in the case that fraud is proven\n and roots need to be deleted / added. Only callable by owner (Governance)\n @param _root The root for which to modify confirm time\n @param _confirmAt The new confirmation time. Set to 0 to \"delete\" a root."
            },
            "functionSelector": "088b5ed3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 26814,
                "modifierName": {
                  "id": 26813,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8874:9:21",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8874:9:21"
              }
            ],
            "name": "setConfirmation",
            "parameters": {
              "id": 26812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26809,
                  "mutability": "mutable",
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 26849,
                  "src": "8814:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26808,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8814:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26811,
                  "mutability": "mutable",
                  "name": "_confirmAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 26849,
                  "src": "8829:18:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26810,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8829:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8813:35:21"
            },
            "returnParameters": {
              "id": 26815,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8888:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 26892,
            "nodeType": "FunctionDefinition",
            "src": "9505:486:21",
            "body": {
              "id": 26891,
              "nodeType": "Block",
              "src": "9571:420:21",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 26859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 26857,
                      "name": "_root",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26852,
                      "src": "9693:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 26858,
                      "name": "LEGACY_STATUS_PROVEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26494,
                      "src": "9702:20:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9693:29:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26862,
                  "nodeType": "IfStatement",
                  "src": "9689:46:21",
                  "trueBody": {
                    "expression": {
                      "hexValue": "74727565",
                      "id": 26860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9731:4:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "functionReturnParameters": 26856,
                    "id": 26861,
                    "nodeType": "Return",
                    "src": "9724:11:21"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 26869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 26865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 26863,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26852,
                        "src": "9749:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 26864,
                        "name": "LEGACY_STATUS_PROCESSED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26503,
                        "src": "9758:23:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "9749:32:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 26868,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 26866,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26852,
                        "src": "9785:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 26867,
                        "name": "LEGACY_STATUS_NONE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26485,
                        "src": "9794:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "9785:27:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9749:63:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26872,
                  "nodeType": "IfStatement",
                  "src": "9745:93:21",
                  "trueBody": {
                    "expression": {
                      "hexValue": "66616c7365",
                      "id": 26870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9833:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 26856,
                    "id": 26871,
                    "nodeType": "Return",
                    "src": "9826:12:21"
                  }
                },
                {
                  "assignments": [
                    26874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26874,
                      "mutability": "mutable",
                      "name": "_time",
                      "nodeType": "VariableDeclaration",
                      "scope": 26891,
                      "src": "9849:13:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 26873,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9849:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26878,
                  "initialValue": {
                    "baseExpression": {
                      "id": 26875,
                      "name": "confirmAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26513,
                      "src": "9865:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 26877,
                    "indexExpression": {
                      "id": 26876,
                      "name": "_root",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26852,
                      "src": "9875:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9865:16:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9849:32:21"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 26881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 26879,
                      "name": "_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26874,
                      "src": "9895:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 26880,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9904:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9895:10:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26885,
                  "nodeType": "IfStatement",
                  "src": "9891:53:21",
                  "trueBody": {
                    "id": 26884,
                    "nodeType": "Block",
                    "src": "9907:37:21",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 26882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9928:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 26856,
                        "id": 26883,
                        "nodeType": "Return",
                        "src": "9921:12:21"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 26889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 26886,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "9960:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 26887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "9960:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "id": 26888,
                      "name": "_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26874,
                      "src": "9979:5:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9960:24:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 26856,
                  "id": 26890,
                  "nodeType": "Return",
                  "src": "9953:31:21"
                }
              ]
            },
            "documentation": {
              "id": 26850,
              "nodeType": "StructuredDocumentation",
              "src": "9195:305:21",
              "text": " @notice Check that the root has been submitted\n and that the optimistic timeout period has expired,\n meaning the root can be processed\n @param _root the Merkle root, submitted in an update, to check\n @return TRUE iff root has been submitted & timeout has expired"
            },
            "functionSelector": "a3f81d68",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "acceptableRoot",
            "parameters": {
              "id": 26853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26852,
                  "mutability": "mutable",
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 26892,
                  "src": "9529:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26851,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9529:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9528:15:21"
            },
            "returnParameters": {
              "id": 26856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26855,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26892,
                  "src": "9565:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26854,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9565:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9564:6:21"
            },
            "scope": 26999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26940,
            "nodeType": "FunctionDefinition",
            "src": "10657:711:21",
            "body": {
              "id": 26939,
              "nodeType": "Block",
              "src": "10784:584:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 26911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 26907,
                            "name": "messages",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26517,
                            "src": "10931:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                              "typeString": "mapping(bytes32 => bytes32)"
                            }
                          },
                          "id": 26909,
                          "indexExpression": {
                            "id": 26908,
                            "name": "_leaf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26895,
                            "src": "10940:5:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10931:15:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 26910,
                          "name": "LEGACY_STATUS_PROCESSED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26503,
                          "src": "10950:23:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "10931:42:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "616c72656164792070726f636573736564",
                        "id": 26912,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10987:19:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9f000d2f369c0e67e913dccd6e6f22a8fe8dea3256294790b47bccd3c69f20bf",
                          "typeString": "literal_string \"already processed\""
                        },
                        "value": "already processed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9f000d2f369c0e67e913dccd6e6f22a8fe8dea3256294790b47bccd3c69f20bf",
                          "typeString": "literal_string \"already processed\""
                        }
                      ],
                      "id": 26906,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10910:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10910:106:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26914,
                  "nodeType": "ExpressionStatement",
                  "src": "10910:106:21"
                },
                {
                  "assignments": [
                    26916
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26916,
                      "mutability": "mutable",
                      "name": "_calculatedRoot",
                      "nodeType": "VariableDeclaration",
                      "scope": 26939,
                      "src": "11084:23:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 26915,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11084:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26923,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 26919,
                        "name": "_leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26895,
                        "src": "11131:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 26920,
                        "name": "_proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26899,
                        "src": "11138:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                          "typeString": "bytes32[32] calldata"
                        }
                      },
                      {
                        "id": 26921,
                        "name": "_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26901,
                        "src": "11146:6:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                          "typeString": "bytes32[32] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 26917,
                        "name": "MerkleLib",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27988,
                        "src": "11110:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MerkleLib_$27988_$",
                          "typeString": "type(library MerkleLib)"
                        }
                      },
                      "id": 26918,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "branchRoot",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27891,
                      "src": "11110:20:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$32_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes32[32] memory,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 26922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11110:43:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11084:69:21"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 26925,
                        "name": "_calculatedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26916,
                        "src": "11239:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 26924,
                      "name": "acceptableRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26892,
                      "src": "11224:14:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) view returns (bool)"
                      }
                    },
                    "id": 26926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11224:31:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26936,
                  "nodeType": "IfStatement",
                  "src": "11220:120:21",
                  "trueBody": {
                    "id": 26935,
                    "nodeType": "Block",
                    "src": "11257:83:21",
                    "statements": [
                      {
                        "expression": {
                          "id": 26931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 26927,
                              "name": "messages",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26517,
                              "src": "11271:8:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                "typeString": "mapping(bytes32 => bytes32)"
                              }
                            },
                            "id": 26929,
                            "indexExpression": {
                              "id": 26928,
                              "name": "_leaf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26895,
                              "src": "11280:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11271:15:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 26930,
                            "name": "_calculatedRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26916,
                            "src": "11289:15:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "11271:33:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 26932,
                        "nodeType": "ExpressionStatement",
                        "src": "11271:33:21"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 26933,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11325:4:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 26905,
                        "id": 26934,
                        "nodeType": "Return",
                        "src": "11318:11:21"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 26937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11356:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 26905,
                  "id": 26938,
                  "nodeType": "Return",
                  "src": "11349:12:21"
                }
              ]
            },
            "documentation": {
              "id": 26893,
              "nodeType": "StructuredDocumentation",
              "src": "9997:655:21",
              "text": " @notice Attempts to prove the validity of message given its leaf, the\n merkle proof of inclusion for the leaf, and the index of the leaf.\n @dev Reverts if message's MessageStatus != None (i.e. if message was\n already proven or processed)\n @dev For convenience, we allow proving against any previous root.\n This means that witnesses never need to be updated for the new root\n @param _leaf Leaf of message to prove\n @param _proof Merkle proof of inclusion for leaf\n @param _index Index of leaf in home's merkle tree\n @return Returns true if proof was valid and `prove` call succeeded*"
            },
            "functionSelector": "371d3071",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "prove",
            "parameters": {
              "id": 26902,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26895,
                  "mutability": "mutable",
                  "name": "_leaf",
                  "nodeType": "VariableDeclaration",
                  "scope": 26940,
                  "src": "10681:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26894,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10681:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26899,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 26940,
                  "src": "10704:27:21",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                    "typeString": "bytes32[32]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 26896,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10704:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 26898,
                    "length": {
                      "hexValue": "3332",
                      "id": 26897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10712:2:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "10704:11:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$32_storage_ptr",
                      "typeString": "bytes32[32]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26901,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 26940,
                  "src": "10741:14:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26900,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10741:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10671:90:21"
            },
            "returnParameters": {
              "id": 26905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26904,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26940,
                  "src": "10778:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26903,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10778:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10777:6:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26952,
            "nodeType": "FunctionDefinition",
            "src": "11451:118:21",
            "body": {
              "id": 26951,
              "nodeType": "Block",
              "src": "11516:53:21",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26948,
                        "name": "remoteDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26505,
                        "src": "11549:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 26947,
                      "name": "_homeDomainHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26312,
                      "src": "11533:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) pure returns (bytes32)"
                      }
                    },
                    "id": 26949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11533:29:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 26946,
                  "id": 26950,
                  "nodeType": "Return",
                  "src": "11526:36:21"
                }
              ]
            },
            "baseFunctions": [
              26295
            ],
            "documentation": {
              "id": 26941,
              "nodeType": "StructuredDocumentation",
              "src": "11374:72:21",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\""
            },
            "functionSelector": "45630b1a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "homeDomainHash",
            "overrides": {
              "id": 26943,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11489:8:21"
            },
            "parameters": {
              "id": 26942,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11474:2:21"
            },
            "returnParameters": {
              "id": 26946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26945,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26952,
                  "src": "11507:7:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26944,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11507:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11506:9:21"
            },
            "scope": 26999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26993,
            "nodeType": "FunctionDefinition",
            "src": "11828:771:21",
            "body": {
              "id": 26992,
              "nodeType": "Block",
              "src": "11896:703:21",
              "statements": [
                {
                  "assignments": [
                    26959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26959,
                      "mutability": "mutable",
                      "name": "_current",
                      "nodeType": "VariableDeclaration",
                      "scope": 26992,
                      "src": "12091:16:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 26958,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12091:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 26961,
                  "initialValue": {
                    "id": 26960,
                    "name": "optimisticSeconds",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 26507,
                    "src": "12110:17:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12091:36:21"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 26968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 26964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 26962,
                        "name": "_current",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26959,
                        "src": "12141:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 26963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12153:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "12141:13:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 26967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 26965,
                        "name": "_current",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26959,
                        "src": "12158:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "31353030",
                        "id": 26966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12169:4:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1500_by_1",
                          "typeString": "int_const 1500"
                        },
                        "value": "1500"
                      },
                      "src": "12158:15:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12141:32:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26976,
                  "nodeType": "IfStatement",
                  "src": "12137:115:21",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 26972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 26970,
                            "name": "_optimisticSeconds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26955,
                            "src": "12195:18:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "31353030",
                            "id": 26971,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12217:4:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1500_by_1",
                              "typeString": "int_const 1500"
                            },
                            "value": "1500"
                          },
                          "src": "12195:26:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "hexValue": "6f7074696d69737469632074696d656f757420746f6f206c6f77",
                          "id": 26973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12223:28:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_0ab7e10957b2606c21968c7f9b4f39787866a57640ddd7d320367ddfc69bfe05",
                            "typeString": "literal_string \"optimistic timeout too low\""
                          },
                          "value": "optimistic timeout too low"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_0ab7e10957b2606c21968c7f9b4f39787866a57640ddd7d320367ddfc69bfe05",
                            "typeString": "literal_string \"optimistic timeout too low\""
                          }
                        ],
                        "id": 26969,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          -18,
                          -18
                        ],
                        "referencedDeclaration": -18,
                        "src": "12187:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 26974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12187:65:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 26975,
                    "nodeType": "ExpressionStatement",
                    "src": "12187:65:21"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 26980,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 26978,
                          "name": "_optimisticSeconds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26955,
                          "src": "12390:18:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "3331353336303030",
                          "id": 26979,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12411:8:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_31536000_by_1",
                            "typeString": "int_const 31536000"
                          },
                          "value": "31536000"
                        },
                        "src": "12390:29:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f7074696d69737469632074696d656f757420746f6f2068696768",
                        "id": 26981,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12421:29:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_404aafceebe73dacc8d2ece5ef0ef111bc195814eeeea087fdff2afda15ae4bd",
                          "typeString": "literal_string \"optimistic timeout too high\""
                        },
                        "value": "optimistic timeout too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_404aafceebe73dacc8d2ece5ef0ef111bc195814eeeea087fdff2afda15ae4bd",
                          "typeString": "literal_string \"optimistic timeout too high\""
                        }
                      ],
                      "id": 26977,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12382:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12382:69:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26983,
                  "nodeType": "ExpressionStatement",
                  "src": "12382:69:21"
                },
                {
                  "expression": {
                    "id": 26986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26984,
                      "name": "optimisticSeconds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26507,
                      "src": "12499:17:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26985,
                      "name": "_optimisticSeconds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26955,
                      "src": "12519:18:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12499:38:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 26987,
                  "nodeType": "ExpressionStatement",
                  "src": "12499:38:21"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 26989,
                        "name": "_optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26955,
                        "src": "12573:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 26988,
                      "name": "SetOptimisticTimeout",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26535,
                      "src": "12552:20:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 26990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12552:40:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26991,
                  "nodeType": "EmitStatement",
                  "src": "12547:45:21"
                }
              ]
            },
            "documentation": {
              "id": 26953,
              "nodeType": "StructuredDocumentation",
              "src": "11628:195:21",
              "text": " @notice Set optimistic timeout period for new roots\n @dev Called by owner (Governance) or at initialization\n @param _optimisticSeconds New optimistic timeout period"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setOptimisticTimeout",
            "parameters": {
              "id": 26956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26955,
                  "mutability": "mutable",
                  "name": "_optimisticSeconds",
                  "nodeType": "VariableDeclaration",
                  "scope": 26993,
                  "src": "11859:26:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26954,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11859:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11858:28:21"
            },
            "returnParameters": {
              "id": 26957,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11896:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26998,
            "nodeType": "FunctionDefinition",
            "src": "12700:36:21",
            "body": {
              "id": 26997,
              "nodeType": "Block",
              "src": "12734:2:21",
              "statements": []
            },
            "documentation": {
              "id": 26994,
              "nodeType": "StructuredDocumentation",
              "src": "12605:41:21",
              "text": "@notice Hook for potential future use"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeUpdate",
            "parameters": {
              "id": 26995,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12722:2:21"
            },
            "returnParameters": {
              "id": 26996,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12734:0:21"
            },
            "scope": 26999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 26464,
              "name": "Version0",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27006,
              "src": "653:8:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Version0_$27006",
                "typeString": "contract Version0"
              }
            },
            "id": 26465,
            "nodeType": "InheritanceSpecifier",
            "src": "653:8:21"
          },
          {
            "baseName": {
              "id": 26466,
              "name": "NomadBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26382,
              "src": "663:9:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NomadBase_$26382",
                "typeString": "contract NomadBase"
              }
            },
            "id": 26467,
            "nodeType": "InheritanceSpecifier",
            "src": "663:9:21"
          }
        ],
        "contractDependencies": [
          23168,
          23234,
          23523,
          26382,
          27006
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 26463,
          "nodeType": "StructuredDocumentation",
          "src": "485:147:21",
          "text": " @title Replica\n @author Illusory Systems Inc.\n @notice Track root updates on Home,\n prove and dispatch messages to end recipients."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          26999,
          26382,
          23168,
          23523,
          23234,
          27006
        ],
        "name": "Replica",
        "scope": 27000
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 21
}