{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "version",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "opaqueData",
          "type": "bytes"
        }
      ],
      "name": "TransactionDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "name": "WithdrawalFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "WithdrawalProven",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "GUARDIAN",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "L2_ORACLE",
      "outputs": [
        {
          "internalType": "contract L2OutputOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SYSTEM_CONFIG",
      "outputs": [
        {
          "internalType": "contract SystemConfig",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_gasLimit",
          "type": "uint64"
        },
        {
          "internalType": "bool",
          "name": "_isCreation",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositTransaction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "depositedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "donateETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Types.WithdrawalTransaction",
          "name": "_tx",
          "type": "tuple"
        }
      ],
      "name": "finalizeWithdrawalTransaction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "finalizedWithdrawals",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "guardian",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_nativeTokenAddress",
          "type": "address"
        },
        {
          "internalType": "contract L2OutputOracle",
          "name": "_l2Oracle",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_guardian",
          "type": "address"
        },
        {
          "internalType": "contract SystemConfig",
          "name": "_systemConfig",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_paused",
          "type": "bool"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_l2OutputIndex",
          "type": "uint256"
        }
      ],
      "name": "isOutputFinalized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2Oracle",
      "outputs": [
        {
          "internalType": "contract L2OutputOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2Sender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_byteCount",
          "type": "uint64"
        }
      ],
      "name": "minimumGasLimit",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "onApprove",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "params",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "prevBaseFee",
          "type": "uint128"
        },
        {
          "internalType": "uint64",
          "name": "prevBoughtGas",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "prevBlockNum",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Types.WithdrawalTransaction",
          "name": "_tx",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "_l2OutputIndex",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "version",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "stateRoot",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "messagePasserStorageRoot",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "latestBlockhash",
              "type": "bytes32"
            }
          ],
          "internalType": "struct Types.OutputRootProof",
          "name": "_outputRootProof",
          "type": "tuple"
        },
        {
          "internalType": "bytes[]",
          "name": "_withdrawalProof",
          "type": "bytes[]"
        }
      ],
      "name": "proveWithdrawalTransaction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenWithdrawals",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "outputRoot",
          "type": "bytes32"
        },
        {
          "internalType": "uint128",
          "name": "timestamp",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "l2OutputIndex",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "systemConfig",
      "outputs": [
        {
          "internalType": "contract SystemConfig",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "unpackOnApproveData",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "_minGasLimit",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "address": "0xaf691D829596c58448076f0cB5aE9dfee555723e",
  "args": [],
  "bytecode": "0x60806040523480156200001157600080fd5b50620000236000808080600162000029565b6200022b565b600054600390610100900460ff161580156200004c575060005460ff8083169116105b620000b55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100908117909155603880546001600160a01b03808a166001600160a01b03199283161790925560328054821661dead1790556035805460368054898616908516179055603780548a861694169390931790925585151592891690930260ff19166001600160a81b0319909116171790556200013f62000188565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b600054610100900460ff16620001f55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000ac565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b615ed1806200023b6000396000f3fe6080604052600436106101a45760003560e01c80638456cb59116100e1578063a14238e71161008a578063e965084c11610064578063e965084c14610624578063e9e05c42146106b0578063f0498750146106d0578063fc5b5fda146106fb57600080fd5b8063a14238e71461051a578063a35d99df1461054a578063cff0ab961461058357600080fd5b806392a162cf116100bb57806392a162cf1461048d5780639b5f694a146104bb5780639bf62d82146104ed57600080fd5b80638456cb59146104585780638b4c40b0146103015780638c3152e91461046d57600080fd5b8063452a93201161014e57806354fd4d501161012857806354fd4d501461039d5780635c975abb146103f35780636dbffb781461040d578063724c184c1461042d57600080fd5b8063452a9320146103235780634870496f146103505780634d0047ee1461037057600080fd5b806333d7e2bd1161017f57806333d7e2bd146102bf5780633f4ba83a146102ec5780634273ca161461030357600080fd5b80621c2ff61461021557806301ffc9a71461026b5780631d01364c1461029b57600080fd5b36610210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e6f7420616c6c6f77206465706f73697420746f204552432d32303a2045544860448201526064015b60405180910390fd5b600080fd5b34801561022157600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b5061028b61028636600461515e565b61071b565b6040519015158152602001610262565b3480156102a757600080fd5b506102b160395481565b604051908152602001610262565b3480156102cb57600080fd5b506036546102419073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f857600080fd5b506103016107b4565b005b34801561030f57600080fd5b5061028b61031e3660046151c5565b6108b9565b34801561032f57600080fd5b506037546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035c57600080fd5b5061030161036b36600461541f565b6109cc565b34801561037c57600080fd5b506038546102419073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103e66040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516102629190615571565b3480156103ff57600080fd5b5060355461028b9060ff1681565b34801561041957600080fd5b5061028b610428366004615584565b611001565b34801561043957600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff16610241565b34801561046457600080fd5b506103016110ba565b34801561047957600080fd5b5061030161048836600461559d565b6111bc565b34801561049957600080fd5b506104ad6104a83660046155da565b611c53565b60405161026292919061560f565b3480156104c757600080fd5b5060355461024190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104f957600080fd5b506032546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052657600080fd5b5061028b610535366004615584565b60336020526000908152604090205460ff1681565b34801561055657600080fd5b5061056a61056536600461564b565b611c9c565b60405167ffffffffffffffff9091168152602001610262565b34801561058f57600080fd5b506001546105eb906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610262565b34801561063057600080fd5b5061068261063f366004615584565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610262565b3480156106bc57600080fd5b506103016106cb366004615674565b611cb5565b3480156106dc57600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff16610241565b34801561070757600080fd5b506103016107163660046156f1565b611cc3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca160000000000000000000000000000000000000000000000000000000014806107ae57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e706175736500000000000000000000000000000000000000000000006064820152608401610207565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60385460009073ffffffffffffffffffffffffffffffffffffffff163314610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f6f6e6c7920616363657074206e617469766520746f6b656e20617070726f766560448201527f2063616c6c6261636b00000000000000000000000000000000000000000000006064820152608401610207565b6000806109a585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5392505050565b915091506109be8889888563ffffffff16600086611ed7565b506001979650505050505050565b60355460ff1615610a39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610207565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610207565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190615782565b519050610bab610ba6368690038601866157e7565b6121b1565b8114610c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610207565b6000610c448761220d565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d5e5750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5a9190615782565b5114155b610dea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610207565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610eb39101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610ea9888a61584d565b8a6040013561223d565b610f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610207565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916107ae9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561107b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f9190615782565b602001516fffffffffffffffffffffffffffffffff16612261565b60375473ffffffffffffffffffffffffffffffffffffffff163314611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e207061757365000000000000000000000000000000000000000000000000006064820152608401610207565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108af565b60355460ff1615611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610207565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146112d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610207565b60006112dd8261220d565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610207565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145991906158d1565b81602001516fffffffffffffffffffffffffffffffff161015611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610207565b61154381602001516fffffffffffffffffffffffffffffffff16612261565b6115f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610207565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a59190615782565b825181519192501461175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610207565b61177e81602001516fffffffffffffffffffffffffffffffff16612261565b611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610207565b60008381526033602052604090205460ff16156118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610207565b600083815260336020908152604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558401516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055606084015115611b295760385460408581015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff80831660248301529092169163095ea7b39190839063dd62ed3e90604401602060405180830381865afa1580156119e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0491906158d1565b8760600151611a139190615919565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015611a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa79190615931565b611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d20617070726f76656420746f6b656e206661696c656400006044820152606401610207565b836060015160396000828254611b23919061594e565b90915550505b6000611b448560400151866080015160008860a00151612306565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611ba990841515815260200190565b60405180910390a280158015611bbf5750326001145b15611c4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610207565b5050505050565b60006060600483511015611c7857505060408051602081019091526000815262030d40905b825160208401805160e01c93509060048114611c95576004820192505b5050915091565b6000611ca9826010615965565b6107ae90615208615995565b611c4c338686868686611ed7565b600054600390610100900460ff16158015611ce5575060005460ff8083169116105b611d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610207565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101009081179091556038805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560328054821661dead1790556035805460368054898616908516179055603780548a86169416939093179092558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617179055611e71612364565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b8260005a90508515611f2057603854611f089073ffffffffffffffffffffffffffffffffffffffff16893089612447565b8560396000828254611f1a9190615919565b90915550505b8315611fcc5773ffffffffffffffffffffffffffffffffffffffff871615611fcc57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e74726163746064820152608401610207565b611fd68351611c9c565b67ffffffffffffffff168567ffffffffffffffff161015612079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610207565b6201d4c0835111156120e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c6172676500006044820152606401610207565b33328114612108575033731111000000000000000000000000000000001111015b600087888888886040516020016121239594939291906159c1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121939190615571565b60405180910390a450506121a782826124e2565b5050505050505050565b600081600001518260200151836040015184606001516040516020016121f0949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976121f0979096959101615a26565b60008061224986612805565b905061225781868686612837565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f491906158d1565b6122fe9083615919565b421192915050565b6000806000612316866000612867565b90508061234c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166123fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610207565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526124dc908590612885565b50505050565b600154600090612518907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361594e565b90506000612524612996565b90506000816020015160ff16826000015163ffffffff166125459190615aac565b9050821561267c5760015460009061257c908390700100000000000000000000000000000000900467ffffffffffffffff16615b14565b90506000836040015160ff16836125939190615b88565b6001546125b39084906fffffffffffffffffffffffffffffffff16615b88565b6125bd9190615aac565b60015490915060009061260e906125e79084906fffffffffffffffffffffffffffffffff16615c44565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a5c565b9050600186111561263d5761263a6125e782876040015160ff1660018a612635919061594e565b612a7b565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906126af908490700100000000000000000000000000000000900467ffffffffffffffff16615995565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610207565b6001546000906127be906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cb8565b905060006127d048633b9aca00612ad0565b6127da9083615cf5565b905060005a6127e9908861594e565b9050808211156121a7576121a7612800828461594e565b612ae7565b6060818051906020012060405160200161282191815260200190565b6040516020818303038152906040529050919050565b600061285e84612848878686612b10565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60006128e7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661358e9092919063ffffffff16565b80519091501561299157808060200190518101906129059190615931565b612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610207565b505050565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a579190615d2e565b905090565b6000612a71612a6b858561359d565b836135ad565b90505b9392505050565b6000670de0b6b3a7640000612abc612a938583615aac565b612aa590670de0b6b3a7640000615b14565b612ab785670de0b6b3a7640000615b88565b6135bc565b612ac69086615b88565b612a719190615aac565b600081831015612ae05781612a74565b5090919050565b6000805a90505b825a612afa908361594e565b101561299157612b0982615dcd565b9150612aee565b60606000845111612b7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610207565b6000612b88846135ed565b90506000612b95866136d9565b9050600084604051602001612bac91815260200190565b60405160208183030381529060405290506000805b8451811015613505576000858281518110612bde57612bde615e05565b602002602001015190508451831115612c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610207565b82600003612d325780518051602091820120604051612cc792612ca192910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610207565b612e89565b805151602011612de85780518051602091820120604051612d5c92612ca192910190815260200190565b612d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610207565b805184516020808701919091208251919092012014612e89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610207565b612e9560106001615919565b81602001515103613071578451830361300957612ecf8160200151601081518110612ec257612ec2615e05565b602002602001015161373c565b96506000875111612f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610207565b60018651612f70919061594e565b8214612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610207565b505050505050612a74565b600085848151811061301d5761301d615e05565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061304857613048615e05565b6020026020010151905061305b8161389c565b9550613068600186615919565b945050506134f2565b60028160200151510361346a576000613089826138c1565b90506000816000815181106130a0576130a0615e05565b016020015160f81c905060006130b7600283615e34565b6130c2906002615e56565b905060006130d3848360ff166138e5565b905060006130e18a896138e5565b905060006130ef838361391b565b905080835114613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610207565b60ff851660021480613196575060ff85166003145b15613385578082511461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610207565b6132458760200151600181518110612ec257612ec2615e05565b9c5060008d51116132d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610207565b60018c516132e6919061594e565b8814613374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610207565b505050505050505050505050612a74565b60ff85161580613398575060ff85166001145b156133d7576133c487602001516001815181106133b7576133b7615e05565b602002602001015161389c565b99506133d0818a615919565b985061345f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610207565b5050505050506134f2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610207565b50806134fd81615dcd565b915050612bc1565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610207565b6060612a7184846000856139cf565b600081831215612ae05781612a74565b6000818312612ae05781612a74565b6000612a74670de0b6b3a7640000836135d486613b65565b6135de9190615b88565b6135e89190615aac565b613da9565b80516060908067ffffffffffffffff81111561360b5761360b615264565b60405190808252806020026020018201604052801561365057816020015b60408051808201909152606080825260208201528152602001906001900390816136295790505b50915060005b818110156136d257604051806040016040528085838151811061367b5761367b615e05565b602002602001015181526020016136aa86848151811061369d5761369d615e05565b6020026020010151613fe8565b8152508382815181106136bf576136bf615e05565b6020908102919091010152600101613656565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613731578060011b82018184015160001a8060041c8253600f811660018301535050600101613703565b509295945050505050565b6060600080600061374c85613ffb565b91945092509050600081600181111561376757613767615e79565b146137f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610207565b6137fe8284615919565b85511461388d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610207565b61285e85602001518484614a68565b606060208260000151106138b8576138b38261373c565b6107ae565b6107ae82614afc565b60606107ae6138e08360200151600081518110612ec257612ec2615e05565b6136d9565b60608251821061390457506040805160208101909152600081526107ae565b612a748383848651613916919061594e565b614b12565b600080825184511061392e578251613931565b83515b90505b80821080156139b8575082828151811061395057613950615e05565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061398f5761398f615e05565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156139c857816001019150613934565b5092915050565b606082471015613a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610207565b73ffffffffffffffffffffffffffffffffffffffff85163b613adf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610207565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613b089190615ea8565b60006040518083038185875af1925050503d8060008114613b45576040519150601f19603f3d011682016040523d82523d6000602084013e613b4a565b606091505b5091509150613b5a828286614cea565b979650505050505050565b6000808213613bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610207565b60006060613bdd84614d3d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213613dda57506000919050565b680755bf798b4a1bf1e58212613e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610207565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60606107ae613ff683614e13565b614efc565b6000806000808460000151116140b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610207565b6020840151805160001a607f81116140de576000600160009450945094505050614a61565b60b781116142ec5760006140f360808361594e565b9050808760000151116141ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610207565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061422757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6142d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610207565b5060019550935060009250614a61915050565b60bf811161463a57600061430160b78361594e565b9050808760000151116143bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610207565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361449a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610207565b600184015160088302610100031c6037811161455e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610207565b6145688184615919565b89511161461d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610207565b614628836001615919565b9750955060009450614a619350505050565b60f7811161471b57600061464f60c08361594e565b90508087600001511161470a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610207565b600195509350849250614a61915050565b600061472860f78361594e565b9050808760000151116147e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610207565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036148c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610207565b600184015160088302610100031c60378111614985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610207565b61498f8184615919565b895111614a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610207565b614a4f836001615919565b9750955060019450614a619350505050565b9193909250565b60608167ffffffffffffffff811115614a8357614a83615264565b6040519080825280601f01601f191660200182016040528015614aad576020820181803683370190505b5090508115612a74576000614ac28486615919565b90506020820160005b84811015614ae3578281015182820152602001614acb565b84811115614af2576000858301525b5050509392505050565b60606107ae826020015160008460000151614a68565b60608182601f011015614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610207565b828284011015614bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610207565b81830184511015614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610207565b606082158015614c795760405191506000825260208201604052614ce1565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614cb2578051835260209283019201614c9a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60608315614cf9575081612a74565b825115614d095782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102079190615571565b6000808211614da8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610207565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60408051808201909152600080825260208201526000825111614ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610207565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f0c85613ffb565b919450925090506001816001811115614f2757614f27615e79565b14614fb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610207565b8451614fc08385615919565b1461504d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610207565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150645790505093506000835b8651811015615152576000806150d76040518060400160405280858c600001516150bb919061594e565b8152602001858c602001516150d09190615919565b9052613ffb565b5091509150604051806040016040528083836150f39190615919565b8152602001848b602001516151089190615919565b81525088858151811061511d5761511d615e05565b6020908102919091010152615133600185615919565b935061513f8183615919565b6151499084615919565b92505050615091565b50845250919392505050565b60006020828403121561517057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a7457600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146151c257600080fd5b50565b6000806000806000608086880312156151dd57600080fd5b85356151e8816151a0565b945060208601356151f8816151a0565b935060408601359250606086013567ffffffffffffffff8082111561521c57600080fd5b818801915088601f83011261523057600080fd5b81358181111561523f57600080fd5b89602082850101111561525157600080fd5b9699959850939650602001949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152da576152da615264565b604052919050565b600082601f8301126152f357600080fd5b813567ffffffffffffffff81111561530d5761530d615264565b61533e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615293565b81815284602083860101111561535357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561538257600080fd5b60405160c0810167ffffffffffffffff82821081831117156153a6576153a6615264565b8160405282935084358352602085013591506153c1826151a0565b816020840152604085013591506153d7826151a0565b816040840152606085013560608401526080850135608084015260a085013591508082111561540557600080fd5b50615412858286016152e2565b60a0830152505092915050565b600080600080600085870360e081121561543857600080fd5b863567ffffffffffffffff8082111561545057600080fd5b61545c8a838b01615370565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561549557600080fd5b60408901955060c08901359250808311156154af57600080fd5b828901925089601f8401126154c357600080fd5b82359150808211156154d457600080fd5b508860208260051b84010111156154ea57600080fd5b959894975092955050506020019190565b60005b838110156155165781810151838201526020016154fe565b838111156124dc5750506000910152565b6000815180845261553f8160208601602086016154fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a746020830184615527565b60006020828403121561559657600080fd5b5035919050565b6000602082840312156155af57600080fd5b813567ffffffffffffffff8111156155c657600080fd5b6155d284828501615370565b949350505050565b6000602082840312156155ec57600080fd5b813567ffffffffffffffff81111561560357600080fd5b6155d2848285016152e2565b63ffffffff83168152604060208201526000612a716040830184615527565b803567ffffffffffffffff8116811461564657600080fd5b919050565b60006020828403121561565d57600080fd5b612a748261562e565b80151581146151c257600080fd5b600080600080600060a0868803121561568c57600080fd5b8535615697816151a0565b9450602086013593506156ac6040870161562e565b925060608601356156bc81615666565b9150608086013567ffffffffffffffff8111156156d857600080fd5b6156e4888289016152e2565b9150509295509295909350565b600080600080600060a0868803121561570957600080fd5b8535615714816151a0565b94506020860135615724816151a0565b93506040860135615734816151a0565b92506060860135615744816151a0565b9150608086013561575481615666565b809150509295509295909350565b80516fffffffffffffffffffffffffffffffff8116811461564657600080fd5b60006060828403121561579457600080fd5b6040516060810181811067ffffffffffffffff821117156157b7576157b7615264565b604052825181526157ca60208401615762565b60208201526157db60408401615762565b60408201529392505050565b6000608082840312156157f957600080fd5b6040516080810181811067ffffffffffffffff8211171561581c5761581c615264565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561586857615868615264565b8360051b6020615879818301615293565b86815291850191818101903684111561589157600080fd5b865b848110156158c5578035868111156158ab5760008081fd5b6158b736828b016152e2565b845250918301918301615893565b50979650505050505050565b6000602082840312156158e357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561592c5761592c6158ea565b500190565b60006020828403121561594357600080fd5b8151612a7481615666565b600082821015615960576159606158ea565b500390565b600067ffffffffffffffff8083168185168183048111821515161561598c5761598c6158ea565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159b8576159b86158ea565b01949350505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a158160498501602087016154fb565b919091016049019695505050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615a7160c0830184615527565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abb57615abb615a7d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b0f57615b0f6158ea565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b4e57615b4e6158ea565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8257615b826158ea565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bc957615bc96158ea565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0457615c046158ea565b60008712925087820587128484161615615c2057615c206158ea565b87850587128184161615615c3657615c366158ea565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c7e57615c7e6158ea565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb257615cb26158ea565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf057615cf06158ea565b500290565b600082615d0457615d04615a7d565b500490565b805163ffffffff8116811461564657600080fd5b805160ff8116811461564657600080fd5b600060c08284031215615d4057600080fd5b60405160c0810181811067ffffffffffffffff82111715615d6357615d63615264565b604052615d6f83615d09565b8152615d7d60208401615d1d565b6020820152615d8e60408401615d1d565b6040820152615d9f60608401615d09565b6060820152615db060808401615d09565b6080820152615dc160a08401615762565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615dfe57615dfe6158ea565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e4757615e47615a7d565b8060ff84160691505092915050565b600060ff821660ff841680821015615e7057615e706158ea565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008251615eba8184602087016154fb565b919091019291505056fea164736f6c634300080f000a",
  "deployedBytecode": "0x6080604052600436106101a45760003560e01c80638456cb59116100e1578063a14238e71161008a578063e965084c11610064578063e965084c14610624578063e9e05c42146106b0578063f0498750146106d0578063fc5b5fda146106fb57600080fd5b8063a14238e71461051a578063a35d99df1461054a578063cff0ab961461058357600080fd5b806392a162cf116100bb57806392a162cf1461048d5780639b5f694a146104bb5780639bf62d82146104ed57600080fd5b80638456cb59146104585780638b4c40b0146103015780638c3152e91461046d57600080fd5b8063452a93201161014e57806354fd4d501161012857806354fd4d501461039d5780635c975abb146103f35780636dbffb781461040d578063724c184c1461042d57600080fd5b8063452a9320146103235780634870496f146103505780634d0047ee1461037057600080fd5b806333d7e2bd1161017f57806333d7e2bd146102bf5780633f4ba83a146102ec5780634273ca161461030357600080fd5b80621c2ff61461021557806301ffc9a71461026b5780631d01364c1461029b57600080fd5b36610210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e6f7420616c6c6f77206465706f73697420746f204552432d32303a2045544860448201526064015b60405180910390fd5b600080fd5b34801561022157600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561027757600080fd5b5061028b61028636600461515e565b61071b565b6040519015158152602001610262565b3480156102a757600080fd5b506102b160395481565b604051908152602001610262565b3480156102cb57600080fd5b506036546102419073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f857600080fd5b506103016107b4565b005b34801561030f57600080fd5b5061028b61031e3660046151c5565b6108b9565b34801561032f57600080fd5b506037546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035c57600080fd5b5061030161036b36600461541f565b6109cc565b34801561037c57600080fd5b506038546102419073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103e66040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516102629190615571565b3480156103ff57600080fd5b5060355461028b9060ff1681565b34801561041957600080fd5b5061028b610428366004615584565b611001565b34801561043957600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff16610241565b34801561046457600080fd5b506103016110ba565b34801561047957600080fd5b5061030161048836600461559d565b6111bc565b34801561049957600080fd5b506104ad6104a83660046155da565b611c53565b60405161026292919061560f565b3480156104c757600080fd5b5060355461024190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104f957600080fd5b506032546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052657600080fd5b5061028b610535366004615584565b60336020526000908152604090205460ff1681565b34801561055657600080fd5b5061056a61056536600461564b565b611c9c565b60405167ffffffffffffffff9091168152602001610262565b34801561058f57600080fd5b506001546105eb906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610262565b34801561063057600080fd5b5061068261063f366004615584565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610262565b3480156106bc57600080fd5b506103016106cb366004615674565b611cb5565b3480156106dc57600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff16610241565b34801561070757600080fd5b506103016107163660046156f1565b611cc3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca160000000000000000000000000000000000000000000000000000000014806107ae57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e706175736500000000000000000000000000000000000000000000006064820152608401610207565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60385460009073ffffffffffffffffffffffffffffffffffffffff163314610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f6f6e6c7920616363657074206e617469766520746f6b656e20617070726f766560448201527f2063616c6c6261636b00000000000000000000000000000000000000000000006064820152608401610207565b6000806109a585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5392505050565b915091506109be8889888563ffffffff16600086611ed7565b506001979650505050505050565b60355460ff1615610a39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610207565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610207565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190615782565b519050610bab610ba6368690038601866157e7565b6121b1565b8114610c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610207565b6000610c448761220d565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d5e5750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5a9190615782565b5114155b610dea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610207565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610eb39101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610ea9888a61584d565b8a6040013561223d565b610f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610207565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916107ae9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561107b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f9190615782565b602001516fffffffffffffffffffffffffffffffff16612261565b60375473ffffffffffffffffffffffffffffffffffffffff163314611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e207061757365000000000000000000000000000000000000000000000000006064820152608401610207565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108af565b60355460ff1615611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610207565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146112d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610207565b60006112dd8261220d565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610207565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145991906158d1565b81602001516fffffffffffffffffffffffffffffffff161015611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610207565b61154381602001516fffffffffffffffffffffffffffffffff16612261565b6115f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610207565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a59190615782565b825181519192501461175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610207565b61177e81602001516fffffffffffffffffffffffffffffffff16612261565b611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610207565b60008381526033602052604090205460ff16156118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610207565b600083815260336020908152604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558401516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055606084015115611b295760385460408581015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff80831660248301529092169163095ea7b39190839063dd62ed3e90604401602060405180830381865afa1580156119e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0491906158d1565b8760600151611a139190615919565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015611a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa79190615931565b611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d20617070726f76656420746f6b656e206661696c656400006044820152606401610207565b836060015160396000828254611b23919061594e565b90915550505b6000611b448560400151866080015160008860a00151612306565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611ba990841515815260200190565b60405180910390a280158015611bbf5750326001145b15611c4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610207565b5050505050565b60006060600483511015611c7857505060408051602081019091526000815262030d40905b825160208401805160e01c93509060048114611c95576004820192505b5050915091565b6000611ca9826010615965565b6107ae90615208615995565b611c4c338686868686611ed7565b600054600390610100900460ff16158015611ce5575060005460ff8083169116105b611d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610207565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101009081179091556038805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560328054821661dead1790556035805460368054898616908516179055603780548a86169416939093179092558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090911617179055611e71612364565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b8260005a90508515611f2057603854611f089073ffffffffffffffffffffffffffffffffffffffff16893089612447565b8560396000828254611f1a9190615919565b90915550505b8315611fcc5773ffffffffffffffffffffffffffffffffffffffff871615611fcc57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e74726163746064820152608401610207565b611fd68351611c9c565b67ffffffffffffffff168567ffffffffffffffff161015612079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610207565b6201d4c0835111156120e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c6172676500006044820152606401610207565b33328114612108575033731111000000000000000000000000000000001111015b600087888888886040516020016121239594939291906159c1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121939190615571565b60405180910390a450506121a782826124e2565b5050505050505050565b600081600001518260200151836040015184606001516040516020016121f0949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976121f0979096959101615a26565b60008061224986612805565b905061225781868686612837565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f491906158d1565b6122fe9083615919565b421192915050565b6000806000612316866000612867565b90508061234c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166123fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610207565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526124dc908590612885565b50505050565b600154600090612518907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361594e565b90506000612524612996565b90506000816020015160ff16826000015163ffffffff166125459190615aac565b9050821561267c5760015460009061257c908390700100000000000000000000000000000000900467ffffffffffffffff16615b14565b90506000836040015160ff16836125939190615b88565b6001546125b39084906fffffffffffffffffffffffffffffffff16615b88565b6125bd9190615aac565b60015490915060009061260e906125e79084906fffffffffffffffffffffffffffffffff16615c44565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a5c565b9050600186111561263d5761263a6125e782876040015160ff1660018a612635919061594e565b612a7b565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906126af908490700100000000000000000000000000000000900467ffffffffffffffff16615995565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610207565b6001546000906127be906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cb8565b905060006127d048633b9aca00612ad0565b6127da9083615cf5565b905060005a6127e9908861594e565b9050808211156121a7576121a7612800828461594e565b612ae7565b6060818051906020012060405160200161282191815260200190565b6040516020818303038152906040529050919050565b600061285e84612848878686612b10565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60006128e7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661358e9092919063ffffffff16565b80519091501561299157808060200190518101906129059190615931565b612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610207565b505050565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a579190615d2e565b905090565b6000612a71612a6b858561359d565b836135ad565b90505b9392505050565b6000670de0b6b3a7640000612abc612a938583615aac565b612aa590670de0b6b3a7640000615b14565b612ab785670de0b6b3a7640000615b88565b6135bc565b612ac69086615b88565b612a719190615aac565b600081831015612ae05781612a74565b5090919050565b6000805a90505b825a612afa908361594e565b101561299157612b0982615dcd565b9150612aee565b60606000845111612b7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610207565b6000612b88846135ed565b90506000612b95866136d9565b9050600084604051602001612bac91815260200190565b60405160208183030381529060405290506000805b8451811015613505576000858281518110612bde57612bde615e05565b602002602001015190508451831115612c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610207565b82600003612d325780518051602091820120604051612cc792612ca192910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610207565b612e89565b805151602011612de85780518051602091820120604051612d5c92612ca192910190815260200190565b612d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610207565b805184516020808701919091208251919092012014612e89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610207565b612e9560106001615919565b81602001515103613071578451830361300957612ecf8160200151601081518110612ec257612ec2615e05565b602002602001015161373c565b96506000875111612f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610207565b60018651612f70919061594e565b8214612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610207565b505050505050612a74565b600085848151811061301d5761301d615e05565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061304857613048615e05565b6020026020010151905061305b8161389c565b9550613068600186615919565b945050506134f2565b60028160200151510361346a576000613089826138c1565b90506000816000815181106130a0576130a0615e05565b016020015160f81c905060006130b7600283615e34565b6130c2906002615e56565b905060006130d3848360ff166138e5565b905060006130e18a896138e5565b905060006130ef838361391b565b905080835114613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610207565b60ff851660021480613196575060ff85166003145b15613385578082511461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610207565b6132458760200151600181518110612ec257612ec2615e05565b9c5060008d51116132d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610207565b60018c516132e6919061594e565b8814613374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610207565b505050505050505050505050612a74565b60ff85161580613398575060ff85166001145b156133d7576133c487602001516001815181106133b7576133b7615e05565b602002602001015161389c565b99506133d0818a615919565b985061345f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610207565b5050505050506134f2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610207565b50806134fd81615dcd565b915050612bc1565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610207565b6060612a7184846000856139cf565b600081831215612ae05781612a74565b6000818312612ae05781612a74565b6000612a74670de0b6b3a7640000836135d486613b65565b6135de9190615b88565b6135e89190615aac565b613da9565b80516060908067ffffffffffffffff81111561360b5761360b615264565b60405190808252806020026020018201604052801561365057816020015b60408051808201909152606080825260208201528152602001906001900390816136295790505b50915060005b818110156136d257604051806040016040528085838151811061367b5761367b615e05565b602002602001015181526020016136aa86848151811061369d5761369d615e05565b6020026020010151613fe8565b8152508382815181106136bf576136bf615e05565b6020908102919091010152600101613656565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613731578060011b82018184015160001a8060041c8253600f811660018301535050600101613703565b509295945050505050565b6060600080600061374c85613ffb565b91945092509050600081600181111561376757613767615e79565b146137f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610207565b6137fe8284615919565b85511461388d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610207565b61285e85602001518484614a68565b606060208260000151106138b8576138b38261373c565b6107ae565b6107ae82614afc565b60606107ae6138e08360200151600081518110612ec257612ec2615e05565b6136d9565b60608251821061390457506040805160208101909152600081526107ae565b612a748383848651613916919061594e565b614b12565b600080825184511061392e578251613931565b83515b90505b80821080156139b8575082828151811061395057613950615e05565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061398f5761398f615e05565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156139c857816001019150613934565b5092915050565b606082471015613a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610207565b73ffffffffffffffffffffffffffffffffffffffff85163b613adf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610207565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613b089190615ea8565b60006040518083038185875af1925050503d8060008114613b45576040519150601f19603f3d011682016040523d82523d6000602084013e613b4a565b606091505b5091509150613b5a828286614cea565b979650505050505050565b6000808213613bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610207565b60006060613bdd84614d3d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213613dda57506000919050565b680755bf798b4a1bf1e58212613e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610207565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60606107ae613ff683614e13565b614efc565b6000806000808460000151116140b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610207565b6020840151805160001a607f81116140de576000600160009450945094505050614a61565b60b781116142ec5760006140f360808361594e565b9050808760000151116141ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610207565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061422757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6142d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610207565b5060019550935060009250614a61915050565b60bf811161463a57600061430160b78361594e565b9050808760000151116143bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610207565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361449a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610207565b600184015160088302610100031c6037811161455e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610207565b6145688184615919565b89511161461d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610207565b614628836001615919565b9750955060009450614a619350505050565b60f7811161471b57600061464f60c08361594e565b90508087600001511161470a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610207565b600195509350849250614a61915050565b600061472860f78361594e565b9050808760000151116147e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610207565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036148c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610207565b600184015160088302610100031c60378111614985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610207565b61498f8184615919565b895111614a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610207565b614a4f836001615919565b9750955060019450614a619350505050565b9193909250565b60608167ffffffffffffffff811115614a8357614a83615264565b6040519080825280601f01601f191660200182016040528015614aad576020820181803683370190505b5090508115612a74576000614ac28486615919565b90506020820160005b84811015614ae3578281015182820152602001614acb565b84811115614af2576000858301525b5050509392505050565b60606107ae826020015160008460000151614a68565b60608182601f011015614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610207565b828284011015614bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610207565b81830184511015614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610207565b606082158015614c795760405191506000825260208201604052614ce1565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614cb2578051835260209283019201614c9a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60608315614cf9575081612a74565b825115614d095782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102079190615571565b6000808211614da8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610207565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60408051808201909152600080825260208201526000825111614ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610207565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f0c85613ffb565b919450925090506001816001811115614f2757614f27615e79565b14614fb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610207565b8451614fc08385615919565b1461504d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610207565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150645790505093506000835b8651811015615152576000806150d76040518060400160405280858c600001516150bb919061594e565b8152602001858c602001516150d09190615919565b9052613ffb565b5091509150604051806040016040528083836150f39190615919565b8152602001848b602001516151089190615919565b81525088858151811061511d5761511d615e05565b6020908102919091010152615133600185615919565b935061513f8183615919565b6151499084615919565b92505050615091565b50845250919392505050565b60006020828403121561517057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a7457600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146151c257600080fd5b50565b6000806000806000608086880312156151dd57600080fd5b85356151e8816151a0565b945060208601356151f8816151a0565b935060408601359250606086013567ffffffffffffffff8082111561521c57600080fd5b818801915088601f83011261523057600080fd5b81358181111561523f57600080fd5b89602082850101111561525157600080fd5b9699959850939650602001949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152da576152da615264565b604052919050565b600082601f8301126152f357600080fd5b813567ffffffffffffffff81111561530d5761530d615264565b61533e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615293565b81815284602083860101111561535357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561538257600080fd5b60405160c0810167ffffffffffffffff82821081831117156153a6576153a6615264565b8160405282935084358352602085013591506153c1826151a0565b816020840152604085013591506153d7826151a0565b816040840152606085013560608401526080850135608084015260a085013591508082111561540557600080fd5b50615412858286016152e2565b60a0830152505092915050565b600080600080600085870360e081121561543857600080fd5b863567ffffffffffffffff8082111561545057600080fd5b61545c8a838b01615370565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561549557600080fd5b60408901955060c08901359250808311156154af57600080fd5b828901925089601f8401126154c357600080fd5b82359150808211156154d457600080fd5b508860208260051b84010111156154ea57600080fd5b959894975092955050506020019190565b60005b838110156155165781810151838201526020016154fe565b838111156124dc5750506000910152565b6000815180845261553f8160208601602086016154fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a746020830184615527565b60006020828403121561559657600080fd5b5035919050565b6000602082840312156155af57600080fd5b813567ffffffffffffffff8111156155c657600080fd5b6155d284828501615370565b949350505050565b6000602082840312156155ec57600080fd5b813567ffffffffffffffff81111561560357600080fd5b6155d2848285016152e2565b63ffffffff83168152604060208201526000612a716040830184615527565b803567ffffffffffffffff8116811461564657600080fd5b919050565b60006020828403121561565d57600080fd5b612a748261562e565b80151581146151c257600080fd5b600080600080600060a0868803121561568c57600080fd5b8535615697816151a0565b9450602086013593506156ac6040870161562e565b925060608601356156bc81615666565b9150608086013567ffffffffffffffff8111156156d857600080fd5b6156e4888289016152e2565b9150509295509295909350565b600080600080600060a0868803121561570957600080fd5b8535615714816151a0565b94506020860135615724816151a0565b93506040860135615734816151a0565b92506060860135615744816151a0565b9150608086013561575481615666565b809150509295509295909350565b80516fffffffffffffffffffffffffffffffff8116811461564657600080fd5b60006060828403121561579457600080fd5b6040516060810181811067ffffffffffffffff821117156157b7576157b7615264565b604052825181526157ca60208401615762565b60208201526157db60408401615762565b60408201529392505050565b6000608082840312156157f957600080fd5b6040516080810181811067ffffffffffffffff8211171561581c5761581c615264565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561586857615868615264565b8360051b6020615879818301615293565b86815291850191818101903684111561589157600080fd5b865b848110156158c5578035868111156158ab5760008081fd5b6158b736828b016152e2565b845250918301918301615893565b50979650505050505050565b6000602082840312156158e357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561592c5761592c6158ea565b500190565b60006020828403121561594357600080fd5b8151612a7481615666565b600082821015615960576159606158ea565b500390565b600067ffffffffffffffff8083168185168183048111821515161561598c5761598c6158ea565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159b8576159b86158ea565b01949350505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a158160498501602087016154fb565b919091016049019695505050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615a7160c0830184615527565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abb57615abb615a7d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b0f57615b0f6158ea565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b4e57615b4e6158ea565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8257615b826158ea565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bc957615bc96158ea565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0457615c046158ea565b60008712925087820587128484161615615c2057615c206158ea565b87850587128184161615615c3657615c366158ea565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c7e57615c7e6158ea565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb257615cb26158ea565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf057615cf06158ea565b500290565b600082615d0457615d04615a7d565b500490565b805163ffffffff8116811461564657600080fd5b805160ff8116811461564657600080fd5b600060c08284031215615d4057600080fd5b60405160c0810181811067ffffffffffffffff82111715615d6357615d63615264565b604052615d6f83615d09565b8152615d7d60208401615d1d565b6020820152615d8e60408401615d1d565b6040820152615d9f60608401615d09565b6060820152615db060808401615d09565b6080820152615dc160a08401615762565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615dfe57615dfe6158ea565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e4757615e47615a7d565b8060ff84160691505092915050565b600060ff821660ff841680821015615e7057615e706158ea565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008251615eba8184602087016154fb565b919091019291505056fea164736f6c634300080f000a",
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "methods": {
      "GUARDIAN()": {},
      "L2_ORACLE()": {},
      "SYSTEM_CONFIG()": {},
      "depositTransaction(address,uint256,uint64,bool,bytes)": {
        "params": {
          "_data": "Data to trigger the recipient with.",
          "_gasLimit": "Amount of L2 gas to purchase by burning gas on L1.",
          "_isCreation": "Whether or not the transaction is a contract creation.",
          "_to": "Target address on L2.",
          "_value": "Native token value to send to the recipient."
        }
      },
      "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": {
        "params": {
          "_tx": "Withdrawal transaction to finalize."
        }
      },
      "initialize(address,address,address,address,bool)": {
        "params": {
          "_guardian": "Address that can pause withdrawals.",
          "_l2Oracle": "Address of the L2OutputOracle contract.",
          "_paused": "Sets the contract's pausability state.",
          "_systemConfig": "Address of the SystemConfig contract."
        }
      },
      "isOutputFinalized(uint256)": {
        "params": {
          "_l2OutputIndex": "Index of the L2 output to check."
        },
        "returns": {
          "_0": "Whether or not the output is finalized."
        }
      },
      "minimumGasLimit(uint64)": {
        "params": {
          "_byteCount": "Number of bytes in the calldata."
        },
        "returns": {
          "_0": "The minimum gas limit for a deposit."
        }
      },
      "onApprove(address,address,uint256,bytes)": {
        "params": {
          "_amount": "Approved amount",
          "_data": "Data used in OnApprove contract",
          "_owner": "Account that called approveAndCall"
        }
      },
      "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."
        }
      },
      "unpackOnApproveData(bytes)": {
        "params": {
          "_data": "Data used in OnApprove contract"
        }
      }
    },
    "events": {
      "Paused(address)": {
        "params": {
          "account": "Address of the account triggering the pause."
        }
      },
      "TransactionDeposited(address,address,uint256,bytes)": {
        "params": {
          "from": "Address that triggered the deposit transaction.",
          "opaqueData": "ABI encoded deposit data to be parsed off-chain.",
          "to": "Address that the deposit transaction is directed to.",
          "version": "Version of this deposit transaction event."
        }
      },
      "Unpaused(address)": {
        "params": {
          "account": "Address of the account triggering the unpause."
        }
      },
      "WithdrawalFinalized(bytes32,bool)": {
        "params": {
          "success": "Whether the withdrawal transaction was successful.",
          "withdrawalHash": "Hash of the withdrawal transaction."
        }
      },
      "WithdrawalProven(bytes32,address,address)": {
        "params": {
          "from": "Address that triggered the withdrawal transaction.",
          "to": "Address that the withdrawal transaction is directed to.",
          "withdrawalHash": "Hash of the withdrawal transaction."
        }
      }
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Paused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false}],\"type\":\"event\",\"name\":\"TransactionDeposited\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Unpaused\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\",\"indexed\":false}],\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"WithdrawalProven\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"SYSTEM_CONFIG\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"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\":\"address\",\"name\":\"_nativeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"contract SystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"l2Oracle\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_byteCount\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\",\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"nativeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"onApprove\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"pause\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}]},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}]},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}]},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\",\"name\":\"unpackOnApproveData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"unpause\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"GUARDIAN()\":{\"custom:legacy\":\"\"},\"L2_ORACLE()\":{\"custom:legacy\":\"\"},\"SYSTEM_CONFIG()\":{\"custom:legacy\":\"\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Amount of L2 gas to purchase by burning gas on L1.\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"Native token value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"initialize(address,address,address,address,bool)\":{\"params\":{\"_guardian\":\"Address that can pause withdrawals.\",\"_l2Oracle\":\"Address of the L2OutputOracle contract.\",\"_paused\":\"Sets the contract's pausability state.\",\"_systemConfig\":\"Address of the SystemConfig contract.\"}},\"isOutputFinalized(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the L2 output to check.\"},\"returns\":{\"_0\":\"Whether or not the output is finalized.\"}},\"minimumGasLimit(uint64)\":{\"params\":{\"_byteCount\":\"Number of bytes in the calldata.\"},\"returns\":{\"_0\":\"The minimum gas limit for a deposit.\"}},\"onApprove(address,address,uint256,bytes)\":{\"params\":{\"_amount\":\"Approved amount\",\"_data\":\"Data used in OnApprove contract\",\"_owner\":\"Account that called approveAndCall\"}},\"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.\"}},\"unpackOnApproveData(bytes)\":{\"params\":{\"_data\":\"Data used in OnApprove contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"GUARDIAN()\":{\"notice\":\"Getter for the Guardian\"},\"L2_ORACLE()\":{\"notice\":\"Getter for the L2OutputOracle\"},\"SYSTEM_CONFIG()\":{\"notice\":\"Getter for the SystemConfig\"},\"constructor\":{\"notice\":\"Constructs the OptimismPortal contract.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"deriving deposit transactions. Note that if a deposit is made by a contract, its         address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider         using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"donateETH()\":{\"notice\":\"Accepts ETH value without triggering a deposit to L2.         This function mainly exists for the sake of the migration between the legacy         Optimism system and Bedrock.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"guardian()\":{\"notice\":\"Address that has the ability to pause and unpause withdrawals.\"},\"initialize(address,address,address,address,bool)\":{\"notice\":\"Initializer.\"},\"isOutputFinalized(uint256)\":{\"notice\":\"Determine if a given output is finalized.         Reverts if the call to L2_ORACLE.getL2Output reverts.         Returns a boolean otherwise.\"},\"l2Oracle()\":{\"notice\":\"Address of the L2OutputOracle contract.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction.         If the of this variable is the default L2 sender address, then we are NOT inside of         a call to finalizeWithdrawalTransaction.\"},\"minimumGasLimit(uint64)\":{\"notice\":\"Computes the minimum gas limit for a deposit.         The minimum gas limit linearly increases based on the size of the calldata.         This is to prevent users from creating L2 resource usage without paying for it.         This function can be used when interacting with the portal to ensure forwards         compatibility.\"},\"nativeTokenAddress()\":{\"notice\":\"Address of native (ERC-20 token)\"},\"onApprove(address,address,uint256,bytes)\":{\"notice\":\"ERC20 onApprove callback\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"pause()\":{\"notice\":\"Pauses withdrawals.\"},\"paused()\":{\"notice\":\"Determines if cross domain messaging is paused.         When set to true, withdrawals are paused.         This may be removed in the future.\"},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"notice\":\"Proves a withdrawal transaction.\"},\"provenWithdrawals(bytes32)\":{\"notice\":\"A mapping of withdrawal hashes to `ProvenWithdrawal` data.\"},\"systemConfig()\":{\"notice\":\"Address of the SystemConfig contract.\"},\"unpackOnApproveData(bytes)\":{\"notice\":\"unpack onApprove data\"},\"unpause()\":{\"notice\":\"Unpauses withdrawals.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@cwia/=lib/clones-with-immutable-args/src/\",\"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\"@rari-capital/solmate/=lib/solmate/\",\"clones-with-immutable-args/=lib/clones-with-immutable-args/src/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\"openzeppelin-contracts/=lib/openzeppelin-contracts/\",\"safe-contracts/=lib/safe-contracts/contracts/\",\"solmate/=lib/solmate/src/\"],\"optimizer\":{\"enabled\":true,\"runs\":999999},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/L1/OptimismPortal.sol\":\"OptimismPortal\"},\"libraries\":{}},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/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\":\"0x60042eb3e619518cab9a8f2480b62871c2d813716e2e60d9a5e0c5f271c58705\",\"urls\":[\"bzz-raw://08538ef2aa99c508b56a8bb9b3c7b93476cba9dbf0b47783141e5e50a02156cc\",\"dweb:/ipfs/QmdvFZ1fUaTkNdmtB66rNAo73RxY7kccsgR6Uqz7psoXGN\"],\"license\":\"MIT\"},\"src/L1/OnApprove.sol\":{\"keccak256\":\"0xe25cdee8494fdad1df7f58d4d9bdc3c86717c4a9c1284c6b7f01c24fab9f62f6\",\"urls\":[\"bzz-raw://88bcdc10a43cb49a53ab2b13e3d4b517fafc7964e302e21ca2408cc67072ce5f\",\"dweb:/ipfs/QmdkZrScguyEFndS2r1TrXY7aPsyfJp1had8VMX3S3En6C\"],\"license\":\"MIT\"},\"src/L1/OptimismPortal.sol\":{\"keccak256\":\"0x40592466b0286174c250d1cb8d25ded2d65a606a1a81850c7b2f5a6fd423680d\",\"urls\":[\"bzz-raw://3607e06fa66dbbe51c003949bbd29dc74b6ec1da9dd756f001a96596c3326c3c\",\"dweb:/ipfs/QmWxY1AGGecbM7cZLpoREJidJq371Q1HixXiyzXpwM1mQ5\"],\"license\":\"MIT\"},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xa4d524f2a5e91a0b63a62603e712001c51c77e8371b93cbb576bcb7d074b7588\",\"urls\":[\"bzz-raw://d6d8141b6c6dc72d2e684c1ae388c005fd78c9ca7fc9c15dddebd227ca4fd730\",\"dweb:/ipfs/QmPfJrR4qssu769TDWJnxdTozqKtZUxiY8fs95bhfECTvG\"],\"license\":\"MIT\"},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0x4bbbc7868e948c44f29285a69383e93251a0c330a67929fb72def01cec060d4e\",\"urls\":[\"bzz-raw://1e7ea2f8b3d49bee9c753f107ede6eda93b2cc0e34d0643fa14ebbb26c19e71b\",\"dweb:/ipfs/QmRP81F8FRVXVZs6u2f2poEPDnbFZhNwNYxHgCVEhGpEmB\"],\"license\":\"MIT\"},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x06a5a8b00527843f0cfc1bb3c0661316966a6cc432f88be31f23cde78cd07560\",\"urls\":[\"bzz-raw://d5209e78e5415c0bf8b350362a825cc56152811abd6fcf2df3d4fa47766d3dee\",\"dweb:/ipfs/Qmf43xyc4Um32NmccayDfhm8kSnS2mhHXpPZnwABJS7cWm\"],\"license\":\"MIT\"},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"],\"license\":\"MIT\"},\"src/libraries/Bytes.sol\":{\"keccak256\":\"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859\",\"urls\":[\"bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782\",\"dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9\"],\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe12e392f05f80d3837c9392d016471181ae1ee6b84ea91b4e125e6523e5f18a2\",\"urls\":[\"bzz-raw://a3509231c228b7a4352573cd422cf0260dcbb94cfd915e5b664643db5475a5b7\",\"dweb:/ipfs/QmU2QERY4mHxqWFqSE5Exsy6Ftc5MTjTtYHC11fahLJWDC\"],\"license\":\"MIT\"},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0xd5bbcb7da113e69562498d9543765e03912558ad66348682c2049c31e19f9d9b\",\"urls\":[\"bzz-raw://afc6656ea10062c0c9d0817bb8683636caebf9222c9c102f29ea54fff74a2f93\",\"dweb:/ipfs/QmTNWtMgrTRHM6XtdUmA8bMZcuFpXoFCXgXR5vRihZWLuW\"],\"license\":\"MIT\"},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x44e2b2dcfffc39c0fc95ccd3c2118c7e7585fadf3dca327877d5756c7d4b21c3\",\"urls\":[\"bzz-raw://6c89e0d9cfcb08a0d3c46c85367a32bbd9703468ba4c0c5bb6e124c1d173b26b\",\"dweb:/ipfs/QmaY3nQHBBhHK1wrurVXiEeNL8hfZ1pRmhpqW44tFDJnDf\"],\"license\":\"MIT\"},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"],\"license\":\"MIT\"},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x902a0a815272a5b76c647d9e82101aca765e9835a6624d0857088b9da0f58afd\",\"urls\":[\"bzz-raw://9c39a697aacb0a2eac0bf1fbd7790d835a685c61006f6d3464e19cbc96a24480\",\"dweb:/ipfs/QmV3T8ZTRWPB5CNuZjxwWQNoENd7W4SoBMnFG6Y6g6xYV4\"],\"license\":\"MIT\"},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"],\"license\":\"MIT\"},\"src/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0x9ba74a3b0a11693e622380807d213d5d1250d974e18b2cd768da9cbe719a6778\",\"urls\":[\"bzz-raw://0808d721ed9e05707526ee134faa051d707a95ee6b8bd6e0b1972275da8e5723\",\"dweb:/ipfs/QmcTTPu9xgckfWdbFUAcr2RAgk3J6vzyR4FpV798TjFMeN\"],\"license\":\"MIT\"},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"],\"license\":\"MIT\"},\"src/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c\",\"urls\":[\"bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74\",\"dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE\"],\"license\":\"MIT\"},\"src/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288\",\"urls\":[\"bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681\",\"dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw\"],\"license\":\"MIT\"},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"],\"license\":\"MIT\"},\"src/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"],\"license\":\"Apache-2.0\"}},\"version\":1}",
  "numDeployments": 1,
  "receipt": "",
  "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "storageLayout": {
    "storage": [
      {
        "astId": 32100,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "_initialized",
        "offset": 0,
        "slot": "0",
        "type": "t_uint8"
      },
      {
        "astId": 32103,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "_initializing",
        "offset": 1,
        "slot": "0",
        "type": "t_bool"
      },
      {
        "astId": 64947,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "params",
        "offset": 0,
        "slot": "1",
        "type": "t_struct(ResourceParams)64930_storage"
      },
      {
        "astId": 64952,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "__gap",
        "offset": 0,
        "slot": "2",
        "type": "t_array(t_uint256)48_storage"
      },
      {
        "astId": 63849,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "l2Sender",
        "offset": 0,
        "slot": "50",
        "type": "t_address"
      },
      {
        "astId": 63854,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "finalizedWithdrawals",
        "offset": 0,
        "slot": "51",
        "type": "t_mapping(t_bytes32,t_bool)"
      },
      {
        "astId": 63860,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "provenWithdrawals",
        "offset": 0,
        "slot": "52",
        "type": "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)63838_storage)"
      },
      {
        "astId": 63863,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "paused",
        "offset": 0,
        "slot": "53",
        "type": "t_bool"
      },
      {
        "astId": 63867,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "l2Oracle",
        "offset": 1,
        "slot": "53",
        "type": "t_contract(L2OutputOracle)63721"
      },
      {
        "astId": 63871,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "systemConfig",
        "offset": 0,
        "slot": "54",
        "type": "t_contract(SystemConfig)66053"
      },
      {
        "astId": 63874,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "guardian",
        "offset": 0,
        "slot": "55",
        "type": "t_address"
      },
      {
        "astId": 63877,
        "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
        "label": "nativeTokenAddress",
        "offset": 0,
        "slot": "56",
        "type": "t_address"
      },
      {
        "astId": 63879,
        "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)63721": {
        "encoding": "inplace",
        "label": "contract L2OutputOracle",
        "numberOfBytes": "20"
      },
      "t_contract(SystemConfig)66053": {
        "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)63838_storage)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)",
        "numberOfBytes": "32",
        "value": "t_struct(ProvenWithdrawal)63838_storage"
      },
      "t_struct(ProvenWithdrawal)63838_storage": {
        "encoding": "inplace",
        "label": "struct OptimismPortal.ProvenWithdrawal",
        "numberOfBytes": "64",
        "members": [
          {
            "astId": 63833,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "outputRoot",
            "offset": 0,
            "slot": "0",
            "type": "t_bytes32"
          },
          {
            "astId": 63835,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "timestamp",
            "offset": 0,
            "slot": "1",
            "type": "t_uint128"
          },
          {
            "astId": 63837,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "l2OutputIndex",
            "offset": 16,
            "slot": "1",
            "type": "t_uint128"
          }
        ]
      },
      "t_struct(ResourceParams)64930_storage": {
        "encoding": "inplace",
        "label": "struct ResourceMetering.ResourceParams",
        "numberOfBytes": "32",
        "members": [
          {
            "astId": 64925,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "prevBaseFee",
            "offset": 0,
            "slot": "0",
            "type": "t_uint128"
          },
          {
            "astId": 64927,
            "contract": "src/L1/OptimismPortal.sol:OptimismPortal",
            "label": "prevBoughtGas",
            "offset": 16,
            "slot": "0",
            "type": "t_uint64"
          },
          {
            "astId": 64929,
            "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": "0x1be870297d38c8e8fbdd2849ad588d11e992ce9b9c7eaa4389656290e766da6f",
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "GUARDIAN()": {
        "notice": "Getter for the Guardian"
      },
      "L2_ORACLE()": {
        "notice": "Getter for the L2OutputOracle"
      },
      "SYSTEM_CONFIG()": {
        "notice": "Getter for the SystemConfig"
      },
      "constructor": {
        "notice": "Constructs the OptimismPortal contract."
      },
      "depositTransaction(address,uint256,uint64,bool,bytes)": {
        "notice": "deriving deposit transactions. Note that if a deposit is made by a contract, its         address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider         using the CrossDomainMessenger contracts for a simpler developer experience."
      },
      "donateETH()": {
        "notice": "Accepts ETH value without triggering a deposit to L2.         This function mainly exists for the sake of the migration between the legacy         Optimism system and Bedrock."
      },
      "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": {
        "notice": "Finalizes a withdrawal transaction."
      },
      "finalizedWithdrawals(bytes32)": {
        "notice": "A list of withdrawal hashes which have been successfully finalized."
      },
      "guardian()": {
        "notice": "Address that has the ability to pause and unpause withdrawals."
      },
      "initialize(address,address,address,address,bool)": {
        "notice": "Initializer."
      },
      "isOutputFinalized(uint256)": {
        "notice": "Determine if a given output is finalized.         Reverts if the call to L2_ORACLE.getL2Output reverts.         Returns a boolean otherwise."
      },
      "l2Oracle()": {
        "notice": "Address of the L2OutputOracle contract."
      },
      "l2Sender()": {
        "notice": "Address of the L2 account which initiated a withdrawal in this transaction.         If the of this variable is the default L2 sender address, then we are NOT inside of         a call to finalizeWithdrawalTransaction."
      },
      "minimumGasLimit(uint64)": {
        "notice": "Computes the minimum gas limit for a deposit.         The minimum gas limit linearly increases based on the size of the calldata.         This is to prevent users from creating L2 resource usage without paying for it.         This function can be used when interacting with the portal to ensure forwards         compatibility."
      },
      "nativeTokenAddress()": {
        "notice": "Address of native (ERC-20 token)"
      },
      "onApprove(address,address,uint256,bytes)": {
        "notice": "ERC20 onApprove callback"
      },
      "params()": {
        "notice": "EIP-1559 style gas parameters."
      },
      "pause()": {
        "notice": "Pauses withdrawals."
      },
      "paused()": {
        "notice": "Determines if cross domain messaging is paused.         When set to true, withdrawals are paused.         This may be removed in the future."
      },
      "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": {
        "notice": "Proves a withdrawal transaction."
      },
      "provenWithdrawals(bytes32)": {
        "notice": "A mapping of withdrawal hashes to `ProvenWithdrawal` data."
      },
      "systemConfig()": {
        "notice": "Address of the SystemConfig contract."
      },
      "unpackOnApproveData(bytes)": {
        "notice": "unpack onApprove data"
      },
      "unpause()": {
        "notice": "Unpauses withdrawals."
      },
      "version()": {
        "notice": "Semantic version."
      }
    },
    "events": {
      "Paused(address)": {
        "notice": "Emitted when the pause is triggered."
      },
      "TransactionDeposited(address,address,uint256,bytes)": {
        "notice": "Emitted when a transaction is deposited from L1 to L2.         The parameters of this event are read by the rollup node and used to derive deposit         transactions on L2."
      },
      "Unpaused(address)": {
        "notice": "Emitted when the pause is lifted."
      },
      "WithdrawalFinalized(bytes32,bool)": {
        "notice": "Emitted when a withdrawal transaction is finalized."
      },
      "WithdrawalProven(bytes32,address,address)": {
        "notice": "Emitted when a withdrawal transaction is proven."
      }
    },
    "notice": "The OptimismPortal is a low-level contract responsible for passing messages between L1         and L2. Messages sent directly to the OptimismPortal have no form of replayability.         Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface."
  }
}