0 txs
1.6k calls
constructor
No constructor.
functions
admin
viewfunction admin() view returns (address)
getDefaultConnection
viewfunction getDefaultConnection(string _nid) view returns (address)
getFee
viewfunction getFee(string _net, bool _rollback, string[] _sources) view returns (uint256)
getFee
viewfunction getFee(string _net, bool _rollback) view returns (uint256)
getNetworkAddress
viewfunction getNetworkAddress() view returns (string)
getNetworkId
viewfunction getNetworkId() view returns (string)
getProtocolFee
viewfunction getProtocolFee() view returns (uint256)
getProtocolFeeHandler
viewfunction getProtocolFeeHandler() view returns (address)
verifySuccess
viewfunction verifySuccess(uint256 _sn) view returns (bool)
executeCall
nonpayablefunction executeCall(uint256 _reqId, bytes _data)
executeMessage
nonpayablefunction executeMessage(address to, string from, bytes data, string[] protocols)
executeRollback
nonpayablefunction executeRollback(uint256 _sn)
handleBTPError
nonpayablefunction handleBTPError(string _src, string _svc, uint256 _sn, uint256 _code, string _msg)
handleBTPMessage
nonpayablefunction handleBTPMessage(string _from, string _svc, uint256 _sn, bytes _msg)
handleError
nonpayablefunction handleError(uint256 _sn)
handleMessage
nonpayablefunction handleMessage(string _from, bytes _msg)
initialize
nonpayablefunction initialize(string _nid)
sendCall
payablefunction sendCall(string _to, bytes _data) payable returns (uint256)
sendCallMessage
payablefunction sendCallMessage(string _to, bytes _data, bytes _rollback, string[] sources, string[] destinations) payable returns (uint256)
sendCallMessage
payablefunction sendCallMessage(string _to, bytes _data, bytes _rollback) payable returns (uint256)
setAdmin
nonpayablefunction setAdmin(address _address)
setDefaultConnection
nonpayablefunction setDefaultConnection(string _nid, address connection)
setProtocolFee
nonpayablefunction setProtocolFee(uint256 _value)
setProtocolFeeHandler
nonpayablefunction setProtocolFeeHandler(address _addr)
events
CallExecuted
event CallExecuted(uint256 indexed _reqId, int256 _code, string _msg)
CallMessage
event CallMessage(string indexed _from, string indexed _to, uint256 indexed _sn, uint256 _reqId, bytes _data)
CallMessageSent
event CallMessageSent(address indexed _from, string indexed _to, uint256 indexed _sn)
Initialized
event Initialized(uint64 version)
ResponseMessage
event ResponseMessage(uint256 indexed _sn, int256 _code)
RollbackExecuted
event RollbackExecuted(uint256 indexed _sn)
RollbackMessage
event RollbackMessage(uint256 indexed _sn)
errors
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
creation bytecode
0x608060405234801561001057600080fd5b50615e6780620000216000396000f3fe60806040526004361061014b5760003560e01c80637d4c4f4a116100b6578063bbc22efd1161006f578063bbc22efd14610389578063bda8ce21146103a9578063ec05386b146103c9578063edc6afff14610409578063f62d18881461041c578063f851a4401461043c57600080fd5b80637d4c4f4a146102e15780638ef378b8146103015780639e553a4f14610314578063a5a4103114610334578063b070f9e514610349578063b70eeb8d1461036957600080fd5b806339c5f3fc1161010857806339c5f3fc1461022a578063502bf8e01461024c57806364f037571461026c5780636bf459cb1461028c578063704b6c02146102a1578063787dce3d146102c157600080fd5b80630a823dea1461015057806317fd7a33146101725780632a84e1b0146101985780632eb71414146101b8578063304a70b5146101ea578063313bf3981461020a575b600080fd5b34801561015c57600080fd5b5061017061016b366004614de3565b610451565b005b610185610180366004614f44565b61046e565b6040519081526020015b60405180910390f35b3480156101a457600080fd5b506101706101b3366004614fa7565b6106f5565b3480156101c457600080fd5b50600d546001600160a01b03165b6040516001600160a01b03909116815260200161018f565b3480156101f657600080fd5b50610185610205366004615074565b610a61565b34801561021657600080fd5b506101706102253660046150fe565b610b18565b34801561023657600080fd5b5061023f610c28565b60405161018f91906151e6565b34801561025857600080fd5b506101706102673660046151f9565b610cba565b34801561027857600080fd5b50610170610287366004615214565b610d5b565b34801561029857600080fd5b5061023f610dd7565b3480156102ad57600080fd5b506101706102bc3660046151f9565b610de6565b3480156102cd57600080fd5b506101706102dc366004614fa7565b610e87565b3480156102ed57600080fd5b506101856102fc366004615261565b610ec4565b61018561030f3660046152a5565b610f06565b34801561032057600080fd5b506101d261032f366004615322565b610f22565b34801561034057600080fd5b50600454610185565b34801561035557600080fd5b50610170610364366004614fa7565b610f53565b34801561037557600080fd5b50610170610384366004615356565b610f89565b34801561039557600080fd5b506101706103a43660046153f9565b610fa8565b3480156103b557600080fd5b506101706103c4366004615464565b6111f0565b3480156103d557600080fd5b506103f96103e4366004614fa7565b60009081526007602052604090205460ff1690565b604051901515815260200161018f565b6101856104173660046154a0565b61184a565b34801561042857600080fd5b50610170610437366004615322565b611865565b34801561044857600080fd5b506101d26119b3565b61045b86866119c2565b61046484610f53565b5050505050505050565b6000338161047b84611a64565b90506000610487611b46565b90506000610496828885611b61565b905060006105486104af866001600160a01b0316611d45565b600080546104bc90615571565b80601f01602080910402602001604051908101604052809291908181526020018280546104e890615571565b80156105355780601f1061050a57610100808354040283529160200191610535565b820191906000526020600020905b81548152906001019060200180831161051857829003601f168201915b5050505050611d5090919063ffffffff16565b90506000806105568a611d97565b9150915060006040518060c0016040528085815260200183815260200187815260200188600001518152602001866020015181526020018860600151815250905060006105a282611dd3565b9050610800815111156105f25760405162461bcd60e51b815260206004820152601360248201527213585e11185d1854da5e99515e18d959591959606a1b60448201526064015b60405180910390fd5b610600848960400151611ed8565b801561060b57508551155b15610669576011600061061e8282614c9c565b61062c600183016000614c9c565b6002820160009055600382016000905560048201600090556005820160006106549190614cd6565b506010905061066382826155ed565b50610699565b855160009061067957600061067b565b875b905061068f89604001518660018486612122565b610697612233565b505b868c6040516106a891906156ac565b604051908190038120906001600160a01b038c16907f69e53ea70fdf945f6d035b3979748bc999151691fb1dc69d66f8017f8840ae2890600090a450949750505050505050505b92915050565b6000818152600e60209081526040808320815160a0810190925280546001600160a01b03168252600181018054929391929184019161073390615571565b80601f016020809104026020016040519081016040528092919081815260200182805461075f90615571565b80156107ac5780601f10610781576101008083540402835291602001916107ac565b820191906000526020600020905b81548152906001019060200180831161078f57829003601f168201915b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156108865783829060005260206000200180546107f990615571565b80601f016020809104026020016040519081016040528092919081815260200182805461082590615571565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050815260200190600101906107da565b50505050815260200160038201805461089e90615571565b80601f01602080910402602001604051908101604052809291908181526020018280546108ca90615571565b80156109175780601f106108ec57610100808354040283529160200191610917565b820191906000526020600020905b8154815290600101906020018083116108fa57829003601f168201915b50505091835250506004919091015460ff16151560209091015280519091506001600160a01b031661097e5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696453657269616c4e756d60801b60448201526064016105e9565b80608001516109c45760405162461bcd60e51b8152602060048201526012602482015271149bdb1b189858dad39bdd115b98589b195960721b60448201526064016105e9565b6109cd826122b7565b8051606082015160408084015190516306277e7360e31b8152309363313bf39893610a0093919260019290600401615722565b600060405180830381600087803b158015610a1a57600080fd5b505af1158015610a2e573d6000803e3d6000fd5b50506040518492507f08f0ac7aef6da8bbe43bee8b1444a1883f1359566618bc379ce5abba448838379150600090a25050565b600454600090610a718584611ed8565b8015610a7b575083155b15610a8a576000915050610b11565b60005b8351811015610b0d576000610aeb6040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b815250868481518110610ad557610ad56157ea565b602002602001015161230c90919063ffffffff16565b9050610af88188886125de565b610b029084615816565b925050600101610a8d565b5090505b9392505050565b333014610b565760405162461bcd60e51b815260206004820152600c60248201526b13db9b1e525b9d195c9b985b60a21b60448201526064016105e9565b8051600003610bc4576040516325ecfc2360e11b81526001600160a01b03851690634bd9f84690610b8d9086908690600401615829565b600060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b50505050610c22565b604051635d6a16f560e01b81526001600160a01b03851690635d6a16f590610bf49086908690869060040161584e565b600060405180830381600087803b158015610c0e57600080fd5b505af1158015610464573d6000803e3d6000fd5b50505050565b606060008054610c3790615571565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6390615571565b8015610cb05780601f10610c8557610100808354040283529160200191610cb0565b820191906000526020600020905b815481529060010190602001808311610c9357829003601f168201915b5050505050905090565b610cc2612658565b6001600160a01b0316336001600160a01b031614610cf25760405162461bcd60e51b81526004016105e990615887565b6001600160a01b038116610d395760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69644164647265737360901b60448201526064016105e9565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610d63612658565b6001600160a01b0316336001600160a01b031614610d935760405162461bcd60e51b81526004016105e990615887565b80600a83604051610da491906156ac565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050565b606060018054610c3790615571565b610dee612658565b6001600160a01b0316336001600160a01b031614610e1e5760405162461bcd60e51b81526004016105e990615887565b6001600160a01b038116610e655760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69644164647265737360901b60448201526064016105e9565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b610e8f612658565b6001600160a01b0316336001600160a01b031614610ebf5760405162461bcd60e51b81526004016105e990615887565b600455565b6000610ef9600a84604051610ed991906156ac565b908152604051908190036020019020546001600160a01b031684846125de565b600454610b119190615816565b6000606080610f18868686858561268b565b9695505050505050565b6000600a82604051610f3491906156ac565b908152604051908190036020019020546001600160a01b031692915050565b610f8660405180606001604052808381526020016000815260200160405180602001604052806000815250815250612755565b50565b610f9385856119c2565b610f9f87878484610fa8565b50505050505050565b61107560008054610fb890615571565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe490615571565b80156110315780601f1061100657610100808354040283529160200191611031565b820191906000526020600020905b81548152906001019060200180831161101457829003601f168201915b505050505085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050612d8c9050565b156110b75760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590813995d1ddbdc9ac8125160721b60448201526064016105e9565b60006110f883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612de992505050565b80519091506000190161114d5761114885858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506020830151612e4a565b6111e9565b80516001190161116c5761114861116782602001516131f3565b612755565b60006111cd604051806040016040528060018152602001602960f81b8152506111c761119b856000015161328b565b60408051808201909152600f81526e0aadcd6dcdeeedc9ae6cea8f2e0ca5608b1b6020820152906133fb565b906133fb565b90508060405162461bcd60e51b81526004016105e991906151e6565b5050505050565b6000828152600f6020526040808220815160c0810190925280548290829061121790615571565b80601f016020809104026020016040519081016040528092919081815260200182805461124390615571565b80156112905780601f1061126557610100808354040283529160200191611290565b820191906000526020600020905b81548152906001019060200180831161127357829003601f168201915b505050505081526020016001820180546112a990615571565b80601f01602080910402602001604051908101604052809291908181526020018280546112d590615571565b80156113225780601f106112f757610100808354040283529160200191611322565b820191906000526020600020905b81548152906001019060200180831161130557829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820154815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561141a57838290600052602060002001805461138d90615571565b80601f01602080910402602001604051908101604052809291908181526020018280546113b990615571565b80156114065780601f106113db57610100808354040283529160200191611406565b820191906000526020600020905b8154815290600101906020018083116113e957829003601f168201915b50505050508152602001906001019061136e565b505050915250508051519091506114665760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5914995c5d595cdd125960821b60448201526064016105e9565b815160208301206080820151146114b25760405162461bcd60e51b815260206004820152601060248201526f088c2e8c290c2e6d09ad2e6dac2e8c6d60831b60448201526064016105e9565b6000838152600f60205260408120906114cb8282614c9c565b6114d9600183016000614c9c565b6002820160009055600382016000905560048201600090556005820160006115019190614cd6565b505060008160a001519050600061154c6040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b815250846020015161230c90919063ffffffff16565b606084015190915061156f57611569858285600001518786613410565b506111e9565b60028360600151036116135782516040516306277e7360e31b8152309163313bf398916115a4918591899088906004016158aa565b600060405180830381600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b5050505084600080516020615e12833981519152600160405161160691815260406020820181905260009082015260600190565b60405180910390a26111e9565b60018360600151036117f85782518390601190819061163290826155ed565b506020820151600182019061164790826155ed565b5060408201516002820155606082015160038201556080820151600482015560a08201518051611681916005840191602090910190614cf4565b509050506000611698868386600001518887613410565b9050601160006116a88282614c9c565b6116b6600183016000614c9c565b6002820160009055600382016000905560048201600090556005820160006116de9190614cd6565b505060606000601080546116f190615571565b90501180156117005750600182145b156117a0576010805461171290615571565b80601f016020809104026020016040519081016040528092919081815260200182805461173e90615571565b801561178b5780601f106117605761010080835404028352916020019161178b565b820191906000526020600020905b81548152906001019060200180831161176e57829003601f168201915b50505050509050601060006117a09190614c9c565b604080516060810182528682015181526020810184905290810182905285516117f09086906117ce9061357c565b600289604001516000196117e291906158f4565b6117eb86613592565b612122565b5050506111e9565b60405162461bcd60e51b815260206004820152602160248201527f4d6573736167652074797065206973206e6f742079657420737570706f7274656044820152601960fa1b60648201526084016105e9565b6000611859868686868661268b565b90505b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156118aa5750825b90506000826001600160401b031660011480156118c65750303b155b9050811580156118d4575080155b156118f25760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561191c57845460ff60401b1916600160401b1785555b600b8054336001600160a01b03199182168117909255600c80549091169091179055600061194a87826155ed565b506119576104af30611d45565b60019061196490826155ed565b5083156119ab57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b60006119bd612658565b905090565b611a1f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260068152657863616c6c4d60d01b602082015292915050612d8c565b611a605760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964536572766963654e616d6560701b60448201526064016105e9565b5050565b611a8f6040518060800160405280600081526020016060815260200160608152602001606081525090565b6000611aa2611a9d846135e9565b613616565b90506040518060800160405280611ad283600081518110611ac557611ac56157ea565b6020026020010151613755565b8152602001611afa83600181518110611aed57611aed6157ea565b60200260200101516137f8565b8152602001611b2283600281518110611b1557611b156157ea565b60200260200101516138c8565b8152602001611b3d83600381518110611b1557611b156157ea565b90529392505050565b60006002546001611b579190615816565b6002819055919050565b6040805180820190915260008152606060208201528151801580611b855750600281145b15611ba9575050604080518082019091526000815260208281015190820152610b11565b60018103611cfd5760003390506000611bc58560200151613976565b9050333b611c0b5760405162461bcd60e51b8152602060048201526013602482015272526f6c6c6261636b4e6f74506f737369626c6560681b60448201526064016105e9565b60006040518060a00160405280846001600160a01b03168152602001611c308961357c565b81526040888101516020808401919091528581015182840152600060609093018390528b8352600e81529120825181546001600160a01b0319166001600160a01b039091161781559082015191925082916001820190611c9090826155ed565b5060408201518051611cac916002840191602090910190614cf4565b5060608201516003820190611cc190826155ed565b50608091909101516004909101805460ff1916911515919091179055506040805180820190915260018152905160208201529250610b11915050565b60405162461bcd60e51b815260206004820152601d60248201527f4d6573736167652074797065206973206e6f7420737570706f7274656400000060448201526064016105e9565b60606106ef826139bb565b606082604051806040016040528060018152602001602f60f81b81525083604051602001611d8093929190615924565b604051602081830303815290604052905092915050565b6060806000611da584613b86565b9050611db384600083613c29565b611dc985611dc2846001615816565b8751613c29565b9250925050915091565b606080606060005b8460a0015151811015611e5c57611e0e8560a001518281518110611e0157611e016157ea565b6020026020010151613cee565b604051602001611e1e91906156ac565b60405160208183030381529060405291508282604051602001611e42929190615967565b60408051601f198184030181529190529250600101611ddb565b506000611e6c8560000151613cee565b611e798660200151613cee565b611e868760400151613cf9565b611e938860600151613d0c565b611ea08960800151613d1a565b611ea988613d72565b604051602001611ebe96959493929190615996565b604051602081830303815290604052905061185c81613d72565b6000611f896040518060200160405280600081525060116000018054611efd90615571565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2990615571565b8015611f765780601f10611f4b57610100808354040283529160200191611f76565b820191906000526020600020905b815481529060010190602001808311611f5957829003601f168201915b5050505050612d8c90919063ffffffff16565b6121195761202d8361202760116000018054611fa490615571565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd090615571565b801561201d5780601f10611ff25761010080835404028352916020019161201d565b820191906000526020600020905b81548152906001019060200180831161200057829003601f168201915b505050505061357c565b90612d8c565b801561211257506121126011600501805480602002602001604051908101604052809291908181526020016000905b8282101561210857838290600052602060002001805461207b90615571565b80601f01602080910402602001604051908101604052809291908181526020018280546120a790615571565b80156120f45780601f106120c9576101008083540402835291602001916120f4565b820191906000526020600020905b8154815290600101906020018083116120d757829003601f168201915b50505050508152602001906001019061205c565b5050505083613da8565b90506106ef565b50600092915050565b84516000036121bf576000600a8560405161213d91906156ac565b908152604051908190036020019020546001600160a01b031690508061219b5760405162461bcd60e51b81526020600482015260136024820152722737a232b330bab63a21b7b73732b1ba34b7b760691b60448201526064016105e9565b60006121a8828786613e2c565b90506121b8828288888888613e6f565b50506111e9565b60005b85518110156119ab57600061220a6040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b815250888481518110610ad557610ad56157ea565b90506000612219828887613e2c565b9050612229828289898989613e6f565b50506001016121c2565b600454479081101561227d5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7442616c616e636560681b60448201526064016105e9565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611a60573d6000803e3d6000fd5b6000818152600e6020526040812080546001600160a01b0319168155906122e16001830182614c9c565b6122ef600283016000614cd6565b6122fd600383016000614c9c565b50600401805460ff1916905550565b81516000908390602a1480156123505750600360fc1b6001600160f81b0319168160008151811061233f5761233f6157ea565b01602001516001600160f81b031916145b801561238a5750600f60fb1b6001600160f81b03191681600181518110612379576123796157ea565b01602001516001600160f81b031916145b83906123a95760405162461bcd60e51b81526004016105e991906151e6565b5060408051601480825281830190925260009160208201818036833701905050905060008080805b602881101561253957856123e6826002615816565b815181106123f6576123f66157ea565b016020015160f81c93506001603085101561240f575060005b8460ff166039108015612425575060418560ff16105b1561242e575060005b8460ff166046108015612444575060618560ff16105b1561244d575060005b8460ff166066101561245d575060005b8061247c578860405162461bcd60e51b81526004016105e991906151e6565b60418560ff16101561249157603092506124ab565b8460ff16604610156124a657605792506124ab565b603792505b6124b6600283615a2b565b6000036124ce576124c78386615a3f565b9350612530565b6124d88386615a3f565b6124e3856010615a58565b6124ed9190615a74565b60f81b8660026124fe600186615a8d565b6125089190615aa0565b81518110612518576125186157ea565b60200101906001600160f81b031916908160001a9053505b506001016123d1565b5060008460405160200161254d91906156ac565b60408051601f198184030181529190526014810151975090506001600160a01b0387166125d25760025b86518110156125d057868181518110612592576125926157ea565b60209101015189906001600160f81b031916600360fc1b146125c75760405162461bcd60e51b81526004016105e991906151e6565b50600101612577565b505b50505050505092915050565b604051633ea627a560e11b81526000906001600160a01b03851690637d4c4f4a9061260f9086908690600401615ab4565b602060405180830381865afa15801561262c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126509190615ad8565b949350505050565b600c546000906001600160a01b031661267b5750600b546001600160a01b031690565b50600c546001600160a01b031690565b6000806126b96040518060800160405280600081526020016060815260200160608152602001606081525090565b85516000036126f5575060408051602080820183528882528251608081018452600081529151908201529081018590526060810184905261273c565b6000604051806040016040528089815260200188815250905060405180608001604052806001815260200161272983613f16565b8152602001878152602001868152509150505b6127498861018083613f45565b98975050505050505050565b80516000908152600e60209081526040808320815160a0810190925280546001600160a01b03168252600181018054929391929184019161279590615571565b80601f01602080910402602001604051908101604052809291908181526020018280546127c190615571565b801561280e5780601f106127e35761010080835404028352916020019161280e565b820191906000526020600020905b8154815290600101906020018083116127f157829003601f168201915b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156128e857838290600052602060002001805461285b90615571565b80601f016020809104026020016040519081016040528092919081815260200182805461288790615571565b80156128d45780601f106128a9576101008083540402835291602001916128d4565b820191906000526020600020905b8154815290600101906020018083116128b757829003601f168201915b50505050508152602001906001019061283c565b50505050815260200160038201805461290090615571565b80601f016020809104026020016040519081016040528092919081815260200182805461292c90615571565b80156129795780601f1061294e57610100808354040283529160200191612979565b820191906000526020600020905b81548152906001019060200180831161295c57829003601f168201915b50505091835250506004919091015460ff16151560209091015280519091506001600160a01b03166129e35760405162461bcd60e51b815260206004820152601360248201527210d85b1b14995c5d595cdd139bdd119bdd5b99606a1b60448201526064016105e9565b60018160400151511115612b1e5781516000908152600960205260409020600190612a0d33611d45565b604051612a1a91906156ac565b908152604051908190036020019020805491151560ff1990921691909117905560005b816040015151811015612aab5782516000908152600960205260409081902090830151805183908110612a7257612a726157ea565b6020026020010151604051612a8791906156ac565b9081526040519081900360200190205460ff16612aa357505050565b600101612a3d565b5060005b816040015151811015612b185782516000908152600960205260409081902090830151805183908110612ae457612ae46157ea565b6020026020010151604051612af991906156ac565b908152604051908190036020019020805460ff19169055600101612aaf565b50612bef565b806040015151600103612ba257612b6d6040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b8152508260400151600081518110610ad557610ad56157ea565b6001600160a01b0316336001600160a01b031614612b9d5760405162461bcd60e51b81526004016105e990615af1565b612bef565b600a8160200151604051612bb691906156ac565b90815260405190819003602001902054336001600160a01b0390911614612bef5760405162461bcd60e51b81526004016105e990615af1565b81516020808401516040519081527fbeacafd006c5e60667f6f04aec3a498f81c8e94142b4e95b5a5a763de43ca0ab910160405180910390a26001826020015103612c7f578151612c3f906122b7565b60408201515115612c6057612c6081612c5b8460400151614097565b614188565b81516000908152600760205260409020805460ff191660011790555050565b600081606001515111612cc55760405162461bcd60e51b815260206004820152600e60248201526d4e6f526f6c6c6261636b4461746160901b60448201526064016105e9565b60016080820181905282516000908152600e60209081526040909120835181546001600160a01b0319166001600160a01b03909116178155908301518392820190612d1090826155ed565b5060408201518051612d2c916002840191602090910190614cf4565b5060608201516003820190612d4190826155ed565b50608091909101516004909101805460ff191691151591909117905581516040517f38934ab923f985814047679ba041577b8203ddd15fe9910d3fc6a7aa6001e9c790600090a25050565b600081604051602001612d9f91906156ac565b6040516020818303038152906040528051906020012083604051602001612dc691906156ac565b6040516020818303038152906040528051906020012003612119575060016106ef565b6040805180820190915260008152606060208201526000612e0c611a9d846135e9565b90506040518060400160405280612e2f83600081518110611ac557611ac56157ea565b8152602001611b3d83600181518110611aed57611aed6157ea565b6000612e5582614097565b90506000612e66826000015161357c565b9050612e728482612d8c565b612eac5760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590813925160aa1b60448201526064016105e9565b8251602084012060a08301515160011015612fe9576000818152600860205260409020600190612edb33611d45565b604051612ee891906156ac565b908152604051908190036020019020805491151560ff1990921691909117905560005b8360a0015151811015612f7957600082815260086020526040902060a0850151805183908110612f3d57612f3d6157ea565b6020026020010151604051612f5291906156ac565b9081526040519081900360200190205460ff16612f7157505050505050565b600101612f0b565b5060005b8360a0015151811015612fe357600082815260086020526040902060a0850151805183908110612faf57612faf6157ea565b6020026020010151604051612fc491906156ac565b908152604051908190036020019020805460ff19169055600101612f7d565b506130b6565b8260a001515160010361306d576130386040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b8152508460a00151600081518110610ad557610ad56157ea565b6001600160a01b0316336001600160a01b0316146130685760405162461bcd60e51b81526004016105e990615af1565b6130b6565b600a8260405161307d91906156ac565b90815260405190819003602001902054336001600160a01b03909116146130b65760405162461bcd60e51b81526004016105e990615af1565b60006130c061430c565b6040805160c08101825286518152602080880151818301528783015182840152606080890151908301526080808901518051908301209083015260a080890151908301526000848152600f9091529190912081519293509091819061312590826155ed565b506020820151600182019061313a90826155ed565b5060408201516002820155606082015160038201556080820151600482015560a08201518051613174916005840191602090910190614cf4565b509050508360400151846020015160405161318f91906156ac565b604051908190038120865190916131a691906156ac565b60405180910390207f2cbc78425621c181f9f8a25fc06e44a0ac2b67cd6a31f8ed7918934187f8cc598488608001516040516131e3929190615b18565b60405180910390a4505050505050565b61321760405180606001604052806000815260200160008152602001606081525090565b6000613225611a9d846135e9565b9050604051806060016040528061325583600081518110613248576132486157ea565b6020026020010151614327565b815260200161327083600181518110611ac557611ac56157ea565b8152602001611b3d83600281518110611aed57611aed6157ea565b6060816000036132b25750506040805180820190915260018152600360fc1b602082015290565b60408051602080825281830190925260009160208201818036833701905050905060005b831561333d576132e7600a85615a2b565b6132f2906030615816565b60f81b828281518110613307576133076157ea565b60200101906001600160f81b031916908160001a905350613329600a85615aa0565b93508061333581615b31565b9150506132d6565b60008161334981615b4a565b92506001600160401b0381111561336257613362614e8f565b6040519080825280601f01601f19166020018201604052801561338c576020820181803683370190505b50905060005b81518110156133f257836133a68285615a8d565b815181106133b6576133b66157ea565b602001015160f81c60f81b8282815181106133d3576133d36157ea565b60200101906001600160f81b031916908160001a905350600101613392565b50949350505050565b60608282604051602001611d80929190615967565b6040516306277e7360e31b8152600090309063313bf3989061343c9088908890889088906004016158aa565b600060405180830381600087803b15801561345657600080fd5b505af1925050508015613467575060015b61353c57613473615b61565b806308c379a0036134c55750613487615b7d565b8061349257506134c7565b86600080516020615e128339815191526000836040516134b3929190615b18565b60405180910390a2600091505061185c565b505b3d8080156134f1576040519150601f19603f3d011682016040523d82523d6000602084013e6134f6565b606091505b5086600080516020615e1283398151915260006040516134b3918152604060208201819052600c908201526b3ab735b737bbb722b93937b960a11b606082015260800190565b85600080516020615e12833981519152600160405161356c91815260406020820181905260009082015260600190565b60405180910390a250600161185c565b60606106ef82600061358d85613b86565b613c29565b606060006135a38360000151613cf9565b6135b08460200151613d0c565b6135bd8560400151613d1a565b6040516020016135cf93929190615924565b6040516020818303038152906040529050610b1181613d72565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060613621826143d9565b61365e5760405162461bcd60e51b815260206004820152600e60248201526d135d5cdd0818994818481b1a5cdd60921b60448201526064016105e9565b60006136698361440a565b90506000816001600160401b0381111561368557613685614e8f565b6040519080825280602002602001820160405280156136ca57816020015b60408051808201909152600080825260208201528152602001906001900390816136a35790505b50905060006136dc856020015161448f565b85602001516136eb9190615816565b90506000805b8481101561374a5761370283614510565b915060405180604001604052808381526020018481525084828151811061372b5761372b6157ea565b60209081029190910101526137408284615816565b92506001016136f1565b509195945050505050565b6000815160211161379d5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21034b73a10373ab6b132b960711b60448201526064016105e9565b60006137ac836020015161448f565b905060008184600001516137c09190615a8d565b90506000808386602001516137d59190615816565b90508051915060208310156133f25781836020036008021d915050949350505050565b805160609061383a5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b60448201526064016105e9565b6000613849836020015161448f565b9050600081846000015161385d9190615a8d565b90506000816001600160401b0381111561387957613879614e8f565b6040519080825280601f01601f1916602001820160405280156138a3576020820181803683370190505b50905060008160200190506133f28487602001516138c19190615816565b82856145b9565b606060006138d583613616565b9050600081516001600160401b038111156138f2576138f2614e8f565b60405190808252806020026020018201604052801561392557816020015b60608152602001906001900390816139105790505b50905060005b825181101561396e57613949838281518110611aed57611aed6157ea565b82828151811061395b5761395b6157ea565b602090810291909101015260010161392b565b509392505050565b60408051808201909152606080825260208201526000613998611a9d846135e9565b90506040518060400160405280612e2f83600081518110611aed57611aed6157ea565b604080516028808252606082810190935283831b9160009160208201818036833701905050905060008060008060008060006139f68b61463c565b905060005b6014811015613b5557613a0f816013615a8d565b613a1a906008615c06565b613a25906002615d01565b613a339060608c901c615aa0565b9750613a40601089615d0d565b9650613a4d876010615a58565b613a579089615a3f565b955081613a65826002615c06565b60288110613a7557613a756157ea565b6020020151945081613a88826002615c06565b613a93906001615816565b60288110613aa357613aa36157ea565b60200201519350613ab487866147c3565b9250613ac08388615a74565b60f81b89613acf836002615c06565b81518110613adf57613adf6157ea565b60200101906001600160f81b031916908160001a905350613b0086856147c3565b9250613b0c8387615a74565b60f81b89613b1b836002615c06565b613b26906001615816565b81518110613b3657613b366157ea565b60200101906001600160f81b031916908160001a9053506001016139fb565b5087604051602001613b679190615d2f565b6040516020818303038152906040529950505050505050505050919050565b600081815b8151811015613be6576040805180820190915260018152602f60f81b60209091018190528251839083908110613bc357613bc36157ea565b01602001516001600160f81b03191603613bde579392505050565b600101613b8b565b6040805180820182526015815274696e76616c69644e6574776f726b4164647265737360581b6020820152905162461bcd60e51b81526105e991906004016151e6565b6060836000613c388585615a8d565b6001600160401b03811115613c4f57613c4f614e8f565b6040519080825280601f01601f191660200182016040528015613c79576020820181803683370190505b5090508460005b8251811015613ce2578382613c9481615b31565b935081518110613ca657613ca66157ea565b602001015160f81c60f81b838281518110613cc357613cc36157ea565b60200101906001600160f81b031916908160001a905350600101613c80565b50909695505050505050565b60606106ef82613d1a565b60606106ef613d07836147f0565b613d1a565b60606106ef613d07836148a2565b60608082516001148015613d485750608083600081518110613d3e57613d3e6157ea565b016020015160f81c105b15613d545750816106ef565b613d6083516080614919565b83604051602001611d80929190615967565b6060613d80825160c0614919565b82604051602001613d92929190615967565b6040516020818303038152906040529050919050565b60008151835114613dbb575060006106ef565b60005b8351811015613e2257613e0c838281518110613ddc57613ddc6157ea565b6020026020010151858381518110613df657613df66157ea565b6020026020010151612d8c90919063ffffffff16565b613e1a5760009150506106ef565b600101613dbe565b5060019392505050565b600080821215613e3e57506000610b11565b604051633ea627a560e11b81526001600160a01b03851690637d4c4f4a9061260f9086906000871390600401615ab4565b856001600160a01b031663522a901e8686604051806040016040528060068152602001657863616c6c4d60d01b81525086613ebd60405180604001604052808b815260200189815250614acf565b6040518663ffffffff1660e01b8152600401613edc9493929190615d59565b6000604051808303818588803b158015613ef557600080fd5b505af1158015613f09573d6000803e3d6000fd5b5050505050505050505050565b60606000613f278360000151613d1a565b613f348460200151613d1a565b6040516020016135cf929190615967565b606080606060005b846040015151811015613fc157613f7385604001518281518110611e0157611e016157ea565b604051602001613f8391906156ac565b60405160208183030381529060405291508282604051602001613fa7929190615967565b60408051601f198184030181529190529250600101613f4d565b50606060005b85606001515181101561403b57613fed86606001518281518110611e0157611e016157ea565b604051602001613ffd91906156ac565b60405160208183030381529060405292508183604051602001614021929190615967565b60408051601f198184030181529190529150600101613fc7565b50600061404b8660000151613d0c565b6140588760200151613d1a565b61406186613d72565b61406a85613d72565b60405160200161407d9493929190615d98565b6040516020818303038152906040529050610f1881613d72565b6140d06040518060c001604052806060815260200160608152602001600081526020016000815260200160608152602001606081525090565b60006140de611a9d846135e9565b90506040518060c0016040528061410183600081518110611aed57611aed6157ea565b815260200161411c83600181518110611aed57611aed6157ea565b815260200161413783600281518110613248576132486157ea565b815260200161415283600381518110611ac557611ac56157ea565b815260200161416d83600481518110611aed57611aed6157ea565b8152602001611b3d83600581518110611b1557611b156157ea565b6141a3614198826000015161357c565b602084015190612d8c565b6141df5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964205265706c7960981b60448201526064016105e9565b60006141e961430c565b90508160400151826020015160405161420291906156ac565b6040519081900381208451909161421991906156ac565b60405180910390207f2cbc78425621c181f9f8a25fc06e44a0ac2b67cd6a31f8ed7918934187f8cc59848660800151604051614256929190615b18565b60405180910390a46040805160c0810182528351815260208085015181830152848301518284015260608086015190830152608080860151805190830120908301528583015160a08301526000848152600f90915291909120815181906142bd90826155ed565b50602082015160018201906142d290826155ed565b5060408201516002820155606082015160038201556080820151600482015560a082015180516119ab916005840191602090910190614cf4565b6000600354600161431d9190615816565b6003819055919050565b80516000901580159061433c57508151602110155b61437e5760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103ab4b73a10373ab6b132b960691b60448201526064016105e9565b600061438d836020015161448f565b905060008184600001516143a19190615a8d565b90506000808386602001516143b69190615816565b90508051915060208310156133f257506020919091036101000a90049392505050565b805160009081036143ec57506000919050565b6020820151805160001a9060c0821015613e22575060009392505050565b8051600090810361441d57506000919050565b60008061442d846020015161448f565b846020015161443c9190615816565b90506000846000015185602001516144549190615816565b90505b808210156144865761446882614510565b6144729083615816565b91508261447e81615b31565b935050614457565b50909392505050565b8051600090811a60808110156144a85750600092915050565b60b88110806144c3575060c081108015906144c3575060f881105b156144d15750600192915050565b60c08110156144fe576144e6600160b8615a3f565b6144f39060ff1682615a8d565b610b11906001615816565b6144e6600160f8615a3f565b50919050565b80516000908190811a608081101561452b57600191506145b2565b60b88110156145515761453f608082615a8d565b61454a906001615816565b91506145b2565b60c081101561457e5760b78103600185019450806020036101000a855104600182018101935050506145b2565b60f88110156145925761453f60c082615a8d565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b806000036145c657505050565b602081106145fe57825182526145dd602084615816565b92506145ea602083615816565b91506145f7602082615a8d565b90506145c6565b80156146375760006001614613836020615a8d565b61461f90610100615d01565b6146299190615a8d565b845184518216911916178352505b505050565b614644614d4a565b606082901b600061465482614ae0565b60405160200161466491906156ac565b60405160208183030381529060405280519060200120905060008060008060005b60148110156147b75760108782601481106146a2576146a26157ea565b6146ae9291901a615def565b93506010848883601481106146c5576146c56157ea565b6146d19291901a615a3f565b6146db9190615d0d565b945060108682602081106146f1576146f16157ea565b6146fd9291901a615def565b9150601082878360208110614714576147146157ea565b6147209291901a615a3f565b61472a9190615d0d565b925060098560ff16118015614742575060078360ff16115b8861474e836002615c06565b6028811061475e5761475e6157ea565b91151560209092020152600960ff851611801561477e575060078260ff16115b8861478a836002615c06565b614795906001615816565b602881106147a5576147a56157ea565b91151560209092020152600101614685565b50505050505050919050565b6000600a8360ff1610156147d9575060306106ef565b81156147e7575060376106ef565b50605792915050565b60608160000361482d5760015b6040519080825280601f01601f1916602001820160405280156145b2576020820181803683370190505092915050565b608060015b602081101561485c578184101561484d576126508482614c30565b60089190911b90600101614832565b5080831015614889576040805160208101859052015b604051602081830303815290604052915050919050565b6040516000602082015260218101849052604101614872565b6060816000036148b35760016147fd565b608060801960015b60208110156148f45782851280156148d257508185135b156148e15761185c8582614c30565b600892831b929190911b906001016148bb565b5060408051602081018690520160405160208183030381529060405292505050919050565b6060806038841015614983576040805160018082528183019092529060208201818036833701905050905061494e8385615816565b601f1a60f81b81600081518110614967576149676157ea565b60200101906001600160f81b031916908160001a905350610b11565b600060015b6149928187615aa0565b156149b857816149a181615b31565b92506149b1905061010082615c06565b9050614988565b6149c3826001615816565b6001600160401b038111156149da576149da614e8f565b6040519080825280601f01601f191660200182016040528015614a04576020820181803683370190505b509250614a118583615816565b614a1c906037615816565b601f1a60f81b83600081518110614a3557614a356157ea565b60200101906001600160f81b031916908160001a905350600190505b818111614ac657610100614a658284615a8d565b614a7190610100615d01565b614a7b9088615aa0565b614a859190615a2b565b601f1a60f81b838281518110614a9d57614a9d6157ea565b60200101906001600160f81b031916908160001a90535080614abe81615b31565b915050614a51565b50509392505050565b60606000613f278360000151613d0c565b60408051602880825260608281019093526000919060208201818036833701905050905060008080805b6014811015614c2557614b1e816013615a8d565b614b29906008615c06565b614b34906002615d01565b614b4290606089901c615aa0565b9350614b4f601085615d0d565b9250614b5c836010615a58565b614b669085615a3f565b9150600a8360ff1610614b7a576057614b7d565b60305b614b879084615a74565b60f81b85614b96836002615c06565b81518110614ba657614ba66157ea565b60200101906001600160f81b031916908160001a905350600a8260ff1610614bcf576057614bd2565b60305b614bdc9083615a74565b60f81b85614beb836002615c06565b614bf6906001615816565b81518110614c0657614c066157ea565b60200101906001600160f81b031916908160001a905350600101614b0a565b509295945050505050565b60606000826001600160401b03811115614c4c57614c4c614e8f565b6040519080825280601f01601f191660200182016040528015614c76576020820181803683370190505b50905060208101836020035b6020811015614ac65785811a825360019182019101614c82565b508054614ca890615571565b6000825580601f10614cb8575050565b601f016020900490600052602060002090810190610f869190614d69565b5080546000825590600052602060002090810190610f869190614d7e565b828054828255906000526020600020908101928215614d3a579160200282015b82811115614d3a5782518290614d2a90826155ed565b5091602001919060010190614d14565b50614d46929150614d7e565b5090565b6040518061050001604052806028906020820280368337509192915050565b5b80821115614d465760008155600101614d6a565b80821115614d46576000614d928282614c9c565b50600101614d7e565b60008083601f840112614dad57600080fd5b5081356001600160401b03811115614dc457600080fd5b602083019150836020828501011115614ddc57600080fd5b9250929050565b60008060008060008060008060a0898b031215614dff57600080fd5b88356001600160401b0380821115614e1657600080fd5b614e228c838d01614d9b565b909a50985060208b0135915080821115614e3b57600080fd5b614e478c838d01614d9b565b909850965060408b0135955060608b0135945060808b0135915080821115614e6e57600080fd5b50614e7b8b828c01614d9b565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614eca57614eca614e8f565b6040525050565b600082601f830112614ee257600080fd5b81356001600160401b03811115614efb57614efb614e8f565b604051614f12601f8301601f191660200182614ea5565b818152846020838601011115614f2757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614f5757600080fd5b82356001600160401b0380821115614f6e57600080fd5b614f7a86838701614ed1565b93506020850135915080821115614f9057600080fd5b50614f9d85828601614ed1565b9150509250929050565b600060208284031215614fb957600080fd5b5035919050565b80358015158114614fd057600080fd5b919050565b600082601f830112614fe657600080fd5b813560206001600160401b038083111561500257615002614e8f565b8260051b60405161501584830182614ea5565b9384528581018301938381018886111561502e57600080fd5b84880192505b858310156150685782358481111561504c5760008081fd5b61505a8a87838c0101614ed1565b825250918401918401615034565b50979650505050505050565b60008060006060848603121561508957600080fd5b83356001600160401b03808211156150a057600080fd5b6150ac87838801614ed1565b94506150ba60208701614fc0565b935060408601359150808211156150d057600080fd5b506150dd86828701614fd5565b9150509250925092565b80356001600160a01b0381168114614fd057600080fd5b6000806000806080858703121561511457600080fd5b61511d856150e7565b935060208501356001600160401b038082111561513957600080fd5b61514588838901614ed1565b9450604087013591508082111561515b57600080fd5b61516788838901614ed1565b9350606087013591508082111561517d57600080fd5b5061518a87828801614fd5565b91505092959194509250565b60005b838110156151b1578181015183820152602001615199565b50506000910152565b600081518084526151d2816020860160208601615196565b601f01601f19169290920160200192915050565b602081526000610b1160208301846151ba565b60006020828403121561520b57600080fd5b610b11826150e7565b6000806040838503121561522757600080fd5b82356001600160401b0381111561523d57600080fd5b61524985828601614ed1565b925050615258602084016150e7565b90509250929050565b6000806040838503121561527457600080fd5b82356001600160401b0381111561528a57600080fd5b61529685828601614ed1565b92505061525860208401614fc0565b6000806000606084860312156152ba57600080fd5b83356001600160401b03808211156152d157600080fd5b6152dd87838801614ed1565b945060208601359150808211156152f357600080fd5b6152ff87838801614ed1565b9350604086013591508082111561531557600080fd5b506150dd86828701614ed1565b60006020828403121561533457600080fd5b81356001600160401b0381111561534a57600080fd5b61265084828501614ed1565b60008060008060008060006080888a03121561537157600080fd5b87356001600160401b038082111561538857600080fd5b6153948b838c01614d9b565b909950975060208a01359150808211156153ad57600080fd5b6153b98b838c01614d9b565b909750955060408a0135945060608a01359150808211156153d957600080fd5b506153e68a828b01614d9b565b989b979a50959850939692959293505050565b6000806000806040858703121561540f57600080fd5b84356001600160401b038082111561542657600080fd5b61543288838901614d9b565b9096509450602087013591508082111561544b57600080fd5b5061545887828801614d9b565b95989497509550505050565b6000806040838503121561547757600080fd5b8235915060208301356001600160401b0381111561549457600080fd5b614f9d85828601614ed1565b600080600080600060a086880312156154b857600080fd5b85356001600160401b03808211156154cf57600080fd5b6154db89838a01614ed1565b965060208801359150808211156154f157600080fd5b6154fd89838a01614ed1565b9550604088013591508082111561551357600080fd5b61551f89838a01614ed1565b9450606088013591508082111561553557600080fd5b61554189838a01614fd5565b9350608088013591508082111561555757600080fd5b5061556488828901614fd5565b9150509295509295909350565b600181811c9082168061558557607f821691505b60208210810361450a57634e487b7160e01b600052602260045260246000fd5b601f821115614637576000816000526020600020601f850160051c810160208610156155ce5750805b601f850160051c820191505b818110156119ab578281556001016155da565b81516001600160401b0381111561560657615606614e8f565b61561a816156148454615571565b846155a5565b602080601f83116001811461564f57600084156156375750858301515b600019600386901b1c1916600185901b1785556119ab565b600085815260208120601f198616915b8281101561567e5788860151825594840194600190910190840161565f565b508582101561569c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516156be818460208701615196565b9190910192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561571557601f198684030189526157038383516151ba565b988401989250908301906001016156e7565b5090979650505050505050565b60018060a01b038516815260006020608060208401526000865461574581615571565b80608087015260a06001808416600081146157675760018114615783576157b3565b60ff19851660a08a015260a084151560051b8a010195506157b3565b8b600052602060002060005b858110156157aa5781548b820186015290830190880161578f565b8a0160a0019650505b505050505083810360408501526157ca81876151ba565b91505082810360608401526157df81856156c8565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106ef576106ef615800565b60408152600061583c60408301856151ba565b828103602084015261185c81856151ba565b60608152600061586160608301866151ba565b828103602084015261587381866151ba565b90508281036040840152610f1881856156c8565b60208082526009908201526827b7363ca0b236b4b760b91b604082015260600190565b6001600160a01b03851681526080602082018190526000906158ce908301866151ba565b82810360408401526158e081866151ba565b905082810360608401526157df81856156c8565b80820260008212600160ff1b8414161561591057615910615800565b81810583148215176106ef576106ef615800565b60008451615936818460208901615196565b84519083019061594a818360208901615196565b845191019061595d818360208801615196565b0195945050505050565b60008351615979818460208801615196565b83519083019061598d818360208801615196565b01949350505050565b6000875160206159a98285838d01615196565b8851918401916159bc8184848d01615196565b88519201916159ce8184848c01615196565b87519201916159e08184848b01615196565b86519201916159f28184848a01615196565b8551920191615a048184848901615196565b919091019998505050505050505050565b634e487b7160e01b600052601260045260246000fd5b600082615a3a57615a3a615a15565b500690565b60ff82811682821603908111156106ef576106ef615800565b60ff81811683821602908116908181146145b2576145b2615800565b60ff81811683821601908111156106ef576106ef615800565b818103818111156106ef576106ef615800565b600082615aaf57615aaf615a15565b500490565b604081526000615ac760408301856151ba565b905082151560208301529392505050565b600060208284031215615aea57600080fd5b5051919050565b6020808252600d908201526c139bdd105d5d1a1bdc9a5e9959609a1b604082015260600190565b82815260406020820152600061265060408301846151ba565b600060018201615b4357615b43615800565b5060010190565b600081615b5957615b59615800565b506000190190565b600060033d1115615b7a5760046000803e5060005160e01c5b90565b600060443d1015615b8b5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715615bba57505050505090565b8285019150815181811115615bd25750505050505090565b843d8701016020828501011115615bec5750505050505090565b615bfb60208286010187614ea5565b509095945050505050565b80820281158282048414176106ef576106ef615800565b600181815b80851115615c58578160001904821115615c3e57615c3e615800565b80851615615c4b57918102915b93841c9390800290615c22565b509250929050565b600082615c6f575060016106ef565b81615c7c575060006106ef565b8160018114615c925760028114615c9c57615cb8565b60019150506106ef565b60ff841115615cad57615cad615800565b50506001821b6106ef565b5060208310610133831016604e8410600b8410161715615cdb575081810a6106ef565b615ce58383615c1d565b8060001904821115615cf957615cf9615800565b029392505050565b6000610b118383615c60565b600060ff831680615d2057615d20615a15565b8060ff84160491505092915050565b61060f60f31b815260008251615d4c816002850160208701615196565b9190910160020192915050565b608081526000615d6c60808301876151ba565b8281036020840152615d7e81876151ba565b905084604084015282810360608401526157df81856151ba565b60008551615daa818460208a01615196565b855190830190615dbe818360208a01615196565b8551910190615dd1818360208901615196565b8451910190615de4818360208801615196565b019695505050505050565b600060ff831680615e0257615e02615a15565b8060ff8416069150509291505056fec7391e04887f8b3c16fa20877e028e8163139a478c8447e7d449eba1905caa51a2646970667358221220515f0658aae84f87865802f6d9184f258fbc744f8d989c4ab5ecb8e24cf69d5864736f6c63430008170033