0 txs
7.4k calls
constructor
constructor(address _portal, address l1mnt)
functions
baseGas
purefunction baseGas(bytes _message, uint32 _minGasLimit) pure returns (uint64)
failedMessages
viewfunction failedMessages(bytes32) view returns (bool)
HASH_MESSAGE_BASE_GAS
viewfunction HASH_MESSAGE_BASE_GAS() view returns (uint64)
HASH_MESSAGE_GAS_PER_BYTE
viewfunction HASH_MESSAGE_GAS_PER_BYTE() view returns (uint64)
L1_MNT_ADDRESS
viewfunction L1_MNT_ADDRESS() view returns (address)
MESSAGE_VERSION
viewfunction MESSAGE_VERSION() view returns (uint16)
messageNonce
viewfunction messageNonce() view returns (uint256)
MIN_GAS_CALLDATA_OVERHEAD
viewfunction MIN_GAS_CALLDATA_OVERHEAD() view returns (uint64)
MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR
viewfunction MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns (uint64)
MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR
viewfunction MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns (uint64)
OTHER_MESSENGER
viewfunction OTHER_MESSENGER() view returns (address)
PORTAL
viewfunction PORTAL() view returns (address)
RELAY_CALL_OVERHEAD
viewfunction RELAY_CALL_OVERHEAD() view returns (uint64)
RELAY_CONSTANT_OVERHEAD
viewfunction RELAY_CONSTANT_OVERHEAD() view returns (uint64)
RELAY_GAS_CHECK_BUFFER
viewfunction RELAY_GAS_CHECK_BUFFER() view returns (uint64)
RELAY_RESERVED_GAS
viewfunction RELAY_RESERVED_GAS() view returns (uint64)
successfulMessages
viewfunction successfulMessages(bytes32) view returns (bool)
version
viewfunction version() view returns (string)
xDomainMessageSender
viewfunction xDomainMessageSender() view returns (address)
initialize
nonpayablefunction initialize()
relayMessage
payablefunction relayMessage(uint256 _nonce, address _sender, address _target, uint256 _mntValue, uint256 _ethValue, uint256 _minGasLimit, bytes _message) payable
sendMessage
payablefunction sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable
sendMessage
payablefunction sendMessage(uint256 _mntAmount, address _target, bytes _message, uint32 _minGasLimit) payable
events
FailedRelayedMessage
event FailedRelayedMessage(bytes32 indexed msgHash)
Initialized
event Initialized(uint8 version)
RelayedMessage
event RelayedMessage(bytes32 indexed msgHash)
SentMessage
event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit)
SentMessageExtension1
event SentMessageExtension1(address indexed sender, uint256 mntValue, uint256 ethValue)
errors
No errors.
creation bytecode
0x6101406040523480156200001257600080fd5b50604051620031443803806200314483398101604081905262000035916200028c565b734200000000000000000000000000000000000007608052600160a052600560c052600060e0526001600160a01b03828116610100528116610120526200007b62000083565b5050620002cb565b600054600160a81b900460ff1615808015620000ac57506000546001600160a01b90910460ff16105b80620000e35750620000c930620001d060201b62001c571760201c565b158015620000e35750600054600160a01b900460ff166001145b6200014c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200017a576000805460ff60a81b1916600160a81b1790555b62000184620001df565b8015620001cd576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054600160a81b900460ff166200024e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000143565b60cc546001600160a01b0316620002745760cc80546001600160a01b03191661dead1790555b565b6001600160a01b0381168114620001cd57600080fd5b60008060408385031215620002a057600080fd5b8251620002ad8162000276565b6020840151909250620002c08162000276565b809150509250929050565b60805160a05160c05160e0516101005161012051612dd56200036f600039600081816103b901528181610e1701528181610eae0152818161184401526119c50152600081816101df01528181610e7c01528181611cb001528181612059015281816120ba0152612186015260006108e6015260006108bd015260006108940152600081816103300152818161062601528181610fb401526120830152612dd56000f3fe6080604052600436106101805760003560e01c806383a74074116100d6578063b1b1b2091161007f578063ecc7042811610059578063ecc704281461043e578063efeaf2a6146104a3578063ff8daf15146104b957600080fd5b8063b1b1b209146103db578063b28ade251461040b578063b575e3001461042b57600080fd5b8063a06ff4f5116100b0578063a06ff4f514610352578063a4e7f8bd14610367578063ac6986c5146103a757600080fd5b806383a74074146102f05780638cbeeef2146103075780639fce812c1461031e57600080fd5b80633f827a5a116101385780635644cfdf116101125780635644cfdf146102b05780636e296e45146102c65780638129fc1c146102db57600080fd5b80633f827a5a146102505780634c1d6a691461027857806354fd4d501461028e57600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e8146102265780633dbb202b1461023b57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b506102017f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561023257600080fd5b5061019a604081565b61024e610249366004612644565b6104cc565b005b34801561025c57600080fd5b50610265600181565b60405161ffff90911681526020016101af565b34801561028457600080fd5b5061019a619c4081565b34801561029a57600080fd5b506102a361088d565b6040516101af9190612721565b3480156102bc57600080fd5b5061019a61d6d881565b3480156102d257600080fd5b50610201610930565b3480156102e757600080fd5b5061024e610a17565b3480156102fc57600080fd5b5061019a62030d4081565b34801561031357600080fd5b5061019a62015f9081565b34801561032a57600080fd5b506102017f000000000000000000000000000000000000000000000000000000000000000081565b34801561035e57600080fd5b5061019a600281565b34801561037357600080fd5b50610397610382366004612734565b60cf6020526000908152604090205460ff1681565b60405190151581526020016101af565b3480156103b357600080fd5b506102017f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e757600080fd5b506103976103f6366004612734565b60cb6020526000908152604090205460ff1681565b34801561041757600080fd5b5061019a61042636600461274d565b610c14565b61024e6104393660046127a1565b610ca9565b34801561044a57600080fd5b5061049560ce547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b3480156104af57600080fd5b5061019a61032081565b61024e6104c7366004612812565b61119d565b73ffffffffffffffffffffffffffffffffffffffff8416321415806104ef575034155b610580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f6f6e63652074617267657420697320616e20454f412c206d73672e76616c756560448201527f206d757374206265207a65726f0000000000000000000000000000000000000060648201526084015b60405180910390fd5b7fffffffffffffffffffffffff215221522152215221522152215221522152eeef73ffffffffffffffffffffffffffffffffffffffff85160161061f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f746172676574206d757374206e6f742062652042564d5f455448206f6e204c326044820152606401610577565b61075c60007f0000000000000000000000000000000000000000000000000000000000000000610650868686610c14565b7fff8daf15000000000000000000000000000000000000000000000000000000006106bb60ce547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a6000348a8d8d6040516024016106da9897969594939291906128ea565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611c73565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856107e160ce547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107f3959493929190612953565b60405180910390a2604080516000815234602082015233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060ce80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606108b87f0000000000000000000000000000000000000000000000000000000000000000611d2c565b6108e17f0000000000000000000000000000000000000000000000000000000000000000611d2c565b61090a7f0000000000000000000000000000000000000000000000000000000000000000611d2c565b60405160200161091c939291906129a1565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610577565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a62575060005460017401000000000000000000000000000000000000000090910460ff16105b80610a945750303b158015610a94575060005474010000000000000000000000000000000000000000900460ff166001145b610b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610577565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610ba657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610bae611e69565b8015610c1157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600061d6d862015f90619c40603f610c33604063ffffffff8816612a46565b610c3d9190612aa5565b610320610c4b600289612a46565b610c5660108a612a46565b610c639062030d40612acc565b610c6d9190612acc565b610c779190612acc565b610c819190612acc565b610c8b9190612acc565b610c959190612acc565b610c9f9190612acc565b90505b9392505050565b73ffffffffffffffffffffffffffffffffffffffff841632141580610ccc575034155b610d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f6f6e63652074617267657420697320616e20454f412c206d73672e76616c756560448201527f206d757374206265207a65726f000000000000000000000000000000000000006064820152608401610577565b7fffffffffffffffffffffffff215221522152215221522152215221522152eeef73ffffffffffffffffffffffffffffffffffffffff851601610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f746172676574206d757374206e6f742062652042564d5f455448206f6e204c326044820152606401610577565b8415610fae57610e3f73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333088611f60565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790526000917f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190612af8565b905080610fac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f74686520617070726f766520666f72204c31206d6e7420746f204f7074696d6960448201527f736d506f7274616c206661696c656400000000000000000000000000000000006064820152608401610577565b505b611067857f0000000000000000000000000000000000000000000000000000000000000000610fde868686610c14565b7fff8daf150000000000000000000000000000000000000000000000000000000061104960ce547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a8c348a8d8d6040516024016106da989796959493929190612b1a565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856110ec60ce547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516110fe959493929190612953565b60405180910390a26040805186815234602082015233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060ce80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b905090565b60f088901c6001811115611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610577565b8061ffff1660000361135b5760006112b7888a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d611ffb565b600081815260cb602052604090205490915060ff1615611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610577565b505b60006113a28a8a8a8a8a8a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201a92505050565b90506113ac61203f565b156113e4578534146113c0576113c0612b72565b600081815260cf602052604090205460ff16156113df576113df612b72565b611536565b3415611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610577565b600081815260cf602052604090205460ff16611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610577565b61153f88612163565b156115f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610577565b600081815260cb602052604090205460ff1615611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610577565b6116b3856116a461d6d862015f90612acc565b67ffffffffffffffff166121da565b15806116d9575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156117f257600081815260cf602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610577565b5050611c4d565b86156118b3576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152602482018990527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af115801561188d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b19190612af8565b505b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b1617905560006119458962015f905a6119089190612ba1565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f892505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905590508715611a34576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152600060248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015611a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a329190612af8565b505b8015611b3c57600082815260cb602052604090205460ff1615611ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f76657273696f6e6564486173682068617320616c7265616479206265206d617260448201527f6b6564206173207375636365737366756c0000000000000000000000000000006064820152608401610577565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611c49565b600082815260cf602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611c49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610577565b5050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fa77b7d0800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a77b7d08903490611cf49082908990899082908a906000908b90600401612bb8565b6000604051808303818588803b158015611d0d57600080fd5b505af1158015611d21573d6000803e3d6000fd5b505050505050505050565b606081600003611d6f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611d995780611d8381612c1e565b9150611d929050600a83612c56565b9150611d73565b60008167ffffffffffffffff811115611db457611db4612c6a565b6040519080825280601f01601f191660200182016040528015611dde576020820181803683370190505b5090505b8415611e6157611df3600183612ba1565b9150611e00600a86612c99565b611e0b906030612cad565b60f81b818381518110611e2057611e20612cc5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611e5a600a86612c56565b9450611de2565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff16611f14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610577565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611f5e5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611ff5908590612212565b50505050565b600061200985858585612323565b805190602001209050949350505050565b600061202b888888888888886123bc565b805190602001209050979650505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561119857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015612123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121479190612cf4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff82163014806121d457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000612274826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661245e9092919063ffffffff16565b80519091501561231e57808060200190518101906122929190612af8565b61231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610577565b505050565b60608484848460405160240161233c9493929190612d11565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060878787878787876040516024016123db9796959493929190612d5b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fff8daf15000000000000000000000000000000000000000000000000000000001790529050979650505050505050565b6060610c9f84846000858573ffffffffffffffffffffffffffffffffffffffff85163b6124e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610577565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125109190612dac565b60006040518083038185875af1925050503d806000811461254d576040519150601f19603f3d011682016040523d82523d6000602084013e612552565b606091505b509150915061256282828661256d565b979650505050505050565b6060831561257c575081610ca2565b82511561258c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105779190612721565b73ffffffffffffffffffffffffffffffffffffffff81168114610c1157600080fd5b60008083601f8401126125f457600080fd5b50813567ffffffffffffffff81111561260c57600080fd5b60208301915083602082850101111561262457600080fd5b9250929050565b803563ffffffff8116811461263f57600080fd5b919050565b6000806000806060858703121561265a57600080fd5b8435612665816125c0565b9350602085013567ffffffffffffffff81111561268157600080fd5b61268d878288016125e2565b90945092506126a090506040860161262b565b905092959194509250565b60005b838110156126c65781810151838201526020016126ae565b83811115611ff55750506000910152565b600081518084526126ef8160208601602086016126ab565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ca260208301846126d7565b60006020828403121561274657600080fd5b5035919050565b60008060006040848603121561276257600080fd5b833567ffffffffffffffff81111561277957600080fd5b612785868287016125e2565b909450925061279890506020850161262b565b90509250925092565b6000806000806000608086880312156127b957600080fd5b8535945060208601356127cb816125c0565b9350604086013567ffffffffffffffff8111156127e757600080fd5b6127f3888289016125e2565b909450925061280690506060870161262b565b90509295509295909350565b60008060008060008060008060e0898b03121561282e57600080fd5b883597506020890135612840816125c0565b96506040890135612850816125c0565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561288157600080fd5b61288d8b828c016125e2565b999c989b5096995094979396929594505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525060ff8716606083015285608083015263ffffffff851660a083015260e060c083015261294560e0830184866128a1565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006129836080830186886128a1565b905083604083015263ffffffff831660608301529695505050505050565b600084516129b38184602089016126ab565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516129ef816001850160208a016126ab565b60019201918201528351612a0a8160028401602088016126ab565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615612a6d57612a6d612a17565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680612ac057612ac0612a76565b92169190910492915050565b600067ffffffffffffffff808316818516808303821115612aef57612aef612a17565b01949350505050565b600060208284031215612b0a57600080fd5b81518015158114610ca257600080fd5b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525086606083015285608083015263ffffffff851660a083015260e060c083015261294560e0830184866128a1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015612bb357612bb3612a17565b500390565b87815286602082015273ffffffffffffffffffffffffffffffffffffffff8616604082015284606082015267ffffffffffffffff8416608082015282151560a082015260e060c08201526000612c1160e08301846126d7565b9998505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c4f57612c4f612a17565b5060010190565b600082612c6557612c65612a76565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082612ca857612ca8612a76565b500690565b60008219821115612cc057612cc0612a17565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612d0657600080fd5b8151610ca2816125c0565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152612d4a60808301856126d7565b905082606083015295945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152612c1160e08301846126d7565b60008251612dbe8184602087016126ab565b919091019291505056fea164736f6c634300080f000a000000000000000000000000c54cb22944f2be476e02decfcd7e3e7d3e15a8fb0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf354