262 txs
634 calls
constructor
No constructor.
functions
flashFee
purefunction flashFee(address, uint256) pure returns (uint256)
maxFlashLoan
viewfunction maxFlashLoan(address token) view returns (uint256)
orderExists
viewfunction orderExists(bytes32 orderHash) view returns (bool)
quote
viewfunction quote(tuple quoteConfig) view returns (bool, uint256, uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
vaultBalance
viewfunction vaultBalance(address owner, address token, uint256 vaultId) view returns (uint256)
addOrder2
nonpayablefunction addOrder2(tuple orderConfig, tuple[] post) returns (bool)
clear2
nonpayablefunction clear2(tuple aliceOrder, tuple bobOrder, tuple clearConfig, tuple[] aliceSignedContext, tuple[] bobSignedContext)
deposit2
nonpayablefunction deposit2(address token, uint256 vaultId, uint256 depositAmount, tuple[] post)
entask
nonpayablefunction entask(tuple[] post)
flashLoan
nonpayablefunction flashLoan(address receiver, address token, uint256 amount, bytes data) returns (bool)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
removeOrder2
nonpayablefunction removeOrder2(tuple order, tuple[] post) returns (bool stateChanged)
takeOrders2
nonpayablefunction takeOrders2(tuple config) returns (uint256 totalTakerInput, uint256 totalTakerOutput)
withdraw2
nonpayablefunction withdraw2(address token, uint256 vaultId, uint256 targetAmount, tuple[] post)
events
AddOrderV2
event AddOrderV2(address sender, bytes32 orderHash, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) order)
AfterClear
event AfterClear(address sender, (uint256 aliceOutput, uint256 bobOutput, uint256 aliceInput, uint256 bobInput) clearStateChange)
ClearV2
event ClearV2(address sender, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) alice, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) bob, (uint256 aliceInputIOIndex, uint256 aliceOutputIOIndex, uint256 bobInputIOIndex, uint256 bobOutputIOIndex, uint256 aliceBountyVaultId, uint256 bobBountyVaultId) clearConfig)
Context
event Context(address sender, uint256[][] context)
Deposit
event Deposit(address sender, address token, uint256 vaultId, uint256 amount)
MetaV1_2
event MetaV1_2(address sender, bytes32 subject, bytes meta)
OrderExceedsMaxRatio
event OrderExceedsMaxRatio(address sender, address owner, bytes32 orderHash)
OrderNotFound
event OrderNotFound(address sender, address owner, bytes32 orderHash)
OrderZeroAmount
event OrderZeroAmount(address sender, address owner, bytes32 orderHash)
RemoveOrderV2
event RemoveOrderV2(address sender, bytes32 orderHash, (address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) order)
TakeOrderV2
event TakeOrderV2(address sender, ((address owner, (address interpreter, address store, bytes bytecode) evaluable, (address token, uint8 decimals, uint256 vaultId)[] validInputs, (address token, uint8 decimals, uint256 vaultId)[] validOutputs, bytes32 nonce) order, uint256 inputIOIndex, uint256 outputIOIndex, (address signer, uint256[] context, bytes signature)[] signedContext) config, uint256 input, uint256 output)
Withdraw
event Withdraw(address sender, address token, uint256 vaultId, uint256 targetAmount, uint256 amount)
errors
ClearZeroAmount
error ClearZeroAmount()
FlashLenderCallbackFailed
error FlashLenderCallbackFailed(bytes32 result)
InvalidSignature
error InvalidSignature(uint256 i)
MinimumInput
error MinimumInput(uint256 minimumInput, uint256 input)
NoOrders
error NoOrders()
NotOrderOwner
error NotOrderOwner(address sender, address owner)
NotRainMetaV1
error NotRainMetaV1(bytes unmeta)
OrderNoHandleIO
error OrderNoHandleIO()
OrderNoInputs
error OrderNoInputs()
OrderNoOutputs
error OrderNoOutputs()
OrderNoSources
error OrderNoSources()
SameOwner
error SameOwner()
TokenDecimalsMismatch
error TokenDecimalsMismatch()
TokenMismatch
error TokenMismatch()
TokenSelfTrade
error TokenSelfTrade()
UnsupportedCalculateOutputs
error UnsupportedCalculateOutputs(uint256 outputs)
ZeroDepositAmount
error ZeroDepositAmount(address sender, address token, uint256 vaultId)
ZeroMaximumInput
error ZeroMaximumInput()
ZeroWithdrawTargetAmount
error ZeroWithdrawTargetAmount(address sender, address token, uint256 vaultId)
creation bytecode
0x6080604052348015600f57600080fd5b5060016000556158cb806100246000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806391337c0a11610097578063d97b2e4811610066578063d97b2e4814610223578063d9d98ce414610263578063e0e530b714610279578063f513c42d146102a957600080fd5b806391337c0a146101ca578063a08f5dff146101dd578063a616864d146101f0578063ac9650d81461020357600080fd5b80632cb77e9f116100d35780632cb77e9f1461015f5780635cffe9de14610183578063613255ab146101965780638d7b6beb146101b757600080fd5b806301ffc9a7146100fa5780630997c4a0146101225780630d4f7f711461014a575b600080fd5b61010d61010836600461413d565b6102bc565b60405190151581526020015b60405180910390f35b610135610130366004614197565b610355565b60408051928352602083019190915201610119565b61015d610158366004614211565b610f55565b005b61010d61016d366004614253565b6000908152600160208190526040909120541490565b61010d610191366004614291565b610fa9565b6101a96101a4366004614330565b6110e1565b604051908152602001610119565b61010d6101c536600461434d565b611165565b61015d6101d83660046143b6565b6112bf565b61015d6101eb3660046148dc565b6114cf565b61010d6101fe36600461499e565b611b17565b610216610211366004614211565b611e06565b6040516101199190614a27565b6101a9610231366004614aa9565b6001600160a01b0392831660009081526002602090815260408083209490951682529283528381209181529152205490565b6101a9610271366004614aea565b600092915050565b61028c610287366004614b16565b611eee565b604080519315158452602084019290925290820152606001610119565b61015d6102b73660046143b6565b61205d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe414309100000000000000000000000000000000000000000000000000000000148061034f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600080610360612283565b61036d6060840184614b51565b90506000036103a8576040517f9c95219f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103b0614061565b6103b861408f565b606060006103c887830188614b51565b604080516020600193909301830281019091529350880135915050600081900361041e576040517fc2ee700900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b61042e6060890189614b51565b90508110801561043e5750600082115b15610b74576104506060890189614b51565b8281811061046057610460614b9b565b90506020028101906104729190614bca565b61047b90614c08565b8051909550935061048f6060890189614b51565b60008181106104a0576104a0614b9b565b90506020028101906104b29190614bca565b6104bc9080614ca2565b6104ca906040810190614cd6565b6104d760608b018b614b51565b60008181106104e8576104e8614b9b565b90506020028101906104fa9190614bca565b6020013581811061050d5761050d614b9b565b6105239260206060909202019081019150614330565b6001600160a01b0316846040015186602001518151811061054657610546614b9b565b6020026020010151600001516001600160a01b031614158061063f57506105706060890189614b51565b600081811061058157610581614b9b565b90506020028101906105939190614bca565b61059d9080614ca2565b6105ab906060810190614cd6565b6105b860608b018b614b51565b60008181106105c9576105c9614b9b565b90506020028101906105db9190614bca565b604001358181106105ee576105ee614b9b565b6106049260206060909202019081019150614330565b6001600160a01b0316846060015186604001518151811061062757610627614b9b565b6020026020010151600001516001600160a01b031614155b15610676576040517f936bb5ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836060015185604001518151811061069057610690614b9b565b6020026020010151600001516001600160a01b031684604001518660200151815181106106bf576106bf614b9b565b6020026020010151600001516001600160a01b03160361070b576040517f734bc71c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107186060890189614b51565b600081811061072957610729614b9b565b905060200281019061073b9190614bca565b6107459080614ca2565b610753906040810190614cd6565b61076060608b018b614b51565b600081811061077157610771614b9b565b90506020028101906107839190614bca565b6020013581811061079657610796614b9b565b90506060020160200160208101906107ae9190614d1f565b60ff1684604001518660200151815181106107cb576107cb614b9b565b60200260200101516020015160ff161415806108b457506107ef6060890189614b51565b600081811061080057610800614b9b565b90506020028101906108129190614bca565b61081c9080614ca2565b61082a906060810190614cd6565b61083760608b018b614b51565b600081811061084857610848614b9b565b905060200281019061085a9190614bca565b6040013581811061086d5761086d614b9b565b90506060020160200160208101906108859190614d1f565b60ff1684606001518660400151815181106108a2576108a2614b9b565b60200260200101516020015160ff1614155b156108eb576040517f697e864b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108f6856122f6565b60008181526001602052604090205490915061095c578451604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610b6b565b60006109778688602001518960400151338b60600151612326565b90508960400135816060015111156109da578551604080513381526001600160a01b03909216602083015281018390527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610b69565b8060400151600003610a2e578551604080513381526001600160a01b03909216602083015281018390527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa906060016109cd565b60008660600151886040015181518110610a4a57610a4a614b9b565b602090810291909101810151015160408301519091506000610a718760ff8516600261297f565b905080821115610a7f578091505b50600080610a9d8560600151600185612a049092919063ffffffff16565b9050610add8a604001518c6020015181518110610abc57610abc614b9b565b60200260200101516020015160ff16600183612a229092919063ffffffff16565b915060009050610af28360ff86166002612a22565b9050610afe8189614d6b565b9750610b0a828d614d7e565b9b50610b17828287612a84565b7f10de99b9032184587540c04e1850dff94a7683ae1fcc9eb06098621c739c0275338c8385604051610b4c9493929190614eb8565b60405180910390a150508651600101808852602002870183905250505b505b50600101610421565b610b828260208a0135614d6b565b965050508535851015610bd0576040517f45094d8800000000000000000000000000000000000000000000000000000000815286356004820152602481018690526044015b60405180910390fd5b8415610c8c57610c8c3386610be860608a018a614b51565b6000818110610bf957610bf9614b9b565b9050602002810190610c0b9190614bca565b610c159080614ca2565b610c23906060810190614cd6565b610c3060608c018c614b51565b6000818110610c4157610c41614b9b565b9050602002810190610c539190614bca565b60400135818110610c6657610c66614b9b565b610c7c9260206060909202019081019150614330565b6001600160a01b03169190612dad565b6000610c9b6080880188614fc2565b90501115610e4e573363059bebe6610cb66060890189614b51565b6000818110610cc757610cc7614b9b565b9050602002810190610cd99190614bca565b610ce39080614ca2565b610cf1906060810190614cd6565b610cfe60608b018b614b51565b6000818110610d0f57610d0f614b9b565b9050602002810190610d219190614bca565b60400135818110610d3457610d34614b9b565b610d4a9260206060909202019081019150614330565b610d5760608a018a614b51565b6000818110610d6857610d68614b9b565b9050602002810190610d7a9190614bca565b610d849080614ca2565b610d92906040810190614cd6565b610d9f60608c018c614b51565b6000818110610db057610db0614b9b565b9050602002810190610dc29190614bca565b60200135818110610dd557610dd5614b9b565b610deb9260206060909202019081019150614330565b8888610dfa60808d018d614fc2565b6040518763ffffffff1660e01b8152600401610e1b96959493929190615034565b600060405180830381600087803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b505050505b8315610f0c57610f0c333086610e6760608b018b614b51565b6000818110610e7857610e78614b9b565b9050602002810190610e8a9190614bca565b610e949080614ca2565b610ea2906040810190614cd6565b610eaf60608d018d614b51565b6000818110610ec057610ec0614b9b565b9050602002810190610ed29190614bca565b60200135818110610ee557610ee5614b9b565b610efb9260206060909202019081019150614330565b6001600160a01b0316929190612e5b565b60005b8151811015610f4257610f3a828281518110610f2d57610f2d614b9b565b6020026020010151612eb2565b600101610f0f565b50505050610f506001600055565b915091565b610f5d612283565b60408051600080825260208201909252610f9b91610f8b565b6060815260200190600190039081610f765790505b50610f968385615079565b6130b8565b610fa56001600055565b5050565b6000610fbf6001600160a01b0386168786612dad565b6040517f23e30c8b0000000000000000000000000000000000000000000000000000000081526000906001600160a01b038816906323e30c8b906110119033908a908a9087908b908b90600401615034565b6020604051808303816000875af1158015611030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110549190615143565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981146110b2576040517f5b62c54800000000000000000000000000000000000000000000000000000000815260048101829052602401610bc7565b6110d487306110c2600089614d7e565b6001600160a01b038a16929190612e5b565b5060019695505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611141573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190615143565b600061116f612283565b61117c6020850185614330565b6001600160a01b0316336001600160a01b0316146111e757336111a26020860186614330565b6040517f4702b9140000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015291166024820152604401610bc7565b60006111fa6111f58661515c565b6122f6565b600081815260016020526040902054909150600019016112ad5760008181526001602081905260408083209290925590519092507fa2d7a96afe77c99b6a2d72ca8b4d3c5c88b6466ee34ca74e0955951f449425c89061125f90339084908990615297565b60405180910390a16040805160028152602081018390523381830152606081019091526112ad906112a3905b60408051600181526020810192909252818101905290565b610f968587615079565b506112b86001600055565b9392505050565b6112c7612283565b82600003611319576040517f40e97a5e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038616602482015260448101859052606401610bc7565b604080513381526001600160a01b0387166020820152908101859052606081018490527fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79060800160405180910390a161137e6001600160a01b038616333086612e5b565b3360009081526002602090815260408083206001600160a01b038916845282528083208784529091529020546113b48482614d7e565b3360009081526002602090815260408083206001600160a01b038b168452825280832089845290915290205581156114bd576000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144a9190615399565b60ff169050600061145d8383600061297f565b9050600061146d8784600061297f565b60408051600481526001600160a01b038c1660208201528082018b9052606081018590526080810183905260a081019091529091506114b9906114af9061128b565b610f968789615079565b5050505b506114c86001600055565b5050505050565b6114d7612283565b835185516001600160a01b0391821691160361151f576040517f2a63c7cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836040015183604001358151811061153957611539614b9b565b6020026020010151600001516001600160a01b0316856060015184602001358151811061156857611568614b9b565b6020026020010151600001516001600160a01b03161415806115e4575060408501518051843590811061159d5761159d614b9b565b6020026020010151600001516001600160a01b031684606001518460600135815181106115cc576115cc614b9b565b6020026020010151600001516001600160a01b031614155b1561161b576040517f936bb5ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846060015183602001358151811061163557611635614b9b565b6020026020010151600001516001600160a01b0316856040015184600001358151811061166457611664614b9b565b6020026020010151600001516001600160a01b0316036116b0576040517f734bc71c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83604001518360400135815181106116ca576116ca614b9b565b60200260200101516020015160ff1685606001518460200135815181106116f3576116f3614b9b565b60200260200101516020015160ff1614158061175d575060408501518051843590811061172257611722614b9b565b60200260200101516020015160ff16846060015184606001358151811061174b5761174b614b9b565b60200260200101516020015160ff1614155b15611794576040517f697e864b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160006117a3886122f6565b81526020019081526020016000205403611815577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f33386600001516117e7886122f6565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a1611b0d565b600060016000611824876122f6565b81526020019081526020016000205403611868577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f33385600001516117e7876122f6565b7f692ee69af2843c70772be93470669f3c73e583316a047b6bfefdae5629de37ce3386868660405161189d94939291906153b6565b60405180910390a160006118c08685600001358660200135886000015186612326565b905060006118dd86866040013587606001358a6000015188612326565b905060006118eb8383613290565b90506119008160400151826000015185612a84565b6119138160600151826020015184612a84565b6060810151815160009161192691614d6b565b905060008260400151836020015161193e9190614d6b565b905081156119ca57336000908152600260209081526040822060608d01518051869492938d013590811061197457611974614b9b565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008a60800135815260200190815260200160002060008282546119c49190614d7e565b90915550505b8015611a52573360009081526002602052604081206060808c015180518594928d01359081106119fc576119fc614b9b565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008a60a0013581526020019081526020016000206000828254611a4c9190614d7e565b90915550505b5050604080513381528251602080830191909152830151818301529082015160608083019190915282015160808201527f3f20e55919cca701abb2a40ab72542b25ea7eed63a50f979dd2cd3231e5f488d9060a00160405180910390a1611ab883612eb2565b611ac182612eb2565b8051158015611ad257506020810151155b15611b09576040517f21badf1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505b6114c86001600055565b6000611b21612283565b611b2e6020850185614cd6565b9050600003611b69576040517f6c44ef8f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b766040850185614cd6565b9050600003611bb1576040517f540e5f0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810190915233815260009060208101611bd08780615433565b611bd990615467565b8152602001868060200190611bee9190614cd6565b808060200260200160405190810160405280939291908181526020016000905b82821015611c3a57611c2b60608302860136819003810190615473565b81526020019060010190611c0e565b5050509183525050602001611c526040880188614cd6565b808060200260200160405190810160405280939291908181526020016000905b82821015611c9e57611c8f60608302860136819003810190615473565b81526020019060010190611c72565b50505050508152602001866060013581525090506000611cbd826122f6565b600081815260016020526040902054909150158015611df85760008281526001602081905260409182902055835190517f3ce8bbe652d8778b67dd565c479c3bbaa843e55e477d075f756f889ec4bbdaee91611d1c918590879061548f565b60405180910390a16000611d3360a0890189614fc2565b90501115611dd057611d85611d4b60a0890189614fc2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e692505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec3699083611db760a08b018b614fc2565b604051611dc794939291906154b7565b60405180910390a15b604080516002815260208101849052338183015260608101909152611df8906114af9061128b565b925050506112b86001600055565b6040805160008152602081019091526060908267ffffffffffffffff811115611e3157611e31614420565b604051908082528060200260200182016040528015611e6457816020015b6060815260200190600190039081611e4f5790505b50915060005b83811015611ee657611ec130868684818110611e8857611e88614b9b565b9050602002810190611e9a9190614fc2565b85604051602001611ead939291906154e0565b60405160208183030381529060405261332a565b838281518110611ed357611ed3614b9b565b6020908102919091010152600101611e6a565b505092915050565b6000808080611f09611f008680614ca2565b6111f59061515c565b60008181526001602081905260409091205491925014611f3457600080600093509350935050612056565b611f3e8580614ca2565b611f4c906060810190614cd6565b8660400135818110611f6057611f60614b9b565b611f769260206060909202019081019150614330565b6001600160a01b0316611f898680614ca2565b611f97906040810190614cd6565b8760200135818110611fab57611fab614b9b565b611fc19260206060909202019081019150614330565b6001600160a01b031603612001576040517f734bc71c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061203f6120108780614ca2565b6120199061515c565b602088013560408901353361203160608c018c614b51565b61203a91615507565b612326565b905060018160400151826060015194509450945050505b9193909250565b612065612283565b826000036120b7576040517ff7a898f60000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038616602482015260448101859052606401610bc7565b3360009081526002602090815260408083206001600160a01b03891684528252808320878452909152812054906120ee858361334f565b9050801561213d576121008183614d6b565b3360008181526002602090815260408083206001600160a01b038d168085529083528184208c85529092529091209290925561213d919083612dad565b604080513381526001600160a01b038916602082015290810187905260608101869052608081018290527febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9060a00160405180910390a18215612277576000876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fe9190615399565b60ff169050611b0961226d61128b8a6001600160a01b03168a6122238887600061297f565b61222f8888600061297f565b61223b8d89600261297f565b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b610f968688615079565b50506114c86001600055565b6002600054036122ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bc7565b6002600055565b6000816040516020016123099190615514565b604051602081830303815290604052805190602001209050919050565b61232e6140fa565b6000612339876122f6565b60408051600480825260a08201909252919250606091600091816020015b60608152602001906001900390816123575790505089516040805160038152602081018790526001600160a01b039283168183015291891660608301526080820190529091508160018003815181106123b2576123b2614b9b565b60200260200101819052506000600260008b600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b604001518b8151811061240057612400614b9b565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b604001518b8151811061244457612444614b9b565b602002602001015160400151815260200190815260200160002054905061254e8a604001518a8151811061247a5761247a614b9b565b6020026020010151600001516001600160a01b03168b604001518b815181106124a5576124a5614b9b565b60200260200101516020015160ff16670de0b6b3a76400000267ffffffffffffffff168c604001518c815181106124de576124de614b9b565b60200260200101516040015161251a858f604001518f8151811061250457612504614b9b565b60200260200101516020015160ff16600061297f565b600060408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b8260016003038151811061256457612564614b9b565b6020026020010181905250506000600260008b600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b606001518a815181106125b3576125b3614b9b565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008b606001518a815181106125f7576125f7614b9b565b60200260200101516040015181526020019081526020016000205490506126b78a60600151898151811061262d5761262d614b9b565b6020026020010151600001516001600160a01b03168b606001518a8151811061265857612658614b9b565b60200260200101516020015160ff16670de0b6b3a76400000267ffffffffffffffff168c606001518b8151811061269157612691614b9b565b60200260200101516040015161251a858f606001518e8151811061250457612504614b9b565b826001600403815181106126cd576126cd614b9b565b6020026020010181905250506126e38186613365565b915050600088600001516001600160a01b031690506000808a60200151600001516001600160a01b031663d6e3357a8c602001516020015161272f863060009182526020526040902090565b60208f01516040015160008981604051908082528060200260200182016040528015612765578160200160208202803683370190505b506040518763ffffffff1660e01b815260040161278796959493929190615574565b600060405180830381865afa1580156127a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127cc919081019061563f565b915091506002825110156128115781516040517f3eee3954000000000000000000000000000000000000000000000000000000008152600401610bc791815260200190565b6020828101516040808501518e516001600160a01b03166000908152600290945290832060608f01518051939492938391908f90811061285357612853614b9b565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008f606001518e8151811061289757612897614b9b565b602002602001015160400151815260200190815260200160002054905060006128f08f606001518e815181106128cf576128cf614b9b565b60200260200101516020015160ff1660008461297f9092919063ffffffff16565b9050808311156128fe578092505b5050604080516002815260208101839052808201849052606081019091528660028151811061292f5761292f614b9b565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525097505050505050505095945050505050565b600082601211156129b457601283900360028316156129aa576129a28582613668565b9150506112b8565b6129a285826136b9565b60128311156129fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee830160018316156129f3576129a285826136f1565b6129a2858261373f565b50826112b8565b6000612a1a8484670de0b6b3a764000085613762565b949350505050565b60008260121115612a4557601283900360018316156129f3576129a285826136f1565b60128311156129fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee830160028316156129aa576129a28582613668565b612adf83670de0b6b3a76400008360800151600381518110612aa857612aa8614b9b565b6020026020010151600181518110612ac257612ac2614b9b565b602002602001015181612ad757612ad76156a3565b04600061297f565b8160800151600381518110612af657612af6614b9b565b6020026020010151600481518110612b1057612b10614b9b565b602002602001018181525050612b7782670de0b6b3a76400008360800151600481518110612b4057612b40614b9b565b6020026020010151600181518110612b5a57612b5a614b9b565b602002602001015181612b6f57612b6f6156a3565b04600161297f565b8160800151600481518110612b8e57612b8e614b9b565b6020026020010151600481518110612ba857612ba8614b9b565b60209081029190910101528215612c8f578051516001600160a01b0316600090815260026020526040812060808301518051869391906003908110612bef57612bef614b9b565b6020026020010151600081518110612c0957612c09614b9b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008360800151600381518110612c4a57612c4a614b9b565b6020026020010151600281518110612c6457612c64614b9b565b602002602001015181526020019081526020016000206000828254612c899190614d7e565b90915550505b8115612d6b578051516001600160a01b0316600090815260026020526040812060808301518051859391906004908110612ccb57612ccb614b9b565b6020026020010151600081518110612ce557612ce5614b9b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008360800151600481518110612d2657612d26614b9b565b6020026020010151600281518110612d4057612d40614b9b565b602002602001015181526020019081526020016000206000828254612d659190614d6b565b90915550505b7f17a5c0f3785132a57703932032f6863e7920434150aa1dc940e567b440fdce1f338260800151604051612da09291906156d2565b60405180910390a1505050565b6040516001600160a01b038316602482015260448101829052612e569084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526137bf565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612eac9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612df2565b50505050565b60c08101515115612f4a578051602090810151015160a082015160c08301516040517f946aadc60000000000000000000000000000000000000000000000000000000081526001600160a01b039093169263946aadc692612f179290916004016156f4565b600060405180830381600087803b158015612f3157600080fd5b505af1158015612f45573d6000803e3d6000fd5b505050505b805160209081015180519082015160a08401516000908152309093526040832083926001600160a01b03169163d6e3357a918651602001516040015160808801516001906000604051908082528060200260200182016040528015612fb9578160200160208202803683370190505b506040518763ffffffff1660e01b8152600401612fdb96959493929190615574565b600060405180830381865afa158015612ff8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613020919081019061563f565b8051919350915015612e56578251602090810151015160a08401516040517f946aadc60000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163946aadc6916130819185906004016156f4565b600060405180830381600087803b15801561309b57600080fd5b505af11580156130af573d6000803e3d6000fd5b50505050505050565b336130eb6040805160a0810182526000918101828152606080830193909352608082018390528152602081019190915290565b60005b83518110156114c85783818151811061310957613109614b9b565b60200260200101519150600082600001516040015151111561328857815180516020918201516000868152309093526040832083926001600160a01b03169163d6e3357a9187600001516040015160006131678d8b60200151613365565b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e089901b169091526131b395949392919060248101615574565b600060405180830381865afa1580156131d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131f8919081019061563f565b8051919350915015613285578351602001516040517f946aadc60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063946aadc69061325290889085906004016156f4565b600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b505050505b50505b6001016130ee565b6132bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6132c583836138c1565b825260408201526132d682846138c1565b6020830152606082015292915050565b6132ef81613a13565b61332757806040517f644cc258000000000000000000000000000000000000000000000000000000008152600401610bc7919061570d565b50565b60606112b883836040518060600160405280602781526020016158a460279139613a43565b600081831061335e57816112b8565b5090919050565b60606000825167ffffffffffffffff81111561338357613383614420565b6040519080825280602002602001820160405280156133ac578160200160208202803683370190505b5090506000808451116133c05760006133c6565b83516001015b855160010101905060008167ffffffffffffffff8111156133e9576133e9614420565b60405190808252806020026020018201604052801561341c57816020015b60608152602001906001900390816134075790505b5090506000613441604080516002815233602082015230818301526060810190915290565b82828151811061345357613453614b9b565b602002602001018190525060005b87518110156134b157818060010192505087818151811061348457613484614b9b565b602002602001015183838151811061349e5761349e614b9b565b6020908102919091010152600101613461565b5085511561365e578080600101915050838282815181106134d4576134d4614b9b565b602002602001018190525060005b865181101561365c5761359387828151811061350057613500614b9b565b60200260200101516000015161357061353d8a858151811061352457613524614b9b565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b89848151811061358257613582614b9b565b602002602001015160400151613abb565b6135cc576040517f52bf984800000000000000000000000000000000000000000000000000000000815260048101829052602401610bc7565b8681815181106135de576135de614b9b565b6020026020010151600001516001600160a01b031685828151811061360557613605614b9b565b602002602001018181525050818060010192505086818151811061362b5761362b614b9b565b60200260200101516020015183838151811061364957613649614b9b565b60209081029190910101526001016134e2565b505b5095945050505050565b6000604e821061368a57821561368057600019613683565b60005b905061034f565b50600a81900a82810290838183816136a4576136a46156a3565b04146136b257600019612a1a565b5092915050565b600a81900a6136c88184615720565b9050604e821061034f5782156136e8576136e382600a61581b565b6112b8565b50600092915050565b6000604e821061371557821561370857600161370b565b60005b60ff16905061034f565b600a82900a808481613729576137296156a3565b04915080820284146136b2575060010192915050565b6000604e8210156136e85781600a0a838161375c5761375c6156a3565b046112b8565b600080613770868686613b12565b9050600183600281111561378657613786615827565b1480156137a357506000848061379e5761379e6156a3565b868809115b156137b6576137b3600182614d7e565b90505b95945050505050565b6000613814826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613c1e9092919063ffffffff16565b90508051600014806138355750808060200190518101906138359190615856565b612e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bc7565b60008060006138e4856060015160018760400151612a049092919063ffffffff16565b60408087015190860151919250908211801561391757604086015160608801519093506139149084906000613c2d565b91505b600086600001516060015187602001518151811061393757613937614b9b565b60200260200101516020015160ff169050600061396082600187612a229092919063ffffffff16565b905061396e85836000612a22565b9650868111156139bd5782156139b95760008061398e898403858361297f565b60608c01519091506139a39082906001613c2d565b91506139b190508186614d6b565b9450506139bd565b8096505b60008960000151606001518a60200151815181106139dd576139dd614b9b565b60200260200101516020015160ff169050613a0481600087612a229092919063ffffffff16565b96505050505050509250929050565b6000600882511015613a2757506000919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b6060600080856001600160a01b031685604051613a609190615878565b600060405180830381855af49150503d8060008114613a9b576040519150601f19603f3d011682016040523d82523d6000602084013e613aa0565b606091505b5091509150613ab186838387613c43565b9695505050505050565b6000806000613aca8585613cd6565b90925090506000816004811115613ae357613ae3615827565b148015613b015750856001600160a01b0316826001600160a01b0316145b80613ab15750613ab1868686613d1b565b6000808060001985870985870292508281108382030391505080600003613b4c57838281613b4257613b426156a3565b04925050506112b8565b808411613bb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610bc7565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6060612a1a8484600085613e4d565b6000612a1a84670de0b6b3a76400008585613762565b60608315613ccc578251600003613cc5576001600160a01b0385163b613cc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bc7565b5081612a1a565b612a1a8383613f59565b6000808251604103613d0c5760208301516040840151606085015160001a613d0087828585613f9d565b94509450505050613d14565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401613d4592919061588a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051613db09190615878565b600060405180830381855afa9150503d8060008114613deb576040519150601f19603f3d011682016040523d82523d6000602084013e613df0565b606091505b5091509150818015613e0457506020815110155b8015613ab1575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090613e429083016020908101908401615143565b149695505050505050565b606082471015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bc7565b600080866001600160a01b03168587604051613efb9190615878565b60006040518083038185875af1925050503d8060008114613f38576040519150601f19603f3d011682016040523d82523d6000602084013e613f3d565b606091505b5091509150613f4e87838387613c43565b979650505050505050565b815115613f695781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc7919061570d565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613fd45750600090506003614058565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614028573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661405157600060019250925050614058565b9150600090505b94509492505050565b604051806080016040528061407461408f565b81526020016000815260200160008152602001606081525090565b6040518060a0016040528060006001600160a01b031681526020016140e0604051806060016040528060006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b815260606020820181905260408201819052600091015290565b6040518060e0016040528061410d61408f565b81526020016000815260200160008152602001600081526020016060815260200160008152602001606081525090565b60006020828403121561414f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112b857600080fd5b600060a0828403121561419157600080fd5b50919050565b6000602082840312156141a957600080fd5b813567ffffffffffffffff8111156141c057600080fd5b612a1a8482850161417f565b60008083601f8401126141de57600080fd5b50813567ffffffffffffffff8111156141f657600080fd5b6020830191508360208260051b8501011115613d1457600080fd5b6000806020838503121561422457600080fd5b823567ffffffffffffffff81111561423b57600080fd5b614247858286016141cc565b90969095509350505050565b60006020828403121561426557600080fd5b5035919050565b6001600160a01b038116811461332757600080fd5b803561428c8161426c565b919050565b6000806000806000608086880312156142a957600080fd5b85356142b48161426c565b945060208601356142c48161426c565b935060408601359250606086013567ffffffffffffffff808211156142e857600080fd5b818801915088601f8301126142fc57600080fd5b81358181111561430b57600080fd5b89602082850101111561431d57600080fd5b9699959850939650602001949392505050565b60006020828403121561434257600080fd5b81356112b88161426c565b60008060006040848603121561436257600080fd5b833567ffffffffffffffff8082111561437a57600080fd5b6143868783880161417f565b9450602086013591508082111561439c57600080fd5b506143a9868287016141cc565b9497909650939450505050565b6000806000806000608086880312156143ce57600080fd5b85356143d98161426c565b94506020860135935060408601359250606086013567ffffffffffffffff81111561440357600080fd5b61440f888289016141cc565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561447257614472614420565b60405290565b60405160a0810167ffffffffffffffff8111828210171561447257614472614420565b6040805190810167ffffffffffffffff8111828210171561447257614472614420565b604051601f8201601f1916810167ffffffffffffffff811182821017156144e7576144e7614420565b604052919050565b600082601f83011261450057600080fd5b813567ffffffffffffffff81111561451a5761451a614420565b61452d6020601f19601f840116016144be565b81815284602083860101111561454257600080fd5b816020850160208301376000918101602001919091529392505050565b60006060828403121561457157600080fd5b61457961444f565b905081356145868161426c565b815260208201356145968161426c565b6020820152604082013567ffffffffffffffff8111156145b557600080fd5b6145c1848285016144ef565b60408301525092915050565b600067ffffffffffffffff8211156145e7576145e7614420565b5060051b60200190565b60ff8116811461332757600080fd5b60006060828403121561461257600080fd5b61461a61444f565b905081356146278161426c565b81526020820135614637816145f1565b806020830152506040820135604082015292915050565b600082601f83011261465f57600080fd5b8135602061467461466f836145cd565b6144be565b80838252602082019150606060206060860288010194508785111561469857600080fd5b602087015b858110156146bc576146af8982614600565b845292840192810161469d565b5090979650505050505050565b600060a082840312156146db57600080fd5b6146e3614478565b90506146ee82614281565b8152602082013567ffffffffffffffff8082111561470b57600080fd5b6147178583860161455f565b6020840152604084013591508082111561473057600080fd5b61473c8583860161464e565b6040840152606084013591508082111561475557600080fd5b506147628482850161464e565b6060830152506080820135608082015292915050565b600060c0828403121561419157600080fd5b600061479861466f846145cd565b8381529050602080820190600585811b8501878111156147b757600080fd5b855b818110156148b057803567ffffffffffffffff808211156147da5760008081fd5b908801906060828c0312156147ef5760008081fd5b6147f761444f565b82356148028161426c565b815282870135828111156148165760008081fd5b8301601f81018d136148285760008081fd5b803561483661466f826145cd565b81815290881b8201890190898101908f8311156148535760008081fd5b928a01925b828410156148715783358252928a0192908a0190614858565b848b0152506040915050838101358381111561488d5760008081fd5b6148998e8287016144ef565b9183019190915250875250509383019383016147b9565b50505050509392505050565b600082601f8301126148cd57600080fd5b6112b88383356020850161478a565b600080600080600061014086880312156148f557600080fd5b853567ffffffffffffffff8082111561490d57600080fd5b61491989838a016146c9565b9650602088013591508082111561492f57600080fd5b61493b89838a016146c9565b955061494a8960408a01614778565b945061010088013591508082111561496157600080fd5b61496d89838a016148bc565b935061012088013591508082111561498457600080fd5b50614991888289016148bc565b9150509295509295909350565b6000806000604084860312156149b357600080fd5b833567ffffffffffffffff808211156149cb57600080fd5b61438687838801614778565b60005b838110156149f25781810151838201526020016149da565b50506000910152565b60008151808452614a138160208601602086016149d7565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614a9c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614a8a8583516149fb565b94509285019290850190600101614a50565b5092979650505050505050565b600080600060608486031215614abe57600080fd5b8335614ac98161426c565b92506020840135614ad98161426c565b929592945050506040919091013590565b60008060408385031215614afd57600080fd5b8235614b088161426c565b946020939093013593505050565b600060208284031215614b2857600080fd5b813567ffffffffffffffff811115614b3f57600080fd5b8201608081850312156112b857600080fd5b6000808335601e19843603018112614b6857600080fd5b83018035915067ffffffffffffffff821115614b8357600080fd5b6020019150600581901b3603821315613d1457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112614bfe57600080fd5b9190910192915050565b600060808236031215614c1a57600080fd5b6040516080810167ffffffffffffffff8282108183111715614c3e57614c3e614420565b816040528435915080821115614c5357600080fd5b614c5f368387016146c9565b835260208501356020840152604085013560408401526060850135915080821115614c8957600080fd5b50614c96368286016148bc565b60608301525092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112614bfe57600080fd5b6000808335601e19843603018112614ced57600080fd5b83018035915067ffffffffffffffff821115614d0857600080fd5b6020019150606081023603821315613d1457600080fd5b600060208284031215614d3157600080fd5b81356112b8816145f1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561034f5761034f614d3c565b8082018082111561034f5761034f614d3c565b60008151808452602080850194506020840160005b83811015614de457815180516001600160a01b031688528381015160ff16848901526040908101519088015260609096019590820190600101614da6565b509495945050505050565b60006001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e0850152614e3d6101008501826149fb565b905060408301518482036040860152614e568282614d91565b91505060608301518482036060860152614e708282614d91565b915050608083015160808501528091505092915050565b60008151808452602080850194506020840160005b83811015614de457815187529582019590820190600101614e9c565b60006001600160a01b03808716835260206080818501528651608080860152614ee5610100860182614def565b90508188015160a086015260408089015160c08701526060808a01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808885030160e08901528381518086528686019150868160051b870101878401935060005b82811015614fa057601f1988830301845284518a815116835289810151878b850152614f7488850182614e87565b91890151848303858b0152919050614f8c81836149fb565b968b0196958b019593505050600101614f46565b5080995050505050505050505083604083015282606083015295945050505050565b6000808335601e19843603018112614fd957600080fd5b83018035915067ffffffffffffffff821115614ff457600080fd5b602001915036819003821315613d1457600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261506d60a083018486615009565b98975050505050505050565b600061508761466f846145cd565b80848252602080830192508560051b8501368111156150a557600080fd5b855b8181101561513757803567ffffffffffffffff808211156150c85760008081fd5b8189019150604082360312156150de5760008081fd5b6150e661449b565b8235828111156150f65760008081fd5b6151023682860161455f565b82525085830135828111156151175760008081fd5b615123368286016148bc565b8288015250875250509382019382016150a7565b50919695505050505050565b60006020828403121561515557600080fd5b5051919050565b600061034f36836146c9565b600081356151758161426c565b6001600160a01b0390811684526020830135906151918261426c565b166020840152604082013536839003601e190181126151af57600080fd5b820160208101903567ffffffffffffffff8111156151cc57600080fd5b8036038213156151db57600080fd5b606060408601526137b6606086018284615009565b6000808335601e1984360301811261520757600080fd5b830160208101925035905067ffffffffffffffff81111561522757600080fd5b606081023603821315613d1457600080fd5b8183526000602080850194508260005b85811015614de457813561525c8161426c565b6001600160a01b0316875281830135615274816145f1565b60ff16878401526040828101359088015260609687019690910190600101615249565b60006001600160a01b0380861683528460208401526060604084015283356152be8161426c565b1660608301526020830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa10181126152fa57600080fd5b60a060808401526153116101008401858301615168565b905061532060408501856151f0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0808685030160a0870152615356848385615239565b935061536560608801886151f0565b93509150808685030160c08701525061537f838383615239565b92505050608084013560e084015280915050949350505050565b6000602082840312156153ab57600080fd5b81516112b8816145f1565b60006101206001600160a01b03871683528060208401526153d981840187614def565b905082810360408401526153ed8186614def565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614bfe57600080fd5b600061034f368361455f565b60006060828403121561548557600080fd5b6112b88383614600565b6001600160a01b03841681528260208201526060604082015260006137b66060830184614def565b6001600160a01b0385168152836020820152606060408201526000613ab1606083018486615009565b8284823760008382016000815283516154fd8183602088016149d7565b0195945050505050565b60006112b836848461478a565b6020815260006112b86020830184614def565b60008282518085526020808601955060208260051b8401016020860160005b848110156146bc57601f19868403018952615562838351614e87565b98840198925090830190600101615546565b6001600160a01b038716815285602082015260c06040820152600061559c60c08301876149fb565b85606084015282810360808401526155b48186615527565b905082810360a08401526155c88185614e87565b9998505050505050505050565b600082601f8301126155e657600080fd5b815160206155f661466f836145cd565b8083825260208201915060208460051b87010193508684111561561857600080fd5b602086015b84811015615634578051835291830191830161561d565b509695505050505050565b6000806040838503121561565257600080fd5b825167ffffffffffffffff8082111561566a57600080fd5b615676868387016155d5565b9350602085015191508082111561568c57600080fd5b50615699858286016155d5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001600160a01b0383168152604060208201526000612a1a6040830184615527565b828152604060208201526000612a1a6040830184614e87565b6020815260006112b860208301846149fb565b808202811582820484141761034f5761034f614d3c565b600181815b8085111561577257816000190482111561575857615758614d3c565b8085161561576557918102915b93841c939080029061573c565b509250929050565b6000826157895750600161034f565b816157965750600061034f565b81600181146157ac57600281146157b6576157d2565b600191505061034f565b60ff8411156157c7576157c7614d3c565b50506001821b61034f565b5060208310610133831016604e8410600b84101617156157f5575081810a61034f565b6157ff8383615737565b806000190482111561581357615813614d3c565b029392505050565b60006112b8838361577a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561586857600080fd5b815180151581146112b857600080fd5b60008251614bfe8184602087016149d7565b828152604060208201526000612a1a60408301846149fb56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564