0 txs
1.7k calls
constructor
constructor(address _aaveProtocolDataProvider, address _aaveLendingPool, address _swapper, address _onchainSwapRouter, uint256 _mismatchDelta, uint256 _mismatchDeltaDenominator, uint256 _slippageToleranceDenominator)
functions
aaveLendingPool
viewfunction aaveLendingPool() view returns (address)
aaveProtocolDataProvider
viewfunction aaveProtocolDataProvider() view returns (address)
convert32toAddress
purefunction convert32toAddress(bytes32 data) pure returns (address o)
flashloanProcessing
viewfunction flashloanProcessing(address _pool, address _repayAsset, uint256 _repayAmount, uint256 _premium, bytes _params) view returns (tuple[] transactions)
getArrayIndex
purefunction getArrayIndex(bytes data, uint8 inputNum, uint8 arrayIndex) pure returns (bytes32)
getArrayLast
purefunction getArrayLast(bytes data, uint8 inputNum) pure returns (bytes32)
getArrayLength
purefunction getArrayLength(bytes data, uint8 inputNum) pure returns (uint256)
getBalance
viewfunction getBalance(address _pool, address) view returns (uint256 balance)
getBytes
purefunction getBytes(bytes data, uint8 inputNum, uint256 offset) pure returns (bytes)
getDecimals
purefunction getDecimals(address) pure returns (uint256 decimals)
getInput
purefunction getInput(bytes data, uint8 inputNum) pure returns (bytes32)
getMethod
purefunction getMethod(bytes data) pure returns (bytes4)
getParams
purefunction getParams(bytes data) pure returns (bytes)
isSlippageCheckingGuard
viewfunction isSlippageCheckingGuard() view returns (bool)
onchainSwapRouter
viewfunction onchainSwapRouter() view returns (address)
read32
purefunction read32(bytes data, uint256 offset, uint256 length) pure returns (bytes32 o)
read4left
purefunction read4left(bytes data, uint256 offset) pure returns (bytes4 o)
removeAssetCheck
viewfunction removeAssetCheck(address _pool, address) view
swapper
viewfunction swapper() view returns (address)
txGuard
purefunction txGuard(address, address, bytes) pure returns (uint16 txType, bool)
withdrawProcessing
viewfunction withdrawProcessing(address _pool, address, uint256 _portion, address _to, bytes _swapData) view returns (address withdrawAsset, uint256 withdrawBalance, tuple[] transactions)
withdrawProcessing
viewfunction withdrawProcessing(address _pool, address, uint256 _portion, address _to) view returns (address withdrawAsset, uint256 withdrawBalance, tuple[] transactions)
calculateSwapDataParams
nonpayablefunction calculateSwapDataParams(address _pool, uint256 _poolTokenAmount, uint256 _slippageTolerance) returns (tuple swapDataParams)
events
ExchangeFrom
event ExchangeFrom(address fundAddress, address sourceAsset, uint256 sourceAmount, address dstAsset, uint256 time)
ExchangeTo
event ExchangeTo(address fundAddress, address sourceAsset, address dstAsset, uint256 dstAmount, uint256 time)
errors
No errors.
creation bytecode
0x6101606040526000805460ff191660011790553480156200001f57600080fd5b506040516200448e3803806200448e833981016040819052620000429162000144565b6001600160a01b038716158015906200006357506001600160a01b03861615155b80156200007857506001600160a01b03851615155b80156200008d57506001600160a01b03841615155b620000b55760405162461bcd60e51b8152600401620000ac90620001f4565b60405180910390fd5b600082118015620000c65750818311155b620000e55760405162461bcd60e51b8152600401620000ac90620001bd565b6001600160601b0319606097881b811660805295871b861660a05293861b851660c0529190941b90921660e0526101009290925261012052610140526200021d565b80516001600160a01b03811681146200013f57600080fd5b919050565b600080600080600080600060e0888a0312156200015f578283fd5b6200016a8862000127565b96506200017a6020890162000127565b95506200018a6040890162000127565b94506200019a6060890162000127565b93506080880151925060a0880151915060c0880151905092959891949750929550565b60208082526016908201527f6e756d657261746f72206d757374206265206c65737300000000000000000000604082015260600190565b6020808252600f908201526e696e76616c6964206164647265737360881b604082015260600190565b60805160601c60a05160601c60c05160601c60e05160601c6101005161012051610140516141c1620002cd600039806112f052806117165250806108f0528061234c528061240c52508061237052806124305250806105f5528061210e52806121f45250806104ea5280611d655280611e1e525080610c6e528061180952806118bf528061194f5280611c235280611fae528061267c52806129185250806106195280612f3952506141c16000f3fe608060405234801561001057600080fd5b506004361061011d5760003560e01c8063056f626f1461012257806309ff5c7d1461014d5780631053f9521461016d5780631eba30771461018d578063293d8063146101ad5780632b3297f9146101cd5780633e65a346146101d557806341dc16c3146101ea578063445fad1f146101fd5780635f9d4d2e146102055780636179309d1461020d578063689015131461022e5780636d5fae54146102415780636f8ae20214610256578063759f32831461026957806382f86acc14610289578063989dccf81461029c578063998546e3146102bc578063c3c6279f146102cf578063cf54aaa0146102e2578063d4fac45d146102f5578063db896b5714610308578063e9d337b81461031b575b600080fd5b6101356101303660046132d1565b610323565b60405161014493929190613c64565b60405180910390f35b61016061015b3660046136ee565b610352565b6040516101449190613ce0565b61018061017b366004613732565b6103e5565b6040516101449190613cfe565b6101a061019b366004613617565b61047f565b6040516101449190613b7d565b6101c06101bb366004613661565b610486565b6040516101449190613ce9565b6101a06104e8565b6101dd61050c565b6040516101449190613cd5565b6101606101f8366004613789565b610515565b6101a06105f3565b6101a0610617565b61022061021b36600461321d565b61063b565b604051610144929190614003565b61018061023c36600461362f565b610647565b61025461024f366004613199565b610662565b005b61013561026436600461327f565b6106ab565b61027c6102773660046133c6565b6106d7565b6040516101449190613f98565b6101606102973660046136ee565b610974565b6102af6102aa36600461334d565b61098b565b6040516101449190613cc2565b6101606102ca3660046136ee565b610b7d565b6101c06102dd36600461362f565b610bae565b6101606102f0366004613161565b610bbb565b610160610303366004613199565b610bc1565b6101606103163660046136a3565b610bed565b6101a0610c6c565b60008060606103408887876103398c8b8a610c90565b6000610d66565b9250925092505b955095509592505050565b60008061036a848460200260040160ff166020610bed565b9050600061037d85600484016020610bed565b9050806103c6576040805162461bcd60e51b8152602060048201526012602482015271696e707574206973206e6f7420617272617960701b604482015290519081900360640190fd5b6103da856020808402850160040190610bed565b925050505b92915050565b60606014821061042d576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081bd9999cd95d60921b604482015290519081900360640190fd5b816020029150600061044c85848660200260040160ff16016020610bed565b90506000610461868584016004016020610bed565b90506104738660248487010183610dc1565b925050505b9392505050565b805b919050565b600081600401835110156104df576040805162461bcd60e51b815260206004820152601b60248201527a52656164696e67206279746573206f7574206f6620626f756e647360281b604482015290519081900360640190fd5b50016020015190565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1681565b60008061052d858560200260040160ff166020610bed565b9050600061054086600484016020610bed565b905080610589576040805162461bcd60e51b8152602060048201526012602482015271696e707574206973206e6f7420617272617960701b604482015290519081900360640190fd5b60ff841681116105d9576040805162461bcd60e51b815260206004820152601660248201527534b73b30b634b21030b93930bc903837b9b4ba34b7b760511b604482015290519081900360640190fd5b610473866020600160ff8816018102850160040190610bed565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008094509492505050565b60606103df60048084510384610dc19092919063ffffffff16565b60008061066e84610f12565b91509150816000148015610680575080155b6106a55760405162461bcd60e51b815260040161069c90613d9e565b60405180910390fd5b50505050565b60008060606106b8612fdf565b6106c6888787846001610d66565b935093509350509450945094915050565b6106df613006565b836001600160a01b031663cc3c6df66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050600080856001600160a01b0316631e50a4a66040518163ffffffff1660e01b815260040160206040518083038186803b15801561076e57600080fd5b505afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a6919061317d565b6001600160a01b031663ced72f876040518163ffffffff1660e01b815260040160a06040518083038186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081691906139d1565b9450945050505060008211156108475761084461083d8261083788866111cc565b90611225565b8690611289565b94505b60006108cf876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd91906138d1565b61083788670de0b6b3a76400006111cc565b90506108dc8782876112e6565b935060005b845151811015610969576109457f000000000000000000000000000000000000000000000000000000000000000061083761091d826001611289565b885180518690811061092b57fe5b6020026020010151602001516111cc90919063ffffffff16565b855180518390811061095357fe5b60209081029190910181015101526001016108e1565b505050509392505050565b6000610478838360200260040160ff166020610bed565b60606000808061099d858701876138e9565b925092509250600060405180606001604052808b6001600160a01b031681526020018a815260200189815250905060006109d78c83611781565b90506000836109f0576109eb8d8787611a11565b6109ff565b6109ff8d878560000151611ed8565b905080518251016001600160401b0381118015610a1b57600080fd5b50604051908082528060200260200182016040528015610a5557816020015b610a42613025565b815260200190600190039081610a3a5790505b5096506000805b8351821015610ae157838281518110610a7157fe5b602002602001015160000151898281518110610a8957fe5b60209081029190910101516001600160a01b0390911690528351849083908110610aaf57fe5b602002602001015160200151898281518110610ac757fe5b602090810291909101810151015260019182019101610a5c565b600091505b8251821015610b6b57828281518110610afb57fe5b602002602001015160000151898281518110610b1357fe5b60209081029190910101516001600160a01b0390911690528251839083908110610b3957fe5b602002602001015160200151898281518110610b5157fe5b602090810291909101810151015260019182019101610ae6565b50505050505050509695505050505050565b600080610b95848460200260040160ff166020610bed565b9050610ba684600483016020610bed565b949350505050565b60006103df826000610486565b50601290565b6000806000610bcf85610f12565b9150915080821115610be5576103da8282611289565b505092915050565b600081830184511015610c45576040805162461bcd60e51b815260206004820152601b60248201527a52656164696e67206279746573206f7574206f6620626f756e647360281b604482015290519081900360640190fd5b826020018401519050816020038015610c64576008810260020a820491505b509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610c98612fdf565b81806020019051810190610cac91906137df565b90506000610cbf858584604001516112e6565b905060008260000151806020019051810190610cdb91906134d3565b8251518151919250908114610d025760405162461bcd60e51b815260040161069c90613e01565b60005b81811015610d4957610d41838281518110610d1c57fe5b602002602001015185600001518381518110610d3457fe5b60200260200101516122f1565b600101610d05565b50610d5c846020015184602001516123d7565b5050509392505050565b60008060606000610d7789896124ba565b80519091506001600160a01b0316610da357610d9489888a612605565b91506000809350935050610347565b610db0898983898961282e565b905193509050955095509592505050565b60608182601f011015610e0c576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b828284011015610e54576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b81830184511015610ea0576040805162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015290519081900360640190fd5b606082158015610ebf5760405191506000825260208201604052610f09565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ef8578051835260209283019201610ee0565b5050858452601f01601f1916604052505b50949350505050565b600080600080610f2185612a0a565b915091506000806000806000808a6001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f6757600080fd5b505afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f919061317d565b905060005b878110156111be57888181518110610fb857fe5b6020026020010151600001519650816001600160a01b031663032c49ed886040518263ffffffff1660e01b8152600401610ff29190613b7d565b60206040518083038186803b15801561100a57600080fd5b505afa15801561101e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104291906138af565b61ffff16600414806110d3575060405163032c49ed60e01b81526001600160a01b0383169063032c49ed9061107b908a90600401613b7d565b60206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cb91906138af565b61ffff16600e145b156111b6576110e28c88612afe565b97509094509250831515806110f657508215155b156111b65760405163b3596f0760e01b81526001600160a01b0383169063b3596f0790611127908a90600401613b7d565b60206040518083038186803b15801561113f57600080fd5b505afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117791906138d1565b945061119561118e600a88900a61083788886111cc565b8c90612ca0565b9a506111b36111ac600a88900a61083788876111cc565b8b90612ca0565b99505b600101610fa4565b505050505050505050915091565b6000826111db575060006103df565b828202828482816111e857fe5b04146104785760405162461bcd60e51b815260040180806020018281038252602181526020018061416b6021913960400191505060405180910390fd5b6000808211611278576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b81838161128157fe5b049392505050565b6000828211156112e0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6112ee613006565b7f000000000000000000000000000000000000000000000000000000000000000082111561132e5760405162461bcd60e51b815260040161069c90613d11565b600061133a85856124ba565b80519091506001600160a01b03166113525750610478565b60008060006113618888612cf8565b915091506000816001600160401b038111801561137d57600080fd5b506040519080825280602002602001820160405280156113b757816020015b6113a461303d565b81526020019060019003908161139c5790505b50905060005b828110156114335785600001516001600160a01b03168482815181106113df57fe5b6020026020010151600001516001600160a01b03161461142b5783818151811061140557fe5b602002602001015182868151811061141957fe5b60209081029190910101526001909401935b6001016113bd565b5060006114408386611289565b8251038252508552505060408051630f28525360e11b815290516000916001600160a01b03891691631e50a4a691600480820192602092909190829003018186803b15801561148e57600080fd5b505afa1580156114a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c6919061317d565b90506000805b8381101561159c57611592836001600160a01b03166329c07fba886000015184815181106114f657fe5b6020026020010151600001518960000151858151811061151257fe5b6020026020010151602001516040518363ffffffff1660e01b815260040161153b929190613c28565b60206040518083038186803b15801561155357600080fd5b505afa158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b91906138d1565b8390612ca0565b91506001016114cc565b506000886001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611610919061317d565b855160405163b3596f0760e01b81526001600160a01b03929092169163b3596f079161163e91600401613b7d565b60206040518083038186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e91906138d1565b9050600085600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cf57600080fd5b505afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117079190613a10565b60ff16600a0a905060006117567f0000000000000000000000000000000000000000000000000000000000000000610837611742828d611289565b611750876108378a896111cc565b906111cc565b96516020808a0180516001600160a01b03909316909252905101969096525050505050509392505050565b6040805160028082526060828101909352816020015b61179f613025565b8152602001906001900390816117975790505090506000806118876117e085604001516117da600288602001516111cc90919063ffffffff16565b90612ca0565b8551604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611831908a907f000000000000000000000000000000000000000000000000000000000000000090600401613b91565b60206040518083038186803b15801561184957600080fd5b505afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188191906138d1565b90612f0b565b9150915083600001518360008151811061189d57fe5b60209081029190910101516001600160a01b03909116905263095ea7b360e01b7f0000000000000000000000000000000000000000000000000000000000000000836118eb576000196118ed565b825b6040516024016118fe929190613c28565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508360008151811061193e57fe5b6020026020010151602001819052507f00000000000000000000000000000000000000000000000000000000000000008360018151811061197b57fe5b6020908102919091018101516001600160a01b0390921690915284519085015160405163573ade8160e01b926119ba9290916002908a90602401613c94565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050836001815181106119fa57fe5b602002602001015160200181905250505092915050565b6060600080611a208686612cf8565b91509150611a2c613006565b604080516001808252818301909252600091816020015b611a4b613054565b815260200190600190039081611a4357505086518051919250611a76918101602090810191016134d3565b81600081518110611a8357fe5b602002602001015160000181905250600081600081518110611aa157fe5b602002602001015160200151600001906002811115611abc57fe5b90816002811115611ac957fe5b90525080825260208087015190830152805160009082908290611ae857fe5b602090810291909101015151519050611b0660016117da8684612ca0565b6001600160401b0381118015611b1b57600080fd5b50604051908082528060200260200182016040528015611b5557816020015b611b42613025565b815260200190600190039081611b3a5790505b5095506000806000805b87811015611cf65785600081518110611b7457fe5b6020026020010151600001518381518110611b8b57fe5b6020026020010151600001516001600160a01b0316898281518110611bac57fe5b6020026020010151600001516001600160a01b03161415611c065785600081518110611bd457fe5b6020026020010151600001518381518110611beb57fe5b60200260200101516020015191508280600101935050611c21565b888181518110611c1257fe5b60200260200101516020015191505b7f00000000000000000000000000000000000000000000000000000000000000008a8581518110611c4e57fe5b60209081029190910101516001600160a01b0390911690528851631a4ca37b60e21b908a9083908110611c7d57fe5b602002602001015160000151838f604051602401611c9d93929190613c41565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508a8581518110611cdc57fe5b602090810291909101810151015260019384019301611b5f565b5060005b84811015611e1b5786518051600090611d0f57fe5b6020026020010151600001518181518110611d2657fe5b6020026020010151600001518a8581518110611d3e57fe5b60209081029190910101516001600160a01b0390911690528651805163095ea7b360e01b917f000000000000000000000000000000000000000000000000000000000000000091600090611d8e57fe5b6020026020010151600001518381518110611da557fe5b602002602001015160200151604051602401611dc2929190613c28565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508a8581518110611e0157fe5b602090810291909101810151015260019384019301611cfa565b507f0000000000000000000000000000000000000000000000000000000000000000898481518110611e4957fe5b60209081029190910101516001600160a01b039091169052604051630bffcd2560e41b90611e7b908890602401613e8a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050898481518110611eba57fe5b60200260200101516020018190525050505050505050509392505050565b6060600080611ee78686612cf8565b90925090506000611ef98260036111cc565b9050806001600160401b0381118015611f1157600080fd5b50604051908082528060200260200182016040528015611f4b57816020015b611f38613025565b815260200190600190039081611f305790505b5060408051600280825260608201835292965060009290916020830190803683370190505090508581600181518110611f8057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506000805b848110156122d1577f0000000000000000000000000000000000000000000000000000000000000000878381518110611fd957fe5b60209081029190910101516001600160a01b0390911690528551631a4ca37b60e21b9087908390811061200857fe5b60200260200101516000015187838151811061202057fe5b6020026020010151602001518c60405160240161203f93929190613c41565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505087838151811061207e57fe5b6020026020010151602001819052508180600101925050876001600160a01b03168682815181106120ab57fe5b6020026020010151600001516001600160a01b0316146122c9578581815181106120d157fe5b6020026020010151600001518783815181106120e957fe5b60209081029190910101516001600160a01b039091169052855163095ea7b360e01b907f00000000000000000000000000000000000000000000000000000000000000009088908490811061213a57fe5b602002602001015160200151604051602401612157929190613c28565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505087838151811061219657fe5b60200260200101516020018190525081806001019250508581815181106121b957fe5b602002602001015160000151836000815181106121d257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000087838151811061221f57fe5b60209081029190910101516001600160a01b03909116905285516338ed173960e01b9087908390811061224e57fe5b6020026020010151602001516000858d600019604051602401612275959493929190614019565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508783815181106122b457fe5b60209081029190910181015101526001909101905b600101611fa4565b5060006122de8483611289565b8751038752509498975050505050505050565b805182516001600160a01b0390811691161461231f5760405162461bcd60e51b815260040161069c90613dd5565b8060200151826020015111156123475760405162461bcd60e51b815260040161069c90613e34565b6123a27f00000000000000000000000000000000000000000000000000000000000000006108377f000000000000000000000000000000000000000000000000000000000000000084602001516111cc90919063ffffffff16565b602080840151908301516123b591611289565b11156123d35760405162461bcd60e51b815260040161069c90613d71565b5050565b805182516001600160a01b039081169116146124055760405162461bcd60e51b815260040161069c90613d45565b60006124627f00000000000000000000000000000000000000000000000000000000000000006108377f000000000000000000000000000000000000000000000000000000000000000085602001516111cc90919063ffffffff16565b60208301519091506124749082612ca0565b836020015111158015612499575060208201516124919082611289565b836020015110155b6124b55760405162461bcd60e51b815260040161069c90613e5d565b505050565b6124c261303d565b6000806124ce85612a0a565b915091506000805b828110156125fb576124fe8482815181106124ed57fe5b602002602001015160000151612f34565b9250506001600160a01b038216156125f3576040516370a0823160e01b81526001600160a01b038316906370a082319061253c908a90600401613b7d565b60206040518083038186803b15801561255457600080fd5b505afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c91906138d1565b60208601819052156125f3576125bb670de0b6b3a76400006108378888602001516111cc90919063ffffffff16565b602086018190526125cb576125f3565b8381815181106125d757fe5b6020908102919091010151516001600160a01b031685526125fb565b6001016124d6565b5050505092915050565b60606000806126148685612cf8565b91509150806002026001600160401b038111801561263157600080fd5b5060405190808252806020026020018201604052801561266b57816020015b612658613025565b8152602001906001900390816126505790505b5092506000805b82811015610969577f00000000000000000000000000000000000000000000000000000000000000008583815181106126a757fe5b60209081029190910101516001600160a01b0390911690528351631a4ca37b60e21b908590839081106126d657fe5b6020026020010151600001518583815181106126ee57fe5b6020026020010151602001518a60405160240161270d93929190613c41565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505085838151811061274c57fe5b602002602001015160200181905250818060010192505083818151811061276f57fe5b60200260200101516000015185838151811061278757fe5b60209081029190910101516001600160a01b039091169052835163a9059cbb60e01b9088908690849081106127b857fe5b6020026020010151602001516040516024016127d5929190613c28565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505085838151811061281457fe5b602090810291909101810151015260019182019101612672565b604080516001808252818301909252606091600091906020808301908036833701905050905084600001518160008151811061286657fe5b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526000918160200160208202803683370190505090508560200151816000815181106128b557fe5b602090810291909101015260408051600180825281830190925260009181602001602082028036833701905050604080516001808252818301909252919250816020015b612901613025565b8152602001906001900390816128f95790505093507f00000000000000000000000000000000000000000000000000000000000000008460008151811061294457fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505063ab9c4b5d60e01b898484848d8d8c8c60405160200161298a93929190614058565b60408051601f19818403018152908290526129af96959493929160c490602401613bab565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050846000815181106129ef57fe5b60200260200101516020018190525050505095945050505050565b60606000826001600160a01b0316631e50a4a66040518163ffffffff1660e01b815260040160206040518083038186803b158015612a4757600080fd5b505afa158015612a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7f919061317d565b6001600160a01b031663e5406dbf6040518163ffffffff1660e01b815260040160006040518083038186803b158015612ab757600080fd5b505afa158015612acb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612af391908101906133fa565b915081519050915091565b6000806000806000612b0f86612f34565b90925090506001600160a01b03821615612c21576040516370a0823160e01b81526001600160a01b038316906370a0823190612b4f908a90600401613b7d565b60206040518083038186803b158015612b6757600080fd5b505afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f91906138d1565b6040516370a0823160e01b81529095506001600160a01b038216906370a0823190612bce908a90600401613b7d565b60206040518083038186803b158015612be657600080fd5b505afa158015612bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1e91906138d1565b93505b856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c5a57600080fd5b505afa158015612c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c929190613a10565b60ff16925050509250925092565b600082820183811015610478576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60606000806000612d0886612a0a565b91509150806001600160401b0381118015612d2257600080fd5b50604051908082528060200260200182016040528015612d5c57816020015b612d4961303d565b815260200190600190039081612d415790505b5093506000805b82811015612eeb57612d7a8482815181106124ed57fe5b5091506001600160a01b03821615612ee3576040516370a0823160e01b81526001600160a01b038316906370a0823190612db8908b90600401613b7d565b60206040518083038186803b158015612dd057600080fd5b505afa158015612de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0891906138d1565b868681518110612e1457fe5b60200260200101516020018181525050858581518110612e3057fe5b602002602001015160200151600014612ee357612e5f670de0b6b3a76400006108378989898151811061092b57fe5b868681518110612e6b57fe5b60200260200101516020018181525050858581518110612e8757fe5b60200260200101516020015160001415612ea057612ee3565b838181518110612eac57fe5b602002602001015160000151868681518110612ec457fe5b60209081029190910101516001600160a01b0390911690526001909401935b600101612d63565b506000612ef88386611289565b9050808651038652505050509250929050565b60008083830184811015612f26576000809250925050612f2d565b6001925090505b9250929050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d2493b6c846040518263ffffffff1660e01b8152600401612f839190613b7d565b60606040518083038186803b158015612f9b57600080fd5b505afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd391906131d1565b91959194509092505050565b604051806060016040528060608152602001612ff961303d565b8152602001600081525090565b60405180604001604052806060815260200161302061303d565b905290565b60408051808201909152600081526060602082015290565b604080518082019091526000808252602082015290565b604051806040016040528060608152602001613020604080518082019091528060008152602001606081525090565b80356104818161414d565b60008083601f84011261309f578182fd5b5081356001600160401b038111156130b5578182fd5b602083019150836020828501011115612f2d57600080fd5b600082601f8301126130dd578081fd5b81356130f06130eb826140e8565b6140a8565b818152846020838601011115613104578283fd5b816020850160208301379081016020019190915292915050565b600082601f83011261312e578081fd5b815161313c6130eb826140e8565b818152846020838601011115613150578283fd5b610ba6826020830160208701614109565b600060208284031215613172578081fd5b813561047881614135565b60006020828403121561318e578081fd5b815161047881614135565b600080604083850312156131ab578081fd5b82356131b681614135565b915060208301356131c681614135565b809150509250929050565b6000806000606084860312156131e5578081fd5b83516131f081614135565b602085015190935061320181614135565b604085015190925061321281614135565b809150509250925092565b60008060008060608587031215613232578182fd5b843561323d81614135565b9350602085013561324d81614135565b925060408501356001600160401b03811115613267578283fd5b6132738782880161308e565b95989497509550505050565b60008060008060808587031215613294578182fd5b843561329f81614135565b935060208501356132af81614135565b92506040850135915060608501356132c681614135565b939692955090935050565b600080600080600060a086880312156132e8578283fd5b85356132f381614135565b9450602086013561330381614135565b935060408601359250606086013561331a81614135565b915060808601356001600160401b03811115613334578182fd5b613340888289016130cd565b9150509295509295909350565b60008060008060008060a08789031215613365578384fd5b863561337081614135565b9550602087013561338081614135565b9450604087013593506060870135925060808701356001600160401b038111156133a8578182fd5b6133b489828a0161308e565b979a9699509497509295939492505050565b6000806000606084860312156133da578081fd5b83356133e581614135565b95602085013595506040909401359392505050565b6000602080838503121561340c578182fd5b82516001600160401b0380821115613422578384fd5b818501915085601f830112613435578384fd5b81516134436130eb826140cb565b818152848101908486016040808502870188018b1015613461578889fd5b8896505b848710156134c45780828c03121561347b578889fd5b8051818101818110888211171561348e57fe5b8252825161349b81614135565b8152828901516134aa8161414d565b818a01528452600196909601959287019290810190613465565b50909998505050505050505050565b6000602082840312156134e4578081fd5b81516001600160401b03808211156134fa578283fd5b818401915084601f83011261350d578283fd5b815161351b6130eb826140cb565b818152602080820191908501865b848110156136095781518701601f196060828d038201121561354957898afd5b604051606081018181108a8211171561355e57fe5b604052602083015161356f81614135565b81526040830151602082015260608301518981111561358c578b8cfd5b92909201916040838e03830112156135a2578a8bfd5b6040519150604082018281108a821117156135b957fe5b604090815260208401518352830151898111156135d4578b8cfd5b6135e38e60208387010161311e565b602084810191909152604083019390935250865294850194929092019150600101613529565b509098975050505050505050565b600060208284031215613628578081fd5b5035919050565b600060208284031215613640578081fd5b81356001600160401b03811115613655578182fd5b610ba6848285016130cd565b60008060408385031215613673578182fd5b82356001600160401b03811115613688578283fd5b613694858286016130cd565b95602094909401359450505050565b6000806000606084860312156136b7578081fd5b83356001600160401b038111156136cc578182fd5b6136d8868287016130cd565b9660208601359650604090950135949350505050565b60008060408385031215613700578182fd5b82356001600160401b03811115613715578283fd5b613721858286016130cd565b92505060208301356131c68161415b565b600080600060608486031215613746578081fd5b83356001600160401b0381111561375b578182fd5b613767868287016130cd565b93505060208401356137788161415b565b929592945050506040919091013590565b60008060006060848603121561379d578081fd5b83356001600160401b038111156137b2578182fd5b6137be868287016130cd565b93505060208401356137cf8161415b565b915060408401356132128161415b565b6000602082840312156137f0578081fd5b81516001600160401b0380821115613806578283fd5b90830190818503608081121561381a578384fd5b6040805160608101818110858211171561383057fe5b8252845184811115613840578687fd5b61384c8982880161311e565b82525081601f198401121561385f578586fd5b81519250818301838110858211171561387457fe5b82526020850151935061388684614135565b838352818501516020840152826020820152606085015182820152809550505050505092915050565b6000602082840312156138c0578081fd5b815161ffff81168114610478578182fd5b6000602082840312156138e2578081fd5b5051919050565b6000806000606084860312156138fd578081fd5b8335925060208401356001600160401b038082111561391a578283fd5b90850190818703608081121561392e578384fd5b6040805160608101818110858211171561394457fe5b8252843584811115613954578687fd5b6139608b8288016130cd565b82525081601f1984011215613973578586fd5b81519250818301838110858211171561398857fe5b82526020850135935061399a84614135565b838352818501356020840152826020820152606085013582820152809650506139c4818901613083565b9450505050509250925092565b600080600080600060a086880312156139e8578283fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600060208284031215613a21578081fd5b81516104788161415b565b6000815180845260208085019450808401835b83811015613a645781516001600160a01b031687529582019590820190600101613a3f565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b85811015613ad2578284038952815180516001600160a01b031685528501516040868601819052613abe81870183613b0e565b9a87019a9550505090840190600101613a8b565b5091979650505050505050565b6000815180845260208085019450808401835b83811015613a6457815187529582019590820190600101613af2565b60008151808452613b26816020860160208601614109565b601f01601f19169290920160200192915050565b80516001600160a01b03168252602090810151910152565b6000815160038110613b6057fe5b80845250602082015160406020850152610ba66040850182613b0e565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b600060018060a01b03808a16835260e06020840152613bcd60e084018a613a2c565b8381036040850152613bdf818a613adf565b90508381036060850152613bf38189613adf565b9050818716608085015283810360a0850152613c0f8187613b0e565b9250505060ff831660c083015298975050505050505050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060018060a01b038516825283602083015260606040830152613c8b6060830184613a6f565b95945050505050565b6001600160a01b039485168152602081019390935260ff919091166040830152909116606082015260800190565b6000602082526104786020830184613a6f565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b6000602082526104786020830184613b0e565b6020808252601a9082015279696e76616c696420736c69707061676520746f6c6572616e636560301b604082015260600190565b6020808252601290820152710c8e6e840c2e6e6cae840dad2e6dac2e8c6d60731b604082015260600190565b6020808252601390820152720e6e4c640c2dadeeadce840dad2e6dac2e8c6d606b1b604082015260600190565b6020808252601d908201527f63616e6e6f742072656d6f7665206e6f6e2d656d707479206173736574000000604082015260600190565b6020808252601290820152710e6e4c640c2e6e6cae840dad2e6dac2e8c6d60731b604082015260600190565b6020808252601990820152780e6eec2e040c8c2e8c240d8cadccee8d040dad2e6dac2e8c6d603b1b604082015260600190565b6020808252600f908201526e0c2dadeeadce840e8dede40d0d2ced608b1b604082015260600190565b6020808252601390820152720c8e6e840c2dadeeadce840dad2e6dac2e8c6d606b1b604082015260600190565b600060208083526080830184516060808487015282825180855260a08801915060a086820289010194508584019350865b81811015613f8157888603609f190183528451805160408089528151818a0181905290918a82028a01880191908b0190888b01908d5b81811015613f52578c8503605f19018352835180516001600160a01b031686528e8101518f8701528601518686018c905280518c8701528e015160808601879052613f3f60a0870182613b0e565b955050928d0192918d0191600101613ef1565b5050505091890151888303898b015291613f6c8184613b52565b98505050948701945091860191600101613ebb565b50505050918501519150610ba66040850183613b3a565b6020808252825160608383015280516080840181905260009291820190839060a08601905b80831015613fe657613fd0828551613b3a565b6040820191508484019350600183019250613fbd565b509286015192613ff96040870185613b3a565b9695505050505050565b61ffff9290921682521515602082015260400190565b600086825260ff8616602083015260a0604083015261403b60a0830186613a2c565b6001600160a01b0394909416606083015250608001529392505050565b60008482526060602083015283516080606084015261407a60e0840182613b0e565b9050602085015161408e6080850182613b3a565b5060409485015160c0840152921515919093015292915050565b6040518181016001600160401b03811182821017156140c357fe5b604052919050565b60006001600160401b038211156140de57fe5b5060209081020190565b60006001600160401b038211156140fb57fe5b50601f01601f191660200190565b60005b8381101561412457818101518382015260200161410c565b838111156106a55750506000910152565b6001600160a01b038116811461414a57600080fd5b50565b801515811461414a57600080fd5b60ff8116811461414a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220961550fa76b15d7e34ce1a228eea80569c6678c00427e5880164b4b93955b24864736f6c634300070600330000000000000000000000002d8a3c5677189723c4cb8873cfc9c8976fdf38ac000000000000000000000000a238dd80c259a72e81d7e4664a9801593f98d1c50000000000000000000000004f754e0f0924afd74980886b0b479fa1d7c58d0d0000000000000000000000009be950d8bff36f09e5d460271859f94c7c58344c000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710