{
  "abi": [
    {
      "type": "constructor",
      "inputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "receive",
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "GUARDIAN",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "L2_ORACLE",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "contract L2OutputOracle"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "SYSTEM_CONFIG",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "contract SystemConfig"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "depositTransaction",
      "inputs": [
        {
          "name": "_to",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "_mint",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "_value",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "_gasLimit",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "_isCreation",
          "type": "bool",
          "internalType": "bool"
        },
        {
          "name": "_data",
          "type": "bytes",
          "internalType": "bytes"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "depositedAmount",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "donateETH",
      "inputs": [],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "finalizeWithdrawalTransaction",
      "inputs": [
        {
          "name": "_tx",
          "type": "tuple",
          "internalType": "struct Types.WithdrawalTransaction",
          "components": [
            {
              "name": "nonce",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "target",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "gasLimit",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "data",
              "type": "bytes",
              "internalType": "bytes"
            }
          ]
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "finalizedWithdrawals",
      "inputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "bool",
          "internalType": "bool"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "guardian",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "initialize",
      "inputs": [
        {
          "name": "_l2Oracle",
          "type": "address",
          "internalType": "contract L2OutputOracle"
        },
        {
          "name": "_systemConfig",
          "type": "address",
          "internalType": "contract SystemConfig"
        },
        {
          "name": "_superchainConfig",
          "type": "address",
          "internalType": "contract SuperchainConfig"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "isOutputFinalized",
      "inputs": [
        {
          "name": "_l2OutputIndex",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "bool",
          "internalType": "bool"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "l2Oracle",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "contract L2OutputOracle"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "l2Sender",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "minimumGasLimit",
      "inputs": [
        {
          "name": "_byteCount",
          "type": "uint64",
          "internalType": "uint64"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "uint64",
          "internalType": "uint64"
        }
      ],
      "stateMutability": "pure"
    },
    {
      "type": "function",
      "name": "nativeTokenAddress",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "params",
      "inputs": [],
      "outputs": [
        {
          "name": "prevBaseFee",
          "type": "uint128",
          "internalType": "uint128"
        },
        {
          "name": "prevBoughtGas",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "prevBlockNum",
          "type": "uint64",
          "internalType": "uint64"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "paused",
      "inputs": [],
      "outputs": [
        {
          "name": "paused_",
          "type": "bool",
          "internalType": "bool"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "proveWithdrawalTransaction",
      "inputs": [
        {
          "name": "_tx",
          "type": "tuple",
          "internalType": "struct Types.WithdrawalTransaction",
          "components": [
            {
              "name": "nonce",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "sender",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "target",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "value",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "gasLimit",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "data",
              "type": "bytes",
              "internalType": "bytes"
            }
          ]
        },
        {
          "name": "_l2OutputIndex",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "_outputRootProof",
          "type": "tuple",
          "internalType": "struct Types.OutputRootProof",
          "components": [
            {
              "name": "version",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "stateRoot",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "messagePasserStorageRoot",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "latestBlockhash",
              "type": "bytes32",
              "internalType": "bytes32"
            }
          ]
        },
        {
          "name": "_withdrawalProof",
          "type": "bytes[]",
          "internalType": "bytes[]"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "provenWithdrawals",
      "inputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "outputs": [
        {
          "name": "outputRoot",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "timestamp",
          "type": "uint128",
          "internalType": "uint128"
        },
        {
          "name": "l2OutputIndex",
          "type": "uint128",
          "internalType": "uint128"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "spacer_native_token_address",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "superchainConfig",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "contract SuperchainConfig"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "systemConfig",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "contract SystemConfig"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "version",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "string",
          "internalType": "string"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "event",
      "name": "Initialized",
      "inputs": [
        {
          "name": "version",
          "type": "uint8",
          "indexed": false,
          "internalType": "uint8"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "TransactionDeposited",
      "inputs": [
        {
          "name": "from",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "to",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "version",
          "type": "uint256",
          "indexed": true,
          "internalType": "uint256"
        },
        {
          "name": "opaqueData",
          "type": "bytes",
          "indexed": false,
          "internalType": "bytes"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "WithdrawalFinalized",
      "inputs": [
        {
          "name": "withdrawalHash",
          "type": "bytes32",
          "indexed": true,
          "internalType": "bytes32"
        },
        {
          "name": "success",
          "type": "bool",
          "indexed": false,
          "internalType": "bool"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "WithdrawalProven",
      "inputs": [
        {
          "name": "withdrawalHash",
          "type": "bytes32",
          "indexed": true,
          "internalType": "bytes32"
        },
        {
          "name": "from",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "to",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        }
      ],
      "anonymous": false
    }
  ],
  "address": "0x5a6E54511b6BaFAE6381e2bbcb62A00DFb665eE9",
  "args": [],
  "bytecode": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b62000227565b600054600390610100900460ff1615801562000049575060005460ff8083169116105b620000b25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100908117909155603680546001600160a01b038088166001600160a01b03199283161790925560378054878416921691909117905560358054858316909302610100600160a81b031990931692909217909155603254166200013357603280546001600160a01b03191661dead1790555b6200013d62000184565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b600054610100900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000a9565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b615cdf80620002376000396000f3fe6080604052600436106101835760003560e01c80638b4c40b0116100d6578063b7d823741161007f578063cff0ab9611610059578063cff0ab9614610514578063e965084c146105b5578063f04987501461064157600080fd5b8063b7d82374146104a7578063b9e55958146104d4578063c0c53b8b146104f457600080fd5b80639bf62d82116100b05780639bf62d8214610411578063a14238e71461043e578063a35d99df1461046e57600080fd5b80638b4c40b0146102fd5780638c3152e9146103c45780639b5f694a146103e457600080fd5b80634870496f116101385780635c975abb116101125780635c975abb1461036a5780636dbffb781461038f578063724c184c146103af57600080fd5b80634870496f146102dd5780634d0047ee146102ff57806354fd4d501461031457600080fd5b806333d7e2bd1161016957806333d7e2bd1461026957806335e80ab314610296578063452a9320146102c857600080fd5b80621c2ff6146101f45780631d01364c1461024557600080fd5b366101ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f6e6c7920616c6c6f77206e617469766520746f6b656e00000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561020057600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561025157600080fd5b5061025b60395481565b60405190815260200161023c565b34801561027557600080fd5b5060375461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102a257600080fd5b5060355461021b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d457600080fd5b5061021b61066c565b3480156102e957600080fd5b506102fd6102f836600461525f565b610704565b005b34801561030b57600080fd5b5061021b610d32565b34801561032057600080fd5b5061035d6040518060400160405280600581526020017f322e352e3000000000000000000000000000000000000000000000000000000081525081565b60405161023c91906153b1565b34801561037657600080fd5b5061037f610da2565b604051901515815260200161023c565b34801561039b57600080fd5b5061037f6103aa3660046153c4565b610e35565b3480156103bb57600080fd5b5061021b610ef0565b3480156103d057600080fd5b506102fd6103df3660046153dd565b610efa565b3480156103f057600080fd5b5060365461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041d57600080fd5b5060325461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044a57600080fd5b5061037f6104593660046153c4565b60336020526000908152604090205460ff1681565b34801561047a57600080fd5b5061048e61048936600461542f565b611b05565b60405167ffffffffffffffff909116815260200161023c565b3480156104b357600080fd5b5060385461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e057600080fd5b506102fd6104ef366004615458565b611b1e565b34801561050057600080fd5b506102fd61050f366004615514565b611b37565b34801561052057600080fd5b5060015461057c906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161023c565b3480156105c157600080fd5b506106136105d03660046153c4565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161023c565b34801561064d57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff1661021b565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff919061555f565b905090565b61070c610da2565b15610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016101e6565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016101e6565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c6919061559c565b5190506108e06108db36869003860186615601565b611d42565b811461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016101e6565b600061097987611d9e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8f5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b919061559c565b5114155b610b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016101e6565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610be49101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bda888a615667565b8a60400135611dce565b610c70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016101e6565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa1580156106db573d6000803e3d6000fd5b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff91906156eb565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610eea9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061559c565b602001516fffffffffffffffffffffffffffffffff16611df2565b92915050565b60006106ff61066c565b610f02610da2565b15610f69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016101e6565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016101e6565b600061101d82611d9e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611108576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e20796574000000000000000000000000000060648201526084016101e6565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111999190615708565b81602001516fffffffffffffffffffffffffffffffff161015611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016101e6565b61128381602001516fffffffffffffffffffffffffffffffff16611df2565b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016101e6565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e0919061559c565b825181519192501461149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016101e6565b6114b981602001516fffffffffffffffffffffffffffffffff16611df2565b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016101e6565b60008381526033602052604090205460ff161561160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016101e6565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa15801561167a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169e919061555f565b90508073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d20506f7274616c3a2063616e6e6f74206d616b652061206460448201527f69726563742063616c6c20746f206e617469766520746f6b656e20636f6e747260648201527f6163740000000000000000000000000000000000000000000000000000000000608482015260a4016101e6565b600084815260336020908152604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790556060850151156119da5760408581015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff808316602483015283169163095ea7b391839063dd62ed3e90604401602060405180830381865afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190615708565b88606001516118c49190615750565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015611934573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195891906156eb565b6119be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f7074696d69736d20617070726f7665206661696c656400000000000000000060448201526064016101e6565b8460600151603960008282546119d49190615768565b90915550505b60006119f58660400151876080015160008960a00151611e98565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915085907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611a5a90841515815260200190565b60405180910390a280158015611a705750326001145b15611afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016101e6565b505050505050565b6000611b1282601061577f565b610eea906152086157af565b611b2e3388888888888888611ef6565b50505050505050565b600054600390610100900460ff16158015611b59575060005460ff8083169116105b611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101e6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101009081179091556036805473ffffffffffffffffffffffffffffffffffffffff8088167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603780548784169216919091179055603580548583169093027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9093169290921790915560325416611cd657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611cde61227b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b60008160000151826020015183604001518460600151604051602001611d81949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611d819790969591016157db565b600080611dda8661235e565b9050611de881868686612390565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e869190615708565b611e909083615750565b421192915050565b6000806000611ea88660006123c0565b905080611ede576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b8360005a90506000603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d0047ee6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8f919061555f565b90508815611fd157611fb973ffffffffffffffffffffffffffffffffffffffff82168c308c6123de565b8860396000828254611fcb9190615750565b90915550505b851561207d5773ffffffffffffffffffffffffffffffffffffffff8a161561207d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084016101e6565b61208684611b05565b67ffffffffffffffff168767ffffffffffffffff161015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c000000000000000000000000000000000000000000000000000000000060648201526084016101e6565b6201d4c0841115612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765000060448201526064016101e6565b8a73ffffffffffffffffffffffffffffffffffffffff811632146121cd57507311110000000000000000000000000000000011118b015b60008a8a8a8a8a8a6040516020016121ea96959493929190615832565b604051602081830303815290604052905060008c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225a91906153b1565b60405180910390a450505061226f8282612479565b50505050505050505050565b600054610100900460ff16612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101e6565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6060818051906020012060405160200161237a91815260200190565b6040516020818303038152906040529050919050565b60006123b7846123a18786866127a6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261247390859061322b565b50505050565b6001546000906124af907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615768565b905060006124bb61333c565b90506000816020015160ff16826000015163ffffffff166124dc91906158ba565b9050821561261357600154600090612513908390700100000000000000000000000000000000900467ffffffffffffffff16615922565b90506000836040015160ff168361252a9190615996565b60015461254a9084906fffffffffffffffffffffffffffffffff16615996565b61255491906158ba565b6001549091506000906125a59061257e9084906fffffffffffffffffffffffffffffffff16615a52565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166133fd565b905060018611156125d4576125d161257e82876040015160ff1660018a6125cc9190615768565b61341a565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612646908490700100000000000000000000000000000000900467ffffffffffffffff166157af565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016101e6565b600154600090612755906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615ac6565b9050600061276748633b9aca0061346f565b6127719083615b03565b905060005a6127809088615768565b90508082111561279c5761279c6127978284615768565b613486565b5050505050505050565b60606000845111612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016101e6565b600061281e846134af565b9050600061282b8661359b565b905060008460405160200161284291815260200190565b60405160208183030381529060405290506000805b845181101561319b57600085828151811061287457612874615b17565b60200260200101519050845183111561290f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016101e6565b826000036129c8578051805160209182012060405161295d9261293792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6129c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016101e6565b612b1f565b805151602011612a7e57805180516020918201206040516129f29261293792910190815260200190565b6129c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016101e6565b805184516020808701919091208251919092012014612b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016101e6565b612b2b60106001615750565b81602001515103612d075784518303612c9f57612b658160200151601081518110612b5857612b58615b17565b60200260200101516135fe565b96506000875111612bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016101e6565b60018651612c069190615768565b8214612c94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016101e6565b505050505050613224565b6000858481518110612cb357612cb3615b17565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612cde57612cde615b17565b60200260200101519050612cf18161375e565b9550612cfe600186615750565b94505050613188565b600281602001515103613100576000612d1f82613783565b9050600081600081518110612d3657612d36615b17565b016020015160f81c90506000612d4d600283615b46565b612d58906002615b68565b90506000612d69848360ff166137a7565b90506000612d778a896137a7565b90506000612d8583836137dd565b905080835114612e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016101e6565b60ff851660021480612e2c575060ff85166003145b1561301b5780825114612ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016101e6565b612edb8760200151600181518110612b5857612b58615b17565b9c5060008d5111612f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016101e6565b60018c51612f7c9190615768565b881461300a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016101e6565b505050505050505050505050613224565b60ff8516158061302e575060ff85166001145b1561306d5761305a876020015160018151811061304d5761304d615b17565b602002602001015161375e565b9950613066818a615750565b98506130f5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016101e6565b505050505050613188565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016101e6565b508061319381615b8b565b915050612857565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016101e6565b9392505050565b600061328d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166138919092919063ffffffff16565b80519091501561333757808060200190518101906132ab91906156eb565b613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101e6565b505050565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156133d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff9190615be8565b600061341261340c85856138a0565b836138b0565b949350505050565b6000670de0b6b3a764000061345b61343285836158ba565b61344490670de0b6b3a7640000615922565b61345685670de0b6b3a7640000615996565b6138bf565b6134659086615996565b61341291906158ba565b60008183101561347f5781613224565b5090919050565b6000805a90505b825a6134999083615768565b1015613337576134a882615b8b565b915061348d565b80516060908067ffffffffffffffff8111156134cd576134cd61507f565b60405190808252806020026020018201604052801561351257816020015b60408051808201909152606080825260208201528152602001906001900390816134eb5790505b50915060005b8181101561359457604051806040016040528085838151811061353d5761353d615b17565b6020026020010151815260200161356c86848151811061355f5761355f615b17565b60200260200101516138f0565b81525083828151811061358157613581615b17565b6020908102919091010152600101613518565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156135f3578060011b82018184015160001a8060041c8253600f8116600183015350506001016135c5565b509295945050505050565b6060600080600061360e85613903565b91945092509050600081600181111561362957613629615c87565b146136b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016101e6565b6136c08284615750565b85511461374f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016101e6565b6123b785602001518484614370565b6060602082600001511061377a57613775826135fe565b610eea565b610eea82614404565b6060610eea6137a28360200151600081518110612b5857612b58615b17565b61359b565b6060825182106137c65750604080516020810190915260008152610eea565b61322483838486516137d89190615768565b61441a565b60008082518451106137f05782516137f3565b83515b90505b808210801561387a575082828151811061381257613812615b17565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061385157613851615b17565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561388a578160010191506137f6565b5092915050565b606061341284846000856145f2565b60008183121561347f5781613224565b600081831261347f5781613224565b6000613224670de0b6b3a7640000836138d786614788565b6138e19190615996565b6138eb91906158ba565b6149cc565b6060610eea6138fe83614c0b565b614cf4565b6000806000808460000151116139c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016101e6565b6020840151805160001a607f81116139e6576000600160009450945094505050614369565b60b78111613bf45760006139fb608083615768565b905080876000015111613ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016101e6565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613b2f57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016101e6565b5060019550935060009250614369915050565b60bf8111613f42576000613c0960b783615768565b905080876000015111613cc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016101e6565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016101e6565b600184015160088302610100031c60378111613e66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016101e6565b613e708184615750565b895111613f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016101e6565b613f30836001615750565b97509550600094506143699350505050565b60f78111614023576000613f5760c083615768565b905080876000015111614012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016101e6565b600195509350849250614369915050565b600061403060f783615768565b9050808760000151116140eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016101e6565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036141c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016101e6565b600184015160088302610100031c6037811161428d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016101e6565b6142978184615750565b89511161434c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016101e6565b614357836001615750565b97509550600194506143699350505050565b9193909250565b60608167ffffffffffffffff81111561438b5761438b61507f565b6040519080825280601f01601f1916602001820160405280156143b5576020820181803683370190505b50905081156132245760006143ca8486615750565b90506020820160005b848110156143eb5782810151828201526020016143d3565b848111156143fa576000858301525b5050509392505050565b6060610eea826020015160008460000151614370565b60608182601f011015614489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101e6565b8282840110156144f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101e6565b81830184511015614562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016101e6565b60608215801561458157604051915060008252602082016040526145e9565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156145ba5780518352602092830192016145a2565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b606082471015614684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101e6565b73ffffffffffffffffffffffffffffffffffffffff85163b614702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101e6565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161472b9190615cb6565b60006040518083038185875af1925050503d8060008114614768576040519150601f19603f3d011682016040523d82523d6000602084013e61476d565b606091505b509150915061477d828286614f56565b979650505050505050565b60008082136147f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016101e6565b6000606061480084614fa9565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136149fd57506000919050565b680755bf798b4a1bf1e58212614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016101e6565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60408051808201909152600080825260208201526000825111614cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016101e6565b50604080518082019091528151815260209182019181019190915290565b60606000806000614d0485613903565b919450925090506001816001811115614d1f57614d1f615c87565b14614dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016101e6565b8451614db88385615750565b14614e45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016101e6565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614e5c5790505093506000835b8651811015614f4a57600080614ecf6040518060400160405280858c60000151614eb39190615768565b8152602001858c60200151614ec89190615750565b9052613903565b509150915060405180604001604052808383614eeb9190615750565b8152602001848b60200151614f009190615750565b815250888581518110614f1557614f15615b17565b6020908102919091010152614f2b600185615750565b9350614f378183615750565b614f419084615750565b92505050614e89565b50845250919392505050565b60608315614f65575081613224565b825115614f755782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e691906153b1565b6000808211615014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016101e6565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150f5576150f561507f565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461511f57600080fd5b50565b600082601f83011261513357600080fd5b813567ffffffffffffffff81111561514d5761514d61507f565b61517e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016150ae565b81815284602083860101111561519357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156151c257600080fd5b60405160c0810167ffffffffffffffff82821081831117156151e6576151e661507f565b816040528293508435835260208501359150615201826150fd565b81602084015260408501359150615217826150fd565b816040840152606085013560608401526080850135608084015260a085013591508082111561524557600080fd5b5061525285828601615122565b60a0830152505092915050565b600080600080600085870360e081121561527857600080fd5b863567ffffffffffffffff8082111561529057600080fd5b61529c8a838b016151b0565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156152d557600080fd5b60408901955060c08901359250808311156152ef57600080fd5b828901925089601f84011261530357600080fd5b823591508082111561531457600080fd5b508860208260051b840101111561532a57600080fd5b959894975092955050506020019190565b60005b8381101561535657818101518382015260200161533e565b838111156124735750506000910152565b6000815180845261537f81602086016020860161533b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132246020830184615367565b6000602082840312156153d657600080fd5b5035919050565b6000602082840312156153ef57600080fd5b813567ffffffffffffffff81111561540657600080fd5b613412848285016151b0565b803567ffffffffffffffff8116811461542a57600080fd5b919050565b60006020828403121561544157600080fd5b61322482615412565b801515811461511f57600080fd5b600080600080600080600060c0888a03121561547357600080fd5b873561547e816150fd565b9650602088013595506040880135945061549a60608901615412565b935060808801356154aa8161544a565b925060a088013567ffffffffffffffff808211156154c757600080fd5b818a0191508a601f8301126154db57600080fd5b8135818111156154ea57600080fd5b8b60208285010111156154fc57600080fd5b60208301945080935050505092959891949750929550565b60008060006060848603121561552957600080fd5b8335615534816150fd565b92506020840135615544816150fd565b91506040840135615554816150fd565b809150509250925092565b60006020828403121561557157600080fd5b8151613224816150fd565b80516fffffffffffffffffffffffffffffffff8116811461542a57600080fd5b6000606082840312156155ae57600080fd5b6040516060810181811067ffffffffffffffff821117156155d1576155d161507f565b604052825181526155e46020840161557c565b60208201526155f56040840161557c565b60408201529392505050565b60006080828403121561561357600080fd5b6040516080810181811067ffffffffffffffff821117156156365761563661507f565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156156825761568261507f565b8360051b60206156938183016150ae565b8681529185019181810190368411156156ab57600080fd5b865b848110156156df578035868111156156c55760008081fd5b6156d136828b01615122565b8452509183019183016156ad565b50979650505050505050565b6000602082840312156156fd57600080fd5b81516132248161544a565b60006020828403121561571a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561576357615763615721565b500190565b60008282101561577a5761577a615721565b500390565b600067ffffffffffffffff808316818516818304811182151516156157a6576157a6615721565b02949350505050565b600067ffffffffffffffff8083168185168083038211156157d2576157d2615721565b01949350505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261582660c0830184615367565b98975050505050505050565b8681528560208201527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b16604082015283151560f81b6048820152818360498301376000910160490190815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158c9576158c961588b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561591d5761591d615721565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561595c5761595c615721565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561599057615990615721565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156159d7576159d7615721565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615a1257615a12615721565b60008712925087820587128484161615615a2e57615a2e615721565b87850587128184161615615a4457615a44615721565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615a8c57615a8c615721565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615ac057615ac0615721565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615afe57615afe615721565b500290565b600082615b1257615b1261588b565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615b5957615b5961588b565b8060ff84160691505092915050565b600060ff821660ff841680821015615b8257615b82615721565b90039392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bbc57615bbc615721565b5060010190565b805163ffffffff8116811461542a57600080fd5b805160ff8116811461542a57600080fd5b600060c08284031215615bfa57600080fd5b60405160c0810181811067ffffffffffffffff82111715615c1d57615c1d61507f565b604052615c2983615bc3565b8152615c3760208401615bd7565b6020820152615c4860408401615bd7565b6040820152615c5960608401615bc3565b6060820152615c6a60808401615bc3565b6080820152615c7b60a0840161557c565b60a08201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008251615cc881846020870161533b565b919091019291505056fea164736f6c634300080f000a",
  "deployedBytecode": "0x6080604052600436106101835760003560e01c80638b4c40b0116100d6578063b7d823741161007f578063cff0ab9611610059578063cff0ab9614610514578063e965084c146105b5578063f04987501461064157600080fd5b8063b7d82374146104a7578063b9e55958146104d4578063c0c53b8b146104f457600080fd5b80639bf62d82116100b05780639bf62d8214610411578063a14238e71461043e578063a35d99df1461046e57600080fd5b80638b4c40b0146102fd5780638c3152e9146103c45780639b5f694a146103e457600080fd5b80634870496f116101385780635c975abb116101125780635c975abb1461036a5780636dbffb781461038f578063724c184c146103af57600080fd5b80634870496f146102dd5780634d0047ee146102ff57806354fd4d501461031457600080fd5b806333d7e2bd1161016957806333d7e2bd1461026957806335e80ab314610296578063452a9320146102c857600080fd5b80621c2ff6146101f45780631d01364c1461024557600080fd5b366101ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f6e6c7920616c6c6f77206e617469766520746f6b656e00000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561020057600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561025157600080fd5b5061025b60395481565b60405190815260200161023c565b34801561027557600080fd5b5060375461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102a257600080fd5b5060355461021b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d457600080fd5b5061021b61066c565b3480156102e957600080fd5b506102fd6102f836600461525f565b610704565b005b34801561030b57600080fd5b5061021b610d32565b34801561032057600080fd5b5061035d6040518060400160405280600581526020017f322e352e3000000000000000000000000000000000000000000000000000000081525081565b60405161023c91906153b1565b34801561037657600080fd5b5061037f610da2565b604051901515815260200161023c565b34801561039b57600080fd5b5061037f6103aa3660046153c4565b610e35565b3480156103bb57600080fd5b5061021b610ef0565b3480156103d057600080fd5b506102fd6103df3660046153dd565b610efa565b3480156103f057600080fd5b5060365461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041d57600080fd5b5060325461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044a57600080fd5b5061037f6104593660046153c4565b60336020526000908152604090205460ff1681565b34801561047a57600080fd5b5061048e61048936600461542f565b611b05565b60405167ffffffffffffffff909116815260200161023c565b3480156104b357600080fd5b5060385461021b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e057600080fd5b506102fd6104ef366004615458565b611b1e565b34801561050057600080fd5b506102fd61050f366004615514565b611b37565b34801561052057600080fd5b5060015461057c906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161023c565b3480156105c157600080fd5b506106136105d03660046153c4565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161023c565b34801561064d57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff1661021b565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff919061555f565b905090565b61070c610da2565b15610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016101e6565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016101e6565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c6919061559c565b5190506108e06108db36869003860186615601565b611d42565b811461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016101e6565b600061097987611d9e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8f5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b919061559c565b5114155b610b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016101e6565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610be49101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bda888a615667565b8a60400135611dce565b610c70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016101e6565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa1580156106db573d6000803e3d6000fd5b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff91906156eb565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610eea9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061559c565b602001516fffffffffffffffffffffffffffffffff16611df2565b92915050565b60006106ff61066c565b610f02610da2565b15610f69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016101e6565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016101e6565b600061101d82611d9e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611108576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e20796574000000000000000000000000000060648201526084016101e6565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111999190615708565b81602001516fffffffffffffffffffffffffffffffff161015611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016101e6565b61128381602001516fffffffffffffffffffffffffffffffff16611df2565b611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016101e6565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e0919061559c565b825181519192501461149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016101e6565b6114b981602001516fffffffffffffffffffffffffffffffff16611df2565b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016101e6565b60008381526033602052604090205460ff161561160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016101e6565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa15801561167a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169e919061555f565b90508073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d20506f7274616c3a2063616e6e6f74206d616b652061206460448201527f69726563742063616c6c20746f206e617469766520746f6b656e20636f6e747260648201527f6163740000000000000000000000000000000000000000000000000000000000608482015260a4016101e6565b600084815260336020908152604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790556060850151156119da5760408581015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff808316602483015283169163095ea7b391839063dd62ed3e90604401602060405180830381865afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190615708565b88606001516118c49190615750565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015611934573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195891906156eb565b6119be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f7074696d69736d20617070726f7665206661696c656400000000000000000060448201526064016101e6565b8460600151603960008282546119d49190615768565b90915550505b60006119f58660400151876080015160008960a00151611e98565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915085907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611a5a90841515815260200190565b60405180910390a280158015611a705750326001145b15611afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016101e6565b505050505050565b6000611b1282601061577f565b610eea906152086157af565b611b2e3388888888888888611ef6565b50505050505050565b600054600390610100900460ff16158015611b59575060005460ff8083169116105b611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101e6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101009081179091556036805473ffffffffffffffffffffffffffffffffffffffff8088167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603780548784169216919091179055603580548583169093027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9093169290921790915560325416611cd657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611cde61227b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b60008160000151826020015183604001518460600151604051602001611d81949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611d819790969591016157db565b600080611dda8661235e565b9050611de881868686612390565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e869190615708565b611e909083615750565b421192915050565b6000806000611ea88660006123c0565b905080611ede576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b8360005a90506000603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d0047ee6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8f919061555f565b90508815611fd157611fb973ffffffffffffffffffffffffffffffffffffffff82168c308c6123de565b8860396000828254611fcb9190615750565b90915550505b851561207d5773ffffffffffffffffffffffffffffffffffffffff8a161561207d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084016101e6565b61208684611b05565b67ffffffffffffffff168767ffffffffffffffff161015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c000000000000000000000000000000000000000000000000000000000060648201526084016101e6565b6201d4c0841115612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765000060448201526064016101e6565b8a73ffffffffffffffffffffffffffffffffffffffff811632146121cd57507311110000000000000000000000000000000011118b015b60008a8a8a8a8a8a6040516020016121ea96959493929190615832565b604051602081830303815290604052905060008c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225a91906153b1565b60405180910390a450505061226f8282612479565b50505050505050505050565b600054610100900460ff16612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101e6565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6060818051906020012060405160200161237a91815260200190565b6040516020818303038152906040529050919050565b60006123b7846123a18786866127a6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261247390859061322b565b50505050565b6001546000906124af907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615768565b905060006124bb61333c565b90506000816020015160ff16826000015163ffffffff166124dc91906158ba565b9050821561261357600154600090612513908390700100000000000000000000000000000000900467ffffffffffffffff16615922565b90506000836040015160ff168361252a9190615996565b60015461254a9084906fffffffffffffffffffffffffffffffff16615996565b61255491906158ba565b6001549091506000906125a59061257e9084906fffffffffffffffffffffffffffffffff16615a52565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166133fd565b905060018611156125d4576125d161257e82876040015160ff1660018a6125cc9190615768565b61341a565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612646908490700100000000000000000000000000000000900467ffffffffffffffff166157af565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016101e6565b600154600090612755906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615ac6565b9050600061276748633b9aca0061346f565b6127719083615b03565b905060005a6127809088615768565b90508082111561279c5761279c6127978284615768565b613486565b5050505050505050565b60606000845111612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016101e6565b600061281e846134af565b9050600061282b8661359b565b905060008460405160200161284291815260200190565b60405160208183030381529060405290506000805b845181101561319b57600085828151811061287457612874615b17565b60200260200101519050845183111561290f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016101e6565b826000036129c8578051805160209182012060405161295d9261293792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6129c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016101e6565b612b1f565b805151602011612a7e57805180516020918201206040516129f29261293792910190815260200190565b6129c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016101e6565b805184516020808701919091208251919092012014612b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016101e6565b612b2b60106001615750565b81602001515103612d075784518303612c9f57612b658160200151601081518110612b5857612b58615b17565b60200260200101516135fe565b96506000875111612bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016101e6565b60018651612c069190615768565b8214612c94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016101e6565b505050505050613224565b6000858481518110612cb357612cb3615b17565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612cde57612cde615b17565b60200260200101519050612cf18161375e565b9550612cfe600186615750565b94505050613188565b600281602001515103613100576000612d1f82613783565b9050600081600081518110612d3657612d36615b17565b016020015160f81c90506000612d4d600283615b46565b612d58906002615b68565b90506000612d69848360ff166137a7565b90506000612d778a896137a7565b90506000612d8583836137dd565b905080835114612e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016101e6565b60ff851660021480612e2c575060ff85166003145b1561301b5780825114612ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016101e6565b612edb8760200151600181518110612b5857612b58615b17565b9c5060008d5111612f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016101e6565b60018c51612f7c9190615768565b881461300a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016101e6565b505050505050505050505050613224565b60ff8516158061302e575060ff85166001145b1561306d5761305a876020015160018151811061304d5761304d615b17565b602002602001015161375e565b9950613066818a615750565b98506130f5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016101e6565b505050505050613188565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016101e6565b508061319381615b8b565b915050612857565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016101e6565b9392505050565b600061328d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166138919092919063ffffffff16565b80519091501561333757808060200190518101906132ab91906156eb565b613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101e6565b505050565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156133d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ff9190615be8565b600061341261340c85856138a0565b836138b0565b949350505050565b6000670de0b6b3a764000061345b61343285836158ba565b61344490670de0b6b3a7640000615922565b61345685670de0b6b3a7640000615996565b6138bf565b6134659086615996565b61341291906158ba565b60008183101561347f5781613224565b5090919050565b6000805a90505b825a6134999083615768565b1015613337576134a882615b8b565b915061348d565b80516060908067ffffffffffffffff8111156134cd576134cd61507f565b60405190808252806020026020018201604052801561351257816020015b60408051808201909152606080825260208201528152602001906001900390816134eb5790505b50915060005b8181101561359457604051806040016040528085838151811061353d5761353d615b17565b6020026020010151815260200161356c86848151811061355f5761355f615b17565b60200260200101516138f0565b81525083828151811061358157613581615b17565b6020908102919091010152600101613518565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156135f3578060011b82018184015160001a8060041c8253600f8116600183015350506001016135c5565b509295945050505050565b6060600080600061360e85613903565b91945092509050600081600181111561362957613629615c87565b146136b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016101e6565b6136c08284615750565b85511461374f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016101e6565b6123b785602001518484614370565b6060602082600001511061377a57613775826135fe565b610eea565b610eea82614404565b6060610eea6137a28360200151600081518110612b5857612b58615b17565b61359b565b6060825182106137c65750604080516020810190915260008152610eea565b61322483838486516137d89190615768565b61441a565b60008082518451106137f05782516137f3565b83515b90505b808210801561387a575082828151811061381257613812615b17565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061385157613851615b17565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561388a578160010191506137f6565b5092915050565b606061341284846000856145f2565b60008183121561347f5781613224565b600081831261347f5781613224565b6000613224670de0b6b3a7640000836138d786614788565b6138e19190615996565b6138eb91906158ba565b6149cc565b6060610eea6138fe83614c0b565b614cf4565b6000806000808460000151116139c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016101e6565b6020840151805160001a607f81116139e6576000600160009450945094505050614369565b60b78111613bf45760006139fb608083615768565b905080876000015111613ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016101e6565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613b2f57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016101e6565b5060019550935060009250614369915050565b60bf8111613f42576000613c0960b783615768565b905080876000015111613cc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016101e6565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016101e6565b600184015160088302610100031c60378111613e66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016101e6565b613e708184615750565b895111613f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016101e6565b613f30836001615750565b97509550600094506143699350505050565b60f78111614023576000613f5760c083615768565b905080876000015111614012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016101e6565b600195509350849250614369915050565b600061403060f783615768565b9050808760000151116140eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016101e6565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036141c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016101e6565b600184015160088302610100031c6037811161428d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016101e6565b6142978184615750565b89511161434c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016101e6565b614357836001615750565b97509550600194506143699350505050565b9193909250565b60608167ffffffffffffffff81111561438b5761438b61507f565b6040519080825280601f01601f1916602001820160405280156143b5576020820181803683370190505b50905081156132245760006143ca8486615750565b90506020820160005b848110156143eb5782810151828201526020016143d3565b848111156143fa576000858301525b5050509392505050565b6060610eea826020015160008460000151614370565b60608182601f011015614489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101e6565b8282840110156144f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101e6565b81830184511015614562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016101e6565b60608215801561458157604051915060008252602082016040526145e9565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156145ba5780518352602092830192016145a2565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b606082471015614684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101e6565b73ffffffffffffffffffffffffffffffffffffffff85163b614702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101e6565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161472b9190615cb6565b60006040518083038185875af1925050503d8060008114614768576040519150601f19603f3d011682016040523d82523d6000602084013e61476d565b606091505b509150915061477d828286614f56565b979650505050505050565b60008082136147f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016101e6565b6000606061480084614fa9565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136149fd57506000919050565b680755bf798b4a1bf1e58212614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016101e6565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60408051808201909152600080825260208201526000825111614cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016101e6565b50604080518082019091528151815260209182019181019190915290565b60606000806000614d0485613903565b919450925090506001816001811115614d1f57614d1f615c87565b14614dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016101e6565b8451614db88385615750565b14614e45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016101e6565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614e5c5790505093506000835b8651811015614f4a57600080614ecf6040518060400160405280858c60000151614eb39190615768565b8152602001858c60200151614ec89190615750565b9052613903565b509150915060405180604001604052808383614eeb9190615750565b8152602001848b60200151614f009190615750565b815250888581518110614f1557614f15615b17565b6020908102919091010152614f2b600185615750565b9350614f378183615750565b614f419084615750565b92505050614e89565b50845250919392505050565b60608315614f65575081613224565b825115614f755782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e691906153b1565b6000808211615014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016101e6565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150f5576150f561507f565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461511f57600080fd5b50565b600082601f83011261513357600080fd5b813567ffffffffffffffff81111561514d5761514d61507f565b61517e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016150ae565b81815284602083860101111561519357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156151c257600080fd5b60405160c0810167ffffffffffffffff82821081831117156151e6576151e661507f565b816040528293508435835260208501359150615201826150fd565b81602084015260408501359150615217826150fd565b816040840152606085013560608401526080850135608084015260a085013591508082111561524557600080fd5b5061525285828601615122565b60a0830152505092915050565b600080600080600085870360e081121561527857600080fd5b863567ffffffffffffffff8082111561529057600080fd5b61529c8a838b016151b0565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156152d557600080fd5b60408901955060c08901359250808311156152ef57600080fd5b828901925089601f84011261530357600080fd5b823591508082111561531457600080fd5b508860208260051b840101111561532a57600080fd5b959894975092955050506020019190565b60005b8381101561535657818101518382015260200161533e565b838111156124735750506000910152565b6000815180845261537f81602086016020860161533b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132246020830184615367565b6000602082840312156153d657600080fd5b5035919050565b6000602082840312156153ef57600080fd5b813567ffffffffffffffff81111561540657600080fd5b613412848285016151b0565b803567ffffffffffffffff8116811461542a57600080fd5b919050565b60006020828403121561544157600080fd5b61322482615412565b801515811461511f57600080fd5b600080600080600080600060c0888a03121561547357600080fd5b873561547e816150fd565b9650602088013595506040880135945061549a60608901615412565b935060808801356154aa8161544a565b925060a088013567ffffffffffffffff808211156154c757600080fd5b818a0191508a601f8301126154db57600080fd5b8135818111156154ea57600080fd5b8b60208285010111156154fc57600080fd5b60208301945080935050505092959891949750929550565b60008060006060848603121561552957600080fd5b8335615534816150fd565b92506020840135615544816150fd565b91506040840135615554816150fd565b809150509250925092565b60006020828403121561557157600080fd5b8151613224816150fd565b80516fffffffffffffffffffffffffffffffff8116811461542a57600080fd5b6000606082840312156155ae57600080fd5b6040516060810181811067ffffffffffffffff821117156155d1576155d161507f565b604052825181526155e46020840161557c565b60208201526155f56040840161557c565b60408201529392505050565b60006080828403121561561357600080fd5b6040516080810181811067ffffffffffffffff821117156156365761563661507f565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156156825761568261507f565b8360051b60206156938183016150ae565b8681529185019181810190368411156156ab57600080fd5b865b848110156156df578035868111156156c55760008081fd5b6156d136828b01615122565b8452509183019183016156ad565b50979650505050505050565b6000602082840312156156fd57600080fd5b81516132248161544a565b60006020828403121561571a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561576357615763615721565b500190565b60008282101561577a5761577a615721565b500390565b600067ffffffffffffffff808316818516818304811182151516156157a6576157a6615721565b02949350505050565b600067ffffffffffffffff8083168185168083038211156157d2576157d2615721565b01949350505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261582660c0830184615367565b98975050505050505050565b8681528560208201527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b16604082015283151560f81b6048820152818360498301376000910160490190815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158c9576158c961588b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561591d5761591d615721565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561595c5761595c615721565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561599057615990615721565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156159d7576159d7615721565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615a1257615a12615721565b60008712925087820587128484161615615a2e57615a2e615721565b87850587128184161615615a4457615a44615721565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615a8c57615a8c615721565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615ac057615ac0615721565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615afe57615afe615721565b500290565b600082615b1257615b1261588b565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615b5957615b5961588b565b8060ff84160691505092915050565b600060ff821660ff841680821015615b8257615b82615721565b90039392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bbc57615bbc615721565b5060010190565b805163ffffffff8116811461542a57600080fd5b805160ff8116811461542a57600080fd5b600060c08284031215615bfa57600080fd5b60405160c0810181811067ffffffffffffffff82111715615c1d57615c1d61507f565b604052615c2983615bc3565b8152615c3760208401615bd7565b6020820152615c4860408401615bd7565b6040820152615c5960608401615bc3565b6060820152615c6a60808401615bc3565b6080820152615c7b60a0840161557c565b60a08201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008251615cc881846020870161533b565b919091019291505056fea164736f6c634300080f000a",
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "methods": {
      "GUARDIAN()": {
        "returns": {
          "_0": "Address of the guardian."
        }
      },
      "L2_ORACLE()": {},
      "SYSTEM_CONFIG()": {},
      "depositTransaction(address,uint256,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.",
          "_mint": "Native token value to deposit into L2.",
          "_to": "Target address on L2.",
          "_value": "Native token value to send to the recipient."
        }
      },
      "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": {
        "params": {
          "_tx": "Withdrawal transaction to finalize."
        }
      },
      "guardian()": {
        "returns": {
          "_0": "Address of the guardian."
        }
      },
      "initialize(address,address,address)": {
        "params": {
          "_l2Oracle": "Address of the L2OutputOracle contract.",
          "_superchainConfig": "Contract of the SuperchainConfig.",
          "_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."
        }
      },
      "paused()": {
        "returns": {
          "paused_": "Whether or not the contract is paused."
        }
      },
      "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": {
      "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."
        }
      },
      "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."
        }
      }
    }
  },
  "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\":\"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\":\"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\":\"_mint\",\"type\":\"uint256\"},{\"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\":\"nonpayable\",\"type\":\"function\",\"name\":\"depositTransaction\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"depositedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"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\":\"contract SystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"contract SuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"}],\"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\":\"nativeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"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\":\"view\",\"type\":\"function\",\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused_\",\"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\":\"spacer_native_token_address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contract SuperchainConfig\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}]},{\"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\":\"\",\"returns\":{\"_0\":\"Address of the guardian.\"}},\"L2_ORACLE()\":{\"custom:legacy\":\"\"},\"SYSTEM_CONFIG()\":{\"custom:legacy\":\"\"},\"depositTransaction(address,uint256,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.\",\"_mint\":\"Native token value to deposit into L2.\",\"_to\":\"Target address on L2.\",\"_value\":\"Native token value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"guardian()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Address of the guardian.\"}},\"initialize(address,address,address)\":{\"params\":{\"_l2Oracle\":\"Address of the L2OutputOracle contract.\",\"_superchainConfig\":\"Contract of the SuperchainConfig.\",\"_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.\"}},\"paused()\":{\"returns\":{\"paused_\":\"Whether or not the contract is paused.\"}},\"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 function for the address of the guardian.         Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead.\"},\"L2_ORACLE()\":{\"notice\":\"Getter for the L2OutputOracle\"},\"SYSTEM_CONFIG()\":{\"notice\":\"Getter for the SystemConfig\"},\"constructor\":{\"notice\":\"Constructs the OptimismPortal contract.\"},\"depositTransaction(address,uint256,uint256,uint64,bool,bytes)\":{\"notice\":\"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\":\"Getter function for the address of the guardian.         Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead.\"},\"initialize(address,address,address)\":{\"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.\"},\"paused()\":{\"notice\":\"Getter for the current paused status.\"},\"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.\"},\"spacer_native_token_address()\":{\"notice\":\"Spacer for backwards compatibility.\"},\"superchainConfig()\":{\"notice\":\"Contract of the Superchain Config.\"},\"systemConfig()\":{\"notice\":\"Address of the SystemConfig contract.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@cwia/=lib/clones-with-immutable-args/src/\",\"@lib-keccak/=lib/lib-keccak/contracts/lib/\",\"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\"@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\"@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\"@rari-capital/solmate/=lib/solmate/\",\"@solady-test/=lib/lib-keccak/lib/solady/test/\",\"@solady/=lib/lib-keccak/lib/solady/src/\",\"clones-with-immutable-args/=lib/clones-with-immutable-args/src/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\"forge-std/=lib/forge-std/src/\",\"kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\"lib-keccak/=lib/lib-keccak/contracts/\",\"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\"openzeppelin-contracts/=lib/openzeppelin-contracts/\",\"openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\"openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\"safe-contracts/=lib/safe-contracts/contracts/\",\"solady/=lib/solady/src/\",\"solmate/=lib/solmate/src/\"],\"optimizer\":{\"enabled\":true,\"runs\":999999},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/L1/OptimismPortal.sol\":\"OptimismPortal\"},\"evmVersion\":\"london\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"}},\"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/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"],\"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\":\"0x342c5084f3c640c90530122bd78372c011d6162e698dd8c8daec9496fef01d42\",\"urls\":[\"bzz-raw://8700a3d486bd62cbb861ff80175b8040336940515791073af6a036db7c2df303\",\"dweb:/ipfs/QmSGKTH84rVHWgMg4d6GQZCmCJ16KuUuTsMwPMDdJxCsww\"],\"license\":\"MIT\"},\"src/L1/OptimismPortal.sol\":{\"keccak256\":\"0xc0ce6ad53e823b15c020d6aaf54b4619856bb15a55adb7f6c6a9dedc44bff4c0\",\"urls\":[\"bzz-raw://2b228c7678c11cf66a044b856a864af05f3f21094b4b65626bc72505d766d6c2\",\"dweb:/ipfs/QmeiSMbhAPv3mWSJpG7BrXLgg9y3DwR8mfPAxJ9kkBoexa\"],\"license\":\"MIT\"},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xa4d524f2a5e91a0b63a62603e712001c51c77e8371b93cbb576bcb7d074b7588\",\"urls\":[\"bzz-raw://d6d8141b6c6dc72d2e684c1ae388c005fd78c9ca7fc9c15dddebd227ca4fd730\",\"dweb:/ipfs/QmPfJrR4qssu769TDWJnxdTozqKtZUxiY8fs95bhfECTvG\"],\"license\":\"MIT\"},\"src/L1/SuperchainConfig.sol\":{\"keccak256\":\"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d\",\"urls\":[\"bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f\",\"dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB\"],\"license\":\"MIT\"},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0x7ac167b28985ba0ce2bb0ff977d62d924e09af2a26e34f6dab34cbee3726efb2\",\"urls\":[\"bzz-raw://c11ed2ff66aa5b3d5f60898c7d3ed2bd1b08d4de00ba9a5d4c3d1c209564d4fa\",\"dweb:/ipfs/QmVSV12CWoh8j9tQgsCwwia2iGngURoqQY86Kz46G9oAwe\"],\"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\":\"0x456363d6428b9495ef57b2430d0ad99c93d7556196cfc2f76e28acf95919101e\",\"urls\":[\"bzz-raw://a055ed06e2843dbc9b3f896837fa12e12e2e20254e0e1ef5011a3e3708f6baed\",\"dweb:/ipfs/QmQ5oNWk6o4vVWJiVE8F3wBhM1wkwuFZ7VXZY6wqHbhA2H\"],\"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\":\"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f\",\"urls\":[\"bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269\",\"dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK\"],\"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}",
  "numDeployments": 1,
  "receipt": "",
  "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "storageLayout": {
    "storage": [
      {
        "astId": 47744,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "_initialized",
        "offset": 0,
        "slot": "0",
        "type": "t_uint8"
      },
      {
        "astId": 47747,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "_initializing",
        "offset": 1,
        "slot": "0",
        "type": "t_bool"
      },
      {
        "astId": 79710,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "params",
        "offset": 0,
        "slot": "1",
        "type": "t_struct(ResourceParams)79693_storage"
      },
      {
        "astId": 79715,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "__gap",
        "offset": 0,
        "slot": "2",
        "type": "t_array(t_uint256)48_storage"
      },
      {
        "astId": 77711,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "l2Sender",
        "offset": 0,
        "slot": "50",
        "type": "t_address"
      },
      {
        "astId": 77716,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "finalizedWithdrawals",
        "offset": 0,
        "slot": "51",
        "type": "t_mapping(t_bytes32,t_bool)"
      },
      {
        "astId": 77722,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "provenWithdrawals",
        "offset": 0,
        "slot": "52",
        "type": "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)77700_storage)"
      },
      {
        "astId": 77725,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "spacer_53_0_1",
        "offset": 0,
        "slot": "53",
        "type": "t_bool"
      },
      {
        "astId": 77729,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "superchainConfig",
        "offset": 1,
        "slot": "53",
        "type": "t_contract(SuperchainConfig)80234"
      },
      {
        "astId": 77733,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "l2Oracle",
        "offset": 0,
        "slot": "54",
        "type": "t_contract(L2OutputOracle)77616"
      },
      {
        "astId": 77737,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "systemConfig",
        "offset": 0,
        "slot": "55",
        "type": "t_contract(SystemConfig)81092"
      },
      {
        "astId": 77740,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "spacer_native_token_address",
        "offset": 0,
        "slot": "56",
        "type": "t_address"
      },
      {
        "astId": 77742,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "depositedAmount",
        "offset": 0,
        "slot": "57",
        "type": "t_uint256"
      }
    ],
    "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)77616": {
        "encoding": "inplace",
        "label": "contract L2OutputOracle",
        "numberOfBytes": "20"
      },
      "t_contract(SuperchainConfig)80234": {
        "encoding": "inplace",
        "label": "contract SuperchainConfig",
        "numberOfBytes": "20"
      },
      "t_contract(SystemConfig)81092": {
        "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)77700_storage)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)",
        "numberOfBytes": "32",
        "value": "t_struct(ProvenWithdrawal)77700_storage"
      },
      "t_struct(ProvenWithdrawal)77700_storage": {
        "encoding": "inplace",
        "label": "struct OptimismPortal.ProvenWithdrawal",
        "numberOfBytes": "64",
        "members": [
          {
            "astId": 77695,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "outputRoot",
            "offset": 0,
            "slot": "0",
            "type": "t_bytes32"
          },
          {
            "astId": 77697,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "timestamp",
            "offset": 0,
            "slot": "1",
            "type": "t_uint128"
          },
          {
            "astId": 77699,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "l2OutputIndex",
            "offset": 16,
            "slot": "1",
            "type": "t_uint128"
          }
        ]
      },
      "t_struct(ResourceParams)79693_storage": {
        "encoding": "inplace",
        "label": "struct ResourceMetering.ResourceParams",
        "numberOfBytes": "32",
        "members": [
          {
            "astId": 79688,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "prevBaseFee",
            "offset": 0,
            "slot": "0",
            "type": "t_uint128"
          },
          {
            "astId": 79690,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "prevBoughtGas",
            "offset": 16,
            "slot": "0",
            "type": "t_uint64"
          },
          {
            "astId": 79692,
            "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"
      }
    }
  },
  "transactionHash": "0xb7efe4689889c7b88b959b899ca91b53b11bf4cad2bcab4bc8587eb2a31faf96",
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "GUARDIAN()": {
        "notice": "Getter function for the address of the guardian.         Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead."
      },
      "L2_ORACLE()": {
        "notice": "Getter for the L2OutputOracle"
      },
      "SYSTEM_CONFIG()": {
        "notice": "Getter for the SystemConfig"
      },
      "constructor": {
        "notice": "Constructs the OptimismPortal contract."
      },
      "depositTransaction(address,uint256,uint256,uint64,bool,bytes)": {
        "notice": "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": "Getter function for the address of the guardian.         Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead."
      },
      "initialize(address,address,address)": {
        "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."
      },
      "paused()": {
        "notice": "Getter for the current paused status."
      },
      "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."
      },
      "spacer_native_token_address()": {
        "notice": "Spacer for backwards compatibility."
      },
      "superchainConfig()": {
        "notice": "Contract of the Superchain Config."
      },
      "systemConfig()": {
        "notice": "Address of the SystemConfig contract."
      },
      "version()": {
        "notice": "Semantic version."
      }
    },
    "events": {
      "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."
      },
      "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."
  }
}