1 tx
125 calls
constructor
No constructor.
functions
adapterWhitelist
viewfunction adapterWhitelist(address) view returns (bool)
getVersion
purefunction getVersion() pure returns (string)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
borrowTokenFromCollateral
nonpayablefunction borrowTokenFromCollateral(address recipient, address market, uint256 collInAmt, uint128 maxDebtAmt, tuple swapFtPath) returns (uint256)
borrowTokenFromCollateralAndXt
nonpayablefunction borrowTokenFromCollateralAndXt(address recipient, address market, uint256 collInAmt, uint256 borrowAmt, bool isV1) returns (uint256)
executeOperation
nonpayablefunction executeOperation(address repayToken, uint128 repayAmt, address, bytes removedCollateralData, bytes callbackData)
executeOperation
nonpayablefunction executeOperation(address, address, uint256, bytes data) returns (bytes collateralData)
flashRepayFromColl
nonpayablefunction flashRepayFromColl(address recipient, address market, uint256 gtId, bool byDebtToken, uint256 expectedOutput, bytes callbackData) returns (uint256 netTokenOut)
initialize
nonpayablefunction initialize(address admin, address whitelistManager_)
initializeV2
nonpayablefunction initializeV2(address whitelistManager_)
leverage
nonpayablefunction leverage(address recipient, address market, uint128 maxLtv, bool isV1, tuple[] inputPaths, tuple swapXtPath, tuple swapCollateralPath) returns (uint256 gtId, uint256 netXtOut)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
rolloverGt
nonpayablefunction rolloverGt(address gtToken, uint256 gtId, address additionalAsset, uint256 additionalAmt, bytes rolloverData) returns (uint256 newGtId)
setWhitelistManager
nonpayablefunction setWhitelistManager(address whitelistManager_)
swapAndRepay
nonpayablefunction swapAndRepay(address gt, uint256 gtId, uint128 repayAmt, bool byDebtToken, tuple[] paths) returns (uint256[] netOutOrIns)
swapTokens
nonpayablefunction swapTokens(tuple[] paths) returns (uint256[])
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Borrow
event Borrow(address indexed market, uint256 indexed gtId, address caller, address recipient, uint256 collInAmt, uint128 actualDebtAmt, uint128 borrowAmt)
CreateOrderAndDeposit
event CreateOrderAndDeposit(address indexed market, address indexed order, address maker, uint256 debtTokenToDeposit, uint128 ftToDeposit, uint128 xtToDeposit, ((uint256 xtReserve, uint256 liqSquare, int256 offset)[] lendCurveCuts, (uint256 xtReserve, uint256 liqSquare, int256 offset)[] borrowCurveCuts) curveCuts)
FlashRepay
event FlashRepay(address indexed gt, uint256 indexed gtId, uint256 netTokenOut)
Initialized
event Initialized(uint64 version)
IssueGt
event IssueGt(address indexed market, uint256 indexed gtId, address caller, address recipient, uint128 debtTokenAmtIn, uint128 xtAmtIn, uint128 ltv, bytes collData)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RedeemAndSwap
event RedeemAndSwap(address indexed market, uint256 ftAmount, address caller, address recipient, uint256 actualTokenOut)
RepayByTokenThroughFt
event RepayByTokenThroughFt(address indexed market, uint256 indexed gtId, address caller, address recipient, uint256 repayAmt, uint256 returnAmt)
RolloverGt
event RolloverGt(address indexed gt, uint256 indexed gtId, uint256 indexed newGtId, address additionalAsset, uint256 additionalAmt)
SellTokens
event SellTokens(address indexed market, address caller, address recipient, uint128 ftInAmt, uint128 xtInAmt, address[] orders, uint128[] amtsToSellTokens, uint256 actualTokenOut)
SwapAndRepay
event SwapAndRepay(address indexed gt, uint256 indexed gtId, uint256 repayAmt, uint256 remainingRepayToken)
SwapExactTokenToToken
event SwapExactTokenToToken(address indexed tokenIn, address indexed tokenOut, address caller, address recipient, address[] orders, uint128[] tradingAmts, uint256 actualTokenOut)
SwapTokenToExactToken
event SwapTokenToExactToken(address indexed tokenIn, address indexed tokenOut, address caller, address recipient, address[] orders, uint128[] tradingAmts, uint256 actualTokenIn)
Unpaused
event Unpaused(address account)
UpdateMarketWhiteList
event UpdateMarketWhiteList(address market, bool isWhitelist)
UpdateSwapAdapterWhiteList
event UpdateSwapAdapterWhiteList(address adapter, bool isWhitelist)
Upgraded
event Upgraded(address indexed implementation)
WhitelistManagerUpdated
event WhitelistManagerUpdated(address whitelistManager)
errors
AdapterNotWhitelisted
error AdapterNotWhitelisted(address adapter)
AddressEmptyCode
error AddressEmptyCode(address target)
ApproveTokenFailWhenSwap
error ApproveTokenFailWhenSwap(address token, bytes revertData)
CallbackAddressNotMatch
error CallbackAddressNotMatch()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
GtNotOwnedBySender
error GtNotOwnedBySender()
GtNotWhitelisted
error GtNotWhitelisted(address gt)
InsufficientTokenIn
error InsufficientTokenIn(address token, uint256 expectedTokenIn, uint256 actualTokenIn)
InsufficientTokenOut
error InsufficientTokenOut(address token, uint256 expectedTokenOut, uint256 actualTokenOut)
InvalidInitialization
error InvalidInitialization()
LtvBiggerThanExpected
error LtvBiggerThanExpected(uint128 expectedLtv, uint128 actualLtv)
MarketNotWhitelisted
error MarketNotWhitelisted(address market)
NotInitializing
error NotInitializing()
OrdersAndAmtsLengthNotMatch
error OrdersAndAmtsLengthNotMatch()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapFailed
error SwapFailed(address adapter, bytes revertData)
SwapPathsIsEmpty
error SwapPathsIsEmpty()
SwapUnitsIsEmpty
error SwapUnitsIsEmpty()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a08060405234602957306080526150ff908161002e823960805181818161366301526136f60152f35b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630d8e6e2c1461417b578063150b7a021461412657806329b6eca91461403d5780632e3e3ef2146140015780633f4ba83a14613f8357806341a4940914613f5d578063485cc95514613d9f5780634a8f69be146138a05780634f1ef286146136b757806352d1902d146136505780635c975abb146136215780636a209b4e1461337c578063715018a6146132fd57806379ba5097146132ad5780638456cb591461323a5780638da5cb5b1461320557806399a54a5a14612ee9578063a3b2baf614612e4b578063ad3cb1cc14612e03578063c471f59b14612c43578063e30c397814612c0e578063e49d66d214612522578063e818cc6d146121ba578063ef8b49681461095a578063f2fde38b146108d45763f9f2b62e14610138575f80fd5b346104ce5760a03660031901126104ce576101516141e2565b9061015a6141f8565b60843592606435926044359285151586036108d057610177614862565b61017f61489a565b604051634eb1c24560e11b81526001600160a01b039190911695909160a0836004818a5afa80156108c357819082918395849261088b575b506040516323b872dd60e01b60208201526001600160a01b0392831696918316939092169161020790610201816101f38c3033602485016145fb565b03601f198101835282614282565b87614f53565b604051636eb1769f60e11b81523060048201526001600160a01b0391909116602482018190529590602081604481855afa9081156107b3578591610859575b508881018091116107be5760405163095ea7b360e01b60208281019182526001600160a01b038a1660248401526044830193909352909190869061029784606481015b03601f198101865285614282565b83519082865af185513d8261083d575b505015610804575b5050604051633f5ffaf560e01b81526020816004818d5afa90811561074c5784916107d2575b506305f5e1008902908982046305f5e100148a1517156107be576305f5e10003906305f5e10082116107be576103139161030e916147c5565b614b96565b97889560406103508c82518c6020820152602081526103328482614282565b8884519e8f9485938492637a0ee4f960e11b845230600485016145ce565b03925af19081156107b357859a869261077f575b50803b1561077b57858b610391928b83604051809681958294632142170760e11b845230600485016145fb565b03925af1801561077057908691610757575b50506001600160801b0316908180821091180218936103e46040516323b872dd60e01b60208201526103de816101f3893033602485016145fb565b83614f53565b6104dc575b5050863b156104ce57604051632770a7eb60e21b81526001600160a01b0385166004820152602481018390528181604481838c5af180156104d1576104b9575b602087808a7fdc3efdf28701077a23ef0beb0f3260ca639658ce2676bbc9d83030fac6ce56128a8a61049d8b61045e8c614b96565b604080513381526001600160a01b0390951660208601528401949094526001600160801b039081166060840152909216608082015290819060a0820190565b0390a360015f51602061506a5f395f51905f5255604051908152f35b6104c4828092614282565b6104ce5780610429565b80fd5b6040513d84823e3d90fd5b604051636eb1769f60e11b8152306004820152602481018a9052602081604481855afa90811561074c57849161071a575b508481018091116107065760405163095ea7b360e01b60208281019182526001600160a01b038d166024840152604483019390935290919085906105548460648101610289565b83519082865af184513d826106ea575b5050156106b1575b5050604051636eb1769f60e11b815230600482015260248101899052602081604481855afa9081156106a6578391610670575b5083810180911161065c5760405163095ea7b360e01b60208281019182526001600160a01b038c166024840152604483019390935290919084906105e68460648101610289565b83519082865af183513d82610640575b50506103e9576106399161063460405163095ea7b360e01b60208201528b60248201528560448201526044815261062e606482614282565b82614f53565b614f53565b5f806103e9565b9091506106545750813b15155b5f806105f6565b60011461064d565b634e487b7160e01b83526011600452602483fd5b90506020813d60201161069e575b8161068b60209383614282565b8101031261069a57515f61059f565b5f80fd5b3d915061067e565b6040513d85823e3d90fd5b6106e39161063460405163095ea7b360e01b60208201528c60248201528660448201526044815261062e606482614282565b5f8061056c565b9091506106fe5750813b15155b5f80610564565b6001146106f7565b634e487b7160e01b84526011600452602484fd5b90506020813d602011610744575b8161073560209383614282565b8101031261069a57515f61050d565b3d9150610728565b6040513d86823e3d90fd5b8161076191614282565b61076c57845f6103a3565b8480fd5b6040513d88823e3d90fd5b8580fd5b909a506107a4915060403d6040116107ac575b61079c8183614282565b8101906145b4565b90995f610364565b503d610792565b6040513d87823e3d90fd5b634e487b7160e01b85526011600452602485fd5b90506020813d6020116107fc575b816107ed60209383614282565b8101031261069a57515f6102d5565b3d91506107e0565b6108369161063460405163095ea7b360e01b60208201528960248201528760448201526044815261062e606482614282565b5f806102af565b9091506108515750813b15155b5f806102a7565b60011461084a565b90506020813d602011610883575b8161087460209383614282565b8101031261069a57515f610246565b3d9150610867565b925050506108b291935060a03d60a0116108bc575b6108aa8183614282565b81019061454b565b509094925f6101b7565b503d6108a0565b50604051903d90823e3d90fd5b5080fd5b50346104ce5760203660031901126104ce576108ee6141e2565b6108f661482f565b5f5160206150aa5f395f51905f5280546001600160a01b0319166001600160a01b039283169081179091555f51602061500a5f395f51905f52549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346104ce5760a03660031901126104ce576109746141e2565b90602435916001600160801b0383168093036108d05761099261420e565b506064356001600160401b0381116115d4576109b29036906004016142be565b506084356001600160401b0381116115d4576109d29036906004016142be565b9260015c8360015d6001600160a01b031633036121ab57835184019360408186031261126157602081015194600486101561076c576040820151906001600160401b03821161077b57610a2c92602091820192010161462a565b9380610ba95750909192805181019060208183031261076c576020810151906001600160401b03821161077b576020610a6d9281610a7b9501920101614e4d565b60608151910151903061492a565b505b604051636eb1769f60e11b8152306004820152336024820152906001600160a01b03831690602083604481855afa9283156107b3578593610b75575b5082018092116107065760405163095ea7b360e01b602082810191825233602484015260448301949094529092908590610b0085606481015b03601f198101875286614282565b84519082875af1903d85519083610b56575b50505015610b1e578280f35b610b509161063460405163095ea7b360e01b60208201523360248201528560448201526044815261062e606482614282565b5f808280f35b91925090610b6b57503b15155b5f8080610b12565b6001915014610b63565b9092506020813d602011610ba1575b81610b9160209383614282565b8101031261069a5751915f610ab9565b3d9150610b84565b6001810361126557508351840160a0856020830192031261126157610bd060208601614537565b60408601516001600160a01b03811692919083900361077b57610bf5606088016145a0565b9160808801516001600160401b0381116110c957816020610c18928b0101614e4d565b9760a0810151906001600160401b03821161125d57610c3b929101602001614e4d565b966060810151805161124a575b5050604051634eb1c24560e11b81529660a088600481875afa91821561123f578788998994611211575b506040516370a0823160e01b8152306004820152996001600160a01b0394851696919094169360208b6024818a5afa9a8b15611206578a9b6111d2575b50604051633f5ffaf560e01b8152602081600481865afa9081156111c7578b91611195575b508451906305f5e1008202918083046305f5e1001490151715611144576305f5e10003906305f5e100821161114457610d109161030e916147c5565b604051636eb1769f60e11b81523060048201526001600160a01b0390921660248301819052979091602081604481855afa90811561118a578c91611158575b508c810180911161114457926040928c9d926102896020610df19d9e9f8d610da4829b9a8a519586918683019463095ea7b360e01b86526024840160209093929193604081019460018060a01b031681520152565b83519082865af188513d82611128575b5050156110ef575b5050835192602084015260208352610dd48484614282565b858451809c81958294637a0ee4f960e11b845230600485016145ce565b03925af19687156104d15782976110cd575b50853b156108d057604051632142170760e11b815290829082908190610e38908b906001600160a01b031630600485016145fb565b0381838a5af180156104d1576110b4575b5050610e5c81516060830151903061492a565b9051818111610f07575b5050506060602492604051938480926350ef5c3560e01b82528760048301525afa918215610770578692610ec8575b506001600160801b039182169116808211610eb3575050835d610a7d565b6370d1969b60e01b8652600452602452604484fd5b6001600160801b03919250610ef5829160603d606011610f00575b610eed8183614282565b810190614798565b509050929150610e95565b503d610ee3565b90610f119161461d565b90604051636eb1769f60e11b8152306004820152846024820152602081604481855afa9081156110a9578991611077575b508281018091116110635760405163095ea7b360e01b60208281019182526001600160a01b038816602484015260448301939093528a94610fb09490939092918690610f918460648101610289565b83519082865af185513d82611047575b50501561100e575b5050614b96565b833b156108d0576001600160801b0360405191636f965f9f60e11b8352866004840152166024820152816044820152818160648183885af180156104d157610ff9575b80610e66565b8161100391614282565b61077b57855f610ff3565b6110409161063460405163095ea7b360e01b60208201528960248201528760448201526044815261062e606482614282565b5f80610fa9565b90915061105b5750813b15155b5f80610fa1565b600114611054565b634e487b7160e01b89526011600452602489fd5b90506020813d6020116110a1575b8161109260209383614282565b8101031261069a57515f610f42565b3d9150611085565b6040513d8b823e3d90fd5b816110be91614282565b6110c957875f610e49565b8780fd5b6110e791975060403d6040116107ac5761079c8183614282565b50955f610e03565b611121916106348d88519063095ea7b360e01b602083015260248201528a60448201526044815261062e606482614282565b5f80610dbc565b90915061113c5750813b15155b5f80610db4565b600114611135565b634e487b7160e01b8c52601160045260248cfd5b90506020813d602011611182575b8161117360209383614282565b8101031261069a57515f610d4f565b3d9150611166565b6040513d8e823e3d90fd5b90506020813d6020116111bf575b816111b060209383614282565b8101031261069a57515f610cd4565b3d91506111a3565b6040513d8d823e3d90fd5b909a506020813d6020116111fe575b816111ee60209383614282565b8101031261069a5751995f610caf565b3d91506111e1565b6040513d8c823e3d90fd5b9193505061122f91985060a03d60a0116108bc576108aa8183614282565b509992909391509298925f610c72565b6040513d89823e3d90fd5b61125591513061492a565b505f80610c48565b8880fd5b8380fd5b9360025c948460025d600281036119c557508051810190808203906101a0821261077b5761129560208201614537565b604082015190976001600160a01b0382169390918490036110c95760608301519460808401519161ffff831683036119c15761010090607f19011261125d576040519361010085018581106001600160401b038211176119ad5760405260a08101516001600160a01b03811681036119a957855261131560c08201614537565b946020810195865261132960e08301614537565b60408201908152610100830151926060830193845261012081015194608084019586526113596101408301614e3f565b9160a085019283526101608101519060c086019182526101808101519260e087019384526101a0820151906001600160401b0382116119a3576113a3926020918201920101614e4d565b99516001600160a01b03169485611903575b505050505050505060018060a01b038716906040516370a0823160e01b8152306004820152602081602481865afa908115611206578a916118cf575b506113fe6060918961461d565b9401805151909a90156116d2576040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa8015611206578a9061169e575b61144f91508b51903061492a565b995180515f198101908111611656576001600160a01b039160409161147391614777565b510151604051636eb1769f60e11b8152306004820152602481018890529b911660208c604481845afa9b8c156111c7578b9c61166a575b50818c01809c116116565760405163095ea7b360e01b60208281019182526001600160a01b038a166024840152604483019e909e529b9c9a9b999a8d9a8b906114f68460648101610289565b83519082865af18a513d8261163a575b5050156115fc575b50863b1561125d5760405163617ba03760e01b81526001600160a01b03918216600482015260248101929092528416604482015261ffff821660648201528781608481838a5af19081156115f15788916115dc575b50505b843b156115d857869460a49361ffff8793604051998a98899763a415bcad60e01b895260048901526024880152604487015216606485015260018060a01b031660848401525af180156104d1576115bf575b5050610a7d565b816115c991614282565b6115d457825f6115b8565b8280fd5b8680fd5b816115e691614282565b6115d857865f611563565b6040513d8a823e3d90fd5b6116349061062e60405163095ea7b360e01b60208201528a60248201528c60448201526044815261162e606482614282565b84614f53565b5f61150e565b90915061164e5750813b15155b5f80611506565b600114611647565b634e487b7160e01b8b52601160045260248bfd5b909b506020813d602011611696575b8161168660209383614282565b8101031261069a57519a5f6114aa565b3d9150611679565b506020813d6020116116ca575b816116b860209383614282565b8101031261069a5761144f9051611441565b3d91506116ab565b6040516370a0823160e01b81523060048201529a506001600160a01b03811660208c602481845afa9182156111c7578b9261189a575b604051636eb1769f60e11b8152306004820152602481018990529c5060208d604481855afa9c8d1561118a578c9d611866575b50828d01809d116111445760405163095ea7b360e01b60208281019182526001600160a01b038b166024840152604483019f909f529c9d9b9c9a9b8e9b8c906117878460648101610289565b83519082865af18b513d8261184a575b505015611811575b5050863b1561125d5760405163617ba03760e01b81526001600160a01b03918216600482015260248101929092528416604482015261ffff821660648201528781608481838a5af19081156115f15788916117fc575b5050611566565b8161180691614282565b6115d857865f6117f5565b6118439161063460405163095ea7b360e01b60208201528b60248201528d60448201526044815261062e606482614282565b5f8061179f565b90915061185e5750823b15155b5f80611797565b600114611857565b909c506020813d602011611892575b8161188260209383614282565b8101031261069a57519b5f61173b565b3d9150611875565b915060208c3d6020116118c7575b816118b560209383614282565b8101031261069a5760249b5191611708565b3d91506118a8565b90506020813d6020116118fb575b816118ea60209383614282565b8101031261069a57516113fe6113f1565b3d91506118dd565b519351955196519251905191516001600160a01b0396871696909416939260ff90911690843b1561199f57928f9695939260e4959288946040519a8b998a9863016a5aab60e31b8a5260048a0152602489015260448801526064870152608486015260a485015260c48401525af180156110a95790899161198a575b8080808080806113b5565b8161199491614282565b6110c957875f61197f565b8f80fd5b50508f80fd5b8a80fd5b634e487b7160e01b8b52604160045260248bfd5b8980fd5b600390859693949550146119da575050610a7d565b80518101908082039261018084126115d8576119f860208301614537565b60408301516001600160a01b038116939084900361125d5760608101519460a0605f198801126119c15760405191611a2f83614238565b611a3b60808201614537565b8352611a4960a08201614537565b60208401908152611a5c60c0830161478b565b9860408501998a5260e083015190606086019182526060610100850151916080880192835260ff1901126121a75760405191606083018381106001600160401b03821117612192576040528e96959493929190611abc6101208601614e3f565b835261014085015194602084019586526101608101519660408501978852610180820151906001600160401b0382116119a957602001910160200190611b0191614e4d565b9c6040519c8d632c3c915760e01b8152600401528c808d5a9260249160a094fa9c8d156110a957899d61210b575b5084516001600160a01b0316612079575b50506040516370a0823160e01b81523060048201529650602095508694506024935084925050506001600160a01b038c165afa9081156110a9578991612045575b50611b8e6060918861461d565b950180515190919015611e49576040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa80156110a9578990611e15575b611bdf91508251903061492a565b905180515f198101908111611dcf576001600160a01b0391604091611c0391614777565b51015116604051636eb1769f60e11b8152306004820152846024820152602081604481855afa908115611206578a91611de3575b50828101809111611dcf5760405163095ea7b360e01b60208281019182526001600160a01b038816602484015260448301939093528b9695949392908790611c828460648101610289565b83519082865af186513d82611db3575b505015611d7a575b5050823b15611261578382611cc592604051938492839263238d657960e01b84528a60048501614ef3565b038183875af1801561074c57611d5e575b5092611cff92610124926040955b86516350d8cd4b60e01b815297889687956004870190614eb4565b60a485015260c484018390526001600160a01b031660e4840152306101048401525af1801561074c57611d33575b806115b8565b604090813d8311611d57575b611d498183614282565b810103126115d4575f611d2d565b503d611d3f565b92611d6d818096939495614282565b611261579291905f611cd6565b611dac9161063460405163095ea7b360e01b60208201528760248201528860448201526044815261062e606482614282565b5f80611c9a565b909150611dc75750813b15155b5f80611c92565b600114611dc0565b634e487b7160e01b8a52601160045260248afd5b90506020813d602011611e0d575b81611dfe60209383614282565b8101031261069a57515f611c37565b3d9150611df1565b506020813d602011611e41575b81611e2f60209383614282565b8101031261069a57611bdf9051611bd1565b3d9150611e22565b6040516370a0823160e01b815230600482015291506001600160a01b038116602083602481845afa928315611206578a93612011575b50604051636eb1769f60e11b81523060048201526024810186905290602082604481845afa9182156111c7578b92611fdd575b508382018092116116565760405163095ea7b360e01b60208281019182526001600160a01b038916602484015260448301949094528c9796959493919291908890611f008560648101610af2565b84519082875af1903d88519083611fbe575b50505015611f85575b5050823b15611261578382611f4692604051938492839263238d657960e01b84528a60048501614ef3565b038183875af1801561074c57611f69575b5092611cff9261012492604095611ce4565b92611f78818096939495614282565b611261579291905f611f57565b611fb79161063460405163095ea7b360e01b60208201528760248201528860448201526044815261062e606482614282565b5f80611f1b565b91925090611fd357503b15155b5f8080611f12565b6001915014611fcb565b9091506020813d602011612009575b81611ff960209383614282565b8101031261069a5751905f611eb2565b3d9150611fec565b9092506020813d60201161203d575b8161202d60209383614282565b8101031261069a5751915f611e7f565b3d9150612020565b90506020813d602011612071575b8161206060209383614282565b8101031261069a5751611b8e611b81565b3d9150612053565b8b3b1561125d57604051638069218f60e01b815297516001600160a01b0390811660048a01529451909416602488015292511515604487015291516064860152905160848501525160ff1660a48401525160c48301525160e482015281816101048183895af180156104d1576120f6575b80808080808080611b40565b8161210091614282565b6110c957875f6120ea565b909c5060a0813d60a01161218a575b8161212760a09383614282565b8101031261125d5760806040519161213e83614238565b61214781614537565b835261215560208201614537565b602084015261216660408201614537565b604084015261217760608201614537565b6060840152015160808201529b5f611b2f565b3d915061211a565b50634e487b7160e01b8f52604160045260248ffd5b8d80fd5b63531fe5d360e11b8352600483fd5b50346104ce5760a03660031901126104ce576121d46141e2565b6024356121df614304565b6121e761431a565b936084356001600160401b0381116108d057612207903690600401614480565b93612210614862565b61221861489a565b845115801561250c575b6124fd5761222f85614ccd565b9460606122488161223f84614756565b51015192614756565b510151515f198101908111610706576001600160801b03916001600160a01b03916040916122769190614777565b510151169160018060a01b0316931695604051636eb1769f60e11b8152306004820152846024820152602081604481865afa90811561074c5784916124cb575b508781018091116107065760405163095ea7b360e01b60208281019182526001600160a01b0388166024840152604483019390935290919085906122fd8460648101610289565b83519082875af184513d826124af575b505015612471575b50833b156115d45760405190636f965f9f60e11b825285600483015287602483015215156044820152828160648183885af180156106a65790839161245c575b50506040516370a0823160e01b8152306004820152602081602481855afa928315612450579261241a575b506123d995826040927f8a94678e6e1f4777d9033068292e1d3013d11f2376ee1543b412ca14fbb327fa946123dd575b5082519182526020820152a360015f51602061506a5f395f51905f5255604051918291826144fe565b0390f35b835163a9059cbb60e01b6020820152336024820152604481018390526124149161063482606481015b03601f198101845283614282565b5f6123b0565b9091506020813d602011612448575b8161243660209383614282565b8101031261069a5751906123d9612380565b3d9150612429565b604051903d90823e3d90fd5b8161246691614282565b6108d057815f612355565b6124a9906103de60405163095ea7b360e01b6020820152876024820152866044820152604481526124a3606482614282565b85614f53565b5f612315565b9091506124c35750823b15155b5f8061230d565b6001146124bc565b90506020813d6020116124f5575b816124e660209383614282565b8101031261069a57515f6122b6565b3d91506124d9565b6307af3a6560e21b8252600482fd5b50606061251886614756565b5101515115612222565b50346104ce5760e03660031901126104ce5761253c6141e2565b906125456141f8565b9061254e614304565b9161255761431a565b936084356001600160401b03811161126157612577903690600401614480565b9360a4356001600160401b03811161076c57612597903690600401614340565b9560c4356001600160401b03811161077b576125b7903690600401614340565b966125c0614862565b6125c861489a565b85948060015d604051634eb1c24560e11b81526001600160a01b039190911697909160a0836004818c5afa80156115f15790602494939291898a948b92612bdd575b506001600160a01b0316926020919061262290614ccd565b506040516370a0823160e01b815230600482015296879182906001600160a01b03165afa9485156110a9578995612ba9575b506060810151908151612b94575b50506040516370a0823160e01b815230600482015291602083602481855afa9283156110a9578993612b5f575b5060609060018060a01b03169a015192604051938460608101918d602083015260408083015280518093526080820192602060808260051b8501019201938d905b828210612af8575050506126ed925003601f198101865285614282565b15612a5457604051636eb1769f60e11b8152306004820152602481018a905290602082604481845afa9182156110a9578992612a20575b508282018092116110635760405163095ea7b360e01b60208281019182526001600160a01b038d16602484015260448301949094526127c49593946127a89390928d929091908d908890829061278786606481015b03601f198101885287614282565b85519082865af181513d82612a04575b5050156129ca575b50505050614b96565b604051639ea1c1c960e01b8152938492839289600485016145ce565b0381898b5af1908115610770578691612998575b50945b6040516341a4eb5f60e11b8152600481018790529281846024818c5afa9384156104d1578294612930575b506060602496979899604051978880926350ef5c3560e01b82528c60048301525afa9586156104d1578296612901575b506001600160801b0395861695168086116128ea57505092604096926128ca7f6cc7689f3960393f975bc636577345ee34fd6fd0b516b15c923e7885e518b098936128818997614b96565b936001600160801b036128938a614b96565b818d5197889733895260018060a01b03166020890152168d870152166060850152608084015260c060a084015260c08301906141be565b0390a360015f51602061506a5f395f51905f525582519182526020820152f35b6370d1969b60e01b82526004526024859052604490fd5b6001600160801b03919650612925829160603d606011610f0057610eed8183614282565b509050969150612836565b9893503d80838b3e612942818b614282565b8901986060818b03126115d45761295881614537565b50612965602082016145a0565b506040810151906001600160401b0382116112615760249798999a60609261298d920161462a565b949998979650612806565b90506020813d6020116129c2575b816129b360209383614282565b8101031261069a57515f6127d8565b3d91506129a6565b6129fb93610634916040519163095ea7b360e01b8b840152602483015260448201526044815261062e606482614282565b8a5f808c61279f565b909150612a185750813b15155b5f80612797565b600114612a11565b9091506020813d602011612a4c575b81612a3c60209383614282565b8101031261069a5751905f612724565b3d9150612a2f565b506001600160801b03612a68602092614b96565b604051634fa05f1d60e01b81523060048201526001600160a01b038816602482015291166044820152608060648201529182908190612aab9060848301906141be565b0381898b5af1908115610770578691612ac6575b50946127db565b90506020813d602011612af0575b81612ae160209383614282565b8101031261069a57515f612abf565b3d9150612ad4565b91935091602080612b4f600193607f198d8203018652608060608a51878060a01b038151168452878060a01b03868201511686850152878060a01b03604082015116604085015201519181606082015201906141be565b96019201920188939194926126d0565b9092506020813d602011612b8c575b81612b7b60209383614282565b8101031261069a575191606061268f565b3d9150612b6e565b612ba1929850513061492a565b955f80612662565b9094506020813d602011612bd5575b81612bc560209383614282565b8101031261069a5751935f612654565b3d9150612bb8565b612622955060209250612bff915060a03d60a0116108bc576108aa8183614282565b9792919350509195925061260a565b50346104ce57806003193601126104ce575f5160206150aa5f395f51905f52546040516001600160a01b039091168152602090f35b50346104ce5760a03660031901126104ce57612c5d6141e2565b602435612c6861420e565b90606435926084356001600160401b03811161077b57612c8c9036906004016142be565b90612c95614862565b612c9d61489a565b8060015d85805d3360025d84612dd7575b6001600160a01b031690813b1561077b57604051635c46a7ef60e11b815233600482015230602482015260448101849052608060648201525f60848201528690818160a48183885af180156104d157612dc2575b50823b156104ce57612d3d916040518093819263078ad17360e31b8352876004840152600160248401526060604484015260648301906141be565b038183865af1801561077057612dad575b50604080516001600160a01b0394909416845260208085019590955293945c9384937f052fa76c055abbc7414453965ce61eeb739538b20c9a951cd306a2c4ff0f15349190a460015f51602061506a5f395f51905f5255604051908152f35b612db8868092614282565b61076c575f612d4e565b81612dcc91614282565b61077b57855f612d02565b6040516323b872dd60e01b6020820152612dfe906124a3816101f3893033602485016145fb565b612cae565b50346104ce57806003193601126104ce576123d9604051612e25604082614282565b60058152640352e302e360dc1b60208201526040519182916020835260208301906141be565b50346104ce5760203660031901126104ce576004356001600160401b0381116108d057612e7c903690600401614480565b90612e85614862565b612e8d61489a565b8151158015612ed3575b612ec4576123d9612ea783614ccd565b60015f51602061506a5f395f51905f5255604051918291826144fe565b6307af3a6560e21b8152600490fd5b506060612edf83614756565b5101515115612e97565b50346104ce5760803660031901126104ce57612f036141e2565b50612f0c6141f8565b506064356001600160401b0381116108d057612f2c9036906004016142be565b60015c8260015d6001600160a01b031633036131f657805181016040828203126115d457612f5c60208301614537565b916040810151916001600160401b03831161076c57612f82926020809201920101614670565b6001600160a01b039182169160249060209081612f9e85614756565b51015116604051928380926370a0823160e01b82523060048301525afa801561074c57829085906131c0575b612fd592503061492a565b5080515f198101919082116107065790612fee91614777565b518051613003906001600160a01b0316614c32565b60409081015190516370a0823160e01b815230600482015291906001600160a01b0316602083602481845afa92831561074c57849361318c575b50604051636eb1769f60e11b81523060048201526024810183905290602082604481845afa9182156107b3578592613158575b508382018092116107be5760405163095ea7b360e01b60208281019182526001600160a01b038616602484015260448301949094526123d99691939082906130bb8660648101612779565b85519082865af181513d8261313c575b505015613101575b8585604051906020820152602081526130ed604082614282565b6040519182916020835260208301906141be565b61313393610634916040519163095ea7b360e01b6020840152602483015260448201526044815261062e606482614282565b5f8080806130d3565b9091506131505750813b15155b5f806130cb565b600114613149565b9091506020813d602011613184575b8161317460209383614282565b8101031261069a5751905f613070565b3d9150613167565b9092506020813d6020116131b8575b816131a860209383614282565b8101031261069a5751915f61303d565b3d915061319b565b50506020813d6020116131ee575b816131db60209383614282565b8101031261069a5781612fd59151612fca565b3d91506131ce565b63531fe5d360e11b8252600482fd5b50346104ce57806003193601126104ce575f51602061500a5f395f51905f52546040516001600160a01b039091168152602090f35b50346104ce57806003193601126104ce5761325361482f565b61325b61489a565b600160ff195f51602061504a5f395f51905f525416175f51602061504a5f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b50346104ce57806003193601126104ce575f5160206150aa5f395f51905f5254336001600160a01b03909116036132ea576132e733614bc7565b80f35b63118cdaa760e01b815233600452602490fd5b50346104ce57806003193601126104ce5761331661482f565b5f5160206150aa5f395f51905f5280546001600160a01b03199081169091555f51602061500a5f395f51905f528054918216905581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346104ce5760c03660031901126104ce576133966141e2565b9061339f6141f8565b91604435906133ac61431a565b906084359360a435956001600160401b0387116108d05760a06133d460049836908a016142be565b916133dd614862565b6133e561489a565b604051634eb1c24560e11b815298899182905f196001861b01165afa9687156104d157829083986135f9575b508060015d6001600160a01b031693843b156115d457604051635c46a7ef60e11b815233600482015230602482015260448101879052608060648201525f6084820152838160a481838a5af1801561074c579084916135e4575b5050843b156115d4576134aa918391604051938492839263078ad17360e31b84528a6004850152151560248401526060604484015260648301906141be565b038183885af180156104d1579082916135cf575b50506040516370a0823160e01b8152306004820152946001600160a01b038716602087602481845afa9687156106a657839761359b575b5081871061358157505060405163a9059cbb60e01b6020828101919091526001600160a01b03909316602482015260448101869052919561353f9291506106348260648101612406565b7f718101be478d80581813738eaca3531ec04da93d42c1e08991964b956f135f2c84604051858152a360015f51602061506a5f395f51905f5255604051908152f35b6319aae4c960e11b83526004526024526044859052606490fd5b9096506020813d6020116135c7575b816135b760209383614282565b8101031261069a5751955f6134f5565b3d91506135aa565b816135d991614282565b6104ce57805f6134be565b816135ee91614282565b6115d457825f61346b565b905061361591975060a03d60a0116108bc576108aa8183614282565b9993505090505f613411565b50346104ce57806003193601126104ce57602060ff5f51602061504a5f395f51905f5254166040519015158152f35b50346104ce57806003193601126104ce577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036136a85760206040515f51602061502a5f395f51905f528152f35b63703e46dd60e11b8152600490fd5b5060403660031901126104ce576136cc6141e2565b906024356001600160401b0381116108d0576136ec9036906004016142be565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630811490811561387e575b5061386f5761372e61482f565b6040516352d1902d60e01b8152926001600160a01b0381169190602085600481865afa8095859661383b575b5061377357634c9c8ce360e01b84526004839052602484fd5b9091845f51602061502a5f395f51905f5281036138295750813b15613817575f51602061502a5f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a281518390156137fd57808360206137f995519101845af46137f36148fb565b91614fab565b5080f35b505050346138085780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8452600452602483fd5b632a87526960e21b8552600452602484fd5b9095506020813d602011613867575b8161385760209383614282565b8101031261076c5751945f61375a565b3d915061384a565b63703e46dd60e11b8252600482fd5b5f51602061502a5f395f51905f52546001600160a01b0316141590505f613721565b503461069a5760a036600319011261069a576138ba6141e2565b906138c36141f8565b91604435906064356001600160801b038116810361069a576084356001600160401b03811161069a576138fa903690600401614340565b94613903614862565b61390b61489a565b604051634eb1c24560e11b81526001600160a01b039190911695909460a0866004818a5afa928315613ca3575f5f975f95613d71575b506040516323b872dd60e01b60208201526001600160a01b039586169891909516946139809061397a816101f38b3033602485016145fb565b89614f53565b604051636eb1769f60e11b81523060048201526001600160a01b039190911660248201819052916020826044818c5afa918215613ca3575f92613d3d575b50878201809211613d29576040805163095ea7b360e01b60208281019182526001600160a01b03871660248401526044830195909552613a569b9294905f90613a0a8460648101610289565b83519082865af15f513d82613d0d575b505015613cd5575b505081519088602083015260208252613a3b8383614282565b8251637a0ee4f960e11b8152998a92839230600485016145ce565b03815f8c5af1938415613ca3575f975f95613cae575b50813b1561069a57604051632142170760e11b81525f8180613a938c8b30600485016145fb565b038183875af18015613ca357613c8e575b50613ad5613ace606060018060a01b036020880151169601516001600160801b038816809761492a565b809561461d565b9081613b11575b602089808c7fdc3efdf28701077a23ef0beb0f3260ca639658ce2676bbc9d83030fac6ce56128c8c61049d8d61045e8e614b96565b604051636eb1769f60e11b815230600482015260248101849052602081604481855afa9081156107b3578591613c5c575b508281018091116107be5760405163095ea7b360e01b60208281019182526001600160a01b03871660248401526044830193909352613bab949392908790613b8d8460648101610289565b83519082865af186513d82613c40575b505015613c0e575050614b96565b90803b156115d4576001600160801b03916064898580946040519687958694636f965f9f60e11b865260048601521660248401528160448401525af180156104d157613bf9575b8080613adc565b613c04828092614282565b6104ce5780613bf2565b6110409161063460405163095ea7b360e01b60208201528760248201528860448201526044815261062e606482614282565b909150613c545750813b15155b5f80613b9d565b600114613c4d565b90506020813d602011613c86575b81613c7760209383614282565b8101031261069a57515f613b42565b3d9150613c6a565b613c9b9193505f90614282565b5f915f613aa4565b6040513d5f823e3d90fd5b909450613ccb91975060403d6040116107ac5761079c8183614282565b969096935f613a6c565b613d0691610634855163095ea7b360e01b60208201528760248201525f60448201526044815261062e606482614282565b5f80613a22565b909150613d215750813b15155b5f80613a1a565b600114613d1a565b634e487b7160e01b5f52601160045260245ffd5b9091506020813d602011613d69575b81613d5960209383614282565b8101031261069a5751905f6139be565b3d9150613d4c565b91945050613d8f91965060a03d60a0116108bc576108aa8183614282565b509792909491509396935f613941565b3461069a57604036600319011261069a57613db86141e2565b613dc06141f8565b905f51602061508a5f395f51905f52549160ff8360401c1615926001600160401b03811680159081613f55575b6001149081613f4b575b159081613f42575b50613f335767ffffffffffffffff1981166001175f51602061508a5f395f51905f525583613f07575b50613e31614f28565b60015f51602061506a5f395f51905f5255613e4a614f28565b613e52614f28565b60ff195f51602061504a5f395f51905f5254165f51602061504a5f395f51905f5255613e7c614f28565b6001600160a01b03821615613ef457613e97613e9c92614bc7565b6147e3565b613ea257005b60ff60401b195f51602061508a5f395f51905f5254165f51602061508a5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b631e4fbdf760e01b5f525f60045260245ffd5b68ffffffffffffffffff191668010000000000000001175f51602061508a5f395f51905f525583613e28565b63f92ee8a960e01b5f5260045ffd5b90501585613dff565b303b159150613df7565b859150613ded565b3461069a57602036600319011261069a57613f81613f796141e2565b613e9761482f565b005b3461069a575f36600319011261069a57613f9b61482f565b5f51602061504a5f395f51905f525460ff811615613ff25760ff19165f51602061504a5f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b3461069a57602036600319011261069a576001600160a01b036140226141e2565b165f525f602052602060ff60405f2054166040519015158152f35b3461069a57602036600319011261069a576140566141e2565b5f51602061508a5f395f51905f52549060ff8260401c168015614112575b613f3357680100000000000000026140c09268ffffffffffffffffff1916175f51602061508a5f395f51905f52556140aa614f28565b60015f51602061506a5f395f51905f52556147e3565b60ff60401b195f51602061508a5f395f51905f5254165f51602061508a5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b5060026001600160401b0383161015614074565b3461069a57608036600319011261069a5761413f6141e2565b506141486141f8565b506064356001600160401b03811161069a576141689036906004016142be565b50604051630a85bd0160e11b8152602090f35b3461069a575f36600319011261069a576123d960405161419c604082614282565b60058152640322e302e360dc1b60208201526040519182916020835260208301905b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361069a57565b602435906001600160a01b038216820361069a57565b604435906001600160a01b038216820361069a57565b35906001600160a01b038216820361069a57565b60a081019081106001600160401b0382111761425357604052565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761425357604052565b90601f801991011681019081106001600160401b0382111761425357604052565b6001600160401b03811161425357601f01601f191660200190565b81601f8201121561069a578035906142d5826142a3565b926142e36040519485614282565b8284526020838301011161069a57815f926020809301838601378301015290565b604435906001600160801b038216820361069a57565b60643590811515820361069a57565b6001600160401b0381116142535760051b60200190565b919060808382031261069a5760405161435881614267565b80938035825261436a60208201614224565b60208301526040810135801515810361069a5760408301526060810135906001600160401b03821161069a57019180601f8401121561069a578235926143af84614329565b936143bd6040519586614282565b80855260208086019160051b8301019183831161069a5760208101915b8383106143ec57505050505060600152565b82356001600160401b03811161069a578201906080828703601f19011261069a576040519061441a82614267565b61442660208401614224565b825261443460408401614224565b602083015261444560608401614224565b60408301526080830135916001600160401b03831161069a57614470886020809695819601016142be565b60608201528152019201916143da565b9080601f8301121561069a57813561449781614329565b926144a56040519485614282565b81845260208085019260051b8201019183831161069a5760208201905b8382106144d157505050505090565b81356001600160401b03811161069a576020916144f387848094880101614340565b8152019101906144c2565b60206040818301928281528451809452019201905f5b8181106145215750505090565b8251845260209384019390920191600101614514565b51906001600160a01b038216820361069a57565b908160a091031261069a5761455f81614537565b9161456c60208301614537565b60408301519092906001600160a01b038116810361069a579161459d608061459660608501614537565b9301614537565b90565b51906001600160801b038216820361069a57565b919082604091031261069a5761459d6020835193016145a0565b6001600160801b0361459d949360609360018060a01b0316835216602082015281604082015201906141be565b6001600160a01b03918216815291166020820152604081019190915260600190565b91908203918211613d2957565b81601f8201121561069a57805190614641826142a3565b9261464f6040519485614282565b8284526020838301011161069a57815f9260208093018386015e8301015290565b9080601f8301121561069a5781519161468883614329565b926146966040519485614282565b80845260208085019160051b8301019183831161069a5760208101915b8383106146c257505050505090565b82516001600160401b03811161069a578201906080828703601f19011261069a57604051906146f082614267565b6146fc60208401614537565b825261470a60408401614537565b602083015261471b60608401614537565b60408301526080830151916001600160401b03831161069a576147468860208096958196010161462a565b60608201528152019201916146b3565b8051156147635760200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156147635760209160051b010190565b5190811515820361069a57565b9081606091031261069a576147ac8161478b565b9161459d60406147be602085016145a0565b93016145a0565b81156147cf570490565b634e487b7160e01b5f52601260045260245ffd5b600180546001600160a01b0319166001600160a01b0390921691821790556040519081527f7e87735940c58f6d585801d983593d361283c473b943a73bd9f72576c9f1466490602090a1565b5f51602061500a5f395f51905f52546001600160a01b0316330361484f57565b63118cdaa760e01b5f523360045260245ffd5b60025f51602061506a5f395f51905f52541461488b5760025f51602061506a5f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b60ff5f51602061504a5f395f51905f5254166148b257565b63d93c066560e01b5f5260045ffd5b6001600160a01b03918216815291811660208301529091166040820152606081019190915260a06080820181905261459d929101906141be565b3d15614925573d9061490c826142a3565b9161491a6040519384614282565b82523d5f602084013e565b606090565b90929192835115614b87575f905b8451821015614b81576001600160a01b0360206149558488614777565b510151166001600160a01b03604061496d8589614777565b5101511614614b78576001600160a01b036149888387614777565b51511615614b20576149ad6001600160a01b036149a58488614777565b515116614c32565b84515f198101908111613d29575f9182918403614ab757614a286001600160a01b0360206149db878b614777565b510151166101f36001600160a01b0360406149f6898d614777565b51015116936060614a07898d614777565b5101519060405195869463da14526360e01b60208701528b602487016148c1565b6001600160a01b03614a3a8589614777565b515116602082519201905af4614a4e6148fb565b9015614a75576020815191818082019384920101031261069a5760019051915b0190614938565b6001600160a01b03614a878387614777565b515116614ab3604051928392630de816ad60e31b845260048401526040602484015260448301906141be565b0390fd5b614b1b6001600160a01b036020614ace878b614777565b510151166101f36001600160a01b036040614ae9898d614777565b51015116936060614afa898d614777565b5101519060405195869463da14526360e01b602087015230602487016148c1565b614a28565b90600190614b736001600160a01b036020614b3b848a614777565b51015160405163a9059cbb60e01b60208201526001600160a01b03881660248201526044810187905291166106348260648101612406565b614a6e565b90600190614a6e565b93505050565b639f6de0d560e01b5f5260045ffd5b6001600160801b038111614bb0576001600160801b031690565b6306dfcc6560e41b5f52608060045260245260445ffd5b5f5160206150aa5f395f51905f5280546001600160a01b03199081169091555f51602061500a5f395f51905f5280549182166001600160a01b0393841690811790915591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b600154604051632a3cb9c960e11b81526001600160a01b03928316600482018190525f602483015292909160209183916044918391165afa908115613ca3575f91614c93575b5015614c815750565b63616d132960e01b5f5260045260245ffd5b90506020813d602011614cc5575b81614cae60209383614282565b8101031261069a57614cbf9061478b565b5f614c78565b3d9150614ca1565b90815191614cda83614329565b92614ce86040519485614282565b808452614cf7601f1991614329565b013660208501375f5b8151811015614e3b57614d138183614777565b51604081015190919015614dcc5760246060830192602060018060a01b0381614d3c8751614756565b51015116604051938480926370a0823160e01b82523060048301525afa918215613ca3575f92614d96575b50602001519251600193614d8492906001600160a01b031661492a565b614d8e8287614777565b525b01614d00565b9150926020823d8211614dc4575b81614db160209383614282565b8101031261069a57905190926001614d67565b3d9150614da4565b614e2b82606060019401614e15612406868060a01b036020614dee8551614756565b5101511661063485516040519384916323b872dd60e01b60208401523033602485016145fb565b848060a01b03602083015116915190519161492a565b614e358287614777565b52614d90565b5050565b519060ff8216820361069a57565b919060808382031261069a5760405190614e6682614267565b819380518352614e7860208201614537565b6020840152614e896040820161478b565b60408401526060810151916001600160401b03831161069a57606092614eaf9201614670565b910152565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b91614f02836101209593614eb4565b60a08301526001600160a01b031660c082015261010060e082018190525f908201520190565b60ff5f51602061508a5f395f51905f525460401c1615614f4457565b631afcd79f60e31b5f5260045ffd5b905f602091828151910182855af115613ca3575f513d614fa257506001600160a01b0381163b155b614f825750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415614f7b565b90614fcf5750805115614fc057805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580615000575b614fe0575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614fd856fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00a2646970667358221220b9c9a4e9b4ad1770f310d7a104f82458ce8aeb2a3edd969d2fef2e4f9b46677564736f6c634300081d0033