{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "version",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "opaqueData",
          "type": "bytes"
        }
      ],
      "name": "TransactionDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "name": "WithdrawalFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "WithdrawalProven",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "GUARDIAN",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "L2_ORACLE",
      "outputs": [
        {
          "internalType": "contract L2OutputOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SYSTEM_CONFIG",
      "outputs": [
        {
          "internalType": "contract SystemConfig",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_gasLimit",
          "type": "uint64"
        },
        {
          "internalType": "bool",
          "name": "_isCreation",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositTransaction",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "donateETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Types.WithdrawalTransaction",
          "name": "_tx",
          "type": "tuple"
        }
      ],
      "name": "finalizeWithdrawalTransaction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "finalizedWithdrawals",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "guardian",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract L2OutputOracle",
          "name": "_l2Oracle",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_guardian",
          "type": "address"
        },
        {
          "internalType": "contract SystemConfig",
          "name": "_systemConfig",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_paused",
          "type": "bool"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_l2OutputIndex",
          "type": "uint256"
        }
      ],
      "name": "isOutputFinalized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2Oracle",
      "outputs": [
        {
          "internalType": "contract L2OutputOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2Sender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_byteCount",
          "type": "uint64"
        }
      ],
      "name": "minimumGasLimit",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "params",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "prevBaseFee",
          "type": "uint128"
        },
        {
          "internalType": "uint64",
          "name": "prevBoughtGas",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "prevBlockNum",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Types.WithdrawalTransaction",
          "name": "_tx",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "_l2OutputIndex",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "version",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "stateRoot",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "messagePasserStorageRoot",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "latestBlockhash",
              "type": "bytes32"
            }
          ],
          "internalType": "struct Types.OutputRootProof",
          "name": "_outputRootProof",
          "type": "tuple"
        },
        {
          "internalType": "bytes[]",
          "name": "_withdrawalProof",
          "type": "bytes[]"
        }
      ],
      "name": "proveWithdrawalTransaction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenWithdrawals",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "outputRoot",
          "type": "bytes32"
        },
        {
          "internalType": "uint128",
          "name": "timestamp",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "l2OutputIndex",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "systemConfig",
      "outputs": [
        {
          "internalType": "contract SystemConfig",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b506200002260008080600162000028565b62000224565b600054600390610100900460ff161580156200004b575060005460ff8083169116105b620000b45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100908117909155603280546001600160a01b031990811661dead1790915560358054603680546001600160a01b0389811691861691909117909155603780548a831695169490941790935585151592891690930260ff19166001600160a81b0319909316929092171790556200013962000181565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600054610100900460ff16620001ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000ab565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b61545c80620002346000396000f3fe60806040526004361061016d5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063e9e05c4211610059578063e9e05c4214610573578063f049875014610586578063fecf9734146105b157600080fd5b8063a35d99df1461040d578063cff0ab9614610446578063e965084c146104e757600080fd5b80639b5f694a116100b05780639b5f694a1461037e5780639bf62d82146103b0578063a14238e7146103dd57600080fd5b80638b4c40b0146101925780638c3152e91461035e57600080fd5b806354fd4d50116101225780636dbffb78116101075780636dbffb78146102fe578063724c184c1461031e5780638456cb591461034957600080fd5b806354fd4d501461027e5780635c975abb146102d457600080fd5b80633f4ba83a116101535780633f4ba83a1461021c578063452a9320146102315780634870496f1461025e57600080fd5b80621c2ff61461019957806333d7e2bd146101ef57600080fd5b36610194576101923334620186a06000604051806020016040528060008152506105d1565b005b600080fd5b3480156101a557600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506036546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561022857600080fd5b5061019261086c565b34801561023d57600080fd5b506037546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561026a57600080fd5b50610192610279366004614a4a565b610971565b34801561028a57600080fd5b506102c76040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516101e69190614ba0565b3480156102e057600080fd5b506035546102ee9060ff1681565b60405190151581526020016101e6565b34801561030a57600080fd5b506102ee610319366004614bb3565b610fa6565b34801561032a57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561035557600080fd5b50610192611065565b34801561036a57600080fd5b50610192610379366004614bcc565b611167565b34801561038a57600080fd5b506035546101c590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bc57600080fd5b506032546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103e957600080fd5b506102ee6103f8366004614bb3565b60336020526000908152604090205460ff1681565b34801561041957600080fd5b5061042d610428366004614c26565b611a2b565b60405167ffffffffffffffff90911681526020016101e6565b34801561045257600080fd5b506001546104ae906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e6565b3480156104f357600080fd5b50610545610502366004614bb3565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e6565b610192610581366004614c51565b6105d1565b34801561059257600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff166101c5565b3480156105bd57600080fd5b506101926105cc366004614ccc565b611a44565b8260005a905083156106885773ffffffffffffffffffffffffffffffffffffffff87161561068857604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6106928351611a2b565b67ffffffffffffffff168567ffffffffffffffff161015610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c0000000000000000000000000000000000000000000000000000000000606482015260840161067f565b6201d4c0835111156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c617267650000604482015260640161067f565b333281146107c4575033731111000000000000000000000000000000001111015b600034888888886040516020016107df959493929190614d26565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161084f9190614ba0565b60405180910390a450506108638282611c52565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff163314610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e70617573650000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff16156109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e747261637400606482015260840161067f565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190614dab565b519050610b50610b4b36869003860186614e10565b611f7f565b8114610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f660000000000000000000000000000000000000000000000606482015260840161067f565b6000610be987611fdb565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d035750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190614dab565b5114155b610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e000000000000000000606482015260840161067f565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e589101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e4e888a614e76565b8a6040013561200b565b610ee4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f660000000000000000000000000000606482015260840161067f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161105f9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614dab565b602001516fffffffffffffffffffffffffffffffff1661202f565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20706175736500000000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610967565b60355460ff16156111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e00606482015260840161067f565b600061128882611fdb565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e207965740000000000000000000000000000606482015260840161067f565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190614efa565b81602001516fffffffffffffffffffffffffffffffff1610156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a40161067f565b6114ee81602001516fffffffffffffffffffffffffffffffff1661202f565b6115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190614dab565b825181519192501461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a40161067f565b61172981602001516fffffffffffffffffffffffffffffffff1661202f565b6117db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60008381526033602052604090205460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a65640000000000000000000000606482015260840161067f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161191c939291906120d4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061198190841515815260200190565b60405180910390a2801580156119975750326001145b15611a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161067f565b5050505050565b6000611a38826010614f42565b61105f90615208614f72565b600054600390610100900460ff16158015611a66575060005460ff8083169116105b611af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161067f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611bed612132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c88907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614f9e565b90506000611c94612215565b90506000816020015160ff16826000015163ffffffff16611cb59190614fe4565b90508215611dec57600154600090611cec908390700100000000000000000000000000000000900467ffffffffffffffff1661504c565b90506000836040015160ff1683611d0391906150c0565b600154611d239084906fffffffffffffffffffffffffffffffff166150c0565b611d2d9190614fe4565b600154909150600090611d7e90611d579084906fffffffffffffffffffffffffffffffff1661517c565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166122db565b90506001861115611dad57611daa611d5782876040015160ff1660018a611da59190614f9e565b6122fa565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611e1f908490700100000000000000000000000000000000900467ffffffffffffffff16614f72565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161067f565b600154600090611f2e906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166151f0565b90506000611f4048633b9aca0061234f565b611f4a908361522d565b905060005a611f599088614f9e565b905080821115611f7557611f75611f708284614f9e565b612366565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611fbe949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fbe979096959101615241565b60008061201786612394565b9050612025818686866123c6565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c29190614efa565b6120cc9083615298565b421192915050565b60008060006120e48660006123f6565b90508061211a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166121c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161067f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906152d5565b905090565b60006122f06122ea8585612414565b83612424565b90505b9392505050565b6000670de0b6b3a764000061233b6123128583614fe4565b61232490670de0b6b3a764000061504c565b61233685670de0b6b3a76400006150c0565b612433565b61234590866150c0565b6122f09190614fe4565b60008183101561235f57816122f3565b5090919050565b6000805a90505b825a6123799083614f9e565b101561238f5761238882615374565b915061236d565b505050565b606081805190602001206040516020016123b091815260200190565b6040516020818303038152906040529050919050565b60006123ed846123d7878686612464565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561235f57816122f3565b600081831261235f57816122f3565b60006122f3670de0b6b3a76400008361244b86612ee2565b61245591906150c0565b61245f9190614fe4565b613126565b606060008451116124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b65790000000000000000000000604482015260640161067f565b60006124dc84613365565b905060006124e986613451565b905060008460405160200161250091815260200190565b60405160208183030381529060405290506000805b8451811015612e59576000858281518110612532576125326153ac565b6020026020010151905084518311156125cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e677468000000000000000000000000000000000000606482015260840161067f565b82600003612686578051805160209182012060405161261b926125f592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161067f565b6127dd565b80515160201161273c57805180516020918201206040516126b0926125f592910190815260200190565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c206861736800000000000000000000000000000000000000000000000000606482015260840161067f565b8051845160208087019190912082519190920120146127dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f6520686173680000000000000000000000000000000000000000000000000000606482015260840161067f565b6127e960106001615298565b816020015151036129c5578451830361295d576128238160200151601081518110612816576128166153ac565b60200260200101516134b4565b965060008751116128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161067f565b600186516128c49190614f9e565b8214612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161067f565b5050505050506122f3565b6000858481518110612971576129716153ac565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061299c5761299c6153ac565b602002602001015190506129af81613614565b95506129bc600186615298565b94505050612e46565b600281602001515103612dbe5760006129dd82613639565b90506000816000815181106129f4576129f46153ac565b016020015160f81c90506000612a0b6002836153db565b612a169060026153fd565b90506000612a27848360ff1661365d565b90506000612a358a8961365d565b90506000612a438383613693565b905080835114612ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161067f565b60ff851660021480612aea575060ff85166003145b15612cd95780825114612b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161067f565b612b998760200151600181518110612816576128166153ac565b9c5060008d5111612c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161067f565b60018c51612c3a9190614f9e565b8814612cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161067f565b5050505050505050505050506122f3565b60ff85161580612cec575060ff85166001145b15612d2b57612d188760200151600181518110612d0b57612d0b6153ac565b6020026020010151613614565b9950612d24818a615298565b9850612db3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e207072656669780000000000000000000000000000606482015260840161067f565b505050505050612e46565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f6465000000000000000000000000000000000000000000000000606482015260840161067f565b5080612e5181615374565b915050612515565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e7473000000000000000000000000000000000000000000000000000000606482015260840161067f565b6000808213612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b60006060612f5a84613747565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361315757506000919050565b680755bf798b4a1bf1e582126131c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161067f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156133835761338361486a565b6040519080825280602002602001820160405280156133c857816020015b60408051808201909152606080825260208201528152602001906001900390816133a15790505b50915060005b8181101561344a5760405180604001604052808583815181106133f3576133f36153ac565b60200260200101518152602001613422868481518110613415576134156153ac565b602002602001015161381d565b815250838281518110613437576134376153ac565b60209081029190910101526001016133ce565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156134a9578060011b82018184015160001a8060041c8253600f81166001830153505060010161347b565b509295945050505050565b606060008060006134c485613830565b9194509250905060008160018111156134df576134df615420565b1461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161067f565b6135768284615298565b855114613605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e646572000000000000000000000000606482015260840161067f565b6123ed8560200151848461429d565b606060208260000151106136305761362b826134b4565b61105f565b61105f82614331565b606061105f6136588360200151600081518110612816576128166153ac565b613451565b60608251821061367c575060408051602081019091526000815261105f565b6122f3838384865161368e9190614f9e565b614347565b60008082518451106136a65782516136a9565b83515b90505b808210801561373057508282815181106136c8576136c86153ac565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613707576137076153ac565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613740578160010191506136ac565b5092915050565b60008082116137b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061105f61382b8361451f565b614608565b6000806000808460000151116138ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b6020840151805160001a607f8111613913576000600160009450945094505050614296565b60b78111613b21576000613928608083614f9e565b9050808760000151116139e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a40161067f565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613a5c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613b0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a40161067f565b5060019550935060009250614296915050565b60bf8111613e6f576000613b3660b783614f9e565b905080876000015111613bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a40161067f565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c60378111613d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a40161067f565b613d9d8184615298565b895111613e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a40161067f565b613e5d836001615298565b97509550600094506142969350505050565b60f78111613f50576000613e8460c083614f9e565b905080876000015111613f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b600195509350849250614296915050565b6000613f5d60f783614f9e565b905080876000015111614018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a40161067f565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036140f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c603781116141ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a40161067f565b6141c48184615298565b895111614279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b614284836001615298565b97509550600194506142969350505050565b9193909250565b60608167ffffffffffffffff8111156142b8576142b861486a565b6040519080825280601f01601f1916602001820160405280156142e2576020820181803683370190505b50905081156122f35760006142f78486615298565b90506020820160005b84811015614318578281015182820152602001614300565b84811115614327576000858301525b5050509392505050565b606061105f82602001516000846000015161429d565b60608182601f0110156143b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b828284011015614422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b8183018451101561448f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161067f565b6060821580156144ae5760405191506000825260208201604052614516565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156144e75780518352602092830192016144cf565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b50604080518082019091528151815260209182019181019190915290565b6060600080600061461885613830565b91945092509050600181600181111561463357614633615420565b146146c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161067f565b84516146cc8385615298565b14614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e6465720000000000000000000000000000606482015260840161067f565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816147705790505093506000835b865181101561485e576000806147e36040518060400160405280858c600001516147c79190614f9e565b8152602001858c602001516147dc9190615298565b9052613830565b5091509150604051806040016040528083836147ff9190615298565b8152602001848b602001516148149190615298565b815250888581518110614829576148296153ac565b602090810291909101015261483f600185615298565b935061484b8183615298565b6148559084615298565b9250505061479d565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148e0576148e061486a565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461490a57600080fd5b50565b600082601f83011261491e57600080fd5b813567ffffffffffffffff8111156149385761493861486a565b61496960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614899565b81815284602083860101111561497e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156149ad57600080fd5b60405160c0810167ffffffffffffffff82821081831117156149d1576149d161486a565b8160405282935084358352602085013591506149ec826148e8565b81602084015260408501359150614a02826148e8565b816040840152606085013560608401526080850135608084015260a0850135915080821115614a3057600080fd5b50614a3d8582860161490d565b60a0830152505092915050565b600080600080600085870360e0811215614a6357600080fd5b863567ffffffffffffffff80821115614a7b57600080fd5b614a878a838b0161499b565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614ac057600080fd5b60408901955060c0890135925080831115614ada57600080fd5b828901925089601f840112614aee57600080fd5b8235915080821115614aff57600080fd5b508860208260051b8401011115614b1557600080fd5b959894975092955050506020019190565b60005b83811015614b41578181015183820152602001614b29565b83811115614b50576000848401525b50505050565b60008151808452614b6e816020860160208601614b26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122f36020830184614b56565b600060208284031215614bc557600080fd5b5035919050565b600060208284031215614bde57600080fd5b813567ffffffffffffffff811115614bf557600080fd5b614c018482850161499b565b949350505050565b803567ffffffffffffffff81168114614c2157600080fd5b919050565b600060208284031215614c3857600080fd5b6122f382614c09565b80358015158114614c2157600080fd5b600080600080600060a08688031215614c6957600080fd5b8535614c74816148e8565b945060208601359350614c8960408701614c09565b9250614c9760608701614c41565b9150608086013567ffffffffffffffff811115614cb357600080fd5b614cbf8882890161490d565b9150509295509295909350565b60008060008060808587031215614ce257600080fd5b8435614ced816148e8565b93506020850135614cfd816148e8565b92506040850135614d0d816148e8565b9150614d1b60608601614c41565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614d7a816049850160208701614b26565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614c2157600080fd5b600060608284031215614dbd57600080fd5b6040516060810181811067ffffffffffffffff82111715614de057614de061486a565b60405282518152614df360208401614d8b565b6020820152614e0460408401614d8b565b60408201529392505050565b600060808284031215614e2257600080fd5b6040516080810181811067ffffffffffffffff82111715614e4557614e4561486a565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614e9157614e9161486a565b8360051b6020614ea2818301614899565b868152918501918181019036841115614eba57600080fd5b865b84811015614eee57803586811115614ed45760008081fd5b614ee036828b0161490d565b845250918301918301614ebc565b50979650505050505050565b600060208284031215614f0c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614f6957614f69614f13565b02949350505050565b600067ffffffffffffffff808316818516808303821115614f9557614f95614f13565b01949350505050565b600082821015614fb057614fb0614f13565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614ff357614ff3614fb5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561504757615047614f13565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561508657615086614f13565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156150ba576150ba614f13565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561510157615101614f13565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561513c5761513c614f13565b6000871292508782058712848416161561515857615158614f13565b8785058712818416161561516e5761516e614f13565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156151b6576151b6614f13565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156151ea576151ea614f13565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561522857615228614f13565b500290565b60008261523c5761523c614fb5565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261528c60c0830184614b56565b98975050505050505050565b600082198211156152ab576152ab614f13565b500190565b805163ffffffff81168114614c2157600080fd5b805160ff81168114614c2157600080fd5b600060c082840312156152e757600080fd5b60405160c0810181811067ffffffffffffffff8211171561530a5761530a61486a565b604052615316836152b0565b8152615324602084016152c4565b6020820152615335604084016152c4565b6040820152615346606084016152b0565b6060820152615357608084016152b0565b608082015261536860a08401614d8b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153a5576153a5614f13565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806153ee576153ee614fb5565b8060ff84160691505092915050565b600060ff821660ff84168082101561541757615417614f13565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a",
    "sourceMap": "1135:20265:110:-:0;;;4982:219;;;;;;;;;-1:-1:-1;5006:188:110;5065:1;;;5179:4;5006:10;:188::i;:::-;1135:20265;;5491:423;4396:13:36;;2762:1:158;;4396:13:36;;;;;4395:14;:40;;;;-1:-1:-1;4413:12:36;;:22;;;;:12;;:22;4395:40;4387:99;;;;-1:-1:-1;;;4387:99:36;;216:2:285;4387:99:36;;;198:21:285;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:285;;;338:44;399:19;;4387:99:36;;;;;;;;;4496:12;:22;;-1:-1:-1;;4528:20:36;4496:22;;;4528:20;4496:22;4528:20;;;;;;5710:8:110::1;:38:::0;;-1:-1:-1;;;;;;5710:38:110;;::::1;1337:42:158;5710:38:110;::::0;;;5758:8:::1;:20:::0;;5788:12:::1;:28:::0;;-1:-1:-1;;;;;5788:28:110;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;5826:8:::1;:20:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;5856:16;::::1;;5758:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;5856:16:110;-1:-1:-1;;;;;;5856:16:110;;;;;;;::::1;::::0;;5882:25:::1;:23;:25::i;:::-;4585:5:36::0;4569:21;;-1:-1:-1;;4569:21:36;;;4605:20;;601:4:285;589:17;;571:36;;4605:20:36;;559:2:285;544:18;4605:20:36;;;;;;;5491:423:110;;;;;:::o;8362:180:112:-;4888:13:36;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:36;;820:2:285;4880:69:36;;;802:21:285;859:2;839:18;;;832:30;898:34;878:18;;;871:62;-1:-1:-1;;;949:18:285;;;942:41;1000:19;;4880:69:36;618:407:285;4880:69:36;8442:93:112::1;::::0;;::::1;::::0;::::1;::::0;;8472:6:::1;8442:93:::0;;;-1:-1:-1;8442:93:112::1;::::0;::::1;::::0;8519:12:::1;-1:-1:-1::0;;;;;8442:93:112::1;::::0;;;;;;;-1:-1:-1;;;8433:102:112::1;;:6;:102:::0;8362:180::o;618:407:285:-;1135:20265:110;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x60806040526004361061016d5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063e9e05c4211610059578063e9e05c4214610573578063f049875014610586578063fecf9734146105b157600080fd5b8063a35d99df1461040d578063cff0ab9614610446578063e965084c146104e757600080fd5b80639b5f694a116100b05780639b5f694a1461037e5780639bf62d82146103b0578063a14238e7146103dd57600080fd5b80638b4c40b0146101925780638c3152e91461035e57600080fd5b806354fd4d50116101225780636dbffb78116101075780636dbffb78146102fe578063724c184c1461031e5780638456cb591461034957600080fd5b806354fd4d501461027e5780635c975abb146102d457600080fd5b80633f4ba83a116101535780633f4ba83a1461021c578063452a9320146102315780634870496f1461025e57600080fd5b80621c2ff61461019957806333d7e2bd146101ef57600080fd5b36610194576101923334620186a06000604051806020016040528060008152506105d1565b005b600080fd5b3480156101a557600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506036546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561022857600080fd5b5061019261086c565b34801561023d57600080fd5b506037546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561026a57600080fd5b50610192610279366004614a4a565b610971565b34801561028a57600080fd5b506102c76040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516101e69190614ba0565b3480156102e057600080fd5b506035546102ee9060ff1681565b60405190151581526020016101e6565b34801561030a57600080fd5b506102ee610319366004614bb3565b610fa6565b34801561032a57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561035557600080fd5b50610192611065565b34801561036a57600080fd5b50610192610379366004614bcc565b611167565b34801561038a57600080fd5b506035546101c590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bc57600080fd5b506032546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103e957600080fd5b506102ee6103f8366004614bb3565b60336020526000908152604090205460ff1681565b34801561041957600080fd5b5061042d610428366004614c26565b611a2b565b60405167ffffffffffffffff90911681526020016101e6565b34801561045257600080fd5b506001546104ae906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e6565b3480156104f357600080fd5b50610545610502366004614bb3565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e6565b610192610581366004614c51565b6105d1565b34801561059257600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff166101c5565b3480156105bd57600080fd5b506101926105cc366004614ccc565b611a44565b8260005a905083156106885773ffffffffffffffffffffffffffffffffffffffff87161561068857604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6106928351611a2b565b67ffffffffffffffff168567ffffffffffffffff161015610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c0000000000000000000000000000000000000000000000000000000000606482015260840161067f565b6201d4c0835111156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c617267650000604482015260640161067f565b333281146107c4575033731111000000000000000000000000000000001111015b600034888888886040516020016107df959493929190614d26565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161084f9190614ba0565b60405180910390a450506108638282611c52565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff163314610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e70617573650000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff16156109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e747261637400606482015260840161067f565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190614dab565b519050610b50610b4b36869003860186614e10565b611f7f565b8114610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f660000000000000000000000000000000000000000000000606482015260840161067f565b6000610be987611fdb565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d035750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190614dab565b5114155b610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e000000000000000000606482015260840161067f565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e589101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e4e888a614e76565b8a6040013561200b565b610ee4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f660000000000000000000000000000606482015260840161067f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161105f9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614dab565b602001516fffffffffffffffffffffffffffffffff1661202f565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20706175736500000000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610967565b60355460ff16156111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e00606482015260840161067f565b600061128882611fdb565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e207965740000000000000000000000000000606482015260840161067f565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190614efa565b81602001516fffffffffffffffffffffffffffffffff1610156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a40161067f565b6114ee81602001516fffffffffffffffffffffffffffffffff1661202f565b6115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190614dab565b825181519192501461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a40161067f565b61172981602001516fffffffffffffffffffffffffffffffff1661202f565b6117db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60008381526033602052604090205460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a65640000000000000000000000606482015260840161067f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161191c939291906120d4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061198190841515815260200190565b60405180910390a2801580156119975750326001145b15611a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161067f565b5050505050565b6000611a38826010614f42565b61105f90615208614f72565b600054600390610100900460ff16158015611a66575060005460ff8083169116105b611af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161067f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611bed612132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c88907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614f9e565b90506000611c94612215565b90506000816020015160ff16826000015163ffffffff16611cb59190614fe4565b90508215611dec57600154600090611cec908390700100000000000000000000000000000000900467ffffffffffffffff1661504c565b90506000836040015160ff1683611d0391906150c0565b600154611d239084906fffffffffffffffffffffffffffffffff166150c0565b611d2d9190614fe4565b600154909150600090611d7e90611d579084906fffffffffffffffffffffffffffffffff1661517c565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166122db565b90506001861115611dad57611daa611d5782876040015160ff1660018a611da59190614f9e565b6122fa565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611e1f908490700100000000000000000000000000000000900467ffffffffffffffff16614f72565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161067f565b600154600090611f2e906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166151f0565b90506000611f4048633b9aca0061234f565b611f4a908361522d565b905060005a611f599088614f9e565b905080821115611f7557611f75611f708284614f9e565b612366565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611fbe949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fbe979096959101615241565b60008061201786612394565b9050612025818686866123c6565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c29190614efa565b6120cc9083615298565b421192915050565b60008060006120e48660006123f6565b90508061211a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166121c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161067f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906152d5565b905090565b60006122f06122ea8585612414565b83612424565b90505b9392505050565b6000670de0b6b3a764000061233b6123128583614fe4565b61232490670de0b6b3a764000061504c565b61233685670de0b6b3a76400006150c0565b612433565b61234590866150c0565b6122f09190614fe4565b60008183101561235f57816122f3565b5090919050565b6000805a90505b825a6123799083614f9e565b101561238f5761238882615374565b915061236d565b505050565b606081805190602001206040516020016123b091815260200190565b6040516020818303038152906040529050919050565b60006123ed846123d7878686612464565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561235f57816122f3565b600081831261235f57816122f3565b60006122f3670de0b6b3a76400008361244b86612ee2565b61245591906150c0565b61245f9190614fe4565b613126565b606060008451116124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b65790000000000000000000000604482015260640161067f565b60006124dc84613365565b905060006124e986613451565b905060008460405160200161250091815260200190565b60405160208183030381529060405290506000805b8451811015612e59576000858281518110612532576125326153ac565b6020026020010151905084518311156125cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e677468000000000000000000000000000000000000606482015260840161067f565b82600003612686578051805160209182012060405161261b926125f592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161067f565b6127dd565b80515160201161273c57805180516020918201206040516126b0926125f592910190815260200190565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c206861736800000000000000000000000000000000000000000000000000606482015260840161067f565b8051845160208087019190912082519190920120146127dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f6520686173680000000000000000000000000000000000000000000000000000606482015260840161067f565b6127e960106001615298565b816020015151036129c5578451830361295d576128238160200151601081518110612816576128166153ac565b60200260200101516134b4565b965060008751116128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161067f565b600186516128c49190614f9e565b8214612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161067f565b5050505050506122f3565b6000858481518110612971576129716153ac565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061299c5761299c6153ac565b602002602001015190506129af81613614565b95506129bc600186615298565b94505050612e46565b600281602001515103612dbe5760006129dd82613639565b90506000816000815181106129f4576129f46153ac565b016020015160f81c90506000612a0b6002836153db565b612a169060026153fd565b90506000612a27848360ff1661365d565b90506000612a358a8961365d565b90506000612a438383613693565b905080835114612ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161067f565b60ff851660021480612aea575060ff85166003145b15612cd95780825114612b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161067f565b612b998760200151600181518110612816576128166153ac565b9c5060008d5111612c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161067f565b60018c51612c3a9190614f9e565b8814612cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161067f565b5050505050505050505050506122f3565b60ff85161580612cec575060ff85166001145b15612d2b57612d188760200151600181518110612d0b57612d0b6153ac565b6020026020010151613614565b9950612d24818a615298565b9850612db3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e207072656669780000000000000000000000000000606482015260840161067f565b505050505050612e46565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f6465000000000000000000000000000000000000000000000000606482015260840161067f565b5080612e5181615374565b915050612515565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e7473000000000000000000000000000000000000000000000000000000606482015260840161067f565b6000808213612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b60006060612f5a84613747565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361315757506000919050565b680755bf798b4a1bf1e582126131c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161067f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156133835761338361486a565b6040519080825280602002602001820160405280156133c857816020015b60408051808201909152606080825260208201528152602001906001900390816133a15790505b50915060005b8181101561344a5760405180604001604052808583815181106133f3576133f36153ac565b60200260200101518152602001613422868481518110613415576134156153ac565b602002602001015161381d565b815250838281518110613437576134376153ac565b60209081029190910101526001016133ce565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156134a9578060011b82018184015160001a8060041c8253600f81166001830153505060010161347b565b509295945050505050565b606060008060006134c485613830565b9194509250905060008160018111156134df576134df615420565b1461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161067f565b6135768284615298565b855114613605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e646572000000000000000000000000606482015260840161067f565b6123ed8560200151848461429d565b606060208260000151106136305761362b826134b4565b61105f565b61105f82614331565b606061105f6136588360200151600081518110612816576128166153ac565b613451565b60608251821061367c575060408051602081019091526000815261105f565b6122f3838384865161368e9190614f9e565b614347565b60008082518451106136a65782516136a9565b83515b90505b808210801561373057508282815181106136c8576136c86153ac565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613707576137076153ac565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613740578160010191506136ac565b5092915050565b60008082116137b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061105f61382b8361451f565b614608565b6000806000808460000151116138ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b6020840151805160001a607f8111613913576000600160009450945094505050614296565b60b78111613b21576000613928608083614f9e565b9050808760000151116139e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a40161067f565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613a5c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613b0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a40161067f565b5060019550935060009250614296915050565b60bf8111613e6f576000613b3660b783614f9e565b905080876000015111613bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a40161067f565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c60378111613d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a40161067f565b613d9d8184615298565b895111613e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a40161067f565b613e5d836001615298565b97509550600094506142969350505050565b60f78111613f50576000613e8460c083614f9e565b905080876000015111613f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b600195509350849250614296915050565b6000613f5d60f783614f9e565b905080876000015111614018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a40161067f565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036140f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c603781116141ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a40161067f565b6141c48184615298565b895111614279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b614284836001615298565b97509550600194506142969350505050565b9193909250565b60608167ffffffffffffffff8111156142b8576142b861486a565b6040519080825280601f01601f1916602001820160405280156142e2576020820181803683370190505b50905081156122f35760006142f78486615298565b90506020820160005b84811015614318578281015182820152602001614300565b84811115614327576000858301525b5050509392505050565b606061105f82602001516000846000015161429d565b60608182601f0110156143b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b828284011015614422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b8183018451101561448f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161067f565b6060821580156144ae5760405191506000825260208201604052614516565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156144e75780518352602092830192016144cf565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b50604080518082019091528151815260209182019181019190915290565b6060600080600061461885613830565b91945092509050600181600181111561463357614633615420565b146146c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161067f565b84516146cc8385615298565b14614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e6465720000000000000000000000000000606482015260840161067f565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816147705790505093506000835b865181101561485e576000806147e36040518060400160405280858c600001516147c79190614f9e565b8152602001858c602001516147dc9190615298565b9052613830565b5091509150604051806040016040528083836147ff9190615298565b8152602001848b602001516148149190615298565b815250888581518110614829576148296153ac565b602090810291909101015261483f600185615298565b935061484b8183615298565b6148559084615298565b9250505061479d565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148e0576148e061486a565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461490a57600080fd5b50565b600082601f83011261491e57600080fd5b813567ffffffffffffffff8111156149385761493861486a565b61496960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614899565b81815284602083860101111561497e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156149ad57600080fd5b60405160c0810167ffffffffffffffff82821081831117156149d1576149d161486a565b8160405282935084358352602085013591506149ec826148e8565b81602084015260408501359150614a02826148e8565b816040840152606085013560608401526080850135608084015260a0850135915080821115614a3057600080fd5b50614a3d8582860161490d565b60a0830152505092915050565b600080600080600085870360e0811215614a6357600080fd5b863567ffffffffffffffff80821115614a7b57600080fd5b614a878a838b0161499b565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614ac057600080fd5b60408901955060c0890135925080831115614ada57600080fd5b828901925089601f840112614aee57600080fd5b8235915080821115614aff57600080fd5b508860208260051b8401011115614b1557600080fd5b959894975092955050506020019190565b60005b83811015614b41578181015183820152602001614b29565b83811115614b50576000848401525b50505050565b60008151808452614b6e816020860160208601614b26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122f36020830184614b56565b600060208284031215614bc557600080fd5b5035919050565b600060208284031215614bde57600080fd5b813567ffffffffffffffff811115614bf557600080fd5b614c018482850161499b565b949350505050565b803567ffffffffffffffff81168114614c2157600080fd5b919050565b600060208284031215614c3857600080fd5b6122f382614c09565b80358015158114614c2157600080fd5b600080600080600060a08688031215614c6957600080fd5b8535614c74816148e8565b945060208601359350614c8960408701614c09565b9250614c9760608701614c41565b9150608086013567ffffffffffffffff811115614cb357600080fd5b614cbf8882890161490d565b9150509295509295909350565b60008060008060808587031215614ce257600080fd5b8435614ced816148e8565b93506020850135614cfd816148e8565b92506040850135614d0d816148e8565b9150614d1b60608601614c41565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614d7a816049850160208701614b26565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614c2157600080fd5b600060608284031215614dbd57600080fd5b6040516060810181811067ffffffffffffffff82111715614de057614de061486a565b60405282518152614df360208401614d8b565b6020820152614e0460408401614d8b565b60408201529392505050565b600060808284031215614e2257600080fd5b6040516080810181811067ffffffffffffffff82111715614e4557614e4561486a565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614e9157614e9161486a565b8360051b6020614ea2818301614899565b868152918501918181019036841115614eba57600080fd5b865b84811015614eee57803586811115614ed45760008081fd5b614ee036828b0161490d565b845250918301918301614ebc565b50979650505050505050565b600060208284031215614f0c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614f6957614f69614f13565b02949350505050565b600067ffffffffffffffff808316818516808303821115614f9557614f95614f13565b01949350505050565b600082821015614fb057614fb0614f13565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614ff357614ff3614fb5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561504757615047614f13565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561508657615086614f13565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156150ba576150ba614f13565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561510157615101614f13565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561513c5761513c614f13565b6000871292508782058712848416161561515857615158614f13565b8785058712818416161561516e5761516e614f13565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156151b6576151b6614f13565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156151ea576151ea614f13565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561522857615228614f13565b500290565b60008261523c5761523c614fb5565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261528c60c0830184614b56565b98975050505050505050565b600082198211156152ab576152ab614f13565b500190565b805163ffffffff81168114614c2157600080fd5b805160ff81168114614c2157600080fd5b600060c082840312156152e757600080fd5b60405160c0810181811067ffffffffffffffff8211171561530a5761530a61486a565b604052615316836152b0565b8152615324602084016152c4565b6020820152615335604084016152c4565b6040820152615346606084016152b0565b6060820152615357608084016152b0565b608082015261536860a08401614d8b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153a5576153a5614f13565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806153ee576153ee614fb5565b8060ff84160691505092915050565b600060ff821660ff84168082101561541757615417614f13565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a",
    "sourceMap": "1135:20265:110:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7915:86;7934:10;7946:9;1866:7;7984:5;7991:9;;;;;;;;;;;;7915:18;:86::i;:::-;1135:20265;;;;;5989:92;;;;;;;;;;-1:-1:-1;6066:8:110;;;;;;;5989:92;;;214:42:285;202:55;;;184:74;;172:2;157:18;5989:92:110;;;;;;;;2856:32;;;;;;;;;;-1:-1:-1;2856:32:110;;;;;;;;6664:180;;;;;;;;;;;;;:::i;3007:23::-;;;;;;;;;;-1:-1:-1;3007:23:110;;;;;;;;9088:3746;;;;;;;;;;-1:-1:-1;9088:3746:110;;;;;:::i;:::-;;:::i;4878:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2618:18::-;;;;;;;;;;-1:-1:-1;2618:18:110;;;;;;;;;;;5224:14:285;;5217:22;5199:41;;5187:2;5172:18;2618::110;5059:187:285;20785:180:110;;;;;;;;;;-1:-1:-1;20785:180:110;;;;;:::i;:::-;;:::i;6321:84::-;;;;;;;;;;-1:-1:-1;6390:8:110;;;;6321:84;;6447:173;;;;;;;;;;;;;:::i;12947:4839::-;;;;;;;;;;-1:-1:-1;12947:4839:110;;;;;:::i;:::-;;:::i;2732:30::-;;;;;;;;;;-1:-1:-1;2732:30:110;;;;;;;;;;;2129:23;;;;;;;;;;-1:-1:-1;2129:23:110;;;;;;;;2243:52;;;;;;;;;;-1:-1:-1;2243:52:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;7337:120;;;;;;;;;;-1:-1:-1;7337:120:110;;;;;:::i;:::-;;:::i;:::-;;;6539:18:285;6527:31;;;6509:50;;6497:2;6482:18;7337:120:110;6365:200:285;2999:28:112;;;;;;;;;;-1:-1:-1;2999:28:112;;;;;;;;;;;;;;;;;;;;;;;;;6798:34:285;6786:47;;;6768:66;;6853:18;6907:15;;;6902:2;6887:18;;6880:43;6959:15;;6939:18;;;6932:43;6756:2;6741:18;2999:28:112;6570:411:285;2377:61:110;;;;;;;;;;-1:-1:-1;2377:61:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7188:25:285;;;7232:34;7302:15;;;7297:2;7282:18;;7275:43;7354:15;;7334:18;;;7327:43;7176:2;7161:18;2377:61:110;6986:390:285;18516:1971:110;;;;;;:::i;:::-;;:::i;6154:98::-;;;;;;;;;;-1:-1:-1;6233:12:110;;;;6154:98;;5491:423;;;;;;;;;;-1:-1:-1;5491:423:110;;;;;:::i;:::-;;:::i;18516:1971::-;18722:9;3417:18:112;3438:9;3417:30;;18876:11:110::1;18872:136;;;18911:17;::::0;::::1;::::0;18903:94:::1;;;::::0;;::::1;::::0;;9067:2:285;18903:94:110::1;::::0;::::1;9049:21:285::0;9086:18;;;9079:30;;;;9145:34;9125:18;;;9118:62;9216:34;9196:18;;;9189:62;9268:19;;18903:94:110::1;;;;;;;;;19176:37;19199:5;:12;19176:15;:37::i;:::-;19163:50;;:9;:50;;;;19155:98;;;::::0;::::1;::::0;;9500:2:285;19155:98:110::1;::::0;::::1;9482:21:285::0;9539:2;9519:18;;;9512:30;9578:34;9558:18;;;9551:62;9649:5;9629:18;;;9622:33;9672:19;;19155:98:110::1;9298:399:285::0;19155:98:110::1;19648:7;19632:5;:12;:23;;19624:66;;;::::0;::::1;::::0;;9904:2:285;19624:66:110::1;::::0;::::1;9886:21:285::0;9943:2;9923:18;;;9916:30;9982:32;9962:18;;;9955:60;10032:18;;19624:66:110::1;9702:354:285::0;19624:66:110::1;19796:10;19834:9;19820:23:::0;::::1;19816:108;;-1:-1:-1::0;19902:10:110::1;741:42:204::0;1213:27;19816:108:110::1;20181:23;20224:9;20235:6;20243:9;20254:11;20267:5;20207:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20181:92;;1716:1;20447:3;20420:60;;20441:4;20420:60;;;20469:10;20420:60;;;;;;:::i;:::-;;;;;;;;18737:1750;;3548:29:112::0;3557:7;3566:10;3548:8;:29::i;:::-;3339:245;18516:1971:110;;;;;;:::o;6664:180::-;6724:8;;;;6710:10;:22;6702:76;;;;;;;11133:2:285;6702:76:110;;;11115:21:285;11172:2;11152:18;;;11145:30;11211:34;11191:18;;;11184:62;11282:11;11262:18;;;11255:39;11311:19;;6702:76:110;10931:405:285;6702:76:110;6788:6;:14;;;;;;6817:20;;6826:10;184:74:285;;6817:20:110;;172:2:285;157:18;6817:20:110;;;;;;;;6664:180::o;9088:3746::-;4748:6;;;;:15;4740:50;;;;;;;11543:2:285;4740:50:110;;;11525:21:285;11582:2;11562:18;;;11555:30;11621:24;11601:18;;;11594:52;11663:18;;4740:50:110;11341:346:285;4740:50:110;9620:4:::1;9598:27;;:3;:10;;;:27;;::::0;9590:103:::1;;;::::0;::::1;::::0;;11894:2:285;9590:103:110::1;::::0;::::1;11876:21:285::0;11933:2;11913:18;;;11906:30;11972:34;11952:18;;;11945:62;12043:33;12023:18;;;12016:61;12094:19;;9590:103:110::1;11692:427:285::0;9590:103:110::1;9891:8;::::0;:36:::1;::::0;;;;::::1;::::0;::::1;12270:25:285::0;;;9870:18:110::1;::::0;9891:8:::1;::::0;::::1;;;::::0;:20:::1;::::0;12243:18:285;;9891:36:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47:::0;;-1:-1:-1;10072:45:110::1;;;::::0;;::::1;::::0;::::1;10100:16:::0;10072:45:::1;:::i;:::-;:27;:45::i;:::-;10058:10;:59;10037:135;;;::::0;::::1;::::0;;13978:2:285;10037:135:110::1;::::0;::::1;13960:21:285::0;14017:2;13997:18;;;13990:30;14056:34;14036:18;;;14029:62;14127:11;14107:18;;;14100:39;14156:19;;10037:135:110::1;13776:405:285::0;10037:135:110::1;10283:22;10308:27;10331:3;10308:22;:27::i;:::-;10345:40;10388:33:::0;;;:17:::1;:33;::::0;;;;;;;;10345:76;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;;;;;;;10283:52;;-1:-1:-1;10345:76:110;10975:31;;:145:::1;;-1:-1:-1::0;11093:27:110;;11026:8:::1;::::0;11047:30:::1;::::0;;::::1;::::0;11026:52;;;;;14362:34:285;14350:47;;;11026:52:110::1;::::0;::::1;14332:66:285::0;11026:8:110::1;::::0;;::::1;;;::::0;:20:::1;::::0;14305:18:285;;11026:52:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63:::0;:94:::1;;10975:145;10954:247;;;::::0;::::1;::::0;;14611:2:285;10954:247:110::1;::::0;::::1;14593:21:285::0;14650:2;14630:18;;;14623:30;14689:34;14669:18;;;14662:62;14760:25;14740:18;;;14733:53;14803:19;;10954:247:110::1;14409:419:285::0;10954:247:110::1;11481:147;::::0;;::::1;::::0;::::1;15007:25:285::0;;;11437:18:110::1;15048::285::0;;;15041:34;;;14980:18;;11481:147:110::1;::::0;;;;;::::1;::::0;;;;;;11458:180;;11481:147:::1;11458:180:::0;;::::1;::::0;12046:22;;::::1;12270:25:285::0;;;11458:180:110;-1:-1:-1;11991:161:110::1;::::0;12243:18:285;12046:22:110::1;::::0;;;;;::::1;::::0;;;11991:161;;::::1;::::0;;;::::1;::::0;;::::1;12046:22;11991:161:::0;::::1;::::0;12046:22;11991:161:::1;12079:16:::0;;11991:161:::1;:::i;:::-;12097:16;:41;;;11991:37;:161::i;:::-;11970:258;;;::::0;::::1;::::0;;16409:2:285;11970:258:110::1;::::0;::::1;16391:21:285::0;16448:2;16428:18;;;16421:30;16487:34;16467:18;;;16460:62;16558:20;16538:18;;;16531:48;16596:19;;11970:258:110::1;16207:414:285::0;11970:258:110::1;12546:165;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;12632:15;12546:165:::0;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;-1:-1:-1;12510:33:110;;;:17:::1;:33:::0;;;;;:201;;;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;;12816:10;;::::1;::::0;12804;;::::1;::::0;12771:56;;::::1;::::0;;::::1;::::0;;;::::1;::::0;12528:14;;12771:56:::1;::::0;-1:-1:-1;12771:56:110::1;9353:3481;;;;9088:3746:::0;;;;;:::o;20785:180::-;20911:8;;:36;;;;;;;;12270:25:285;;;20859:4:110;;20882:76;;20911:8;;;;;;;:20;;12243:18:285;;20911:36:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;20882:76;;:28;:76::i;:::-;20875:83;20785:180;-1:-1:-1;;20785:180:110:o;6447:173::-;6505:8;;;;6491:10;:22;6483:74;;;;;;;16828:2:285;6483:74:110;;;16810:21:285;16867:2;16847:18;;;16840:30;16906:34;16886:18;;;16879:62;16977:9;16957:18;;;16950:37;17004:19;;6483:74:110;16626:403:285;6483:74:110;6567:6;:13;;;;6576:4;6567:13;;;6595:18;;6602:10;184:74:285;;6595:18:110;;172:2:285;157:18;6595::110;14:250:285;12947:4839:110;4748:6;;;;:15;4740:50;;;;;;;11543:2:285;4740:50:110;;;11525:21:285;11582:2;11562:18;;;11555:30;11621:24;11601:18;;;11594:52;11663:18;;4740:50:110;11341:346:285;4740:50:110;13315:8:::1;::::0;:39:::1;:8;1337:42:158;13315:39:110;13294:137;;;::::0;::::1;::::0;;17236:2:285;13294:137:110::1;::::0;::::1;17218:21:285::0;17275:2;17255:18;;;17248:30;17314:34;17294:18;;;17287:62;17385:33;17365:18;;;17358:61;17436:19;;13294:137:110::1;17034:427:285::0;13294:137:110::1;13514:22;13539:27;13562:3;13539:22;:27::i;:::-;13576:40;13619:33:::0;;;:17:::1;:33;::::0;;;;;;;13576:76;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;;;;;;;13514:52;;-1:-1:-1;13902:31:110;;13894:94:::1;;;::::0;::::1;::::0;;17668:2:285;13894:94:110::1;::::0;::::1;17650:21:285::0;17707:2;17687:18;;;17680:30;17746:34;17726:18;;;17719:62;17817:20;17797:18;;;17790:48;17855:19;;13894:94:110::1;17466:414:285::0;13894:94:110::1;14305:8;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14275:16;:26;;;:58;;;;14254:180;;;::::0;::::1;::::0;;18276:2:285;14254:180:110::1;::::0;::::1;18258:21:285::0;18315:2;18295:18;;;18288:30;18354:34;18334:18;;;18327:62;18425:34;18405:18;;;18398:62;18497:13;18476:19;;;18469:42;18528:19;;14254:180:110::1;18074:479:285::0;14254:180:110::1;14824:56;14853:16;:26;;;14824:56;;:28;:56::i;:::-;14803:172;;;::::0;::::1;::::0;;18760:2:285;14803:172:110::1;::::0;::::1;18742:21:285::0;18799:2;18779:18;;;18772:30;18838:34;18818:18;;;18811:62;18909:34;18889:18;;;18882:62;18981:7;18960:19;;;18953:36;19006:19;;14803:172:110::1;18558:473:285::0;14803:172:110::1;15185:8;::::0;15206:30:::1;::::0;;::::1;::::0;15185:52;;;;;14362:34:285;14350:47;;;15185:52:110::1;::::0;::::1;14332:66:285::0;15146:36:110::1;::::0;15185:8:::1;::::0;::::1;;;::::0;:20:::1;::::0;14305:18:285;;15185:52:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15548:27:::0;;15525:19;;15146:91;;-1:-1:-1;15525:50:110::1;15504:170;;;::::0;::::1;::::0;;19238:2:285;15504:170:110::1;::::0;::::1;19220:21:285::0;19277:2;19257:18;;;19250:30;19316:34;19296:18;;;19289:62;19387:34;19367:18;;;19360:62;19459:11;19438:19;;;19431:40;19488:19;;15504:170:110::1;19036:477:285::0;15504:170:110::1;15773:48;15802:8;:18;;;15773:48;;:28;:48::i;:::-;15752:162;;;::::0;::::1;::::0;;19720:2:285;15752:162:110::1;::::0;::::1;19702:21:285::0;19759:2;19739:18;;;19732:30;19798:34;19778:18;;;19771:62;19869:34;19849:18;;;19842:62;19941:5;19920:19;;;19913:34;19964:19;;15752:162:110::1;19518:471:285::0;15752:162:110::1;16030:36;::::0;;;:20:::1;:36;::::0;;;;;::::1;;:45;16022:111;;;::::0;::::1;::::0;;20196:2:285;16022:111:110::1;::::0;::::1;20178:21:285::0;20235:2;20215:18;;;20208:30;20274:34;20254:18;;;20247:62;20345:23;20325:18;;;20318:51;20386:19;;16022:111:110::1;19994:417:285::0;16022:111:110::1;16213:36;::::0;;;:20:::1;:36;::::0;;;;;;;:43;;;::::1;16252:4;16213:43;::::0;;16361:10;;::::1;::::0;16350:8:::1;:21:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;17030:10;::::1;::::0;17042:12:::1;::::0;::::1;::::0;17056:9:::1;::::0;::::1;::::0;17067:8:::1;::::0;::::1;::::0;17006:70:::1;::::0;17030:10;17042:12;17056:9;17006:23:::1;:70::i;:::-;17144:8;:38:::0;;;::::1;1337:42:158;17144:38:110;::::0;;17341:44:::1;::::0;16991:85;;-1:-1:-1;17361:14:110;;17341:44:::1;::::0;::::1;::::0;16991:85;5224:14:285;5217:22;5199:41;;5187:2;5172:18;;5059:187;17341:44:110::1;;;;;;;;17649:16:::0;::::1;::::0;::::1;:61;;-1:-1:-1::0;17669:9:110::1;1015:1:158;17669:41:110;17649:61;17645:135;;;17726:43;::::0;::::1;::::0;;20618:2:285;17726:43:110::1;::::0;::::1;20600:21:285::0;20657:2;20637:18;;;20630:30;20696:34;20676:18;;;20669:62;20767:3;20747:18;;;20740:31;20788:19;;17726:43:110::1;20416:397:285::0;17645:135:110::1;13049:4737;;;;12947:4839:::0;:::o;7337:120::-;7402:6;7427:15;:10;7440:2;7427:15;:::i;:::-;:23;;7445:5;7427:23;:::i;5491:423::-;4396:13:36;;2762:1:158;;4396:13:36;;;;;4395:14;:40;;;;-1:-1:-1;4413:12:36;;:22;;;;:12;;:22;4395:40;4387:99;;;;;;;21725:2:285;4387:99:36;;;21707:21:285;21764:2;21744:18;;;21737:30;21803:34;21783:18;;;21776:62;21874:16;21854:18;;;21847:44;21908:19;;4387:99:36;21523:410:285;4387:99:36;4496:12;:22;;4528:20;;4496:22;;;4528:20;4496:22;4528:20;;;;;;5710:8:110::1;:38:::0;;;;;::::1;1337:42:158;5710:38:110;::::0;;;5758:8:::1;:20:::0;;5788:12:::1;:28:::0;;5710:38:::1;5788:28:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;5826:8:::1;:20:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;5856:16;::::1;;5758:20:::0;;::::1;::::0;;::::1;4496:22:36::0;5856:16:110;;;;;;;;;::::1;::::0;;5882:25:::1;:23;:25::i;:::-;4585:5:36::0;4569:21;;;;;;4605:20;;22110:4:285;22098:17;;22080:36;;4605:20:36;;22068:2:285;22053:18;4605:20:36;;;;;;;5491:423:110;;;;;:::o;3817:4037:112:-;3984:6;:19;3949:17;;3969:34;;3984:19;;;;;3969:12;:34;:::i;:::-;3949:54;;4014:28;4045:17;:15;:17::i;:::-;4014:48;;4072:26;4171:6;:27;;;4163:36;;4128:6;:23;;;4120:32;;4113:87;;;;:::i;:::-;4072:128;-1:-1:-1;4215:13:112;;4211:2229;;4572:6;:20;4535:19;;4557:59;;4597:19;;4572:20;;;;;4557:59;:::i;:::-;4535:81;;4630:19;4761:6;:34;;;4753:43;;4724:19;:73;;;;:::i;:::-;4668:6;:18;4653:50;;4691:12;;4668:18;;4653:50;:::i;:::-;4652:146;;;;:::i;:::-;5017:6;:18;4630:168;;-1:-1:-1;4939:17:112;;4959:232;;5002:50;;4630:168;;5017:18;;5002:50;:::i;:::-;5091:6;:21;;;5083:30;;5153:6;:21;;;5145:30;;4959:16;:232::i;:::-;4939:252;;5468:1;5456:9;:13;5452:741;;;5741:437;5788:239;5845:10;5910:6;:34;;;5902:43;;6002:1;5990:9;:13;;;;:::i;:::-;5788:16;:239::i;5741:437::-;5728:450;;5452:741;6286:49;;6387:42;6349:24;6416:12;6387:42;;;6286:6;6387:42;-1:-1:-1;;4211:2229:112;6534:6;:31;;6558:7;;6534:6;:20;;:31;;6558:7;;6534:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6652:6;:23;;;6644:32;;6611:6;:20;;;;;;;;;;;;6603:29;;6596:81;;6575:190;;;;;;;24367:2:285;6575:190:112;;;24349:21:285;24406:2;24386:18;;;24379:30;24445:34;24425:18;;;24418:62;24516:32;24496:18;;;24489:60;24566:19;;6575:190:112;24165:426:285;6575:190:112;6877:6;:18;6827:20;;6850:46;;6877:18;;6850:16;;;:46;:::i;:::-;6827:69;;7378:15;7411:31;7420:13;7435:6;7411:8;:31::i;:::-;7396:46;;:12;:46;:::i;:::-;7378:64;;7722:15;7754:9;7740:23;;:11;:23;:::i;:::-;7722:41;;7787:7;7777;:17;7773:75;;;7810:27;7819:17;7829:7;7819;:17;:::i;:::-;7810:8;:27::i;:::-;3881:3973;;;;;;3817:4037;;:::o;4937:384:162:-;5036:7;5113:16;:24;;;5155:16;:26;;;5199:16;:41;;;5258:16;:32;;;5085:219;;;;;;;;;;25185:25:285;;;25241:2;25226:18;;25219:34;;;;25284:2;25269:18;;25262:34;25327:2;25312:18;;25305:34;25172:3;25157:19;;24954:391;5085:219:162;;;;;;;;;;;;;5062:252;;;;;;5055:259;;4937:384;;;:::o;4432:211::-;4566:9;;4577:10;;;;;4589;;;;;4601:9;;;;4612:12;;;;4626:8;;;;4555:80;;4519:7;;4555:80;;4566:9;;4577:10;4626:8;4555:80;;:::i;1041:343:171:-;1234:11;1261:16;1280:19;1294:4;1280:13;:19::i;:::-;1261:38;;1318:59;1350:3;1355:6;1363;1371:5;1318:31;:59::i;:::-;1309:68;1041:343;-1:-1:-1;;;;;;1041:343:171:o;21218:180:110:-;21299:4;21353:8;;;;;;;;;;;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21340:51;;:10;:51;:::i;:::-;21322:15;:69;;21218:180;-1:-1:-1;;21218:180:110:o;4419:2320:165:-;4589:4;4609:13;4632:15;4650:21;4660:7;4669:1;4650:9;:21::i;:::-;4632:39;;4782:10;4772:1146;;4894:10;4891:1;4884:21;5009:2;5005;4998:14;5747:56;5743:2;5736:68;5900:3;5896:2;5889:15;4772:1146;6666:4;6630;6589:9;6583:16;6549:2;6538:9;6534:18;6491:6;6449:7;6415:5;6389:309;6361:337;4419:2320;-1:-1:-1;;;;;;;4419:2320:165:o;8362:180:112:-;4888:13:36;;;;;;;4880:69;;;;;;;26346:2:285;4880:69:36;;;26328:21:285;26385:2;26365:18;;;26358:30;26424:34;26404:18;;;26397:62;26495:13;26475:18;;;26468:41;26526:19;;4880:69:36;26144:407:285;4880:69:36;8442:93:112::1;::::0;;::::1;::::0;::::1;::::0;;8472:6:::1;8442:93:::0;;;-1:-1:-1;8442:93:112::1;::::0;::::1;::::0;8519:12:::1;8442:93;;::::0;;;;;;;8433:102;::::1;;:6;:102:::0;8362:180::o;8548:152:110:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8664:12:110;;:29;;;;;;;-1:-1:-1;;8664:12:110;;;;;:27;;:29;;;;;-1:-1:-1;;8664:29:110;;;;;;:12;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8657:36;;8548:152;:::o;537:161:154:-;616:6;641:50;656:28;671:6;679:4;656:14;:28::i;:::-;686:4;641:14;:50::i;:::-;634:57;;537:161;;;;;;:::o;1040:228::-;1138:6;1257:4;1180:72;1213:19;1220:12;1257:4;1213:19;:::i;:::-;1205:28;;:4;:28;:::i;:::-;1235:16;:9;1247:4;1235:16;:::i;:::-;1180:24;:72::i;:::-;1164:89;;:12;:89;:::i;:::-;1163:98;;;;:::i;413:105:62:-;471:7;502:1;497;:6;;:14;;510:1;497:14;;;-1:-1:-1;506:1:62;;490:21;-1:-1:-1;413:105:62:o;407:192:155:-;461:9;484:18;505:9;484:30;;524:69;556:7;544:9;531:22;;:10;:22;:::i;:::-;:32;524:69;;;579:3;;;:::i;:::-;;;524:69;;;451:148;;407:192;:::o;2052:142:171:-;2116:18;2181:4;2171:15;;;;;;2154:33;;;;;;28115:19:285;;28159:2;28150:12;;27986:182;2154:33:171;;;;;;;;;;;;;2146:41;;2052:142;;;:::o;2253:281:170:-;2446:11;2482:45;2494:6;2502:24;2506:4;2512:6;2520:5;2502:3;:24::i;:::-;6693:17:156;;;;;;;6672;;;;;;;;;;:38;;6569:148;2482:45:170;2473:54;2253:281;-1:-1:-1;;;;;2253:281:170:o;3615:365:165:-;3696:4;3712:15;3931:2;3916:12;3909:5;3905:24;3901:33;3896:2;3887:7;3883:16;3879:56;3874:2;3867:5;3863:14;3860:76;3853:84;;3615:365;-1:-1:-1;;;;3615:365:165:o;311:102:64:-;367:6;397:1;392;:6;;:14;;405:1;392:14;;491:101;547:6;576:1;572;:5;:13;;584:1;572:13;;1208:273:88;1267:6;1391:36;491:4;1410:1;1399:8;1405:1;1399:5;:8::i;:::-;:12;;;;:::i;:::-;1398:28;;;;:::i;:::-;1391:6;:36::i;2830:6314:170:-;2923:19;2976:1;2962:4;:11;:15;2954:49;;;;;;;28375:2:285;2954:49:170;;;28357:21:285;28414:2;28394:18;;;28387:30;28453:23;28433:18;;;28426:51;28494:18;;2954:49:170;28173:345:285;2954:49:170;3014:23;3040:19;3052:6;3040:11;:19::i;:::-;3014:45;;3069:16;3088:21;3104:4;3088:15;:21::i;:::-;3069:40;;3119:26;3165:5;3148:23;;;;;;28115:19:285;;28159:2;28150:12;;27986:182;3148:23:170;;;;;;;;;;;;;3119:52;;3181:23;3295:9;3290:5790;3314:5;:12;3310:1;:16;3290:5790;;;3347:27;3377:5;3383:1;3377:8;;;;;;;;:::i;:::-;;;;;;;3347:38;;3516:3;:10;3497:15;:29;;3489:88;;;;;;;28914:2:285;3489:88:170;;;28896:21:285;28953:2;28933:18;;;28926:30;28992:34;28972:18;;;28965:62;29063:16;29043:18;;;29036:44;29097:19;;3489:88:170;28712:410:285;3489:88:170;3596:15;3615:1;3596:20;3592:837;;3768:19;;3758:30;;;;;;;3741:48;;3729:76;;3741:48;;3758:30;3741:48;28115:19:285;;;28159:2;28150:12;;27986:182;3741:48:170;;;;;;;;;;;;;3791:13;6693:17:156;;;;;;;6672;;;;;;;;;;:38;;6569:148;3729:76:170;3700:176;;;;;;;29329:2:285;3700:176:170;;;29311:21:285;29368:2;29348:18;;;29341:30;29407:31;29387:18;;;29380:59;29456:18;;3700:176:170;29127:353:285;3700:176:170;3592:837;;;3901:19;;:26;3931:2;-1:-1:-1;3897:532:170;;4097:19;;4087:30;;;;;;;4070:48;;4058:76;;4070:48;;4087:30;4070:48;28115:19:285;;;28159:2;28150:12;;27986:182;4058:76:170;4029:186;;;;;;;29687:2:285;4029:186:170;;;29669:21:285;29726:2;29706:18;;;29699:30;29765:34;29745:18;;;29738:62;29836:9;29816:18;;;29809:37;29863:19;;4029:186:170;29485:403:285;3897:532:170;4336:19;;6693:17:156;;;;;;;;;;6672;;;;;;;:38;4316:98:170;;;;;;;30095:2:285;4316:98:170;;;30077:21:285;30134:2;30114:18;;;30107:30;30173:34;30153:18;;;30146:62;30244:8;30224:18;;;30217:36;30270:19;;4316:98:170;29893:402:285;4316:98:170;936:14;803:2;949:1;936:14;:::i;:::-;4447:11;:19;;;:26;:48;4443:4627;;4538:3;:10;4519:15;:29;4515:1346;;5047:52;5067:11;:19;;;803:2;5067:31;;;;;;;;:::i;:::-;;;;;;;5047:19;:52::i;:::-;5038:61;;5145:1;5129:6;:13;:17;5121:89;;;;;;;30502:2:285;5121:89:170;;;30484:21:285;30541:2;30521:18;;;30514:30;30580:34;30560:18;;;30553:62;30651:29;30631:18;;;30624:57;30698:19;;5121:89:170;30300:423:285;5121:89:170;5322:1;5307:5;:12;:16;;;;:::i;:::-;5302:1;:21;5294:92;;;;;;;30930:2:285;5294:92:170;;;30912:21:285;30969:2;30949:18;;;30942:30;31008:34;30988:18;;;30981:62;31079:28;31059:18;;;31052:56;31125:19;;5294:92:170;30728:422:285;5294:92:170;5409:13;;;;;;;;4515:1346;5609:15;5633:3;5637:15;5633:20;;;;;;;;:::i;:::-;;;;;;;;;5627:27;;5609:45;;5676:33;5712:11;:19;;;5732:9;5712:30;;;;;;;;;;:::i;:::-;;;;;;;5676:66;;5780:20;5791:8;5780:10;:20::i;:::-;5764:36;-1:-1:-1;5822:20:170;5841:1;5822:20;;:::i;:::-;;;5447:414;;4443:4627;;;1105:1;5885:11;:19;;;:26;:59;5881:3189;;5964:17;5984:25;5997:11;5984:12;:25::i;:::-;5964:45;;6027:12;6048:4;6053:1;6048:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6074:12:170;6094:10;6103:1;6048:7;6094:10;:::i;:::-;6089:16;;:1;:16;:::i;:::-;6074:31;;6123:26;6152:25;6164:4;6170:6;6152:25;;:11;:25::i;:::-;6123:54;;6195:25;6223:33;6235:3;6240:15;6223:11;:33::i;:::-;6195:61;;6274:26;6303:51;6326:13;6341:12;6303:22;:51::i;:::-;6274:80;;6661:18;6637:13;:20;:42;6608:171;;;;;;;31719:2:285;6608:171:170;;;31701:21:285;31758:2;31738:18;;;31731:30;31797:34;31777:18;;;31770:62;31868:28;31848:18;;;31841:56;31914:19;;6608:171:170;31517:422:285;6608:171:170;6802:26;;;1447:1;6802:26;;:55;;-1:-1:-1;6832:25:170;;;1553:1;6832:25;6802:55;6798:2169;;;7498:18;7475:12;:19;:41;7442:185;;;;;;;32146:2:285;7442:185:170;;;32128:21:285;32185:2;32165:18;;;32158:30;32224:34;32204:18;;;32197:62;32295:31;32275:18;;;32268:59;32344:19;;7442:185:170;31944:425:285;7442:185:170;7985:43;8005:11;:19;;;8025:1;8005:22;;;;;;;;:::i;7985:43::-;7976:52;;8074:1;8058:6;:13;:17;8050:87;;;;;;;32576:2:285;8050:87:170;;;32558:21:285;32615:2;32595:18;;;32588:30;32654:34;32634:18;;;32627:62;32725:27;32705:18;;;32698:55;32770:19;;8050:87:170;32374:421:285;8050:87:170;8249:1;8234:5;:12;:16;;;;:::i;:::-;8229:1;:21;8221:90;;;;;;;33002:2:285;8221:90:170;;;32984:21:285;33041:2;33021:18;;;33014:30;33080:34;33060:18;;;33053:62;33151:26;33131:18;;;33124:54;33195:19;;8221:90:170;32800:420:285;8221:90:170;8334:13;;;;;;;;;;;;;;6798:2169;8376:31;;;;;:65;;-1:-1:-1;8411:30:170;;;1339:1;8411:30;8376:65;8372:595;;;8748:34;8759:11;:19;;;8779:1;8759:22;;;;;;;;:::i;:::-;;;;;;;8748:10;:34::i;:::-;8732:50;-1:-1:-1;8804:37:170;8823:18;8804:37;;:::i;:::-;;;8372:595;;;8888:60;;;;;33427:2:285;8888:60:170;;;33409:21:285;33466:2;33446:18;;;33439:30;33505:34;33485:18;;;33478:62;33576:20;33556:18;;;33549:48;33614:19;;8888:60:170;33225:414:285;8372:595:170;5946:3035;;;;;;5881:3189;;;9005:50;;;;;33846:2:285;9005:50:170;;;33828:21:285;33885:2;33865:18;;;33858:30;33924:34;33904:18;;;33897:62;33995:10;33975:18;;;33968:38;34023:19;;9005:50:170;33644:404:285;5881:3189:170;-1:-1:-1;3328:3:170;;;;:::i;:::-;;;;3290:5790;;;-1:-1:-1;9090:47:170;;;;;34255:2:285;9090:47:170;;;34237:21:285;34294:2;34274:18;;;34267:30;34333:34;34313:18;;;34306:62;34404:7;34384:18;;;34377:35;34429:19;;9090:47:170;34053:401:285;4596:2947:88;4644:8;4700:1;4696;:5;4688:27;;;;;;;34661:2:285;4688:27:88;;;34643:21:285;34700:1;34680:18;;;34673:29;34738:11;34718:18;;;34711:39;34767:18;;4688:27:88;34459:332:285;4688:27:88;5107:8;5145:2;5125:16;5138:1;5125:4;:16::i;:::-;5118:29;5175:3;:7;;;5161:22;;;;5208:17;;;6001:31;5997:35;;6052:5;;5459:2;6051:13;;;6068:32;6050:50;6120:5;;6119:13;;6136:33;6118:51;6189:5;;6188:13;;6205:33;6187:51;6258:5;;6257:13;;6274:33;6256:51;6327:5;;6326:13;;6343:32;6325:50;6395:5;;6394:13;;6411:30;6393:48;5398:31;5394:35;;5449:5;;5448:13;;5465:32;5447:50;5517:5;;5516:13;;5533:32;5515:50;5585:5;;5584:13;;5583:50;;5653:5;;5652:13;;5651:50;;5721:5;;5720:13;;;5719:50;;5787:5;;;:46;;6735:10;7125:43;7120:48;7232:71;:75;;;;7227:80;;;;7380:72;7375:77;7523:3;7517:9;;;-1:-1:-1;;4596:2947:88:o;1487:3103::-;1536:8;1718:21;1713:1;:26;1709:40;;-1:-1:-1;1748:1:88;;1487:3103;-1:-1:-1;1487:3103:88:o;1709:40::-;1948:21;1943:1;:26;1939:54;;1971:22;;;;;34998:2:285;1971:22:88;;;34980:21:285;35037:2;35017:18;;;35010:30;35076:14;35056:18;;;35049:42;35108:18;;1971:22:88;34796:336:285;1939:54:88;2266:5;2260:2;2255:7;;;2254:17;;-1:-1:-1;2535:8:88;2601:2;2559:29;2548:7;;;2547:41;2591:5;2547:49;2546:57;;2629:29;2625:33;;2621:37;;;3300:35;;;3355:5;;2935:2;3354:13;;;3371:32;3353:50;3423:5;;3422:13;;3421:51;;3492:5;;3491:13;;3508:34;3490:52;3562:5;;3561:13;;3560:53;;3633:5;;3632:13;;3649:35;3631:53;2941:32;2874:31;2870:35;;2925:5;;2924:13;;2923:50;;;2998:5;;;:40;;3058:5;3057:13;;;3074:35;3056:53;3127:5;;;3136:40;3127:50;4002:10;4502:49;4489:62;4564:3;:7;;;;4488:84;;;;;;-1:-1:-1;;1487:3103:88:o;9434:390:170:-;9553:13;;9500:24;;9553:13;9585:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9585:22:170;;;;;;;;;;;;;;;;9576:31;;9622:9;9617:201;9641:6;9637:1;:10;9617:201;;;9676:72;;;;;;;;9696:6;9703:1;9696:9;;;;;;;;:::i;:::-;;;;;;;9676:72;;;;9716:29;9735:6;9742:1;9735:9;;;;;;;;:::i;:::-;;;;;;;9716:18;:29::i;:::-;9676:72;;;9664:6;9671:1;9664:9;;;;;;;;:::i;:::-;;;;;;;;;;:84;9790:3;;9617:201;;;;9526:298;9434:390;;;:::o;4332:1978:156:-;4395:12;4419:21;4550:4;4544:11;4532:23;;4663:6;4657:13;4836:11;4830:4;4826:22;5195:4;5180:13;5176:24;5169:4;5165:9;5161:40;5151:8;5147:55;5141:4;5134:69;5293:13;5283:8;5276:31;;5434:4;5426:6;5422:17;5571:4;5561:8;5557:19;5662:4;5647:622;5675:11;5672:1;5669:18;5647:622;;;5854:1;5848:4;5844:12;5830;5826:31;5996:1;5984:10;5980:18;5974:25;5968:4;5963:37;6119:1;6113:4;6109:12;6101:6;6093:29;6249:4;6246:1;6242:12;6235:4;6227:6;6223:17;6215:40;-1:-1:-1;;5702:4:156;5695:12;5647:622;;;-1:-1:-1;6295:8:156;;4332:1978;-1:-1:-1;;;;;4332:1978:156:o;3993:464:168:-;4055:17;4085:18;4105;4125:20;4149:18;4163:3;4149:13;:18::i;:::-;4084:83;;-1:-1:-1;4084:83:168;-1:-1:-1;4084:83:168;-1:-1:-1;4198:21:168;4186:8;:33;;;;;;;;:::i;:::-;;4178:103;;;;;;;35528:2:285;4178:103:168;;;35510:21:285;35567:2;35547:18;;;35540:30;35606:34;35586:18;;;35579:62;35677:27;35657:18;;;35650:55;35722:19;;4178:103:168;35326:421:285;4178:103:168;4314:23;4327:10;4314;:23;:::i;:::-;4300:10;;:37;4292:102;;;;;;;35954:2:285;4292:102:168;;;35936:21:285;35993:2;35973:18;;;35966:30;36032:34;36012:18;;;36005:62;36103:22;36083:18;;;36076:50;36143:19;;4292:102:168;35752:416:285;4292:102:168;4412:38;4418:3;:7;;;4427:10;4439;4412:5;:38::i;10121:193:170:-;10195:16;10244:2;10229:5;:12;;;:17;:78;;10281:26;10301:5;10281:19;:26::i;:::-;10229:78;;;10249:29;10272:5;10249:22;:29::i;10495:172::-;10562:21;10606:54;10622:37;10642:5;:13;;;10656:1;10642:16;;;;;;;;:::i;10622:37::-;10606:15;:54::i;3805:237:156:-;3880:12;3918:6;:13;3908:6;:23;3904:70;;-1:-1:-1;3954:9:156;;;;;;;;;-1:-1:-1;3954:9:156;;3947:16;;3904:70;3990:45;3996:6;4004;4028;4012;:13;:22;;;;:::i;:::-;3990:5;:45::i;10892:321:170:-;10980:15;11007:11;11034:2;:9;11022:2;:9;:21;11021:47;;11059:2;:9;11021:47;;;11047:2;:9;11021:47;11007:61;;11078:129;11095:3;11085:7;:13;:43;;;;;11117:2;11120:7;11117:11;;;;;;;;:::i;:::-;;;;;;;;;11102:26;;;:2;11105:7;11102:11;;;;;;;;:::i;:::-;;;;;;;:26;11085:43;11078:129;;;11173:9;;;;;11078:129;;;10997:216;10892:321;;;;:::o;15328:575:88:-;15376:9;15409:1;15405;:5;15397:27;;;;;;;34661:2:285;15397:27:88;;;34643:21:285;34700:1;34680:18;;;34673:29;34738:11;34718:18;;;34711:39;34767:18;;15397:27:88;34459:332:285;15397:27:88;-1:-1:-1;15821:1:88;15473:34;-1:-1:-1;;15467:1:88;15463:49;15566:9;;;15546:18;15543:33;15540:1;15536:41;15530:48;15624:9;;;15612:10;15609:25;15606:1;15602:33;15596:40;15678:9;;;15670:6;15667:21;15664:1;15660:29;15654:36;15730:9;;;15724:4;15721:19;15718:1;15714:27;;;15708:34;;;15781:9;;;15776:3;15773:18;15770:1;15766:26;15760:33;15832:9;;;15824:18;;;15817:26;;15811:33;15876:9;;;-1:-1:-1;15862:25:88;;15328:575::o;3732:130:168:-;3791:21;3831:24;3840:14;3850:3;3840:9;:14::i;:::-;3831:8;:24::i;5246:4079::-;5335:15;5352;5369:17;5705:1;5692:3;:10;;;:14;5684:101;;;;;;;36375:2:285;5684:101:168;;;36357:21:285;36414:2;36394:18;;;36387:30;36453:34;36433:18;;;36426:62;36524:34;36504:18;;;36497:62;36596:12;36575:19;;;36568:41;36626:19;;5684:101:168;36173:478:285;5684:101:168;5816:7;;;;5898:10;;5796:17;5890:19;5943:4;5933:14;;5929:3390;;5999:1;6002;6005:21;5991:36;;;;;;;;;;5929:3390;6058:4;6048:6;:14;6044:3275;;6164:14;6181:13;6190:4;6181:6;:13;:::i;:::-;6164:30;;6247:6;6234:3;:10;;;:19;6209:140;;;;;;;36858:2:285;6209:140:168;;;36840:21:285;36897:2;36877:18;;;36870:30;36936:34;36916:18;;;36909:62;37007:34;36987:18;;;36980:62;37079:16;37058:19;;;37051:45;37113:19;;6209:140:168;36656:482:285;6209:140:168;6471:1;6462:11;;;6456:18;6476:14;6452:39;;6544:11;;;;:41;;-1:-1:-1;6559:26:168;;;;;;6544:41;6519:177;;;;;;;37345:2:285;6519:177:168;;;37327:21:285;37384:2;37364:18;;;37357:30;37423:34;37403:18;;;37396:62;37494:34;37474:18;;;37467:62;37566:15;37545:19;;;37538:44;37599:19;;6519:177:168;37143:481:285;6519:177:168;-1:-1:-1;6719:1:168;;-1:-1:-1;6722:6:168;-1:-1:-1;6730:21:168;;-1:-1:-1;6711:41:168;;-1:-1:-1;;6711:41:168;6044:3275;6783:4;6773:6;:14;6769:2550;;6831:19;6853:13;6862:4;6853:6;:13;:::i;:::-;6831:35;;6919:11;6906:3;:10;;;:24;6881:164;;;;;;;37831:2:285;6881:164:168;;;37813:21:285;37870:2;37850:18;;;37843:30;37909:34;37889:18;;;37882:62;37980:34;37960:18;;;37953:62;38052:19;38031;;;38024:48;38089:19;;6881:164:168;37629:485:285;6881:164:168;7167:1;7158:11;;7152:18;7172:14;7148:39;7060:25;7240:26;;;7215:143;;;;;;;38321:2:285;7215:143:168;;;38303:21:285;38360:2;38340:18;;;38333:30;38399:34;38379:18;;;38372:62;38470:34;38450:18;;;38443:62;38542:12;38521:19;;;38514:41;38572:19;;7215:143:168;38119:478:285;7215:143:168;7488:1;7479:11;;7473:18;7455:1;7451:19;;7446:3;7442:29;7438:54;7537:2;7528:11;;7520:96;;;;;;;38804:2:285;7520:96:168;;;38786:21:285;38843:2;38823:18;;;38816:30;38882:34;38862:18;;;38855:62;38953:34;38933:18;;;38926:62;39025:10;39004:19;;;38997:39;39053:19;;7520:96:168;38602:476:285;7520:96:168;7669:20;7683:6;7669:11;:20;:::i;:::-;7656:10;;:33;7631:168;;;;;;;39285:2:285;7631:168:168;;;39267:21:285;39324:2;39304:18;;;39297:30;39363:34;39343:18;;;39336:62;39434:34;39414:18;;;39407:62;39506:14;39485:19;;;39478:43;39538:19;;7631:168:168;39083:480:285;7631:168:168;7822:15;7826:11;7822:1;:15;:::i;:::-;7814:55;-1:-1:-1;7839:6:168;-1:-1:-1;7847:21:168;;-1:-1:-1;7814:55:168;;-1:-1:-1;;;;7814:55:168;6769:2550;7900:4;7890:6;:14;7886:1433;;8003:15;8021:13;8030:4;8021:6;:13;:::i;:::-;8003:31;;8070:7;8057:3;:10;;;:20;8049:107;;;;;;;39770:2:285;8049:107:168;;;39752:21:285;39809:2;39789:18;;;39782:30;39848:34;39828:18;;;39821:62;39919:34;39899:18;;;39892:62;39991:12;39970:19;;;39963:41;40021:19;;8049:107:168;39568:478:285;8049:107:168;8179:1;;-1:-1:-1;8182:7:168;-1:-1:-1;8179:1:168;;-1:-1:-1;8171:42:168;;-1:-1:-1;;8171:42:168;7886:1433;8270:20;8293:13;8302:4;8293:6;:13;:::i;:::-;8270:36;;8359:12;8346:3;:10;;;:25;8321:161;;;;;;;40253:2:285;8321:161:168;;;40235:21:285;40292:2;40272:18;;;40265:30;40331:34;40311:18;;;40304:62;40402:34;40382:18;;;40375:62;40474:15;40453:19;;;40446:44;40507:19;;8321:161:168;40051:481:285;8321:161:168;8604:1;8595:11;;8589:18;8609:14;8585:39;8497:25;8677:26;;;8652:141;;;;;;;40739:2:285;8652:141:168;;;40721:21:285;40778:2;40758:18;;;40751:30;40817:34;40797:18;;;40790:62;40888:34;40868:18;;;40861:62;40960:10;40939:19;;;40932:39;40988:19;;8652:141:168;40537:476:285;8652:141:168;8926:1;8917:11;;8911:18;8892:1;8888:20;;8883:3;8879:30;8875:55;8976:2;8966:12;;8958:95;;;;;;;41220:2:285;8958:95:168;;;41202:21:285;41259:2;41239:18;;;41232:30;41298:34;41278:18;;;41271:62;41369:34;41349:18;;;41342:62;41441:8;41420:19;;;41413:37;41467:19;;8958:95:168;41018:474:285;8958:95:168;9106:22;9121:7;9106:12;:22;:::i;:::-;9093:10;;:35;9068:168;;;;;;;41699:2:285;9068:168:168;;;41681:21:285;41738:2;41718:18;;;41711:30;41777:34;41757:18;;;41750:62;41848:34;41828:18;;;41821:62;41920:12;41899:19;;;41892:41;41950:19;;9068:168:168;41497:478:285;9068:168:168;9259:16;9263:12;9259:1;:16;:::i;:::-;9251:57;-1:-1:-1;9277:7:168;-1:-1:-1;9286:21:168;;-1:-1:-1;9251:57:168;;-1:-1:-1;;;;9251:57:168;5246:4079;;;;;;:::o;9585:780::-;9676:17;9722:7;9712:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9712:18:168;-1:-1:-1;9705:25:168;-1:-1:-1;9740:54:168;;9772:11;9740:54;10053:11;10067:36;10096:7;10088:4;10067:36;:::i;:::-;10053:50;;10158:2;10152:4;10148:13;10183:1;10197:87;10211:7;10208:1;10205:14;10197:87;;;10269:11;;;10263:18;10249:12;;;10242:40;10234:2;10227:10;10197:87;;;10307:7;10304:1;10301:14;10298:51;;;10345:1;10335:7;10329:4;10325:18;10318:29;10298:51;;;10122:237;9585:780;;;;;:::o;4847:137::-;4912:17;4948:29;4954:3;:7;;;4963:1;4966:3;:10;;;4948:5;:29::i;660:2816:156:-;752:12;824:7;808;818:2;808:12;:23;;800:50;;;;;;;42182:2:285;800:50:156;;;42164:21:285;42221:2;42201:18;;;42194:30;42260:16;42240:18;;;42233:44;42294:18;;800:50:156;41980:338:285;800:50:156;892:6;881:7;872:6;:16;:26;;864:53;;;;;;;42182:2:285;864:53:156;;;42164:21:285;42221:2;42201:18;;;42194:30;42260:16;42240:18;;;42233:44;42294:18;;864:53:156;41980:338:285;864:53:156;965:7;956:6;:16;939:6;:13;:33;;931:63;;;;;;;42525:2:285;931:63:156;;;42507:21:285;42564:2;42544:18;;;42537:30;42603:19;42583:18;;;42576:47;42640:18;;931:63:156;42323:341:285;931:63:156;1015:22;1078:15;;1106:1931;;;;3178:4;3172:11;3159:24;;3365:1;3354:9;3347:20;3413:4;3402:9;3398:20;3392:4;3385:34;1071:2362;;1106:1931;1288:4;1282:11;1269:24;;1947:2;1938:7;1934:16;2329:9;2322:17;2316:4;2312:28;2300:9;2289;2285:25;2281:60;2377:7;2373:2;2369:16;2629:6;2615:9;2608:17;2602:4;2598:28;2586:9;2578:6;2574:22;2570:57;2566:70;2403:389;2662:3;2658:2;2655:11;2403:389;;;2780:9;;2769:21;;2703:4;2695:13;;;;2735;2403:389;;;-1:-1:-1;;2810:26:156;;;3018:2;3001:11;3014:7;2997:25;2991:4;2984:39;-1:-1:-1;1071:2362:156;-1:-1:-1;3460:9:156;660:2816;-1:-1:-1;;;;660:2816:156:o;1298:390:168:-;-1:-1:-1;;;;;;;;;;;;;;;;;1453:1:168;1440:3;:10;:14;1432:101;;;;;;;36375:2:285;1432:101:168;;;36357:21:285;36414:2;36394:18;;;36387:30;36453:34;36433:18;;;36426:62;36524:34;36504:18;;;36497:62;36596:12;36575:19;;;36568:41;36626:19;;1432:101:168;36173:478:285;1432:101:168;-1:-1:-1;1640:41:168;;;;;;;;;1658:10;;1640:41;;1610:2;1601:12;;;1640:41;;;;;;;;1298:390::o;1840:1740::-;1901:21;1935:18;1955;1975:20;1999:18;2013:3;1999:13;:18::i;:::-;1934:83;;-1:-1:-1;1934:83:168;-1:-1:-1;1934:83:168;-1:-1:-1;2048:21:168;2036:8;:33;;;;;;;;:::i;:::-;;2028:102;;;;;;;42871:2:285;2028:102:168;;;42853:21:285;42910:2;42890:18;;;42883:30;42949:34;42929:18;;;42922:62;43020:26;43000:18;;;42993:54;43064:19;;2028:102:168;42669:420:285;2028:102:168;2176:10;;2149:23;2162:10;2149;:23;:::i;:::-;:37;2141:100;;;;;;;43296:2:285;2141:100:168;;;43278:21:285;43335:2;43315:18;;;43308:30;43374:34;43354:18;;;43347:62;43445:20;43425:18;;;43418:48;43483:19;;2141:100:168;43094:414:285;2141:100:168;2651:30;;;1123:2;2651:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2651:30:168;;;;;;;;;;;;;;-1:-1:-1;2644:37:168;-1:-1:-1;2692:17:168;2740:10;2760:681;2776:10;;2767:19;;2760:681;;;2803:18;2823;2846:150;2877:105;;;;;;;;2908:6;2895:3;:10;;;:19;;;;:::i;:::-;2877:105;;;;2972:6;2961:3;:7;;;2940:38;;;;:::i;:::-;2877:105;;2846:13;:150::i;:::-;2802:194;;;;;3201:153;;;;;;;;3248:10;3235;:23;;;;:::i;:::-;3201:153;;;;3332:6;3321:3;:7;;;3300:38;;;;:::i;:::-;3201:153;;;3183:4;3188:9;3183:15;;;;;;;;:::i;:::-;;;;;;;;;;:171;3369:14;3382:1;3369:14;;:::i;:::-;;-1:-1:-1;3407:23:168;3420:10;3407;:23;:::i;:::-;3397:33;;;;:::i;:::-;;;2788:653;;2760:681;;;-1:-1:-1;3541:23:168;;-1:-1:-1;3548:4:168;;1840:1740;-1:-1:-1;;;1840:1740:168:o;753:184:285:-;805:77;802:1;795:88;902:4;899:1;892:15;926:4;923:1;916:15;942:334;1013:2;1007:9;1069:2;1059:13;;1074:66;1055:86;1043:99;;1172:18;1157:34;;1193:22;;;1154:62;1151:88;;;1219:18;;:::i;:::-;1255:2;1248:22;942:334;;-1:-1:-1;942:334:285:o;1281:154::-;1367:42;1360:5;1356:54;1349:5;1346:65;1336:93;;1425:1;1422;1415:12;1336:93;1281:154;:::o;1440:589::-;1482:5;1535:3;1528:4;1520:6;1516:17;1512:27;1502:55;;1553:1;1550;1543:12;1502:55;1589:6;1576:20;1615:18;1611:2;1608:26;1605:52;;;1637:18;;:::i;:::-;1681:114;1789:4;1720:66;1713:4;1709:2;1705:13;1701:86;1697:97;1681:114;:::i;:::-;1820:2;1811:7;1804:19;1866:3;1859:4;1854:2;1846:6;1842:15;1838:26;1835:35;1832:55;;;1883:1;1880;1873:12;1832:55;1948:2;1941:4;1933:6;1929:17;1922:4;1913:7;1909:18;1896:55;1996:1;1971:16;;;1989:4;1967:27;1960:38;;;;1975:7;1440:589;-1:-1:-1;;;1440:589:285:o;2034:1032::-;2102:5;2150:4;2138:9;2133:3;2129:19;2125:30;2122:50;;;2168:1;2165;2158:12;2122:50;2201:2;2195:9;2243:4;2235:6;2231:17;2267:18;2335:6;2323:10;2320:22;2315:2;2303:10;2300:18;2297:46;2294:72;;;2346:18;;:::i;:::-;2386:10;2382:2;2375:22;2415:6;2406:15;;2458:9;2445:23;2437:6;2430:39;2521:2;2510:9;2506:18;2493:32;2478:47;;2534:33;2559:7;2534:33;:::i;:::-;2600:7;2595:2;2587:6;2583:15;2576:32;2660:2;2649:9;2645:18;2632:32;2617:47;;2673:33;2698:7;2673:33;:::i;:::-;2739:7;2734:2;2726:6;2722:15;2715:32;2808:2;2797:9;2793:18;2780:32;2775:2;2767:6;2763:15;2756:57;2875:3;2864:9;2860:19;2847:33;2841:3;2833:6;2829:16;2822:59;2932:3;2921:9;2917:19;2904:33;2890:47;;2960:2;2952:6;2949:14;2946:34;;;2976:1;2973;2966:12;2946:34;;3014:45;3055:3;3046:6;3035:9;3031:22;3014:45;:::i;:::-;3008:3;3000:6;2996:16;2989:71;;;2034:1032;;;;:::o;3071:1173::-;3271:6;3279;3287;3295;3303;3347:9;3338:7;3334:23;3377:3;3373:2;3369:12;3366:32;;;3394:1;3391;3384:12;3366:32;3434:9;3421:23;3463:18;3504:2;3496:6;3493:14;3490:34;;;3520:1;3517;3510:12;3490:34;3543:72;3607:7;3598:6;3587:9;3583:22;3543:72;:::i;:::-;3533:82;;3662:2;3651:9;3647:18;3634:32;3624:42;;3759:3;3690:66;3686:2;3682:75;3678:85;3675:105;;;3776:1;3773;3766:12;3675:105;3814:2;3803:9;3799:18;3789:28;;3870:3;3859:9;3855:19;3842:33;3826:49;;3900:2;3890:8;3887:16;3884:36;;;3916:1;3913;3906:12;3884:36;3954:8;3943:9;3939:24;3929:34;;4001:7;3994:4;3990:2;3986:13;3982:27;3972:55;;4023:1;4020;4013:12;3972:55;4063:2;4050:16;4036:30;;4089:2;4081:6;4078:14;4075:34;;;4105:1;4102;4095:12;4075:34;;4158:7;4153:2;4143:6;4140:1;4136:14;4132:2;4128:23;4124:32;4121:45;4118:65;;;4179:1;4176;4169:12;4118:65;3071:1173;;;;-1:-1:-1;3071:1173:285;;-1:-1:-1;;;4210:2:285;4202:11;;4232:6;3071:1173::o;4249:258::-;4321:1;4331:113;4345:6;4342:1;4339:13;4331:113;;;4421:11;;;4415:18;4402:11;;;4395:39;4367:2;4360:10;4331:113;;;4462:6;4459:1;4456:13;4453:48;;;4497:1;4488:6;4483:3;4479:16;4472:27;4453:48;;4249:258;;;:::o;4512:317::-;4554:3;4592:5;4586:12;4619:6;4614:3;4607:19;4635:63;4691:6;4684:4;4679:3;4675:14;4668:4;4661:5;4657:16;4635:63;:::i;:::-;4743:2;4731:15;4748:66;4727:88;4718:98;;;;4818:4;4714:109;;4512:317;-1:-1:-1;;4512:317:285:o;4834:220::-;4983:2;4972:9;4965:21;4946:4;5003:45;5044:2;5033:9;5029:18;5021:6;5003:45;:::i;5251:180::-;5310:6;5363:2;5351:9;5342:7;5338:23;5334:32;5331:52;;;5379:1;5376;5369:12;5331:52;-1:-1:-1;5402:23:285;;5251:180;-1:-1:-1;5251:180:285:o;5436:374::-;5535:6;5588:2;5576:9;5567:7;5563:23;5559:32;5556:52;;;5604:1;5601;5594:12;5556:52;5644:9;5631:23;5677:18;5669:6;5666:30;5663:50;;;5709:1;5706;5699:12;5663:50;5732:72;5796:7;5787:6;5776:9;5772:22;5732:72;:::i;:::-;5722:82;5436:374;-1:-1:-1;;;;5436:374:285:o;6000:171::-;6067:20;;6127:18;6116:30;;6106:41;;6096:69;;6161:1;6158;6151:12;6096:69;6000:171;;;:::o;6176:184::-;6234:6;6287:2;6275:9;6266:7;6262:23;6258:32;6255:52;;;6303:1;6300;6293:12;6255:52;6326:28;6344:9;6326:28;:::i;7381:160::-;7446:20;;7502:13;;7495:21;7485:32;;7475:60;;7531:1;7528;7521:12;7546:665;7646:6;7654;7662;7670;7678;7731:3;7719:9;7710:7;7706:23;7702:33;7699:53;;;7748:1;7745;7738:12;7699:53;7787:9;7774:23;7806:31;7831:5;7806:31;:::i;:::-;7856:5;-1:-1:-1;7908:2:285;7893:18;;7880:32;;-1:-1:-1;7931:37:285;7964:2;7949:18;;7931:37;:::i;:::-;7921:47;;7987:35;8018:2;8007:9;8003:18;7987:35;:::i;:::-;7977:45;;8073:3;8062:9;8058:19;8045:33;8101:18;8093:6;8090:30;8087:50;;;8133:1;8130;8123:12;8087:50;8156:49;8197:7;8188:6;8177:9;8173:22;8156:49;:::i;:::-;8146:59;;;7546:665;;;;;;;;:::o;8216:644::-;8345:6;8353;8361;8369;8422:3;8410:9;8401:7;8397:23;8393:33;8390:53;;;8439:1;8436;8429:12;8390:53;8478:9;8465:23;8497:31;8522:5;8497:31;:::i;:::-;8547:5;-1:-1:-1;8604:2:285;8589:18;;8576:32;8617:33;8576:32;8617:33;:::i;:::-;8669:7;-1:-1:-1;8728:2:285;8713:18;;8700:32;8741:33;8700:32;8741:33;:::i;:::-;8793:7;-1:-1:-1;8819:35:285;8850:2;8835:18;;8819:35;:::i;:::-;8809:45;;8216:644;;;;;;;:::o;10061:642::-;10324:6;10319:3;10312:19;10361:6;10356:2;10351:3;10347:12;10340:28;10420:66;10411:6;10406:3;10402:16;10398:89;10393:2;10388:3;10384:12;10377:111;10541:6;10534:14;10527:22;10522:3;10518:32;10513:2;10508:3;10504:12;10497:54;10294:3;10580:6;10574:13;10596:60;10649:6;10644:2;10639:3;10635:12;10630:2;10622:6;10618:15;10596:60;:::i;:::-;10676:16;;;;10694:2;10672:25;;10061:642;-1:-1:-1;;;;;;10061:642:285:o;12306:192::-;12385:13;;12438:34;12427:46;;12417:57;;12407:85;;12488:1;12485;12478:12;12503:616;12606:6;12659:2;12647:9;12638:7;12634:23;12630:32;12627:52;;;12675:1;12672;12665:12;12627:52;12708:2;12702:9;12750:2;12742:6;12738:15;12819:6;12807:10;12804:22;12783:18;12771:10;12768:34;12765:62;12762:88;;;12830:18;;:::i;:::-;12866:2;12859:22;12905:16;;12890:32;;12955:49;13000:2;12985:18;;12955:49;:::i;:::-;12950:2;12942:6;12938:15;12931:74;13038:49;13083:2;13072:9;13068:18;13038:49;:::i;:::-;13033:2;13021:15;;13014:74;13025:6;12503:616;-1:-1:-1;;;12503:616:285:o;13124:647::-;13217:6;13270:3;13258:9;13249:7;13245:23;13241:33;13238:53;;;13287:1;13284;13277:12;13238:53;13320:2;13314:9;13362:3;13354:6;13350:16;13432:6;13420:10;13417:22;13396:18;13384:10;13381:34;13378:62;13375:88;;;13443:18;;:::i;:::-;13483:10;13479:2;13472:22;;13531:9;13518:23;13510:6;13503:39;13603:2;13592:9;13588:18;13575:32;13570:2;13562:6;13558:15;13551:57;13669:2;13658:9;13654:18;13641:32;13636:2;13628:6;13624:15;13617:57;13735:2;13724:9;13720:18;13707:32;13702:2;13694:6;13690:15;13683:57;13759:6;13749:16;;;13124:647;;;;:::o;15268:934::-;15404:9;15438:18;15479:2;15471:6;15468:14;15465:40;;;15485:18;;:::i;:::-;15531:6;15528:1;15524:14;15557:4;15581:28;15605:2;15601;15597:11;15581:28;:::i;:::-;15643:19;;;15713:14;;;;15678:12;;;;15750:14;15739:26;;15736:46;;;15778:1;15775;15768:12;15736:46;15802:5;15816:353;15832:6;15827:3;15824:15;15816:353;;;15918:3;15905:17;15954:2;15941:11;15938:19;15935:109;;;15998:1;16027:2;16023;16016:14;15935:109;16069:57;16111:14;16097:11;16090:5;16086:23;16069:57;:::i;:::-;16057:70;;-1:-1:-1;16147:12:285;;;;15849;;15816:353;;;-1:-1:-1;16191:5:285;15268:934;-1:-1:-1;;;;;;;15268:934:285:o;17885:184::-;17955:6;18008:2;17996:9;17987:7;17983:23;17979:32;17976:52;;;18024:1;18021;18014:12;17976:52;-1:-1:-1;18047:16:285;;17885:184;-1:-1:-1;17885:184:285:o;20818:::-;20870:77;20867:1;20860:88;20967:4;20964:1;20957:15;20991:4;20988:1;20981:15;21007:270;21046:7;21078:18;21123:2;21120:1;21116:10;21153:2;21150:1;21146:10;21209:3;21205:2;21201:12;21196:3;21193:21;21186:3;21179:11;21172:19;21168:47;21165:73;;;21218:18;;:::i;:::-;21258:13;;21007:270;-1:-1:-1;;;;21007:270:285:o;21282:236::-;21321:3;21349:18;21394:2;21391:1;21387:10;21424:2;21421:1;21417:10;21455:3;21451:2;21447:12;21442:3;21439:21;21436:47;;;21463:18;;:::i;:::-;21499:13;;21282:236;-1:-1:-1;;;;21282:236:285:o;22127:125::-;22167:4;22195:1;22192;22189:8;22186:34;;;22200:18;;:::i;:::-;-1:-1:-1;22237:9:285;;22127:125::o;22257:184::-;22309:77;22306:1;22299:88;22406:4;22403:1;22396:15;22430:4;22427:1;22420:15;22446:308;22485:1;22511;22501:35;;22516:18;;:::i;:::-;22633:66;22630:1;22627:73;22558:66;22555:1;22552:73;22548:153;22545:179;;;22704:18;;:::i;:::-;-1:-1:-1;22738:10:285;;22446:308::o;22759:369::-;22798:4;22834:1;22831;22827:9;22943:1;22875:66;22871:74;22868:1;22864:82;22859:2;22852:10;22848:99;22845:125;;;22950:18;;:::i;:::-;23069:1;23001:66;22997:74;22994:1;22990:82;22986:2;22982:91;22979:117;;;23076:18;;:::i;:::-;-1:-1:-1;;23113:9:285;;22759:369::o;23133:655::-;23172:7;23204:66;23296:1;23293;23289:9;23324:1;23321;23317:9;23369:1;23365:2;23361:10;23358:1;23355:17;23350:2;23346;23342:11;23338:35;23335:61;;;23376:18;;:::i;:::-;23415:66;23507:1;23504;23500:9;23554:1;23550:2;23545:11;23542:1;23538:19;23533:2;23529;23525:11;23521:37;23518:63;;;23561:18;;:::i;:::-;23607:1;23604;23600:9;23590:19;;23654:1;23650:2;23645:11;23642:1;23638:19;23633:2;23629;23625:11;23621:37;23618:63;;;23661:18;;:::i;:::-;23726:1;23722:2;23717:11;23714:1;23710:19;23705:2;23701;23697:11;23693:37;23690:63;;;23733:18;;:::i;:::-;-1:-1:-1;;;23773:9:285;;;;;23133:655;-1:-1:-1;;;23133:655:285:o;23793:367::-;23832:3;23867:1;23864;23860:9;23976:1;23908:66;23904:74;23901:1;23897:82;23892:2;23885:10;23881:99;23878:125;;;23983:18;;:::i;:::-;24102:1;24034:66;24030:74;24027:1;24023:82;24019:2;24015:91;24012:117;;;24109:18;;:::i;:::-;-1:-1:-1;;24145:9:285;;23793:367::o;24596:228::-;24636:7;24762:1;24694:66;24690:74;24687:1;24684:81;24679:1;24672:9;24665:17;24661:105;24658:131;;;24769:18;;:::i;:::-;-1:-1:-1;24809:9:285;;24596:228::o;24829:120::-;24869:1;24895;24885:35;;24900:18;;:::i;:::-;-1:-1:-1;24934:9:285;;24829:120::o;25350:656::-;25637:6;25626:9;25619:25;25600:4;25663:42;25753:2;25745:6;25741:15;25736:2;25725:9;25721:18;25714:43;25805:2;25797:6;25793:15;25788:2;25777:9;25773:18;25766:43;;25845:6;25840:2;25829:9;25825:18;25818:34;25889:6;25883:3;25872:9;25868:19;25861:35;25933:3;25927;25916:9;25912:19;25905:32;25954:46;25995:3;25984:9;25980:19;25972:6;25954:46;:::i;:::-;25946:54;25350:656;-1:-1:-1;;;;;;;;25350:656:285:o;26011:128::-;26051:3;26082:1;26078:6;26075:1;26072:13;26069:39;;;26088:18;;:::i;:::-;-1:-1:-1;26124:9:285;;26011:128::o;26556:167::-;26634:13;;26687:10;26676:22;;26666:33;;26656:61;;26713:1;26710;26703:12;26728:160;26805:13;;26858:4;26847:16;;26837:27;;26827:55;;26878:1;26875;26868:12;26893:888;26996:6;27049:3;27037:9;27028:7;27024:23;27020:33;27017:53;;;27066:1;27063;27056:12;27017:53;27099:2;27093:9;27141:3;27133:6;27129:16;27211:6;27199:10;27196:22;27175:18;27163:10;27160:34;27157:62;27154:88;;;27222:18;;:::i;:::-;27258:2;27251:22;27297:39;27326:9;27297:39;:::i;:::-;27289:6;27282:55;27370:47;27413:2;27402:9;27398:18;27370:47;:::i;:::-;27365:2;27357:6;27353:15;27346:72;27451:47;27494:2;27483:9;27479:18;27451:47;:::i;:::-;27446:2;27438:6;27434:15;27427:72;27532:48;27576:2;27565:9;27561:18;27532:48;:::i;:::-;27527:2;27519:6;27515:15;27508:73;27615:49;27659:3;27648:9;27644:19;27615:49;:::i;:::-;27609:3;27601:6;27597:16;27590:75;27699:50;27744:3;27733:9;27729:19;27699:50;:::i;:::-;27693:3;27681:16;;27674:76;27685:6;26893:888;-1:-1:-1;;;26893:888:285:o;27786:195::-;27825:3;27856:66;27849:5;27846:77;27843:103;;27926:18;;:::i;:::-;-1:-1:-1;27973:1:285;27962:13;;27786:195::o;28523:184::-;28575:77;28572:1;28565:88;28672:4;28669:1;28662:15;28696:4;28693:1;28686:15;31155:157;31185:1;31219:4;31216:1;31212:12;31243:3;31233:37;;31250:18;;:::i;:::-;31302:3;31295:4;31292:1;31288:12;31284:22;31279:27;;;31155:157;;;;:::o;31317:195::-;31355:4;31392;31389:1;31385:12;31424:4;31421:1;31417:12;31449:3;31444;31441:12;31438:38;;;31456:18;;:::i;:::-;31493:13;;;31317:195;-1:-1:-1;;;31317:195:285:o;35137:184::-;35189:77;35186:1;35179:88;35286:4;35283:1;35276:15;35310:4;35307:1;35300:15",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "GUARDIAN()": "724c184c",
    "L2_ORACLE()": "001c2ff6",
    "SYSTEM_CONFIG()": "f0498750",
    "depositTransaction(address,uint256,uint64,bool,bytes)": "e9e05c42",
    "donateETH()": "8b4c40b0",
    "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": "8c3152e9",
    "finalizedWithdrawals(bytes32)": "a14238e7",
    "guardian()": "452a9320",
    "initialize(address,address,address,bool)": "fecf9734",
    "isOutputFinalized(uint256)": "6dbffb78",
    "l2Oracle()": "9b5f694a",
    "l2Sender()": "9bf62d82",
    "minimumGasLimit(uint64)": "a35d99df",
    "params()": "cff0ab96",
    "pause()": "8456cb59",
    "paused()": "5c975abb",
    "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": "4870496f",
    "provenWithdrawals(bytes32)": "e965084c",
    "systemConfig()": "33d7e2bd",
    "unpause()": "3f4ba83a",
    "version()": "54fd4d50"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CONFIG\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"contract SystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Oracle\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_byteCount\",\"type\":\"uint64\"}],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title OptimismPortal\",\"events\":{\"Paused(address)\":{\"params\":{\"account\":\"Address of the account triggering the pause.\"}},\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"Unpaused(address)\":{\"params\":{\"account\":\"Address of the account triggering the unpause.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}},\"WithdrawalProven(bytes32,address,address)\":{\"params\":{\"from\":\"Address that triggered the withdrawal transaction.\",\"to\":\"Address that the withdrawal transaction is directed to.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"GUARDIAN()\":{\"custom:legacy\":\"\"},\"L2_ORACLE()\":{\"custom:legacy\":\"\"},\"SYSTEM_CONFIG()\":{\"custom:legacy\":\"\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Amount of L2 gas to purchase by burning gas on L1.\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"initialize(address,address,address,bool)\":{\"params\":{\"_guardian\":\"Address that can pause withdrawals.\",\"_l2Oracle\":\"Address of the L2OutputOracle contract.\",\"_paused\":\"Sets the contract's pausability state.\",\"_systemConfig\":\"Address of the SystemConfig contract.\"}},\"isOutputFinalized(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the L2 output to check.\"},\"returns\":{\"_0\":\"Whether or not the output is finalized.\"}},\"minimumGasLimit(uint64)\":{\"params\":{\"_byteCount\":\"Number of bytes in the calldata.\"},\"returns\":{\"_0\":\"The minimum gas limit for a deposit.\"}},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"params\":{\"_l2OutputIndex\":\"L2 output index to prove against.\",\"_outputRootProof\":\"Inclusion proof of the L2ToL1MessagePasser contract's storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract.\"}}},\"stateVariables\":{\"guardian\":{\"custom:network-specific\":\"\"},\"l2Oracle\":{\"custom:network-specific\":\"\"},\"systemConfig\":{\"custom:network-specific\":\"\"},\"version\":{\"custom:semver\":\"1.10.0\"}},\"version\":1},\"userdoc\":{\"events\":{\"Paused(address)\":{\"notice\":\"Emitted when the pause is triggered.\"},\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2.         The parameters of this event are read by the rollup node and used to derive deposit         transactions on L2.\"},\"Unpaused(address)\":{\"notice\":\"Emitted when the pause is lifted.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"},\"WithdrawalProven(bytes32,address,address)\":{\"notice\":\"Emitted when a withdrawal transaction is proven.\"}},\"kind\":\"user\",\"methods\":{\"GUARDIAN()\":{\"notice\":\"Getter for the Guardian\"},\"L2_ORACLE()\":{\"notice\":\"Getter for the L2OutputOracle\"},\"SYSTEM_CONFIG()\":{\"notice\":\"Getter for the SystemConfig\"},\"constructor\":{\"notice\":\"Constructs the OptimismPortal contract.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in         deriving deposit transactions. Note that if a deposit is made by a contract, its         address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider         using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"donateETH()\":{\"notice\":\"Accepts ETH value without triggering a deposit to L2.         This function mainly exists for the sake of the migration between the legacy         Optimism system and Bedrock.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"guardian()\":{\"notice\":\"Address that has the ability to pause and unpause withdrawals.\"},\"initialize(address,address,address,bool)\":{\"notice\":\"Initializer.\"},\"isOutputFinalized(uint256)\":{\"notice\":\"Determine if a given output is finalized.         Reverts if the call to L2_ORACLE.getL2Output reverts.         Returns a boolean otherwise.\"},\"l2Oracle()\":{\"notice\":\"Address of the L2OutputOracle contract.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction.         If the of this variable is the default L2 sender address, then we are NOT inside of         a call to finalizeWithdrawalTransaction.\"},\"minimumGasLimit(uint64)\":{\"notice\":\"Computes the minimum gas limit for a deposit.         The minimum gas limit linearly increases based on the size of the calldata.         This is to prevent users from creating L2 resource usage without paying for it.         This function can be used when interacting with the portal to ensure forwards         compatibility.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"pause()\":{\"notice\":\"Pauses withdrawals.\"},\"paused()\":{\"notice\":\"Determines if cross domain messaging is paused.         When set to true, withdrawals are paused.         This may be removed in the future.\"},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"notice\":\"Proves a withdrawal transaction.\"},\"provenWithdrawals(bytes32)\":{\"notice\":\"A mapping of withdrawal hashes to `ProvenWithdrawal` data.\"},\"systemConfig()\":{\"notice\":\"Address of the SystemConfig contract.\"},\"unpause()\":{\"notice\":\"Unpauses withdrawals.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"The OptimismPortal is a low-level contract responsible for passing messages between L1         and L2. Messages sent directly to the OptimismPortal have no form of replayability.         Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/OptimismPortal.sol\":\"OptimismPortal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@cwia/=lib/clones-with-immutable-args/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":clones-with-immutable-args/=lib/clones-with-immutable-args/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L2OutputOracle.sol\":{\"keccak256\":\"0x60042eb3e619518cab9a8f2480b62871c2d813716e2e60d9a5e0c5f271c58705\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08538ef2aa99c508b56a8bb9b3c7b93476cba9dbf0b47783141e5e50a02156cc\",\"dweb:/ipfs/QmdvFZ1fUaTkNdmtB66rNAo73RxY7kccsgR6Uqz7psoXGN\"]},\"src/L1/OptimismPortal.sol\":{\"keccak256\":\"0xdca91a921b402d82b455d7f11027514e8a16dca906cf820b3afffe271beb8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://688912b9d6005af8395d5c2eb5c4e3367a8be7b50ea97c34fc6a7ac0e2d8fd6a\",\"dweb:/ipfs/QmNPJDwHpNmJ5VPWAJB8muRpZxYeySZDVoV1TMVN7roijJ\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xa4d524f2a5e91a0b63a62603e712001c51c77e8371b93cbb576bcb7d074b7588\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6d8141b6c6dc72d2e684c1ae388c005fd78c9ca7fc9c15dddebd227ca4fd730\",\"dweb:/ipfs/QmPfJrR4qssu769TDWJnxdTozqKtZUxiY8fs95bhfECTvG\"]},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0x4bbbc7868e948c44f29285a69383e93251a0c330a67929fb72def01cec060d4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e7ea2f8b3d49bee9c753f107ede6eda93b2cc0e34d0643fa14ebbb26c19e71b\",\"dweb:/ipfs/QmRP81F8FRVXVZs6u2f2poEPDnbFZhNwNYxHgCVEhGpEmB\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x06a5a8b00527843f0cfc1bb3c0661316966a6cc432f88be31f23cde78cd07560\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d5209e78e5415c0bf8b350362a825cc56152811abd6fcf2df3d4fa47766d3dee\",\"dweb:/ipfs/Qmf43xyc4Um32NmccayDfhm8kSnS2mhHXpPZnwABJS7cWm\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Bytes.sol\":{\"keccak256\":\"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782\",\"dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe12e392f05f80d3837c9392d016471181ae1ee6b84ea91b4e125e6523e5f18a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3509231c228b7a4352573cd422cf0260dcbb94cfd915e5b664643db5475a5b7\",\"dweb:/ipfs/QmU2QERY4mHxqWFqSE5Exsy6Ftc5MTjTtYHC11fahLJWDC\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0xd5bbcb7da113e69562498d9543765e03912558ad66348682c2049c31e19f9d9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://afc6656ea10062c0c9d0817bb8683636caebf9222c9c102f29ea54fff74a2f93\",\"dweb:/ipfs/QmTNWtMgrTRHM6XtdUmA8bMZcuFpXoFCXgXR5vRihZWLuW\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x44e2b2dcfffc39c0fc95ccd3c2118c7e7585fadf3dca327877d5756c7d4b21c3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c89e0d9cfcb08a0d3c46c85367a32bbd9703468ba4c0c5bb6e124c1d173b26b\",\"dweb:/ipfs/QmaY3nQHBBhHK1wrurVXiEeNL8hfZ1pRmhpqW44tFDJnDf\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x902a0a815272a5b76c647d9e82101aca765e9835a6624d0857088b9da0f58afd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9c39a697aacb0a2eac0bf1fbd7790d835a685c61006f6d3464e19cbc96a24480\",\"dweb:/ipfs/QmV3T8ZTRWPB5CNuZjxwWQNoENd7W4SoBMnFG6Y6g6xYV4\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0x9ba74a3b0a11693e622380807d213d5d1250d974e18b2cd768da9cbe719a6778\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0808d721ed9e05707526ee134faa051d707a95ee6b8bd6e0b1972275da8e5723\",\"dweb:/ipfs/QmcTTPu9xgckfWdbFUAcr2RAgk3J6vzyR4FpV798TjFMeN\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74\",\"dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE\"]},\"src/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681\",\"dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.15+commit.e14f2714"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Paused",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "version",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "bytes",
              "name": "opaqueData",
              "type": "bytes",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "TransactionDeposited",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Unpaused",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "withdrawalHash",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "bool",
              "name": "success",
              "type": "bool",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "WithdrawalFinalized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "withdrawalHash",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "WithdrawalProven",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "GUARDIAN",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "L2_ORACLE",
          "outputs": [
            {
              "internalType": "contract L2OutputOracle",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "SYSTEM_CONFIG",
          "outputs": [
            {
              "internalType": "contract SystemConfig",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_value",
              "type": "uint256"
            },
            {
              "internalType": "uint64",
              "name": "_gasLimit",
              "type": "uint64"
            },
            {
              "internalType": "bool",
              "name": "_isCreation",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "_data",
              "type": "bytes"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "depositTransaction"
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "function",
          "name": "donateETH"
        },
        {
          "inputs": [
            {
              "internalType": "struct Types.WithdrawalTransaction",
              "name": "_tx",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "gasLimit",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "finalizeWithdrawalTransaction"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "finalizedWithdrawals",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "guardian",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract L2OutputOracle",
              "name": "_l2Oracle",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_guardian",
              "type": "address"
            },
            {
              "internalType": "contract SystemConfig",
              "name": "_systemConfig",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "_paused",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "_l2OutputIndex",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isOutputFinalized",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "l2Oracle",
          "outputs": [
            {
              "internalType": "contract L2OutputOracle",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "l2Sender",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint64",
              "name": "_byteCount",
              "type": "uint64"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "minimumGasLimit",
          "outputs": [
            {
              "internalType": "uint64",
              "name": "",
              "type": "uint64"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "params",
          "outputs": [
            {
              "internalType": "uint128",
              "name": "prevBaseFee",
              "type": "uint128"
            },
            {
              "internalType": "uint64",
              "name": "prevBoughtGas",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "prevBlockNum",
              "type": "uint64"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "pause"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "paused",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct Types.WithdrawalTransaction",
              "name": "_tx",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "gasLimit",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ]
            },
            {
              "internalType": "uint256",
              "name": "_l2OutputIndex",
              "type": "uint256"
            },
            {
              "internalType": "struct Types.OutputRootProof",
              "name": "_outputRootProof",
              "type": "tuple",
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "version",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "stateRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "messagePasserStorageRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "latestBlockhash",
                  "type": "bytes32"
                }
              ]
            },
            {
              "internalType": "bytes[]",
              "name": "_withdrawalProof",
              "type": "bytes[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "proveWithdrawalTransaction"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "provenWithdrawals",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "outputRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint128",
              "name": "timestamp",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "l2OutputIndex",
              "type": "uint128"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "systemConfig",
          "outputs": [
            {
              "internalType": "contract SystemConfig",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "unpause"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "version",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "receive"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "GUARDIAN()": {
            "custom:legacy": ""
          },
          "L2_ORACLE()": {
            "custom:legacy": ""
          },
          "SYSTEM_CONFIG()": {
            "custom:legacy": ""
          },
          "depositTransaction(address,uint256,uint64,bool,bytes)": {
            "params": {
              "_data": "Data to trigger the recipient with.",
              "_gasLimit": "Amount of L2 gas to purchase by burning gas on L1.",
              "_isCreation": "Whether or not the transaction is a contract creation.",
              "_to": "Target address on L2.",
              "_value": "ETH value to send to the recipient."
            }
          },
          "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": {
            "params": {
              "_tx": "Withdrawal transaction to finalize."
            }
          },
          "initialize(address,address,address,bool)": {
            "params": {
              "_guardian": "Address that can pause withdrawals.",
              "_l2Oracle": "Address of the L2OutputOracle contract.",
              "_paused": "Sets the contract's pausability state.",
              "_systemConfig": "Address of the SystemConfig contract."
            }
          },
          "isOutputFinalized(uint256)": {
            "params": {
              "_l2OutputIndex": "Index of the L2 output to check."
            },
            "returns": {
              "_0": "Whether or not the output is finalized."
            }
          },
          "minimumGasLimit(uint64)": {
            "params": {
              "_byteCount": "Number of bytes in the calldata."
            },
            "returns": {
              "_0": "The minimum gas limit for a deposit."
            }
          },
          "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": {
            "params": {
              "_l2OutputIndex": "L2 output index to prove against.",
              "_outputRootProof": "Inclusion proof of the L2ToL1MessagePasser contract's storage root.",
              "_tx": "Withdrawal transaction to finalize.",
              "_withdrawalProof": "Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "GUARDIAN()": {
            "notice": "Getter for the Guardian"
          },
          "L2_ORACLE()": {
            "notice": "Getter for the L2OutputOracle"
          },
          "SYSTEM_CONFIG()": {
            "notice": "Getter for the SystemConfig"
          },
          "constructor": {
            "notice": "Constructs the OptimismPortal contract."
          },
          "depositTransaction(address,uint256,uint64,bool,bytes)": {
            "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in         deriving deposit transactions. Note that if a deposit is made by a contract, its         address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider         using the CrossDomainMessenger contracts for a simpler developer experience."
          },
          "donateETH()": {
            "notice": "Accepts ETH value without triggering a deposit to L2.         This function mainly exists for the sake of the migration between the legacy         Optimism system and Bedrock."
          },
          "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": {
            "notice": "Finalizes a withdrawal transaction."
          },
          "finalizedWithdrawals(bytes32)": {
            "notice": "A list of withdrawal hashes which have been successfully finalized."
          },
          "guardian()": {
            "notice": "Address that has the ability to pause and unpause withdrawals."
          },
          "initialize(address,address,address,bool)": {
            "notice": "Initializer."
          },
          "isOutputFinalized(uint256)": {
            "notice": "Determine if a given output is finalized.         Reverts if the call to L2_ORACLE.getL2Output reverts.         Returns a boolean otherwise."
          },
          "l2Oracle()": {
            "notice": "Address of the L2OutputOracle contract."
          },
          "l2Sender()": {
            "notice": "Address of the L2 account which initiated a withdrawal in this transaction.         If the of this variable is the default L2 sender address, then we are NOT inside of         a call to finalizeWithdrawalTransaction."
          },
          "minimumGasLimit(uint64)": {
            "notice": "Computes the minimum gas limit for a deposit.         The minimum gas limit linearly increases based on the size of the calldata.         This is to prevent users from creating L2 resource usage without paying for it.         This function can be used when interacting with the portal to ensure forwards         compatibility."
          },
          "params()": {
            "notice": "EIP-1559 style gas parameters."
          },
          "pause()": {
            "notice": "Pauses withdrawals."
          },
          "paused()": {
            "notice": "Determines if cross domain messaging is paused.         When set to true, withdrawals are paused.         This may be removed in the future."
          },
          "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": {
            "notice": "Proves a withdrawal transaction."
          },
          "provenWithdrawals(bytes32)": {
            "notice": "A mapping of withdrawal hashes to `ProvenWithdrawal` data."
          },
          "systemConfig()": {
            "notice": "Address of the SystemConfig contract."
          },
          "unpause()": {
            "notice": "Unpauses withdrawals."
          },
          "version()": {
            "notice": "Semantic version."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@cwia/=lib/clones-with-immutable-args/src/",
        "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "@rari-capital/solmate/=lib/solmate/",
        "clones-with-immutable-args/=lib/clones-with-immutable-args/src/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "safe-contracts/=lib/safe-contracts/contracts/",
        "solmate/=lib/solmate/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 999999
      },
      "metadata": {
        "bytecodeHash": "none"
      },
      "compilationTarget": {
        "src/L1/OptimismPortal.sol": "OptimismPortal"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": {
        "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888",
        "urls": [
          "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a",
          "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e",
        "urls": [
          "bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497",
          "dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
        "keccak256": "0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3",
        "urls": [
          "bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4",
          "dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
        "urls": [
          "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
          "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66",
        "urls": [
          "bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f",
          "dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10",
        "urls": [
          "bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487",
          "dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
        "keccak256": "0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0",
        "urls": [
          "bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929",
          "dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": {
        "keccak256": "0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7",
        "urls": [
          "bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689",
          "dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"
        ],
        "license": "MIT"
      },
      "lib/solmate/src/utils/FixedPointMathLib.sol": {
        "keccak256": "0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d",
        "urls": [
          "bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c",
          "dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"
        ],
        "license": "MIT"
      },
      "src/L1/L2OutputOracle.sol": {
        "keccak256": "0x60042eb3e619518cab9a8f2480b62871c2d813716e2e60d9a5e0c5f271c58705",
        "urls": [
          "bzz-raw://08538ef2aa99c508b56a8bb9b3c7b93476cba9dbf0b47783141e5e50a02156cc",
          "dweb:/ipfs/QmdvFZ1fUaTkNdmtB66rNAo73RxY7kccsgR6Uqz7psoXGN"
        ],
        "license": "MIT"
      },
      "src/L1/OptimismPortal.sol": {
        "keccak256": "0xdca91a921b402d82b455d7f11027514e8a16dca906cf820b3afffe271beb8a13",
        "urls": [
          "bzz-raw://688912b9d6005af8395d5c2eb5c4e3367a8be7b50ea97c34fc6a7ac0e2d8fd6a",
          "dweb:/ipfs/QmNPJDwHpNmJ5VPWAJB8muRpZxYeySZDVoV1TMVN7roijJ"
        ],
        "license": "MIT"
      },
      "src/L1/ResourceMetering.sol": {
        "keccak256": "0xa4d524f2a5e91a0b63a62603e712001c51c77e8371b93cbb576bcb7d074b7588",
        "urls": [
          "bzz-raw://d6d8141b6c6dc72d2e684c1ae388c005fd78c9ca7fc9c15dddebd227ca4fd730",
          "dweb:/ipfs/QmPfJrR4qssu769TDWJnxdTozqKtZUxiY8fs95bhfECTvG"
        ],
        "license": "MIT"
      },
      "src/L1/SystemConfig.sol": {
        "keccak256": "0x4bbbc7868e948c44f29285a69383e93251a0c330a67929fb72def01cec060d4e",
        "urls": [
          "bzz-raw://1e7ea2f8b3d49bee9c753f107ede6eda93b2cc0e34d0643fa14ebbb26c19e71b",
          "dweb:/ipfs/QmRP81F8FRVXVZs6u2f2poEPDnbFZhNwNYxHgCVEhGpEmB"
        ],
        "license": "MIT"
      },
      "src/libraries/Arithmetic.sol": {
        "keccak256": "0x06a5a8b00527843f0cfc1bb3c0661316966a6cc432f88be31f23cde78cd07560",
        "urls": [
          "bzz-raw://d5209e78e5415c0bf8b350362a825cc56152811abd6fcf2df3d4fa47766d3dee",
          "dweb:/ipfs/Qmf43xyc4Um32NmccayDfhm8kSnS2mhHXpPZnwABJS7cWm"
        ],
        "license": "MIT"
      },
      "src/libraries/Burn.sol": {
        "keccak256": "0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010",
        "urls": [
          "bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f",
          "dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"
        ],
        "license": "MIT"
      },
      "src/libraries/Bytes.sol": {
        "keccak256": "0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859",
        "urls": [
          "bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782",
          "dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9"
        ],
        "license": "MIT"
      },
      "src/libraries/Constants.sol": {
        "keccak256": "0xe12e392f05f80d3837c9392d016471181ae1ee6b84ea91b4e125e6523e5f18a2",
        "urls": [
          "bzz-raw://a3509231c228b7a4352573cd422cf0260dcbb94cfd915e5b664643db5475a5b7",
          "dweb:/ipfs/QmU2QERY4mHxqWFqSE5Exsy6Ftc5MTjTtYHC11fahLJWDC"
        ],
        "license": "MIT"
      },
      "src/libraries/Encoding.sol": {
        "keccak256": "0xd5bbcb7da113e69562498d9543765e03912558ad66348682c2049c31e19f9d9b",
        "urls": [
          "bzz-raw://afc6656ea10062c0c9d0817bb8683636caebf9222c9c102f29ea54fff74a2f93",
          "dweb:/ipfs/QmTNWtMgrTRHM6XtdUmA8bMZcuFpXoFCXgXR5vRihZWLuW"
        ],
        "license": "MIT"
      },
      "src/libraries/Hashing.sol": {
        "keccak256": "0x44e2b2dcfffc39c0fc95ccd3c2118c7e7585fadf3dca327877d5756c7d4b21c3",
        "urls": [
          "bzz-raw://6c89e0d9cfcb08a0d3c46c85367a32bbd9703468ba4c0c5bb6e124c1d173b26b",
          "dweb:/ipfs/QmaY3nQHBBhHK1wrurVXiEeNL8hfZ1pRmhpqW44tFDJnDf"
        ],
        "license": "MIT"
      },
      "src/libraries/SafeCall.sol": {
        "keccak256": "0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f",
        "urls": [
          "bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a",
          "dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"
        ],
        "license": "MIT"
      },
      "src/libraries/Storage.sol": {
        "keccak256": "0x902a0a815272a5b76c647d9e82101aca765e9835a6624d0857088b9da0f58afd",
        "urls": [
          "bzz-raw://9c39a697aacb0a2eac0bf1fbd7790d835a685c61006f6d3464e19cbc96a24480",
          "dweb:/ipfs/QmV3T8ZTRWPB5CNuZjxwWQNoENd7W4SoBMnFG6Y6g6xYV4"
        ],
        "license": "MIT"
      },
      "src/libraries/Types.sol": {
        "keccak256": "0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4",
        "urls": [
          "bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e",
          "dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"
        ],
        "license": "MIT"
      },
      "src/libraries/rlp/RLPReader.sol": {
        "keccak256": "0x9ba74a3b0a11693e622380807d213d5d1250d974e18b2cd768da9cbe719a6778",
        "urls": [
          "bzz-raw://0808d721ed9e05707526ee134faa051d707a95ee6b8bd6e0b1972275da8e5723",
          "dweb:/ipfs/QmcTTPu9xgckfWdbFUAcr2RAgk3J6vzyR4FpV798TjFMeN"
        ],
        "license": "MIT"
      },
      "src/libraries/rlp/RLPWriter.sol": {
        "keccak256": "0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6",
        "urls": [
          "bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b",
          "dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"
        ],
        "license": "MIT"
      },
      "src/libraries/trie/MerkleTrie.sol": {
        "keccak256": "0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c",
        "urls": [
          "bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74",
          "dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE"
        ],
        "license": "MIT"
      },
      "src/libraries/trie/SecureMerkleTrie.sol": {
        "keccak256": "0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288",
        "urls": [
          "bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681",
          "dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw"
        ],
        "license": "MIT"
      },
      "src/universal/ISemver.sol": {
        "keccak256": "0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44",
        "urls": [
          "bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a",
          "dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"
        ],
        "license": "MIT"
      },
      "src/vendor/AddressAliasHelper.sol": {
        "keccak256": "0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237",
        "urls": [
          "bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88",
          "dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR"
        ],
        "license": "Apache-2.0"
      }
    },
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 32100,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "_initialized",
        "offset": 0,
        "slot": "0",
        "type": "t_uint8"
      },
      {
        "astId": 32103,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "_initializing",
        "offset": 1,
        "slot": "0",
        "type": "t_bool"
      },
      {
        "astId": 60287,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "params",
        "offset": 0,
        "slot": "1",
        "type": "t_struct(ResourceParams)60270_storage"
      },
      {
        "astId": 60292,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "__gap",
        "offset": 0,
        "slot": "2",
        "type": "t_array(t_uint256)48_storage"
      },
      {
        "astId": 59323,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "l2Sender",
        "offset": 0,
        "slot": "50",
        "type": "t_address"
      },
      {
        "astId": 59328,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "finalizedWithdrawals",
        "offset": 0,
        "slot": "51",
        "type": "t_mapping(t_bytes32,t_bool)"
      },
      {
        "astId": 59334,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "provenWithdrawals",
        "offset": 0,
        "slot": "52",
        "type": "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)59312_storage)"
      },
      {
        "astId": 59337,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "paused",
        "offset": 0,
        "slot": "53",
        "type": "t_bool"
      },
      {
        "astId": 59341,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "l2Oracle",
        "offset": 1,
        "slot": "53",
        "type": "t_contract(L2OutputOracle)59272"
      },
      {
        "astId": 59345,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "systemConfig",
        "offset": 0,
        "slot": "54",
        "type": "t_contract(SystemConfig)61393"
      },
      {
        "astId": 59348,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "guardian",
        "offset": 0,
        "slot": "55",
        "type": "t_address"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_array(t_uint256)48_storage": {
        "encoding": "inplace",
        "label": "uint256[48]",
        "numberOfBytes": "1536",
        "base": "t_uint256"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_contract(L2OutputOracle)59272": {
        "encoding": "inplace",
        "label": "contract L2OutputOracle",
        "numberOfBytes": "20"
      },
      "t_contract(SystemConfig)61393": {
        "encoding": "inplace",
        "label": "contract SystemConfig",
        "numberOfBytes": "20"
      },
      "t_mapping(t_bytes32,t_bool)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => bool)",
        "numberOfBytes": "32",
        "value": "t_bool"
      },
      "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)59312_storage)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)",
        "numberOfBytes": "32",
        "value": "t_struct(ProvenWithdrawal)59312_storage"
      },
      "t_struct(ProvenWithdrawal)59312_storage": {
        "encoding": "inplace",
        "label": "struct OptimismPortal.ProvenWithdrawal",
        "numberOfBytes": "64",
        "members": [
          {
            "astId": 59307,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "outputRoot",
            "offset": 0,
            "slot": "0",
            "type": "t_bytes32"
          },
          {
            "astId": 59309,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "timestamp",
            "offset": 0,
            "slot": "1",
            "type": "t_uint128"
          },
          {
            "astId": 59311,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "l2OutputIndex",
            "offset": 16,
            "slot": "1",
            "type": "t_uint128"
          }
        ]
      },
      "t_struct(ResourceParams)60270_storage": {
        "encoding": "inplace",
        "label": "struct ResourceMetering.ResourceParams",
        "numberOfBytes": "32",
        "members": [
          {
            "astId": 60265,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "prevBaseFee",
            "offset": 0,
            "slot": "0",
            "type": "t_uint128"
          },
          {
            "astId": 60267,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "prevBoughtGas",
            "offset": 16,
            "slot": "0",
            "type": "t_uint64"
          },
          {
            "astId": 60269,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "prevBlockNum",
            "offset": 24,
            "slot": "0",
            "type": "t_uint64"
          }
        ]
      },
      "t_uint128": {
        "encoding": "inplace",
        "label": "uint128",
        "numberOfBytes": "16"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      },
      "t_uint64": {
        "encoding": "inplace",
        "label": "uint64",
        "numberOfBytes": "8"
      },
      "t_uint8": {
        "encoding": "inplace",
        "label": "uint8",
        "numberOfBytes": "1"
      }
    }
  },
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "GUARDIAN()": {
        "notice": "Getter for the Guardian"
      },
      "L2_ORACLE()": {
        "notice": "Getter for the L2OutputOracle"
      },
      "SYSTEM_CONFIG()": {
        "notice": "Getter for the SystemConfig"
      },
      "constructor": {
        "notice": "Constructs the OptimismPortal contract."
      },
      "depositTransaction(address,uint256,uint64,bool,bytes)": {
        "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in         deriving deposit transactions. Note that if a deposit is made by a contract, its         address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider         using the CrossDomainMessenger contracts for a simpler developer experience."
      },
      "donateETH()": {
        "notice": "Accepts ETH value without triggering a deposit to L2.         This function mainly exists for the sake of the migration between the legacy         Optimism system and Bedrock."
      },
      "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": {
        "notice": "Finalizes a withdrawal transaction."
      },
      "finalizedWithdrawals(bytes32)": {
        "notice": "A list of withdrawal hashes which have been successfully finalized."
      },
      "guardian()": {
        "notice": "Address that has the ability to pause and unpause withdrawals."
      },
      "initialize(address,address,address,bool)": {
        "notice": "Initializer."
      },
      "isOutputFinalized(uint256)": {
        "notice": "Determine if a given output is finalized.         Reverts if the call to L2_ORACLE.getL2Output reverts.         Returns a boolean otherwise."
      },
      "l2Oracle()": {
        "notice": "Address of the L2OutputOracle contract."
      },
      "l2Sender()": {
        "notice": "Address of the L2 account which initiated a withdrawal in this transaction.         If the of this variable is the default L2 sender address, then we are NOT inside of         a call to finalizeWithdrawalTransaction."
      },
      "minimumGasLimit(uint64)": {
        "notice": "Computes the minimum gas limit for a deposit.         The minimum gas limit linearly increases based on the size of the calldata.         This is to prevent users from creating L2 resource usage without paying for it.         This function can be used when interacting with the portal to ensure forwards         compatibility."
      },
      "params()": {
        "notice": "EIP-1559 style gas parameters."
      },
      "pause()": {
        "notice": "Pauses withdrawals."
      },
      "paused()": {
        "notice": "Determines if cross domain messaging is paused.         When set to true, withdrawals are paused.         This may be removed in the future."
      },
      "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": {
        "notice": "Proves a withdrawal transaction."
      },
      "provenWithdrawals(bytes32)": {
        "notice": "A mapping of withdrawal hashes to `ProvenWithdrawal` data."
      },
      "systemConfig()": {
        "notice": "Address of the SystemConfig contract."
      },
      "unpause()": {
        "notice": "Unpauses withdrawals."
      },
      "version()": {
        "notice": "Semantic version."
      }
    },
    "events": {
      "Paused(address)": {
        "notice": "Emitted when the pause is triggered."
      },
      "TransactionDeposited(address,address,uint256,bytes)": {
        "notice": "Emitted when a transaction is deposited from L1 to L2.         The parameters of this event are read by the rollup node and used to derive deposit         transactions on L2."
      },
      "Unpaused(address)": {
        "notice": "Emitted when the pause is lifted."
      },
      "WithdrawalFinalized(bytes32,bool)": {
        "notice": "Emitted when a withdrawal transaction is finalized."
      },
      "WithdrawalProven(bytes32,address,address)": {
        "notice": "Emitted when a withdrawal transaction is proven."
      }
    },
    "notice": "The OptimismPortal is a low-level contract responsible for passing messages between L1         and L2. Messages sent directly to the OptimismPortal have no form of replayability.         Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface."
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "methods": {
      "GUARDIAN()": {},
      "L2_ORACLE()": {},
      "SYSTEM_CONFIG()": {},
      "depositTransaction(address,uint256,uint64,bool,bytes)": {
        "params": {
          "_data": "Data to trigger the recipient with.",
          "_gasLimit": "Amount of L2 gas to purchase by burning gas on L1.",
          "_isCreation": "Whether or not the transaction is a contract creation.",
          "_to": "Target address on L2.",
          "_value": "ETH value to send to the recipient."
        }
      },
      "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": {
        "params": {
          "_tx": "Withdrawal transaction to finalize."
        }
      },
      "initialize(address,address,address,bool)": {
        "params": {
          "_guardian": "Address that can pause withdrawals.",
          "_l2Oracle": "Address of the L2OutputOracle contract.",
          "_paused": "Sets the contract's pausability state.",
          "_systemConfig": "Address of the SystemConfig contract."
        }
      },
      "isOutputFinalized(uint256)": {
        "params": {
          "_l2OutputIndex": "Index of the L2 output to check."
        },
        "returns": {
          "_0": "Whether or not the output is finalized."
        }
      },
      "minimumGasLimit(uint64)": {
        "params": {
          "_byteCount": "Number of bytes in the calldata."
        },
        "returns": {
          "_0": "The minimum gas limit for a deposit."
        }
      },
      "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": {
        "params": {
          "_l2OutputIndex": "L2 output index to prove against.",
          "_outputRootProof": "Inclusion proof of the L2ToL1MessagePasser contract's storage root.",
          "_tx": "Withdrawal transaction to finalize.",
          "_withdrawalProof": "Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."
        }
      }
    },
    "events": {
      "Paused(address)": {
        "params": {
          "account": "Address of the account triggering the pause."
        }
      },
      "TransactionDeposited(address,address,uint256,bytes)": {
        "params": {
          "from": "Address that triggered the deposit transaction.",
          "opaqueData": "ABI encoded deposit data to be parsed off-chain.",
          "to": "Address that the deposit transaction is directed to.",
          "version": "Version of this deposit transaction event."
        }
      },
      "Unpaused(address)": {
        "params": {
          "account": "Address of the account triggering the unpause."
        }
      },
      "WithdrawalFinalized(bytes32,bool)": {
        "params": {
          "success": "Whether the withdrawal transaction was successful.",
          "withdrawalHash": "Hash of the withdrawal transaction."
        }
      },
      "WithdrawalProven(bytes32,address,address)": {
        "params": {
          "from": "Address that triggered the withdrawal transaction.",
          "to": "Address that the withdrawal transaction is directed to.",
          "withdrawalHash": "Hash of the withdrawal transaction."
        }
      }
    }
  },
  "ast": {
    "absolutePath": "src/L1/OptimismPortal.sol",
    "id": 59998,
    "exportedSymbols": {
      "AddressAliasHelper": [
        78127
      ],
      "Constants": [
        69571
      ],
      "Hashing": [
        70279
      ],
      "ISemver": [
        75669
      ],
      "Initializable": [
        32244
      ],
      "L2OutputOracle": [
        59272
      ],
      "OptimismPortal": [
        59997
      ],
      "ResourceMetering": [
        60599
      ],
      "SafeCall": [
        70479
      ],
      "SecureMerkleTrie": [
        72279
      ],
      "SystemConfig": [
        61393
      ],
      "Types": [
        70595
      ]
    },
    "nodeType": "SourceUnit",
    "src": "32:21369:110",
    "nodes": [
      {
        "id": 59274,
        "nodeType": "PragmaDirective",
        "src": "32:23:110",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".15"
        ]
      },
      {
        "id": 59276,
        "nodeType": "ImportDirective",
        "src": "57:86:110",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 32245,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59275,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 32244,
              "src": "66:13:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59278,
        "nodeType": "ImportDirective",
        "src": "144:54:110",
        "nodes": [],
        "absolutePath": "src/libraries/SafeCall.sol",
        "file": "src/libraries/SafeCall.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 70480,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59277,
              "name": "SafeCall",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 70479,
              "src": "153:8:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59280,
        "nodeType": "ImportDirective",
        "src": "199:59:110",
        "nodes": [],
        "absolutePath": "src/L1/L2OutputOracle.sol",
        "file": "src/L1/L2OutputOracle.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 59273,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59279,
              "name": "L2OutputOracle",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 59272,
              "src": "208:14:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59282,
        "nodeType": "ImportDirective",
        "src": "259:55:110",
        "nodes": [],
        "absolutePath": "src/L1/SystemConfig.sol",
        "file": "src/L1/SystemConfig.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 61394,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59281,
              "name": "SystemConfig",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 61393,
              "src": "268:12:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59284,
        "nodeType": "ImportDirective",
        "src": "315:56:110",
        "nodes": [],
        "absolutePath": "src/libraries/Constants.sol",
        "file": "src/libraries/Constants.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 69572,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59283,
              "name": "Constants",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 69571,
              "src": "324:9:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59286,
        "nodeType": "ImportDirective",
        "src": "372:48:110",
        "nodes": [],
        "absolutePath": "src/libraries/Types.sol",
        "file": "src/libraries/Types.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 70596,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59285,
              "name": "Types",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 70595,
              "src": "381:5:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59288,
        "nodeType": "ImportDirective",
        "src": "421:52:110",
        "nodes": [],
        "absolutePath": "src/libraries/Hashing.sol",
        "file": "src/libraries/Hashing.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 70280,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59287,
              "name": "Hashing",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 70279,
              "src": "430:7:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59290,
        "nodeType": "ImportDirective",
        "src": "474:75:110",
        "nodes": [],
        "absolutePath": "src/libraries/trie/SecureMerkleTrie.sol",
        "file": "src/libraries/trie/SecureMerkleTrie.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 72280,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59289,
              "name": "SecureMerkleTrie",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 72279,
              "src": "483:16:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59292,
        "nodeType": "ImportDirective",
        "src": "550:71:110",
        "nodes": [],
        "absolutePath": "src/vendor/AddressAliasHelper.sol",
        "file": "src/vendor/AddressAliasHelper.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 78128,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59291,
              "name": "AddressAliasHelper",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 78127,
              "src": "559:18:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59294,
        "nodeType": "ImportDirective",
        "src": "622:63:110",
        "nodes": [],
        "absolutePath": "src/L1/ResourceMetering.sol",
        "file": "src/L1/ResourceMetering.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 60600,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59293,
              "name": "ResourceMetering",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60599,
              "src": "631:16:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59296,
        "nodeType": "ImportDirective",
        "src": "686:52:110",
        "nodes": [],
        "absolutePath": "src/universal/ISemver.sol",
        "file": "src/universal/ISemver.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 75670,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59295,
              "name": "ISemver",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 75669,
              "src": "695:7:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59298,
        "nodeType": "ImportDirective",
        "src": "739:56:110",
        "nodes": [],
        "absolutePath": "src/libraries/Constants.sol",
        "file": "src/libraries/Constants.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 59998,
        "sourceUnit": 69572,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59297,
              "name": "Constants",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 69571,
              "src": "748:9:110",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59997,
        "nodeType": "ContractDefinition",
        "src": "1135:20265:110",
        "nodes": [
          {
            "id": 59312,
            "nodeType": "StructDefinition",
            "src": "1503:117:110",
            "nodes": [],
            "canonicalName": "OptimismPortal.ProvenWithdrawal",
            "members": [
              {
                "constant": false,
                "id": 59307,
                "mutability": "mutable",
                "name": "outputRoot",
                "nameLocation": "1545:10:110",
                "nodeType": "VariableDeclaration",
                "scope": 59312,
                "src": "1537:18:110",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 59306,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1537:7:110",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 59309,
                "mutability": "mutable",
                "name": "timestamp",
                "nameLocation": "1573:9:110",
                "nodeType": "VariableDeclaration",
                "scope": 59312,
                "src": "1565:17:110",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 59308,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "1565:7:110",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 59311,
                "mutability": "mutable",
                "name": "l2OutputIndex",
                "nameLocation": "1600:13:110",
                "nodeType": "VariableDeclaration",
                "scope": 59312,
                "src": "1592:21:110",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 59310,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "1592:7:110",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ProvenWithdrawal",
            "nameLocation": "1510:16:110",
            "scope": 59997,
            "visibility": "public"
          },
          {
            "id": 59316,
            "nodeType": "VariableDeclaration",
            "src": "1672:45:110",
            "nodes": [],
            "constant": true,
            "documentation": {
              "id": 59313,
              "nodeType": "StructuredDocumentation",
              "src": "1626:41:110",
              "text": "@notice Version of the deposit event."
            },
            "mutability": "constant",
            "name": "DEPOSIT_VERSION",
            "nameLocation": "1698:15:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 59314,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1672:7:110",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "30",
              "id": 59315,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1716:1:110",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "id": 59320,
            "nodeType": "VariableDeclaration",
            "src": "1813:60:110",
            "nodes": [],
            "constant": true,
            "documentation": {
              "id": 59317,
              "nodeType": "StructuredDocumentation",
              "src": "1724:84:110",
              "text": "@notice The L2 gas limit set when eth is deposited using the receive() function."
            },
            "mutability": "constant",
            "name": "RECEIVE_DEFAULT_GAS_LIMIT",
            "nameLocation": "1838:25:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 59318,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1813:6:110",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "hexValue": "3130305f303030",
              "id": 59319,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1866:7:110",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000_by_1",
                "typeString": "int_const 100000"
              },
              "value": "100_000"
            },
            "visibility": "internal"
          },
          {
            "id": 59323,
            "nodeType": "VariableDeclaration",
            "src": "2129:23:110",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 59321,
              "nodeType": "StructuredDocumentation",
              "src": "1880:244:110",
              "text": "@notice Address of the L2 account which initiated a withdrawal in this transaction.\n         If the of this variable is the default L2 sender address, then we are NOT inside of\n         a call to finalizeWithdrawalTransaction."
            },
            "functionSelector": "9bf62d82",
            "mutability": "mutable",
            "name": "l2Sender",
            "nameLocation": "2144:8:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 59322,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "2129:7:110",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 59328,
            "nodeType": "VariableDeclaration",
            "src": "2243:52:110",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 59324,
              "nodeType": "StructuredDocumentation",
              "src": "2159:79:110",
              "text": "@notice A list of withdrawal hashes which have been successfully finalized."
            },
            "functionSelector": "a14238e7",
            "mutability": "mutable",
            "name": "finalizedWithdrawals",
            "nameLocation": "2275:20:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 59327,
              "keyType": {
                "id": 59325,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2251:7:110",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2243:24:110",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueType": {
                "id": 59326,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "2262:4:110",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 59334,
            "nodeType": "VariableDeclaration",
            "src": "2377:61:110",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 59329,
              "nodeType": "StructuredDocumentation",
              "src": "2302:70:110",
              "text": "@notice A mapping of withdrawal hashes to `ProvenWithdrawal` data."
            },
            "functionSelector": "e965084c",
            "mutability": "mutable",
            "name": "provenWithdrawals",
            "nameLocation": "2421:17:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$",
              "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)"
            },
            "typeName": {
              "id": 59333,
              "keyType": {
                "id": 59330,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2385:7:110",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2377:36:110",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$",
                "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)"
              },
              "valueType": {
                "id": 59332,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 59331,
                  "name": "ProvenWithdrawal",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 59312,
                  "src": "2396:16:110"
                },
                "referencedDeclaration": 59312,
                "src": "2396:16:110",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage_ptr",
                  "typeString": "struct OptimismPortal.ProvenWithdrawal"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 59337,
            "nodeType": "VariableDeclaration",
            "src": "2618:18:110",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 59335,
              "nodeType": "StructuredDocumentation",
              "src": "2445:168:110",
              "text": "@notice Determines if cross domain messaging is paused.\n         When set to true, withdrawals are paused.\n         This may be removed in the future."
            },
            "functionSelector": "5c975abb",
            "mutability": "mutable",
            "name": "paused",
            "nameLocation": "2630:6:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 59336,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "2618:4:110",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "public"
          },
          {
            "id": 59341,
            "nodeType": "VariableDeclaration",
            "src": "2732:30:110",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 59338,
              "nodeType": "StructuredDocumentation",
              "src": "2643:84:110",
              "text": "@notice Address of the L2OutputOracle contract.\n @custom:network-specific"
            },
            "functionSelector": "9b5f694a",
            "mutability": "mutable",
            "name": "l2Oracle",
            "nameLocation": "2754:8:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
              "typeString": "contract L2OutputOracle"
            },
            "typeName": {
              "id": 59340,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 59339,
                "name": "L2OutputOracle",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 59272,
                "src": "2732:14:110"
              },
              "referencedDeclaration": 59272,
              "src": "2732:14:110",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                "typeString": "contract L2OutputOracle"
              }
            },
            "visibility": "public"
          },
          {
            "id": 59345,
            "nodeType": "VariableDeclaration",
            "src": "2856:32:110",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 59342,
              "nodeType": "StructuredDocumentation",
              "src": "2769:82:110",
              "text": "@notice Address of the SystemConfig contract.\n @custom:network-specific"
            },
            "functionSelector": "33d7e2bd",
            "mutability": "mutable",
            "name": "systemConfig",
            "nameLocation": "2876:12:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_SystemConfig_$61393",
              "typeString": "contract SystemConfig"
            },
            "typeName": {
              "id": 59344,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 59343,
                "name": "SystemConfig",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 61393,
                "src": "2856:12:110"
              },
              "referencedDeclaration": 61393,
              "src": "2856:12:110",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SystemConfig_$61393",
                "typeString": "contract SystemConfig"
              }
            },
            "visibility": "public"
          },
          {
            "id": 59348,
            "nodeType": "VariableDeclaration",
            "src": "3007:23:110",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 59346,
              "nodeType": "StructuredDocumentation",
              "src": "2895:107:110",
              "text": "@notice Address that has the ability to pause and unpause withdrawals.\n @custom:network-specific"
            },
            "functionSelector": "452a9320",
            "mutability": "mutable",
            "name": "guardian",
            "nameLocation": "3022:8:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 59347,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "3007:7:110",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 59359,
            "nodeType": "EventDefinition",
            "src": "3541:112:110",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 59349,
              "nodeType": "StructuredDocumentation",
              "src": "3037:499:110",
              "text": "@notice Emitted when a transaction is deposited from L1 to L2.\n         The parameters of this event are read by the rollup node and used to derive deposit\n         transactions on L2.\n @param from       Address that triggered the deposit transaction.\n @param to         Address that the deposit transaction is directed to.\n @param version    Version of this deposit transaction event.\n @param opaqueData ABI encoded deposit data to be parsed off-chain."
            },
            "eventSelector": "b3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32",
            "name": "TransactionDeposited",
            "nameLocation": "3547:20:110",
            "parameters": {
              "id": 59358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59351,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "3584:4:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59359,
                  "src": "3568:20:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59350,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3568:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59353,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3606:2:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59359,
                  "src": "3590:18:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59352,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3590:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59355,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "version",
                  "nameLocation": "3626:7:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59359,
                  "src": "3610:23:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59354,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3610:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59357,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "opaqueData",
                  "nameLocation": "3641:10:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59359,
                  "src": "3635:16:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 59356,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3635:5:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3567:85:110"
            }
          },
          {
            "id": 59368,
            "nodeType": "EventDefinition",
            "src": "3957:97:110",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 59360,
              "nodeType": "StructuredDocumentation",
              "src": "3659:293:110",
              "text": "@notice Emitted when a withdrawal transaction is proven.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param from           Address that triggered the withdrawal transaction.\n @param to             Address that the withdrawal transaction is directed to."
            },
            "eventSelector": "67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62",
            "name": "WithdrawalProven",
            "nameLocation": "3963:16:110",
            "parameters": {
              "id": 59367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59362,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "withdrawalHash",
                  "nameLocation": "3996:14:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59368,
                  "src": "3980:30:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59361,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3980:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59364,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "4028:4:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59368,
                  "src": "4012:20:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4012:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59366,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "4050:2:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59368,
                  "src": "4034:18:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4034:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3979:74:110"
            }
          },
          {
            "id": 59375,
            "nodeType": "EventDefinition",
            "src": "4275:72:110",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 59369,
              "nodeType": "StructuredDocumentation",
              "src": "4060:210:110",
              "text": "@notice Emitted when a withdrawal transaction is finalized.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param success        Whether the withdrawal transaction was successful."
            },
            "eventSelector": "db5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b",
            "name": "WithdrawalFinalized",
            "nameLocation": "4281:19:110",
            "parameters": {
              "id": 59374,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59371,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "withdrawalHash",
                  "nameLocation": "4317:14:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59375,
                  "src": "4301:30:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59370,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4301:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59373,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "4338:7:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59375,
                  "src": "4333:12:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 59372,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4333:4:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4300:46:110"
            }
          },
          {
            "id": 59380,
            "nodeType": "EventDefinition",
            "src": "4474:30:110",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 59376,
              "nodeType": "StructuredDocumentation",
              "src": "4353:116:110",
              "text": "@notice Emitted when the pause is triggered.\n @param account Address of the account triggering the pause."
            },
            "eventSelector": "62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258",
            "name": "Paused",
            "nameLocation": "4480:6:110",
            "parameters": {
              "id": 59379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59378,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "4495:7:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59380,
                  "src": "4487:15:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59377,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4487:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4486:17:110"
            }
          },
          {
            "id": 59385,
            "nodeType": "EventDefinition",
            "src": "4630:32:110",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 59381,
              "nodeType": "StructuredDocumentation",
              "src": "4510:115:110",
              "text": "@notice Emitted when the pause is lifted.\n @param account Address of the account triggering the unpause."
            },
            "eventSelector": "5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa",
            "name": "Unpaused",
            "nameLocation": "4636:8:110",
            "parameters": {
              "id": 59384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59383,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "4653:7:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59385,
                  "src": "4645:15:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59382,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4645:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4644:17:110"
            }
          },
          {
            "id": 59397,
            "nodeType": "ModifierDefinition",
            "src": "4705:103:110",
            "nodes": [],
            "body": {
              "id": 59396,
              "nodeType": "Block",
              "src": "4730:78:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 59391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 59389,
                          "name": "paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59337,
                          "src": "4748:6:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "66616c7365",
                          "id": 59390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4758:5:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "4748:15:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a20706175736564",
                        "id": 59392,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4765:24:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b66caa771ead292be27065b6fdbf17fc2b4f01cda6f3a71dafb599bc9ced165d",
                          "typeString": "literal_string \"OptimismPortal: paused\""
                        },
                        "value": "OptimismPortal: paused"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b66caa771ead292be27065b6fdbf17fc2b4f01cda6f3a71dafb599bc9ced165d",
                          "typeString": "literal_string \"OptimismPortal: paused\""
                        }
                      ],
                      "id": 59388,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4740:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4740:50:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59394,
                  "nodeType": "ExpressionStatement",
                  "src": "4740:50:110"
                },
                {
                  "id": 59395,
                  "nodeType": "PlaceholderStatement",
                  "src": "4800:1:110"
                }
              ]
            },
            "documentation": {
              "id": 59386,
              "nodeType": "StructuredDocumentation",
              "src": "4668:32:110",
              "text": "@notice Reverts when paused."
            },
            "name": "whenNotPaused",
            "nameLocation": "4714:13:110",
            "parameters": {
              "id": 59387,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4727:2:110"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 59401,
            "nodeType": "VariableDeclaration",
            "src": "4878:41:110",
            "nodes": [],
            "baseFunctions": [
              75668
            ],
            "constant": true,
            "documentation": {
              "id": 59398,
              "nodeType": "StructuredDocumentation",
              "src": "4814:59:110",
              "text": "@notice Semantic version.\n @custom:semver 1.10.0"
            },
            "functionSelector": "54fd4d50",
            "mutability": "constant",
            "name": "version",
            "nameLocation": "4901:7:110",
            "scope": 59997,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 59399,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4878:6:110",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "312e31302e30",
              "id": 59400,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4911:8:110",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_0da5b5e4c121ebd588f58cd2a27b23bac1ec4a69fdf68241600b139ec2a21f64",
                "typeString": "literal_string \"1.10.0\""
              },
              "value": "1.10.0"
            },
            "visibility": "public"
          },
          {
            "id": 59426,
            "nodeType": "FunctionDefinition",
            "src": "4982:219:110",
            "nodes": [],
            "body": {
              "id": 59425,
              "nodeType": "Block",
              "src": "4996:205:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 59409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5065:1:110",
                                "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": 59408,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5057:7:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 59407,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5057:7:110",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 59410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5057:10:110",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59406,
                          "name": "L2OutputOracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59272,
                          "src": "5042:14:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_L2OutputOracle_$59272_$",
                            "typeString": "type(contract L2OutputOracle)"
                          }
                        },
                        "id": 59411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5042:26:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                          "typeString": "contract L2OutputOracle"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 59414,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5101:1:110",
                            "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": 59413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5093:7:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 59412,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5093:7:110",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 59415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5093:10:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 59419,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5153:1:110",
                                "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": 59418,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5145:7:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 59417,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5145:7:110",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 59420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5145:10:110",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59416,
                          "name": "SystemConfig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61393,
                          "src": "5132:12:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_SystemConfig_$61393_$",
                            "typeString": "type(contract SystemConfig)"
                          }
                        },
                        "id": 59421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5132:24:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_SystemConfig_$61393",
                          "typeString": "contract SystemConfig"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 59422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5179:4:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                          "typeString": "contract L2OutputOracle"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_SystemConfig_$61393",
                          "typeString": "contract SystemConfig"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 59405,
                      "name": "initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59469,
                      "src": "5006:10:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_L2OutputOracle_$59272_$_t_address_$_t_contract$_SystemConfig_$61393_$_t_bool_$returns$__$",
                        "typeString": "function (contract L2OutputOracle,address,contract SystemConfig,bool)"
                      }
                    },
                    "id": 59423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [
                      "_l2Oracle",
                      "_guardian",
                      "_systemConfig",
                      "_paused"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "5006:188:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59424,
                  "nodeType": "ExpressionStatement",
                  "src": "5006:188:110"
                }
              ]
            },
            "documentation": {
              "id": 59402,
              "nodeType": "StructuredDocumentation",
              "src": "4926:51:110",
              "text": "@notice Constructs the OptimismPortal contract."
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 59403,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4993:2:110"
            },
            "returnParameters": {
              "id": 59404,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4996:0:110"
            },
            "scope": 59997,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59469,
            "nodeType": "FunctionDefinition",
            "src": "5491:423:110",
            "nodes": [],
            "body": {
              "id": 59468,
              "nodeType": "Block",
              "src": "5700:214:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 59447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59444,
                      "name": "l2Sender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59323,
                      "src": "5710:8:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 59445,
                        "name": "Constants",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69571,
                        "src": "5721:9:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$",
                          "typeString": "type(library Constants)"
                        }
                      },
                      "id": 59446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "DEFAULT_L2_SENDER",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 69529,
                      "src": "5721:27:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5710:38:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 59448,
                  "nodeType": "ExpressionStatement",
                  "src": "5710:38:110"
                },
                {
                  "expression": {
                    "id": 59451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59449,
                      "name": "l2Oracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59341,
                      "src": "5758:8:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                        "typeString": "contract L2OutputOracle"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 59450,
                      "name": "_l2Oracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59430,
                      "src": "5769:9:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                        "typeString": "contract L2OutputOracle"
                      }
                    },
                    "src": "5758:20:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                      "typeString": "contract L2OutputOracle"
                    }
                  },
                  "id": 59452,
                  "nodeType": "ExpressionStatement",
                  "src": "5758:20:110"
                },
                {
                  "expression": {
                    "id": 59455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59453,
                      "name": "systemConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59345,
                      "src": "5788:12:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SystemConfig_$61393",
                        "typeString": "contract SystemConfig"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 59454,
                      "name": "_systemConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59435,
                      "src": "5803:13:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SystemConfig_$61393",
                        "typeString": "contract SystemConfig"
                      }
                    },
                    "src": "5788:28:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SystemConfig_$61393",
                      "typeString": "contract SystemConfig"
                    }
                  },
                  "id": 59456,
                  "nodeType": "ExpressionStatement",
                  "src": "5788:28:110"
                },
                {
                  "expression": {
                    "id": 59459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59457,
                      "name": "guardian",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59348,
                      "src": "5826:8:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 59458,
                      "name": "_guardian",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59432,
                      "src": "5837:9:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5826:20:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 59460,
                  "nodeType": "ExpressionStatement",
                  "src": "5826:20:110"
                },
                {
                  "expression": {
                    "id": 59463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59461,
                      "name": "paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59337,
                      "src": "5856:6:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 59462,
                      "name": "_paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59437,
                      "src": "5865:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5856:16:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59464,
                  "nodeType": "ExpressionStatement",
                  "src": "5856:16:110"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 59465,
                      "name": "__ResourceMetering_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60598,
                      "src": "5882:23:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 59466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5882:25:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59467,
                  "nodeType": "ExpressionStatement",
                  "src": "5882:25:110"
                }
              ]
            },
            "documentation": {
              "id": 59427,
              "nodeType": "StructuredDocumentation",
              "src": "5207:279:110",
              "text": "@notice Initializer.\n @param _l2Oracle Address of the L2OutputOracle contract.\n @param _guardian Address that can pause withdrawals.\n @param _paused Sets the contract's pausability state.\n @param _systemConfig Address of the SystemConfig contract."
            },
            "functionSelector": "fecf9734",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 59440,
                      "name": "Constants",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69571,
                      "src": "5673:9:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$",
                        "typeString": "type(library Constants)"
                      }
                    },
                    "id": 59441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "INITIALIZER",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 69570,
                    "src": "5673:21:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  }
                ],
                "id": 59442,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 59439,
                  "name": "reinitializer",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 32197,
                  "src": "5659:13:110"
                },
                "nodeType": "ModifierInvocation",
                "src": "5659:36:110"
              }
            ],
            "name": "initialize",
            "nameLocation": "5500:10:110",
            "parameters": {
              "id": 59438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59430,
                  "mutability": "mutable",
                  "name": "_l2Oracle",
                  "nameLocation": "5535:9:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59469,
                  "src": "5520:24:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                    "typeString": "contract L2OutputOracle"
                  },
                  "typeName": {
                    "id": 59429,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59428,
                      "name": "L2OutputOracle",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 59272,
                      "src": "5520:14:110"
                    },
                    "referencedDeclaration": 59272,
                    "src": "5520:14:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                      "typeString": "contract L2OutputOracle"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59432,
                  "mutability": "mutable",
                  "name": "_guardian",
                  "nameLocation": "5562:9:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59469,
                  "src": "5554:17:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59431,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5554:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59435,
                  "mutability": "mutable",
                  "name": "_systemConfig",
                  "nameLocation": "5594:13:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59469,
                  "src": "5581:26:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SystemConfig_$61393",
                    "typeString": "contract SystemConfig"
                  },
                  "typeName": {
                    "id": 59434,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59433,
                      "name": "SystemConfig",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61393,
                      "src": "5581:12:110"
                    },
                    "referencedDeclaration": 61393,
                    "src": "5581:12:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SystemConfig_$61393",
                      "typeString": "contract SystemConfig"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59437,
                  "mutability": "mutable",
                  "name": "_paused",
                  "nameLocation": "5622:7:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59469,
                  "src": "5617:12:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 59436,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5617:4:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5510:125:110"
            },
            "returnParameters": {
              "id": 59443,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5700:0:110"
            },
            "scope": 59997,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59479,
            "nodeType": "FunctionDefinition",
            "src": "5989:92:110",
            "nodes": [],
            "body": {
              "id": 59478,
              "nodeType": "Block",
              "src": "6049:32:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 59476,
                    "name": "l2Oracle",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59341,
                    "src": "6066:8:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                      "typeString": "contract L2OutputOracle"
                    }
                  },
                  "functionReturnParameters": 59475,
                  "id": 59477,
                  "nodeType": "Return",
                  "src": "6059:15:110"
                }
              ]
            },
            "documentation": {
              "id": 59470,
              "nodeType": "StructuredDocumentation",
              "src": "5920:64:110",
              "text": "@notice Getter for the L2OutputOracle\n @custom:legacy"
            },
            "functionSelector": "001c2ff6",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "L2_ORACLE",
            "nameLocation": "5998:9:110",
            "parameters": {
              "id": 59471,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6007:2:110"
            },
            "returnParameters": {
              "id": 59475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59474,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59479,
                  "src": "6033:14:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                    "typeString": "contract L2OutputOracle"
                  },
                  "typeName": {
                    "id": 59473,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59472,
                      "name": "L2OutputOracle",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 59272,
                      "src": "6033:14:110"
                    },
                    "referencedDeclaration": 59272,
                    "src": "6033:14:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                      "typeString": "contract L2OutputOracle"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6032:16:110"
            },
            "scope": 59997,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59489,
            "nodeType": "FunctionDefinition",
            "src": "6154:98:110",
            "nodes": [],
            "body": {
              "id": 59488,
              "nodeType": "Block",
              "src": "6216:36:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 59486,
                    "name": "systemConfig",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59345,
                    "src": "6233:12:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SystemConfig_$61393",
                      "typeString": "contract SystemConfig"
                    }
                  },
                  "functionReturnParameters": 59485,
                  "id": 59487,
                  "nodeType": "Return",
                  "src": "6226:19:110"
                }
              ]
            },
            "documentation": {
              "id": 59480,
              "nodeType": "StructuredDocumentation",
              "src": "6087:62:110",
              "text": "@notice Getter for the SystemConfig\n @custom:legacy"
            },
            "functionSelector": "f0498750",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "SYSTEM_CONFIG",
            "nameLocation": "6163:13:110",
            "parameters": {
              "id": 59481,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6176:2:110"
            },
            "returnParameters": {
              "id": 59485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59484,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59489,
                  "src": "6202:12:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SystemConfig_$61393",
                    "typeString": "contract SystemConfig"
                  },
                  "typeName": {
                    "id": 59483,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59482,
                      "name": "SystemConfig",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61393,
                      "src": "6202:12:110"
                    },
                    "referencedDeclaration": 61393,
                    "src": "6202:12:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SystemConfig_$61393",
                      "typeString": "contract SystemConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6201:14:110"
            },
            "scope": 59997,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59498,
            "nodeType": "FunctionDefinition",
            "src": "6321:84:110",
            "nodes": [],
            "body": {
              "id": 59497,
              "nodeType": "Block",
              "src": "6373:32:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 59495,
                    "name": "guardian",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59348,
                    "src": "6390:8:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 59494,
                  "id": 59496,
                  "nodeType": "Return",
                  "src": "6383:15:110"
                }
              ]
            },
            "documentation": {
              "id": 59490,
              "nodeType": "StructuredDocumentation",
              "src": "6258:58:110",
              "text": "@notice Getter for the Guardian\n @custom:legacy"
            },
            "functionSelector": "724c184c",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "GUARDIAN",
            "nameLocation": "6330:8:110",
            "parameters": {
              "id": 59491,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6338:2:110"
            },
            "returnParameters": {
              "id": 59494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59493,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59498,
                  "src": "6364:7:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59492,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6364:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6363:9:110"
            },
            "scope": 59997,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59520,
            "nodeType": "FunctionDefinition",
            "src": "6447:173:110",
            "nodes": [],
            "body": {
              "id": 59519,
              "nodeType": "Block",
              "src": "6473:147:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 59506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 59503,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "6491:3:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 59504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "6491:10:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 59505,
                          "name": "guardian",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59348,
                          "src": "6505:8:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6491:22:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e2063616e207061757365",
                        "id": 59507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6515:41:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a662ad7462f0018e8b171ba19146984ad716c45a2c8d7c903bdd6e1628b95f08",
                          "typeString": "literal_string \"OptimismPortal: only guardian can pause\""
                        },
                        "value": "OptimismPortal: only guardian can pause"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a662ad7462f0018e8b171ba19146984ad716c45a2c8d7c903bdd6e1628b95f08",
                          "typeString": "literal_string \"OptimismPortal: only guardian can pause\""
                        }
                      ],
                      "id": 59502,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6483:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6483:74:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59509,
                  "nodeType": "ExpressionStatement",
                  "src": "6483:74:110"
                },
                {
                  "expression": {
                    "id": 59512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59510,
                      "name": "paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59337,
                      "src": "6567:6:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 59511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6576:4:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6567:13:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59513,
                  "nodeType": "ExpressionStatement",
                  "src": "6567:13:110"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59515,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "6602:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6602:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59514,
                      "name": "Paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59380,
                      "src": "6595:6:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 59517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6595:18:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59518,
                  "nodeType": "EmitStatement",
                  "src": "6590:23:110"
                }
              ]
            },
            "documentation": {
              "id": 59499,
              "nodeType": "StructuredDocumentation",
              "src": "6411:31:110",
              "text": "@notice Pauses withdrawals."
            },
            "functionSelector": "8456cb59",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pause",
            "nameLocation": "6456:5:110",
            "parameters": {
              "id": 59500,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6461:2:110"
            },
            "returnParameters": {
              "id": 59501,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6473:0:110"
            },
            "scope": 59997,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59542,
            "nodeType": "FunctionDefinition",
            "src": "6664:180:110",
            "nodes": [],
            "body": {
              "id": 59541,
              "nodeType": "Block",
              "src": "6692:152:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 59528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 59525,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "6710:3:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 59526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "6710:10:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 59527,
                          "name": "guardian",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59348,
                          "src": "6724:8:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6710:22:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e2063616e20756e7061757365",
                        "id": 59529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6734:43:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9b69e94c34df6db33f20b596e1e1d19a7e5843e1b38ae4395fe1bbf64e89e262",
                          "typeString": "literal_string \"OptimismPortal: only guardian can unpause\""
                        },
                        "value": "OptimismPortal: only guardian can unpause"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9b69e94c34df6db33f20b596e1e1d19a7e5843e1b38ae4395fe1bbf64e89e262",
                          "typeString": "literal_string \"OptimismPortal: only guardian can unpause\""
                        }
                      ],
                      "id": 59524,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6702:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6702:76:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59531,
                  "nodeType": "ExpressionStatement",
                  "src": "6702:76:110"
                },
                {
                  "expression": {
                    "id": 59534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59532,
                      "name": "paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59337,
                      "src": "6788:6:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 59533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6797:5:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "6788:14:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59535,
                  "nodeType": "ExpressionStatement",
                  "src": "6788:14:110"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59537,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "6826:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6826:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59536,
                      "name": "Unpaused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59385,
                      "src": "6817:8:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 59539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6817:20:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59540,
                  "nodeType": "EmitStatement",
                  "src": "6812:25:110"
                }
              ]
            },
            "documentation": {
              "id": 59521,
              "nodeType": "StructuredDocumentation",
              "src": "6626:33:110",
              "text": "@notice Unpauses withdrawals."
            },
            "functionSelector": "3f4ba83a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unpause",
            "nameLocation": "6673:7:110",
            "parameters": {
              "id": 59522,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6680:2:110"
            },
            "returnParameters": {
              "id": 59523,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6692:0:110"
            },
            "scope": 59997,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59557,
            "nodeType": "FunctionDefinition",
            "src": "7337:120:110",
            "nodes": [],
            "body": {
              "id": 59556,
              "nodeType": "Block",
              "src": "7410:47:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 59554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 59552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 59550,
                        "name": "_byteCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59545,
                        "src": "7427:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "hexValue": "3136",
                        "id": 59551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7440:2:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_16_by_1",
                          "typeString": "int_const 16"
                        },
                        "value": "16"
                      },
                      "src": "7427:15:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "hexValue": "3231303030",
                      "id": 59553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7445:5:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_21000_by_1",
                        "typeString": "int_const 21000"
                      },
                      "value": "21000"
                    },
                    "src": "7427:23:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 59549,
                  "id": 59555,
                  "nodeType": "Return",
                  "src": "7420:30:110"
                }
              ]
            },
            "documentation": {
              "id": 59543,
              "nodeType": "StructuredDocumentation",
              "src": "6850:482:110",
              "text": "@notice Computes the minimum gas limit for a deposit.\n         The minimum gas limit linearly increases based on the size of the calldata.\n         This is to prevent users from creating L2 resource usage without paying for it.\n         This function can be used when interacting with the portal to ensure forwards\n         compatibility.\n @param _byteCount Number of bytes in the calldata.\n @return The minimum gas limit for a deposit."
            },
            "functionSelector": "a35d99df",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "minimumGasLimit",
            "nameLocation": "7346:15:110",
            "parameters": {
              "id": 59546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59545,
                  "mutability": "mutable",
                  "name": "_byteCount",
                  "nameLocation": "7369:10:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59557,
                  "src": "7362:17:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 59544,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7362:6:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7361:19:110"
            },
            "returnParameters": {
              "id": 59549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59548,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59557,
                  "src": "7402:6:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 59547,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7402:6:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7401:8:110"
            },
            "scope": 59997,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59575,
            "nodeType": "FunctionDefinition",
            "src": "7878:130:110",
            "nodes": [],
            "body": {
              "id": 59574,
              "nodeType": "Block",
              "src": "7905:103:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59562,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7934:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7934:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 59564,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7946:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "src": "7946:9:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 59566,
                        "name": "RECEIVE_DEFAULT_GAS_LIMIT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59320,
                        "src": "7957:25:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 59567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7984:5:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "",
                            "id": 59570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7997:2:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            }
                          ],
                          "id": 59569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7991:5:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 59568,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "7991:5:110",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 59571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7991:9:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 59561,
                      "name": "depositTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59961,
                      "src": "7915:18:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint64_$_t_bool_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint64,bool,bytes memory)"
                      }
                    },
                    "id": 59572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7915:86:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59573,
                  "nodeType": "ExpressionStatement",
                  "src": "7915:86:110"
                }
              ]
            },
            "documentation": {
              "id": 59558,
              "nodeType": "StructuredDocumentation",
              "src": "7463:368:110",
              "text": "@notice Accepts value so that users can send ETH directly to this contract and have the\n         funds be deposited to their address on L2. This is intended as a convenience\n         function for EOAs. Contracts should call the depositTransaction() function directly\n         otherwise any deposited funds will be lost due to address aliasing."
            },
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 59559,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7885:2:110"
            },
            "returnParameters": {
              "id": 59560,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7905:0:110"
            },
            "scope": 59997,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59580,
            "nodeType": "FunctionDefinition",
            "src": "8222:77:110",
            "nodes": [],
            "body": {
              "id": 59579,
              "nodeType": "Block",
              "src": "8260:39:110",
              "nodes": [],
              "statements": []
            },
            "documentation": {
              "id": 59576,
              "nodeType": "StructuredDocumentation",
              "src": "8014:203:110",
              "text": "@notice Accepts ETH value without triggering a deposit to L2.\n         This function mainly exists for the sake of the migration between the legacy\n         Optimism system and Bedrock."
            },
            "functionSelector": "8b4c40b0",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "donateETH",
            "nameLocation": "8231:9:110",
            "parameters": {
              "id": 59577,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8240:2:110"
            },
            "returnParameters": {
              "id": 59578,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8260:0:110"
            },
            "scope": 59997,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59593,
            "nodeType": "FunctionDefinition",
            "src": "8548:152:110",
            "nodes": [],
            "body": {
              "id": 59592,
              "nodeType": "Block",
              "src": "8647:53:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 59588,
                        "name": "systemConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59345,
                        "src": "8664:12:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_SystemConfig_$61393",
                          "typeString": "contract SystemConfig"
                        }
                      },
                      "id": 59589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "resourceConfig",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61313,
                      "src": "8664:27:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_ResourceConfig_$60283_memory_ptr_$",
                        "typeString": "function () view external returns (struct ResourceMetering.ResourceConfig memory)"
                      }
                    },
                    "id": 59590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8664:29:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ResourceConfig_$60283_memory_ptr",
                      "typeString": "struct ResourceMetering.ResourceConfig memory"
                    }
                  },
                  "functionReturnParameters": 59587,
                  "id": 59591,
                  "nodeType": "Return",
                  "src": "8657:36:110"
                }
              ]
            },
            "baseFunctions": [
              60579
            ],
            "documentation": {
              "id": 59581,
              "nodeType": "StructuredDocumentation",
              "src": "8305:238:110",
              "text": "@notice Getter for the resource config.\n         Used internally by the ResourceMetering contract.\n         The SystemConfig is the source of truth for the resource config.\n @return ResourceMetering ResourceConfig"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_resourceConfig",
            "nameLocation": "8557:15:110",
            "overrides": {
              "id": 59583,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8589:8:110"
            },
            "parameters": {
              "id": 59582,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8572:2:110"
            },
            "returnParameters": {
              "id": 59587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59586,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59593,
                  "src": "8607:38:110",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ResourceConfig_$60283_memory_ptr",
                    "typeString": "struct ResourceMetering.ResourceConfig"
                  },
                  "typeName": {
                    "id": 59585,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59584,
                      "name": "ResourceMetering.ResourceConfig",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 60283,
                      "src": "8607:31:110"
                    },
                    "referencedDeclaration": 60283,
                    "src": "8607:31:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ResourceConfig_$60283_storage_ptr",
                      "typeString": "struct ResourceMetering.ResourceConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8606:40:110"
            },
            "scope": 59997,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 59725,
            "nodeType": "FunctionDefinition",
            "src": "9088:3746:110",
            "nodes": [],
            "body": {
              "id": 59724,
              "nodeType": "Block",
              "src": "9353:3481:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 59617,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 59611,
                            "name": "_tx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59597,
                            "src": "9598:3:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                              "typeString": "struct Types.WithdrawalTransaction memory"
                            }
                          },
                          "id": 59612,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "target",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 70587,
                          "src": "9598:10:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 59615,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "9620:4:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_OptimismPortal_$59997",
                                "typeString": "contract OptimismPortal"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_OptimismPortal_$59997",
                                "typeString": "contract OptimismPortal"
                              }
                            ],
                            "id": 59614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9612:7:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 59613,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "9612:7:110",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 59616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9612:13:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9598:27:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e64206d6573736167657320746f2074686520706f7274616c20636f6e7472616374",
                        "id": 59618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9627:65:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8",
                          "typeString": "literal_string \"OptimismPortal: you cannot send messages to the portal contract\""
                        },
                        "value": "OptimismPortal: you cannot send messages to the portal contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8",
                          "typeString": "literal_string \"OptimismPortal: you cannot send messages to the portal contract\""
                        }
                      ],
                      "id": 59610,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9590:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9590:103:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59620,
                  "nodeType": "ExpressionStatement",
                  "src": "9590:103:110"
                },
                {
                  "assignments": [
                    59622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59622,
                      "mutability": "mutable",
                      "name": "outputRoot",
                      "nameLocation": "9878:10:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59724,
                      "src": "9870:18:110",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 59621,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9870:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59628,
                  "initialValue": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 59625,
                          "name": "_l2OutputIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59599,
                          "src": "9912:14:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 59623,
                          "name": "l2Oracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59341,
                          "src": "9891:8:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                            "typeString": "contract L2OutputOracle"
                          }
                        },
                        "id": 59624,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getL2Output",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 59112,
                        "src": "9891:20:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$",
                          "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)"
                        }
                      },
                      "id": 59626,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9891:36:110",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr",
                        "typeString": "struct Types.OutputProposal memory"
                      }
                    },
                    "id": 59627,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "outputRoot",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 70548,
                    "src": "9891:47:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9870:68:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 59635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 59630,
                          "name": "outputRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59622,
                          "src": "10058:10:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 59633,
                              "name": "_outputRootProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59602,
                              "src": "10100:16:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr",
                                "typeString": "struct Types.OutputRootProof calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr",
                                "typeString": "struct Types.OutputRootProof calldata"
                              }
                            ],
                            "expression": {
                              "id": 59631,
                              "name": "Hashing",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70279,
                              "src": "10072:7:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Hashing_$70279_$",
                                "typeString": "type(library Hashing)"
                              }
                            },
                            "id": 59632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hashOutputRootProof",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 70278,
                            "src": "10072:27:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_OutputRootProof_$70562_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (struct Types.OutputRootProof memory) pure returns (bytes32)"
                            }
                          },
                          "id": 59634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10072:45:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "10058:59:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a20696e76616c6964206f757470757420726f6f742070726f6f66",
                        "id": 59636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10119:43:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996",
                          "typeString": "literal_string \"OptimismPortal: invalid output root proof\""
                        },
                        "value": "OptimismPortal: invalid output root proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996",
                          "typeString": "literal_string \"OptimismPortal: invalid output root proof\""
                        }
                      ],
                      "id": 59629,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10037:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10037:135:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59638,
                  "nodeType": "ExpressionStatement",
                  "src": "10037:135:110"
                },
                {
                  "assignments": [
                    59640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59640,
                      "mutability": "mutable",
                      "name": "withdrawalHash",
                      "nameLocation": "10291:14:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59724,
                      "src": "10283:22:110",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 59639,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "10283:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59645,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59643,
                        "name": "_tx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59597,
                        "src": "10331:3:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                          "typeString": "struct Types.WithdrawalTransaction memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                          "typeString": "struct Types.WithdrawalTransaction memory"
                        }
                      ],
                      "expression": {
                        "id": 59641,
                        "name": "Hashing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70279,
                        "src": "10308:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Hashing_$70279_$",
                          "typeString": "type(library Hashing)"
                        }
                      },
                      "id": 59642,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hashWithdrawal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70254,
                      "src": "10308:22:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_WithdrawalTransaction_$70594_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)"
                      }
                    },
                    "id": 59644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10308:27:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10283:52:110"
                },
                {
                  "assignments": [
                    59648
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59648,
                      "mutability": "mutable",
                      "name": "provenWithdrawal",
                      "nameLocation": "10369:16:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59724,
                      "src": "10345:40:110",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                        "typeString": "struct OptimismPortal.ProvenWithdrawal"
                      },
                      "typeName": {
                        "id": 59647,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 59646,
                          "name": "ProvenWithdrawal",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 59312,
                          "src": "10345:16:110"
                        },
                        "referencedDeclaration": 59312,
                        "src": "10345:16:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage_ptr",
                          "typeString": "struct OptimismPortal.ProvenWithdrawal"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59652,
                  "initialValue": {
                    "baseExpression": {
                      "id": 59649,
                      "name": "provenWithdrawals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59334,
                      "src": "10388:17:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$",
                        "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)"
                      }
                    },
                    "id": 59651,
                    "indexExpression": {
                      "id": 59650,
                      "name": "withdrawalHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59640,
                      "src": "10406:14:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10388:33:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage",
                      "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10345:76:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 59667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 59657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 59654,
                              "name": "provenWithdrawal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59648,
                              "src": "10975:16:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                                "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                              }
                            },
                            "id": 59655,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59309,
                            "src": "10975:26:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 59656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11005:1:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10975:31:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 59666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 59660,
                                    "name": "provenWithdrawal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59648,
                                    "src": "11047:16:110",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                                      "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                                    }
                                  },
                                  "id": 59661,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "l2OutputIndex",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 59311,
                                  "src": "11047:30:110",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                ],
                                "expression": {
                                  "id": 59658,
                                  "name": "l2Oracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 59341,
                                  "src": "11026:8:110",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                                    "typeString": "contract L2OutputOracle"
                                  }
                                },
                                "id": 59659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getL2Output",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 59112,
                                "src": "11026:20:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$",
                                  "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)"
                                }
                              },
                              "id": 59662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11026:52:110",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr",
                                "typeString": "struct Types.OutputProposal memory"
                              }
                            },
                            "id": 59663,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "outputRoot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 70548,
                            "src": "11026:63:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "id": 59664,
                              "name": "provenWithdrawal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59648,
                              "src": "11093:16:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                                "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                              }
                            },
                            "id": 59665,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "outputRoot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59307,
                            "src": "11093:27:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "11026:94:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10975:145:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c20686173682068617320616c7265616479206265656e2070726f76656e",
                        "id": 59668,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11134:57:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5238e365e021f6fd781c2264a5a09100f0670031b56dacfc224b453789ac1dd0",
                          "typeString": "literal_string \"OptimismPortal: withdrawal hash has already been proven\""
                        },
                        "value": "OptimismPortal: withdrawal hash has already been proven"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5238e365e021f6fd781c2264a5a09100f0670031b56dacfc224b453789ac1dd0",
                          "typeString": "literal_string \"OptimismPortal: withdrawal hash has already been proven\""
                        }
                      ],
                      "id": 59653,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10954:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10954:247:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59670,
                  "nodeType": "ExpressionStatement",
                  "src": "10954:247:110"
                },
                {
                  "assignments": [
                    59672
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59672,
                      "mutability": "mutable",
                      "name": "storageKey",
                      "nameLocation": "11445:10:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59724,
                      "src": "11437:18:110",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 59671,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11437:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59683,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 59676,
                            "name": "withdrawalHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59640,
                            "src": "11509:14:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 59679,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11549:1:110",
                                "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": 59678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "11541:7:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 59677,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "11541:7:110",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 59680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11541:10:110",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 59674,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "11481:3:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 59675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "11481:10:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 59681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11481:147:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 59673,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "11458:9:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 59682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11458:180:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11437:201:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 59689,
                                "name": "storageKey",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 59672,
                                "src": "12057:10:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 59687,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "12046:3:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 59688,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encode",
                              "nodeType": "MemberAccess",
                              "src": "12046:10:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 59690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12046:22:110",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "hexValue": "01",
                            "id": 59691,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "hexString",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12070:7:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2",
                              "typeString": "literal_string hex\"01\""
                            },
                            "value": "\u0001"
                          },
                          {
                            "id": 59692,
                            "name": "_withdrawalProof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59605,
                            "src": "12079:16:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          {
                            "expression": {
                              "id": 59693,
                              "name": "_outputRootProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59602,
                              "src": "12097:16:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr",
                                "typeString": "struct Types.OutputRootProof calldata"
                              }
                            },
                            "id": 59694,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "messagePasserStorageRoot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 70559,
                            "src": "12097:41:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2",
                              "typeString": "literal_string hex\"01\""
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 59685,
                            "name": "SecureMerkleTrie",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 72279,
                            "src": "11991:16:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SecureMerkleTrie_$72279_$",
                              "typeString": "type(library SecureMerkleTrie)"
                            }
                          },
                          "id": 59686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "verifyInclusionProof",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 72231,
                          "src": "11991:37:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes memory,bytes memory,bytes memory[] memory,bytes32) pure returns (bool)"
                          }
                        },
                        "id": 59695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11991:161:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a20696e76616c6964207769746864726177616c20696e636c7573696f6e2070726f6f66",
                        "id": 59696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12166:52:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9",
                          "typeString": "literal_string \"OptimismPortal: invalid withdrawal inclusion proof\""
                        },
                        "value": "OptimismPortal: invalid withdrawal inclusion proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9",
                          "typeString": "literal_string \"OptimismPortal: invalid withdrawal inclusion proof\""
                        }
                      ],
                      "id": 59684,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11970:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11970:258:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59698,
                  "nodeType": "ExpressionStatement",
                  "src": "11970:258:110"
                },
                {
                  "expression": {
                    "id": 59714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 59699,
                        "name": "provenWithdrawals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59334,
                        "src": "12510:17:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$",
                          "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)"
                        }
                      },
                      "id": 59701,
                      "indexExpression": {
                        "id": 59700,
                        "name": "withdrawalHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59640,
                        "src": "12528:14:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12510:33:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage",
                        "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 59703,
                          "name": "outputRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59622,
                          "src": "12589:10:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 59706,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "12632:5:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 59707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "12632:15:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 59705,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12624:7:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            },
                            "typeName": {
                              "id": 59704,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "12624:7:110",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 59708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12624:24:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 59711,
                              "name": "_l2OutputIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59599,
                              "src": "12685:14:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 59710,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12677:7:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            },
                            "typeName": {
                              "id": 59709,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "12677:7:110",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 59712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12677:23:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        ],
                        "id": 59702,
                        "name": "ProvenWithdrawal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59312,
                        "src": "12546:16:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_ProvenWithdrawal_$59312_storage_ptr_$",
                          "typeString": "type(struct OptimismPortal.ProvenWithdrawal storage pointer)"
                        }
                      },
                      "id": 59713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "outputRoot",
                        "timestamp",
                        "l2OutputIndex"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "12546:165:110",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                        "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                      }
                    },
                    "src": "12510:201:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage",
                      "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref"
                    }
                  },
                  "id": 59715,
                  "nodeType": "ExpressionStatement",
                  "src": "12510:201:110"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 59717,
                        "name": "withdrawalHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59640,
                        "src": "12788:14:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 59718,
                          "name": "_tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59597,
                          "src": "12804:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                            "typeString": "struct Types.WithdrawalTransaction memory"
                          }
                        },
                        "id": 59719,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70585,
                        "src": "12804:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 59720,
                          "name": "_tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59597,
                          "src": "12816:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                            "typeString": "struct Types.WithdrawalTransaction memory"
                          }
                        },
                        "id": 59721,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "target",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70587,
                        "src": "12816:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59716,
                      "name": "WithdrawalProven",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59368,
                      "src": "12771:16:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address,address)"
                      }
                    },
                    "id": 59722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12771:56:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59723,
                  "nodeType": "EmitStatement",
                  "src": "12766:61:110"
                }
              ]
            },
            "documentation": {
              "id": 59594,
              "nodeType": "StructuredDocumentation",
              "src": "8706:377:110",
              "text": "@notice Proves a withdrawal transaction.\n @param _tx              Withdrawal transaction to finalize.\n @param _l2OutputIndex   L2 output index to prove against.\n @param _outputRootProof Inclusion proof of the L2ToL1MessagePasser contract's storage root.\n @param _withdrawalProof Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."
            },
            "functionSelector": "4870496f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 59608,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 59607,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 59397,
                  "src": "9335:13:110"
                },
                "nodeType": "ModifierInvocation",
                "src": "9335:13:110"
              }
            ],
            "name": "proveWithdrawalTransaction",
            "nameLocation": "9097:26:110",
            "parameters": {
              "id": 59606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59597,
                  "mutability": "mutable",
                  "name": "_tx",
                  "nameLocation": "9168:3:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59725,
                  "src": "9133:38:110",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                    "typeString": "struct Types.WithdrawalTransaction"
                  },
                  "typeName": {
                    "id": 59596,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59595,
                      "name": "Types.WithdrawalTransaction",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 70594,
                      "src": "9133:27:110"
                    },
                    "referencedDeclaration": 70594,
                    "src": "9133:27:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_storage_ptr",
                      "typeString": "struct Types.WithdrawalTransaction"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59599,
                  "mutability": "mutable",
                  "name": "_l2OutputIndex",
                  "nameLocation": "9189:14:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59725,
                  "src": "9181:22:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59598,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9181:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59602,
                  "mutability": "mutable",
                  "name": "_outputRootProof",
                  "nameLocation": "9244:16:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59725,
                  "src": "9213:47:110",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr",
                    "typeString": "struct Types.OutputRootProof"
                  },
                  "typeName": {
                    "id": 59601,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59600,
                      "name": "Types.OutputRootProof",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 70562,
                      "src": "9213:21:110"
                    },
                    "referencedDeclaration": 70562,
                    "src": "9213:21:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OutputRootProof_$70562_storage_ptr",
                      "typeString": "struct Types.OutputRootProof"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59605,
                  "mutability": "mutable",
                  "name": "_withdrawalProof",
                  "nameLocation": "9287:16:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59725,
                  "src": "9270:33:110",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 59603,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "9270:5:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 59604,
                    "nodeType": "ArrayTypeName",
                    "src": "9270:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9123:186:110"
            },
            "returnParameters": {
              "id": 59609,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9353:0:110"
            },
            "scope": 59997,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59870,
            "nodeType": "FunctionDefinition",
            "src": "12947:4839:110",
            "nodes": [],
            "body": {
              "id": 59869,
              "nodeType": "Block",
              "src": "13049:4737:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 59738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 59735,
                          "name": "l2Sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59323,
                          "src": "13315:8:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 59736,
                            "name": "Constants",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69571,
                            "src": "13327:9:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$",
                              "typeString": "type(library Constants)"
                            }
                          },
                          "id": 59737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "DEFAULT_L2_SENDER",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 69529,
                          "src": "13327:27:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "13315:39:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a2063616e206f6e6c792074726967676572206f6e65207769746864726177616c20706572207472616e73616374696f6e",
                        "id": 59739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13356:65:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b",
                          "typeString": "literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\""
                        },
                        "value": "OptimismPortal: can only trigger one withdrawal per transaction"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b",
                          "typeString": "literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\""
                        }
                      ],
                      "id": 59734,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13294:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13294:137:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59741,
                  "nodeType": "ExpressionStatement",
                  "src": "13294:137:110"
                },
                {
                  "assignments": [
                    59743
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59743,
                      "mutability": "mutable",
                      "name": "withdrawalHash",
                      "nameLocation": "13522:14:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59869,
                      "src": "13514:22:110",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 59742,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13514:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59748,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59746,
                        "name": "_tx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59729,
                        "src": "13562:3:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                          "typeString": "struct Types.WithdrawalTransaction memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                          "typeString": "struct Types.WithdrawalTransaction memory"
                        }
                      ],
                      "expression": {
                        "id": 59744,
                        "name": "Hashing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70279,
                        "src": "13539:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Hashing_$70279_$",
                          "typeString": "type(library Hashing)"
                        }
                      },
                      "id": 59745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hashWithdrawal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70254,
                      "src": "13539:22:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_WithdrawalTransaction_$70594_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)"
                      }
                    },
                    "id": 59747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13539:27:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13514:52:110"
                },
                {
                  "assignments": [
                    59751
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59751,
                      "mutability": "mutable",
                      "name": "provenWithdrawal",
                      "nameLocation": "13600:16:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59869,
                      "src": "13576:40:110",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                        "typeString": "struct OptimismPortal.ProvenWithdrawal"
                      },
                      "typeName": {
                        "id": 59750,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 59749,
                          "name": "ProvenWithdrawal",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 59312,
                          "src": "13576:16:110"
                        },
                        "referencedDeclaration": 59312,
                        "src": "13576:16:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage_ptr",
                          "typeString": "struct OptimismPortal.ProvenWithdrawal"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59755,
                  "initialValue": {
                    "baseExpression": {
                      "id": 59752,
                      "name": "provenWithdrawals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59334,
                      "src": "13619:17:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$",
                        "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)"
                      }
                    },
                    "id": 59754,
                    "indexExpression": {
                      "id": 59753,
                      "name": "withdrawalHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59743,
                      "src": "13637:14:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13619:33:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage",
                      "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13576:76:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 59760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 59757,
                            "name": "provenWithdrawal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59751,
                            "src": "13902:16:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                              "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                            }
                          },
                          "id": 59758,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 59309,
                          "src": "13902:26:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 59759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13932:1:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "13902:31:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e6f74206265656e2070726f76656e20796574",
                        "id": 59761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13935:52:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bc94f9f4f2ecd47ddd807efca122bcc34325481f7fe9d60687e25c709aff1610",
                          "typeString": "literal_string \"OptimismPortal: withdrawal has not been proven yet\""
                        },
                        "value": "OptimismPortal: withdrawal has not been proven yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bc94f9f4f2ecd47ddd807efca122bcc34325481f7fe9d60687e25c709aff1610",
                          "typeString": "literal_string \"OptimismPortal: withdrawal has not been proven yet\""
                        }
                      ],
                      "id": 59756,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13894:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13894:94:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59763,
                  "nodeType": "ExpressionStatement",
                  "src": "13894:94:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 59770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 59765,
                            "name": "provenWithdrawal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59751,
                            "src": "14275:16:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                              "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                            }
                          },
                          "id": 59766,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 59309,
                          "src": "14275:26:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 59767,
                              "name": "l2Oracle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59341,
                              "src": "14305:8:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                                "typeString": "contract L2OutputOracle"
                              }
                            },
                            "id": 59768,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "startingTimestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 58789,
                            "src": "14305:26:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 59769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14305:28:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14275:58:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657374616d70206c657373207468616e204c32204f7261636c65207374617274696e672074696d657374616d70",
                        "id": 59771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14347:77:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c7c78dd7f8d5d79f2ff5ac1a4442209661a78fffa24392f88331b760a60bedd",
                          "typeString": "literal_string \"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp\""
                        },
                        "value": "OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c7c78dd7f8d5d79f2ff5ac1a4442209661a78fffa24392f88331b760a60bedd",
                          "typeString": "literal_string \"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp\""
                        }
                      ],
                      "id": 59764,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14254:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14254:180:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59773,
                  "nodeType": "ExpressionStatement",
                  "src": "14254:180:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 59776,
                              "name": "provenWithdrawal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59751,
                              "src": "14853:16:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                                "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                              }
                            },
                            "id": 59777,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59309,
                            "src": "14853:26:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "id": 59775,
                          "name": "_isFinalizationPeriodElapsed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59996,
                          "src": "14824:28:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 59778,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14824:56:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a2070726f76656e207769746864726177616c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c6170736564",
                        "id": 59779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14894:71:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_98a66ca0d4a8e5a839585f0aa5b4b8fc94a946382443fc5580ee1ed6e6237f70",
                          "typeString": "literal_string \"OptimismPortal: proven withdrawal finalization period has not elapsed\""
                        },
                        "value": "OptimismPortal: proven withdrawal finalization period has not elapsed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_98a66ca0d4a8e5a839585f0aa5b4b8fc94a946382443fc5580ee1ed6e6237f70",
                          "typeString": "literal_string \"OptimismPortal: proven withdrawal finalization period has not elapsed\""
                        }
                      ],
                      "id": 59774,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14803:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14803:172:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59781,
                  "nodeType": "ExpressionStatement",
                  "src": "14803:172:110"
                },
                {
                  "assignments": [
                    59786
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59786,
                      "mutability": "mutable",
                      "name": "proposal",
                      "nameLocation": "15174:8:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59869,
                      "src": "15146:36:110",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr",
                        "typeString": "struct Types.OutputProposal"
                      },
                      "typeName": {
                        "id": 59785,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 59784,
                          "name": "Types.OutputProposal",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 70553,
                          "src": "15146:20:110"
                        },
                        "referencedDeclaration": 70553,
                        "src": "15146:20:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OutputProposal_$70553_storage_ptr",
                          "typeString": "struct Types.OutputProposal"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59792,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59789,
                          "name": "provenWithdrawal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59751,
                          "src": "15206:16:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                            "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                          }
                        },
                        "id": 59790,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "l2OutputIndex",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 59311,
                        "src": "15206:30:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "id": 59787,
                        "name": "l2Oracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59341,
                        "src": "15185:8:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                          "typeString": "contract L2OutputOracle"
                        }
                      },
                      "id": 59788,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getL2Output",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59112,
                      "src": "15185:20:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$",
                        "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)"
                      }
                    },
                    "id": 59791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15185:52:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr",
                      "typeString": "struct Types.OutputProposal memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15146:91:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 59798,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 59794,
                            "name": "proposal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59786,
                            "src": "15525:8:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr",
                              "typeString": "struct Types.OutputProposal memory"
                            }
                          },
                          "id": 59795,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "outputRoot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 70548,
                          "src": "15525:19:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 59796,
                            "name": "provenWithdrawal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59751,
                            "src": "15548:16:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr",
                              "typeString": "struct OptimismPortal.ProvenWithdrawal memory"
                            }
                          },
                          "id": 59797,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "outputRoot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 59307,
                          "src": "15548:27:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "15525:50:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f76656e206973206e6f74207468652073616d652061732063757272656e74206f757470757420726f6f74",
                        "id": 59799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15589:75:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2bee9e90a055fc3fdea28727a1d039ffb281ae00c8962ca3262d0dabb187a280",
                          "typeString": "literal_string \"OptimismPortal: output root proven is not the same as current output root\""
                        },
                        "value": "OptimismPortal: output root proven is not the same as current output root"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2bee9e90a055fc3fdea28727a1d039ffb281ae00c8962ca3262d0dabb187a280",
                          "typeString": "literal_string \"OptimismPortal: output root proven is not the same as current output root\""
                        }
                      ],
                      "id": 59793,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15504:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15504:170:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59801,
                  "nodeType": "ExpressionStatement",
                  "src": "15504:170:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 59804,
                              "name": "proposal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59786,
                              "src": "15802:8:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr",
                                "typeString": "struct Types.OutputProposal memory"
                              }
                            },
                            "id": 59805,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 70550,
                            "src": "15802:18:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "id": 59803,
                          "name": "_isFinalizationPeriodElapsed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59996,
                          "src": "15773:28:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 59806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15773:48:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c6170736564",
                        "id": 59807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15835:69:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e2e53e5f2e5c146290963511529e48aa3e1570a42475ccc1fb3eba5190175c74",
                          "typeString": "literal_string \"OptimismPortal: output proposal finalization period has not elapsed\""
                        },
                        "value": "OptimismPortal: output proposal finalization period has not elapsed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e2e53e5f2e5c146290963511529e48aa3e1570a42475ccc1fb3eba5190175c74",
                          "typeString": "literal_string \"OptimismPortal: output proposal finalization period has not elapsed\""
                        }
                      ],
                      "id": 59802,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15752:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15752:162:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59809,
                  "nodeType": "ExpressionStatement",
                  "src": "15752:162:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 59815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 59811,
                            "name": "finalizedWithdrawals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59328,
                            "src": "16030:20:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 59813,
                          "indexExpression": {
                            "id": 59812,
                            "name": "withdrawalHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59743,
                            "src": "16051:14:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16030:36:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "66616c7365",
                          "id": 59814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16070:5:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "16030:45:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c2068617320616c7265616479206265656e2066696e616c697a6564",
                        "id": 59816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16077:55:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485",
                          "typeString": "literal_string \"OptimismPortal: withdrawal has already been finalized\""
                        },
                        "value": "OptimismPortal: withdrawal has already been finalized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485",
                          "typeString": "literal_string \"OptimismPortal: withdrawal has already been finalized\""
                        }
                      ],
                      "id": 59810,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16022:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16022:111:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59818,
                  "nodeType": "ExpressionStatement",
                  "src": "16022:111:110"
                },
                {
                  "expression": {
                    "id": 59823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 59819,
                        "name": "finalizedWithdrawals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59328,
                        "src": "16213:20:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 59821,
                      "indexExpression": {
                        "id": 59820,
                        "name": "withdrawalHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59743,
                        "src": "16234:14:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16213:36:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 59822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16252:4:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "16213:43:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59824,
                  "nodeType": "ExpressionStatement",
                  "src": "16213:43:110"
                },
                {
                  "expression": {
                    "id": 59828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59825,
                      "name": "l2Sender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59323,
                      "src": "16350:8:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 59826,
                        "name": "_tx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59729,
                        "src": "16361:3:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                          "typeString": "struct Types.WithdrawalTransaction memory"
                        }
                      },
                      "id": 59827,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70585,
                      "src": "16361:10:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16350:21:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 59829,
                  "nodeType": "ExpressionStatement",
                  "src": "16350:21:110"
                },
                {
                  "assignments": [
                    59831
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59831,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "16996:7:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59869,
                      "src": "16991:12:110",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 59830,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16991:4:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59843,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59834,
                          "name": "_tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59729,
                          "src": "17030:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                            "typeString": "struct Types.WithdrawalTransaction memory"
                          }
                        },
                        "id": 59835,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "target",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70587,
                        "src": "17030:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 59836,
                          "name": "_tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59729,
                          "src": "17042:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                            "typeString": "struct Types.WithdrawalTransaction memory"
                          }
                        },
                        "id": 59837,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gasLimit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70591,
                        "src": "17042:12:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 59838,
                          "name": "_tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59729,
                          "src": "17056:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                            "typeString": "struct Types.WithdrawalTransaction memory"
                          }
                        },
                        "id": 59839,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70589,
                        "src": "17056:9:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 59840,
                          "name": "_tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59729,
                          "src": "17067:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                            "typeString": "struct Types.WithdrawalTransaction memory"
                          }
                        },
                        "id": 59841,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70593,
                        "src": "17067:8:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 59832,
                        "name": "SafeCall",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70479,
                        "src": "17006:8:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeCall_$70479_$",
                          "typeString": "type(library SafeCall)"
                        }
                      },
                      "id": 59833,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "callWithMinGas",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70478,
                      "src": "17006:23:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,uint256,uint256,bytes memory) returns (bool)"
                      }
                    },
                    "id": 59842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17006:70:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16991:85:110"
                },
                {
                  "expression": {
                    "id": 59847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59844,
                      "name": "l2Sender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59323,
                      "src": "17144:8:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 59845,
                        "name": "Constants",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69571,
                        "src": "17155:9:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$",
                          "typeString": "type(library Constants)"
                        }
                      },
                      "id": 59846,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "DEFAULT_L2_SENDER",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 69529,
                      "src": "17155:27:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17144:38:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 59848,
                  "nodeType": "ExpressionStatement",
                  "src": "17144:38:110"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 59850,
                        "name": "withdrawalHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59743,
                        "src": "17361:14:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 59851,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59831,
                        "src": "17377:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 59849,
                      "name": "WithdrawalFinalized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59375,
                      "src": "17341:19:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (bytes32,bool)"
                      }
                    },
                    "id": 59852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17341:44:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59853,
                  "nodeType": "EmitStatement",
                  "src": "17336:49:110"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 59862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 59856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 59854,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59831,
                        "src": "17649:7:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "66616c7365",
                        "id": 59855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17660:5:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      "src": "17649:16:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 59861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 59857,
                          "name": "tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -26,
                          "src": "17669:2:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_transaction",
                            "typeString": "tx"
                          }
                        },
                        "id": 59858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "origin",
                        "nodeType": "MemberAccess",
                        "src": "17669:9:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 59859,
                          "name": "Constants",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 69571,
                          "src": "17682:9:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$",
                            "typeString": "type(library Constants)"
                          }
                        },
                        "id": 59860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ESTIMATION_ADDRESS",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 69525,
                        "src": "17682:28:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "17669:41:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "17649:61:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59868,
                  "nodeType": "IfStatement",
                  "src": "17645:135:110",
                  "trueBody": {
                    "id": 59867,
                    "nodeType": "Block",
                    "src": "17712:68:110",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6564",
                              "id": 59864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17733:35:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a0543a16ebb14b11743ebd89913eeb3a89aab6ee2824b60e6e93ee3d5b6c55bb",
                                "typeString": "literal_string \"OptimismPortal: withdrawal failed\""
                              },
                              "value": "OptimismPortal: withdrawal failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_a0543a16ebb14b11743ebd89913eeb3a89aab6ee2824b60e6e93ee3d5b6c55bb",
                                "typeString": "literal_string \"OptimismPortal: withdrawal failed\""
                              }
                            ],
                            "id": 59863,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "17726:6:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 59865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17726:43:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59866,
                        "nodeType": "ExpressionStatement",
                        "src": "17726:43:110"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 59726,
              "nodeType": "StructuredDocumentation",
              "src": "12840:102:110",
              "text": "@notice Finalizes a withdrawal transaction.\n @param _tx Withdrawal transaction to finalize."
            },
            "functionSelector": "8c3152e9",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 59732,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 59731,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 59397,
                  "src": "13035:13:110"
                },
                "nodeType": "ModifierInvocation",
                "src": "13035:13:110"
              }
            ],
            "name": "finalizeWithdrawalTransaction",
            "nameLocation": "12956:29:110",
            "parameters": {
              "id": 59730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59729,
                  "mutability": "mutable",
                  "name": "_tx",
                  "nameLocation": "13021:3:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59870,
                  "src": "12986:38:110",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr",
                    "typeString": "struct Types.WithdrawalTransaction"
                  },
                  "typeName": {
                    "id": 59728,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 59727,
                      "name": "Types.WithdrawalTransaction",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 70594,
                      "src": "12986:27:110"
                    },
                    "referencedDeclaration": 70594,
                    "src": "12986:27:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_storage_ptr",
                      "typeString": "struct Types.WithdrawalTransaction"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12985:40:110"
            },
            "returnParameters": {
              "id": 59733,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13049:0:110"
            },
            "scope": 59997,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59961,
            "nodeType": "FunctionDefinition",
            "src": "18516:1971:110",
            "nodes": [],
            "body": {
              "id": 59960,
              "nodeType": "Block",
              "src": "18737:1750:110",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 59887,
                    "name": "_isCreation",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59879,
                    "src": "18876:11:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59899,
                  "nodeType": "IfStatement",
                  "src": "18872:136:110",
                  "trueBody": {
                    "id": 59898,
                    "nodeType": "Block",
                    "src": "18889:119:110",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 59894,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 59889,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 59873,
                                "src": "18911:3:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 59892,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18926:1:110",
                                    "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": 59891,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "18918:7:110",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 59890,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18918:7:110",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 59893,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18918:10:110",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "18911:17:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646472657373283029207768656e206372656174696e67206120636f6e7472616374",
                              "id": 59895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18930:66:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_35a8c36d4f7649c8575025c089af07faab9c54040307e9d6ec8463fe4050a639",
                                "typeString": "literal_string \"OptimismPortal: must send to address(0) when creating a contract\""
                              },
                              "value": "OptimismPortal: must send to address(0) when creating a contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_35a8c36d4f7649c8575025c089af07faab9c54040307e9d6ec8463fe4050a639",
                                "typeString": "literal_string \"OptimismPortal: must send to address(0) when creating a contract\""
                              }
                            ],
                            "id": 59888,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "18903:7:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 59896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18903:94:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59897,
                        "nodeType": "ExpressionStatement",
                        "src": "18903:94:110"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 59909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 59901,
                          "name": "_gasLimit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59877,
                          "src": "19163:9:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 59905,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59881,
                                    "src": "19199:5:110",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 59906,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "19199:12:110",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 59904,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "19192:6:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint64_$",
                                  "typeString": "type(uint64)"
                                },
                                "typeName": {
                                  "id": 59903,
                                  "name": "uint64",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "19192:6:110",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 59907,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19192:20:110",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 59902,
                            "name": "minimumGasLimit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59557,
                            "src": "19176:15:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint64_$returns$_t_uint64_$",
                              "typeString": "function (uint64) pure returns (uint64)"
                            }
                          },
                          "id": 59908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19176:37:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "19163:50:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d616c6c",
                        "id": 59910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19215:37:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0a0c886a0c5bbb9f3e1be0cff5d8eb64eb65c2a072ac278a98f80049a2d6c3f8",
                          "typeString": "literal_string \"OptimismPortal: gas limit too small\""
                        },
                        "value": "OptimismPortal: gas limit too small"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0a0c886a0c5bbb9f3e1be0cff5d8eb64eb65c2a072ac278a98f80049a2d6c3f8",
                          "typeString": "literal_string \"OptimismPortal: gas limit too small\""
                        }
                      ],
                      "id": 59900,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19155:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19155:98:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59912,
                  "nodeType": "ExpressionStatement",
                  "src": "19155:98:110"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 59917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 59914,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59881,
                            "src": "19632:5:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 59915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "19632:12:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "hexValue": "3132305f303030",
                          "id": 59916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19648:7:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_120000_by_1",
                            "typeString": "int_const 120000"
                          },
                          "value": "120_000"
                        },
                        "src": "19632:23:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765",
                        "id": 59918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19657:32:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed1d4c6d62337124a330de9c9e42dcf809033e5ae909544279fbaee2e389020b",
                          "typeString": "literal_string \"OptimismPortal: data too large\""
                        },
                        "value": "OptimismPortal: data too large"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed1d4c6d62337124a330de9c9e42dcf809033e5ae909544279fbaee2e389020b",
                          "typeString": "literal_string \"OptimismPortal: data too large\""
                        }
                      ],
                      "id": 59913,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19624:7:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 59919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19624:66:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59920,
                  "nodeType": "ExpressionStatement",
                  "src": "19624:66:110"
                },
                {
                  "assignments": [
                    59922
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59922,
                      "mutability": "mutable",
                      "name": "from",
                      "nameLocation": "19789:4:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59960,
                      "src": "19781:12:110",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59921,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "19781:7:110",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59925,
                  "initialValue": {
                    "expression": {
                      "id": 59923,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "19796:3:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 59924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "19796:10:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19781:25:110"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 59930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 59926,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "19820:3:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 59927,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "19820:10:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 59928,
                        "name": "tx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -26,
                        "src": "19834:2:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_transaction",
                          "typeString": "tx"
                        }
                      },
                      "id": 59929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "origin",
                      "nodeType": "MemberAccess",
                      "src": "19834:9:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19820:23:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59940,
                  "nodeType": "IfStatement",
                  "src": "19816:108:110",
                  "trueBody": {
                    "id": 59939,
                    "nodeType": "Block",
                    "src": "19845:79:110",
                    "statements": [
                      {
                        "expression": {
                          "id": 59937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 59931,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59922,
                            "src": "19859:4:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 59934,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "19902:3:110",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 59935,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "19902:10:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 59932,
                                "name": "AddressAliasHelper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 78127,
                                "src": "19866:18:110",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_AddressAliasHelper_$78127_$",
                                  "typeString": "type(library AddressAliasHelper)"
                                }
                              },
                              "id": 59933,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "applyL1ToL2Alias",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 78104,
                              "src": "19866:35:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$",
                                "typeString": "function (address) pure returns (address)"
                              }
                            },
                            "id": 59936,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19866:47:110",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "19859:54:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 59938,
                        "nodeType": "ExpressionStatement",
                        "src": "19859:54:110"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    59942
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59942,
                      "mutability": "mutable",
                      "name": "opaqueData",
                      "nameLocation": "20194:10:110",
                      "nodeType": "VariableDeclaration",
                      "scope": 59960,
                      "src": "20181:23:110",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 59941,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "20181:5:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59952,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59945,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "20224:3:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "src": "20224:9:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 59947,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59875,
                        "src": "20235:6:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 59948,
                        "name": "_gasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59877,
                        "src": "20243:9:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 59949,
                        "name": "_isCreation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59879,
                        "src": "20254:11:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "id": 59950,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59881,
                        "src": "20267:5:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 59943,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "20207:3:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 59944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "20207:16:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 59951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20207:66:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20181:92:110"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 59954,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59922,
                        "src": "20441:4:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 59955,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59873,
                        "src": "20447:3:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 59956,
                        "name": "DEPOSIT_VERSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59316,
                        "src": "20452:15:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 59957,
                        "name": "opaqueData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59942,
                        "src": "20469:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 59953,
                      "name": "TransactionDeposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59359,
                      "src": "20420:20:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 59958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20420:60:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59959,
                  "nodeType": "EmitStatement",
                  "src": "20415:65:110"
                }
              ]
            },
            "documentation": {
              "id": 59871,
              "nodeType": "StructuredDocumentation",
              "src": "17792:719:110",
              "text": "@notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in\n         deriving deposit transactions. Note that if a deposit is made by a contract, its\n         address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider\n         using the CrossDomainMessenger contracts for a simpler developer experience.\n @param _to         Target address on L2.\n @param _value      ETH value to send to the recipient.\n @param _gasLimit   Amount of L2 gas to purchase by burning gas on L1.\n @param _isCreation Whether or not the transaction is a contract creation.\n @param _data       Data to trigger the recipient with."
            },
            "functionSelector": "e9e05c42",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 59884,
                    "name": "_gasLimit",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59877,
                    "src": "18722:9:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 59885,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 59883,
                  "name": "metered",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 60309,
                  "src": "18714:7:110"
                },
                "nodeType": "ModifierInvocation",
                "src": "18714:18:110"
              }
            ],
            "name": "depositTransaction",
            "nameLocation": "18525:18:110",
            "parameters": {
              "id": 59882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59873,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "18561:3:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59961,
                  "src": "18553:11:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18553:7:110",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59875,
                  "mutability": "mutable",
                  "name": "_value",
                  "nameLocation": "18582:6:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59961,
                  "src": "18574:14:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59874,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18574:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59877,
                  "mutability": "mutable",
                  "name": "_gasLimit",
                  "nameLocation": "18605:9:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59961,
                  "src": "18598:16:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 59876,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18598:6:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59879,
                  "mutability": "mutable",
                  "name": "_isCreation",
                  "nameLocation": "18629:11:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59961,
                  "src": "18624:16:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 59878,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18624:4:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59881,
                  "mutability": "mutable",
                  "name": "_data",
                  "nameLocation": "18663:5:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59961,
                  "src": "18650:18:110",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 59880,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "18650:5:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18543:131:110"
            },
            "returnParameters": {
              "id": 59886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18737:0:110"
            },
            "scope": 59997,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59978,
            "nodeType": "FunctionDefinition",
            "src": "20785:180:110",
            "nodes": [],
            "body": {
              "id": 59977,
              "nodeType": "Block",
              "src": "20865:100:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 59972,
                              "name": "_l2OutputIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59964,
                              "src": "20932:14:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 59970,
                              "name": "l2Oracle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59341,
                              "src": "20911:8:110",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                                "typeString": "contract L2OutputOracle"
                              }
                            },
                            "id": 59971,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getL2Output",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59112,
                            "src": "20911:20:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$",
                              "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)"
                            }
                          },
                          "id": 59973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20911:36:110",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr",
                            "typeString": "struct Types.OutputProposal memory"
                          }
                        },
                        "id": 59974,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70550,
                        "src": "20911:46:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 59969,
                      "name": "_isFinalizationPeriodElapsed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59996,
                      "src": "20882:28:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view returns (bool)"
                      }
                    },
                    "id": 59975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20882:76:110",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 59968,
                  "id": 59976,
                  "nodeType": "Return",
                  "src": "20875:83:110"
                }
              ]
            },
            "documentation": {
              "id": 59962,
              "nodeType": "StructuredDocumentation",
              "src": "20493:287:110",
              "text": "@notice Determine if a given output is finalized.\n         Reverts if the call to L2_ORACLE.getL2Output reverts.\n         Returns a boolean otherwise.\n @param _l2OutputIndex Index of the L2 output to check.\n @return Whether or not the output is finalized."
            },
            "functionSelector": "6dbffb78",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOutputFinalized",
            "nameLocation": "20794:17:110",
            "parameters": {
              "id": 59965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59964,
                  "mutability": "mutable",
                  "name": "_l2OutputIndex",
                  "nameLocation": "20820:14:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59978,
                  "src": "20812:22:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20812:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20811:24:110"
            },
            "returnParameters": {
              "id": 59968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59967,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59978,
                  "src": "20859:4:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 59966,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20859:4:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20858:6:110"
            },
            "scope": 59997,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59996,
            "nodeType": "FunctionDefinition",
            "src": "21218:180:110",
            "nodes": [],
            "body": {
              "id": 59995,
              "nodeType": "Block",
              "src": "21305:93:110",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 59993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 59986,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "21322:5:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 59987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "21322:15:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 59992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 59988,
                        "name": "_timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59981,
                        "src": "21340:10:110",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 59989,
                            "name": "l2Oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59341,
                            "src": "21353:8:110",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_L2OutputOracle_$59272",
                              "typeString": "contract L2OutputOracle"
                            }
                          },
                          "id": 59990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "FINALIZATION_PERIOD_SECONDS",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 58783,
                          "src": "21353:36:110",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 59991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21353:38:110",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21340:51:110",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21322:69:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 59985,
                  "id": 59994,
                  "nodeType": "Return",
                  "src": "21315:76:110"
                }
              ]
            },
            "documentation": {
              "id": 59979,
              "nodeType": "StructuredDocumentation",
              "src": "20971:242:110",
              "text": "@notice Determines whether the finalization period has elapsed with respect to\n         the provided block timestamp.\n @param _timestamp Timestamp to check.\n @return Whether or not the finalization period has elapsed."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isFinalizationPeriodElapsed",
            "nameLocation": "21227:28:110",
            "parameters": {
              "id": 59982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59981,
                  "mutability": "mutable",
                  "name": "_timestamp",
                  "nameLocation": "21264:10:110",
                  "nodeType": "VariableDeclaration",
                  "scope": 59996,
                  "src": "21256:18:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59980,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21256:7:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21255:20:110"
            },
            "returnParameters": {
              "id": 59985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59984,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59996,
                  "src": "21299:4:110",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 59983,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21299:4:110",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21298:6:110"
            },
            "scope": 59997,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 59300,
              "name": "Initializable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 32244,
              "src": "1162:13:110"
            },
            "id": 59301,
            "nodeType": "InheritanceSpecifier",
            "src": "1162:13:110"
          },
          {
            "baseName": {
              "id": 59302,
              "name": "ResourceMetering",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 60599,
              "src": "1177:16:110"
            },
            "id": 59303,
            "nodeType": "InheritanceSpecifier",
            "src": "1177:16:110"
          },
          {
            "baseName": {
              "id": 59304,
              "name": "ISemver",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 75669,
              "src": "1195:7:110"
            },
            "id": 59305,
            "nodeType": "InheritanceSpecifier",
            "src": "1195:7:110"
          }
        ],
        "canonicalName": "OptimismPortal",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 59299,
          "nodeType": "StructuredDocumentation",
          "src": "797:338:110",
          "text": "@custom:proxied\n @title OptimismPortal\n @notice The OptimismPortal is a low-level contract responsible for passing messages between L1\n         and L2. Messages sent directly to the OptimismPortal have no form of replayability.\n         Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          59997,
          75669,
          60599,
          32244
        ],
        "name": "OptimismPortal",
        "nameLocation": "1144:14:110",
        "scope": 59998,
        "usedErrors": []
      }
    ],
    "license": "MIT"
  },
  "id": 110
}