0 txs
30 calls
constructor
constructor()
functions
closeFeePerc
viewfunction closeFeePerc() view returns (uint16)
feeProcessor
viewfunction feeProcessor() view returns (address)
feeReceiver
viewfunction feeReceiver() view returns (address)
flashSource
viewfunction flashSource(address) view returns (address)
indexUtils
viewfunction indexUtils() view returns (address)
lendingPairs
viewfunction lendingPairs(address) view returns (address)
openFeePerc
viewfunction openFeePerc() view returns (uint16)
owner
viewfunction owner() view returns (address)
positionNFT
viewfunction positionNFT() view returns (address)
positionProps
viewfunction positionProps(uint256) view returns (address pod, address lendingPair, address custodian, bool isSelfLending, bool hasSelfLendingPairPod)
addLeverage
nonpayablefunction addLeverage(uint256 _positionId, address _pod, uint256 _pTknAmt, uint256 _pairedLpDesired, uint256 _userProvidedDebtAmt, bool _hasSelfLendingPairPod, bytes _config)
addLeverageFromTkn
nonpayablefunction addLeverageFromTkn(uint256 _positionId, address _pod, uint256 _tknAmt, uint256 _amtPtknMintMin, uint256 _pairedLpDesired, uint256 _userProvidedDebtAmt, bool _hasSelfLendingPairPod, bytes _config)
borrowAssets
nonpayablefunction borrowAssets(uint256 _positionId, uint256 _borrowAmt, uint256 _collateralAmt, address _recipient)
callback
nonpayablefunction callback(bytes _userData)
initialize
nonpayablefunction initialize()
initialize
nonpayablefunction initialize(address _positionNFT, address _idxUtils, address _feeReceiver)
initializePosition
nonpayablefunction initializePosition(address _pod, address _recipient, bool _hasSelfLendingPairPod) returns (uint256 _positionId)
removeLeverage
nonpayablefunction removeLeverage(uint256 _positionId, uint256 _borrowSharesAmt, bytes _remLevConfig)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address _token)
setCloseFeePerc
nonpayablefunction setCloseFeePerc(uint16 _newFee)
setFeeProcessor
nonpayablefunction setFeeProcessor(address _processor)
setFeeReceiver
nonpayablefunction setFeeReceiver(address _receiver)
setFlashSource
nonpayablefunction setFlashSource(address _borrowAsset, address _flashSource)
setIndexUtils
nonpayablefunction setIndexUtils(address _utils)
setLendingPair
nonpayablefunction setLendingPair(address _pod, address _pair)
setOpenFeePerc
nonpayablefunction setOpenFeePerc(uint16 _newFee)
setPositionNFT
nonpayablefunction setPositionNFT(address _posNFT)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawAssets
nonpayablefunction withdrawAssets(uint256 _positionId, address _token, address _recipient, uint256 _amount)
events
AddLeverage
event AddLeverage(uint256 indexed positionId, address indexed user, uint256 pTknAmtUsed, uint256 collateralAmt, uint256 borrowAmt)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RemoveLeverage
event RemoveLeverage(uint256 indexed positionId, address indexed user, uint256 collateralAmt)
SetBorrowAssetFlashSource
event SetBorrowAssetFlashSource(address _borrowAsset, address _flashSource)
SetCloseFeePerc
event SetCloseFeePerc(uint16 oldFee, uint16 newFee)
SetFeeProcessor
event SetFeeProcessor(address oldProcessor, address newProcessor)
SetFeeReceiver
event SetFeeReceiver(address oldReceiver, address newReceiver)
SetIndexUtils
event SetIndexUtils(address oldIdxUtils, address newIdxUtils)
SetOpenFeePerc
event SetOpenFeePerc(uint16 oldFee, uint16 newFee)
SetPodLendingPair
event SetPodLendingPair(address _pod, address _lendingPair)
SetPositionsNFT
event SetPositionsNFT(address oldPosNFT, address newPosNFT)
errors
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080604052348015600e575f5ffd5b506015601f565b601b601f565b60cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615606e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460cc5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615c64806100dc5f395ff3fe608060405234801561000f575f5ffd5b50600436106101d0575f3560e01c80638129fc1c116100fe578063c0c53b8b1161009e578063e9b2b3a31161006e578063e9b2b3a31461043a578063efdcd974146104c6578063f2fde38b146104d9578063f7ee228d146104ec575f5ffd5b8063c0c53b8b146103ee578063c359770d14610401578063da04d01c14610414578063e98a565414610427575f5ffd5b806394f0d0bf116100d957806394f0d0bf1461039d578063a49f0c95146103b5578063b0eb469d146103c8578063b3f00674146103db575f5ffd5b80638129fc1c146103525780638bf0f8f81461035a5780638da5cb5b1461036d575f5ffd5b80635645e39c116101745780636af4eaa1116101445780636af4eaa1146103115780636cabc12f14610324578063713f6a0a14610337578063715018a61461034a575f5ffd5b80635645e39c146102b05780635ba034ba146102c35780635db48b97146102eb5780636a2faf08146102fe575f5ffd5b806323228ecb116101af57806323228ecb1461020f57806332aeb0a51461023f578063454279c01461026757806347efda2a14610288575f5ffd5b8062ae3bf8146101d45780631656118b146101e95780631f4e84fa146101fc575b5f5ffd5b6101e76101e23660046147b0565b610501565b005b6101e76101f73660046147cb565b610587565b6101e761020a366004614802565b6106b5565b600354610222906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60045461025490600160b01b900461ffff1681565b60405161ffff9091168152602001610236565b61027a610275366004614854565b6107e0565b604051908152602001610236565b6102226102963660046147b0565b5f602081905290815260409020546001600160a01b031681565b6101e76102be3660046147cb565b6107f4565b6102226102d13660046147b0565b60016020525f90815260409020546001600160a01b031681565b600254610222906001600160a01b031681565b6101e761030c36600461489c565b610911565b6101e761031f3660046149e0565b610bae565b6101e7610332366004614a62565b610ce3565b6101e76103453660046147b0565b610d83565b6101e7610de8565b6101e7610dfb565b6101e7610368366004614a83565b610ef0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610222565b6006546102229061010090046001600160a01b031681565b6101e76103c3366004614a62565b610fda565b6101e76103d63660046147b0565b61107a565b600454610222906001600160a01b031681565b6101e76103fc366004614b0f565b6110d5565b6101e761040f366004614b4c565b61120a565b6101e76104223660046147b0565b6116db565b6101e7610435366004614b97565b611736565b61048b610448366004614bc8565b60056020525f90815260409020805460018201546002909201546001600160a01b039182169282169181169060ff600160a01b8204811691600160a81b90041685565b604080516001600160a01b0396871681529486166020860152929094169183019190915215156060820152901515608082015260a001610236565b6101e76104d43660046147b0565b6117c9565b6101e76104e73660046147b0565b611824565b60045461025490600160a01b900461ffff1681565b61050961185e565b610584336040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561054f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105739190614bdf565b6001600160a01b03841691906118b9565b50565b61058f61185e565b6001600160a01b03811615610649575f6001600160a01b0316816001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106089190614c06565b6001600160a01b0316036106495760405162461bcd60e51b81526020600482015260036024820152624c505360e81b60448201526064015b60405180910390fd5b6001600160a01b038281165f908152602081905260409081902080546001600160a01b03191692841692909217909155517f96d39ca7eed6c76afc52c05f7c51fb2ef86f7173ad16cc9ebdd533023b8255ab906106a99084908490614c21565b60405180910390a15050565b83336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610702573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107269190614c06565b6001600160a01b0316146107615760405162461bcd60e51b8152602060048201526002602482015261041360f41b6044820152606401610640565b5f8581526005602052604090819020600201549051636ce5768960e11b81526001600160a01b0386811660048301528581166024830152604482018590529091169063d9caed12906064015f604051808303815f87803b1580156107c3575f5ffd5b505af11580156107d5573d5f5f3e3d5ffd5b505050505050505050565b5f6107ec848484611918565b949350505050565b6107fc61185e565b6001600160a01b038116156108b1575f6001600160a01b0316816001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610851573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108759190614c06565b6001600160a01b0316036108b15760405162461bcd60e51b815260206004820152600360248201526241465360e81b6044820152606401610640565b6001600160a01b038281165f908152600160205260409081902080546001600160a01b03191692841692909217909155517f843434cf8dbd5c5a48bd9c61abdda97f96615e466554ec0bf2afa4471faa96ef906106a99084908490614c21565b83336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa15801561095e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109829190614c06565b6001600160a01b0316146109bd5760405162461bcd60e51b8152602060048201526002602482015261041360f41b6044820152606401610640565b82156109fc576109fc335f878152600560205260409020600201546001600160a01b0316856109eb89611af6565b6001600160a01b0316929190611b72565b5f85815260056020526040902060028101546001909101546004546001600160a01b039283169263cb69e27092169087908790600160a01b900461ffff16610a445786610a46565b305b60405160e086901b6001600160e01b03191681526001600160a01b0394851660048201526024810193909352604483019190915290911660648201526084015f604051808303815f87803b158015610a9c575f5ffd5b505af1158015610aae573d5f5f3e3d5ffd5b5050600454600160a01b900461ffff16159150610ba79050575f8581526005602090815260408083206001015481516338d52e0f60e01b815291516001600160a01b03909116926338d52e0f92600480820193918290030181865afa158015610b19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3d9190614c06565b6004549091505f9061271090610b5e90600160a01b900461ffff1688614c4f565b610b689190614c66565b600454909150610b85906001600160a01b038481169116836118b9565b610ba484610b938389614c85565b6001600160a01b03851691906118b9565b50505b5050505050565b600160065460ff1615610bd35760405162461bcd60e51b815260040161064090614c98565b6006805460ff191660011790556040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610c24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c489190614bdf565b9050610c5f6001600160a01b03891633308a611b72565b6107d5336040516370a0823160e01b81523060048201528b908b9085906001600160a01b038316906370a08231906024015b602060405180830381865afa158015610cac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd09190614bdf565b610cda9190614c85565b8a8a8a8a611bb1565b610ceb61185e565b6109c48161ffff161115610d255760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610640565b6004805461ffff838116600160a01b81810261ffff60a01b1985161790945560408051949093049091168084526020840191909152917fe5642aead6d7b355abd4181df302c285915b513dd4f8b1c57199f3f0edfa61a091016106a9565b610d8b61185e565b600680546001600160a01b03838116610100908102610100600160a81b03198416179093556040519290910416907f7e4749f6bd1dd644f75a80c4f70296c754aa42cefe6ebca9c3c06fce38ba2a33906106a99083908590614c21565b610df061185e565b610df95f611e9b565b565b5f610e04611f0b565b805490915060ff600160401b82041615906001600160401b03165f81158015610e2a5750825b90505f826001600160401b03166001148015610e455750303b155b905081158015610e53575080155b15610e715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e9b57845460ff60401b1916600160401b1785555b610ea433611f33565b8315610ba757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b600160065460ff1615610f155760405162461bcd60e51b815260040161064090614c98565b6006805460ff191660011790556040516370a0823160e01b81523060048201525f906001600160a01b038a16906370a0823190602401602060405180830381865afa158015610f66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8a9190614bdf565b9050610f98338a8a8a611f44565b610fce336040516370a0823160e01b81523060048201528c908c9085906001600160a01b038316906370a0823190602401610c91565b50505050505050505050565b610fe261185e565b6109c48161ffff16111561101c5760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610640565b6004805461ffff838116600160b01b81810261ffff60b01b1985161790945560408051949093049091168084526020840191909152917f5def20dfceec8a818b2a4431838c7e9165d77cc6970868067379f7c77faaf74591016106a9565b61108261185e565b600380546001600160a01b038381166001600160a01b03198316179092556040519116907ff20ed5350ef7d392328a901ca190ac63721bec1597e15aba82c7473b86b532b8906106a99083908590614c21565b5f6110de611f0b565b805490915060ff600160401b82041615906001600160401b03165f811580156111045750825b90505f826001600160401b0316600114801561111f5750303b155b90508115801561112d575080155b1561114b5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561117557845460ff60401b1916600160401b1785555b61117d610dfb565b600380546001600160a01b03808b166001600160a01b031992831617909255600280548a84169083161790556004805492891692909116919091179055831561120057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600160065460ff161561122f5760405162461bcd60e51b815260040161064090614c98565b6006805460ff191660011790555f336003546040516331a9108f60e11b8152600481018890529192505f916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561128a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ae9190614c06565b9050816001600160a01b0316816001600160a01b03161480611343575060035460405163020604bf60e21b8152600481018890526001600160a01b0384811692169063081812fc90602401602060405180830381865afa158015611314573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113389190614c06565b6001600160a01b0316145b806113ba575060035460405163e985e9c560e01b81526001600160a01b039091169063e985e9c59061137b9084908690600401614c21565b602060405180830381865afa158015611396573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ba9190614cb4565b6113eb5760405162461bcd60e51b8152602060048201526002602482015261413160f01b6044820152606401610640565b5f86815260056020526040808220600101549051631c6c959760e01b815260048101929092526001600160a01b0316908190631c6c959790602401610180604051808303815f875af1158015611443573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190614d69565b5050505050505f6114da876001846001600160a01b0316638285ef406040518163ffffffff1660e01b81526004016040805180830381865afa1580156114af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d39190614e2b565b919061228e565b90505f5f6114e88389612326565b915091506114f68a876123a1565b5f6115008b6124ae565b90506115166001600160a01b0382168686612500565b6115636040805160e08101909152805f81526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f8152602001606081525090565b6001815260208082018d90526001600160a01b03888116604080850191909152908a166060840152515f9161159c918e91879101614e87565b60405160208183030381529060405290508486111561164b576115be8d612585565b6001600160a01b0316637a05edcd846115d7888a614c85565b3086866040516020016115eb929190614f2f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016116199493929190614f5c565b5f604051808303815f87803b158015611630575f5ffd5b505af1158015611642573d5f5f3e3d5ffd5b505050506116cc565b6116cc6040518060a00160405280306001600160a01b03168152602001856001600160a01b031681526020015f81526020018484604051602001611690929190614f2f565b60405160208183030381529060405281526020015f8152506040516020016116b89190614f8e565b6040516020818303038152906040526125b4565b50505050505050505050505050565b6116e361185e565b600280546001600160a01b038381166001600160a01b03198316179092556040519116907ff85662baab9b80fdcb7acea65a7d500f0d9b98b1757fb88e3b3c7dd0aebe4116906106a99083908590614c21565b5f8180602001905181019061174b919061503a565b90505f816060015180602001905181019061176691906150ee565b509050336001600160a01b03166117808260200151612585565b6001600160a01b0316146117bb5760405162461bcd60e51b8152602060048201526002602482015261209960f11b6044820152606401610640565b6117c4836125b4565b505050565b6117d161185e565b600480546001600160a01b038381166001600160a01b03198316179092556040519116907f1b092cca381ac00a07e1226c164f47c475d212f5e55699475a7f411811f77dd4906106a99083908590614c21565b61182c61185e565b6001600160a01b03811661185557604051631e4fbdf760e01b81525f6004820152602401610640565b61058481611e9b565b336118907f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610df95760405163118cdaa760e01b8152336004820152602401610640565b6040516001600160a01b038381166024830152604482018390526117c491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506127f1565b6003546040516335313c2160e11b81526001600160a01b0384811660048301525f921690636a627842906024016020604051808303815f875af1158015611961573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119859190614bdf565b90505f6040516119949061478f565b604051809103905ff0801580156119ad573d5f5f3e3d5ffd5b506040805160a0810182526001600160a01b038089168083525f8181526020818152858220548416818601819052938716858701528282529081528451634f4ce61d60e01b815294519596509294606086019492939192634f4ce61d9260048083019391928290030181865afa158015611a29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4d9190614c06565b6001600160a01b039081169190911482529415156020918201525f84815260058252604090819020835181549088166001600160a01b03199182161782559284015160018201805491891691909416179092558201516002909101805460608401516080909401511515600160a81b0260ff60a81b19941515600160a01b026001600160a81b031990921693909716929092179190911791909116939093179092559392505050565b5f81815260056020908152604080832060010154815163c6e1c7c960e01b815291516001600160a01b039091169263c6e1c7c992600480820193918290030181865afa158015611b48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6c9190614c06565b92915050565b6040516001600160a01b038481166024830152838116604483015260648201839052611bab9186918216906323b872dd906084016118e6565b50505050565b865f03611bca57611bc3868984611918565b9650611d8d565b6003546040516331a9108f60e11b8152600481018990525f916001600160a01b031690636352211e90602401602060405180830381865afa158015611c11573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c359190614c06565b9050886001600160a01b0316816001600160a01b03161480611cca575060035460405163020604bf60e21b8152600481018a90526001600160a01b038b811692169063081812fc90602401602060405180830381865afa158015611c9b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbf9190614c06565b6001600160a01b0316145b80611d41575060035460405163e985e9c560e01b81526001600160a01b039091169063e985e9c590611d029084908d90600401614c21565b602060405180830381865afa158015611d1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d419190614cb4565b611d725760405162461bcd60e51b8152602060048201526002602482015261413360f01b6044820152606401610640565b505f878152600560205260409020546001600160a01b031695505b8215611da257611da28830856109eb8b6124ae565b611dac87896123a1565b82841115611e3d57611dbd87612585565b6001600160a01b0316637a05edcd611dd4896124ae565b611dde8688614c85565b30611dec8c8e8c8c8a61285d565b6040518563ffffffff1660e01b8152600401611e0b9493929190614f5c565b5f604051808303815f87803b158015611e22575f5ffd5b505af1158015611e34573d5f5f3e3d5ffd5b50505050611200565b6112006040518060a00160405280306001600160a01b03168152602001611e638a6124ae565b6001600160a01b031681526020015f8152602001611e848a8c8a8a8861285d565b81525f6020918201526040516116b8929101614f8e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611b6c565b611f3b612936565b6105848161295b565b5f836001600160a01b0316632acada4d6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611f80573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fa791908101906151d5565b90505f815f81518110611fbc57611fbc6152ca565b6020908102919091010151516040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561200f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120339190614bdf565b905061204a6001600160a01b038316883088611b72565b6040516370a0823160e01b81523060048201525f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561208e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120b29190614bdf565b6040516370a0823160e01b815230600482015290915061213e90889084906001600160a01b038716906370a0823190602401602060405180830381865afa1580156120ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121239190614bdf565b61212d9190614c85565b6001600160a01b0386169190612500565b6040516370a0823160e01b81523060048201526001600160a01b038089169163b08d033391869186918316906370a0823190602401602060405180830381865afa15801561218e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b29190614bdf565b6121bc9190614c85565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018890526064015f604051808303815f87803b158015612206575f5ffd5b505af1158015612218573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528392506001600160a01b038a1691506370a0823190602401602060405180830381865afa158015612260573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122849190614bdf565b6107d59190614c85565b5f83602001516001600160801b03165f036122aa57508161231f565b602084015184516001600160801b03918216916122c8911685614c4f565b6122d29190614c66565b905081801561230f575082845f01516001600160801b031685602001516001600160801b0316836123039190614c4f565b61230d9190614c66565b105b1561231f576107ec8160016152de565b9392505050565b5f60605f5f5f5f5f8780602001905181019061234291906152f1565b945094509450945094508096508881111561235b578896505b6040805160208101879052908101859052606081018490526080810183905260a0810188905260c001604051602081830303815290604052955050505050509250929050565b5f6123ab83612585565b90505f8190505f816001600160a01b031663c35905c66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124129190614bdf565b90508015610ba7575f826001600160a01b0316633013ce296040518163ffffffff1660e01b8152600401602060405180830381865afa158015612457573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247b9190614c06565b90506124926001600160a01b038216863085611b72565b6124a66001600160a01b0382168584612500565b505050505050565b5f8181526005602090815260408083206001015481516338d52e0f60e01b815291516001600160a01b03909116926338d52e0f92600480820193918290030181865afa158015611b48573d5f5f3e3d5ffd5b604051636eb1769f60e11b81525f906001600160a01b0385169063dd62ed3e906125309030908790600401614c21565b602060405180830381865afa15801561254b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256f9190614bdf565b9050611bab848461258085856152de565b612963565b5f60015f612592846124ae565b6001600160a01b03908116825260208201929092526040015f20541692915050565b5f60065460ff166125ec5760405162461bcd60e51b8152602060048201526002602482015261573160f01b6044820152606401610640565b6006805460ff191690555f8280602001905181019061260b919061503a565b90505f816060015180602001905181019061262691906150ee565b506020818101515f9081526005909152604081205482519293506001600160a01b031691600181111561265b5761265b614e45565b03612692575f61266a866129f2565b9050801561268c57604083015161268c906001600160a01b03841690836118b9565b50610ba7565b6001825160018111156126a7576126a7614e45565b036127c4575f5f6126b787612e48565b9092509050811561273357600454600160b01b900461ffff1615612719576004545f90612710906126f390600160b01b900461ffff1685614c4f565b6126fd9190614c66565b905061270b8485835f613337565b6127158184614c85565b9250505b6040840151612733906001600160a01b03851690846118b9565b80156127bd575f61274785602001516124ae565b600454909150600160b01b900461ffff16156127a1576004545f906127109061277b90600160b01b900461ffff1685614c4f565b6127859190614c66565b90506127938583835f613337565b61279d8184614c85565b9250505b60408501516127bb906001600160a01b03831690846118b9565b505b5050610ba7565b60405162461bcd60e51b81526020600482015260026024820152614e4960f01b6044820152606401610640565b5f5f60205f8451602086015f885af180612810576040513d5f823e3d81fd5b50505f513d91508115612827578060011415612834565b6001600160a01b0384163b155b15611bab57604051635274afe760e01b81526001600160a01b0385166004820152602401610640565b6040805160e0810182525f81526020810187905260035482516331a9108f60e11b8152600481018990526060938301916001600160a01b031690636352211e90602401602060405180830381865afa1580156128bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128df9190614c06565b6001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525060405160200161291c919061532d565b604051602081830303815290604052905095945050505050565b61293e6133f8565b610df957604051631afcd79f60e31b815260040160405180910390fd5b61182c612936565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526129b48482613411565b611bab576040516001600160a01b0384811660248301525f60448301526129e891869182169063095ea7b3906064016118e6565b611bab84826127f1565b5f5f82806020019051810190612a08919061503a565b90505f8160600151806020019051810190612a2391906150ee565b5090505f8160c00151806020019051810190612a3f9190615355565b50506020838101515f9081526005909152604090205460a08401516004549293506001600160a01b0390911691600160a01b900461ffff1615612ac5576004545f9061271090612a9a90600160a01b900461ffff1684614c4f565b612aa49190614c66565b9050612ab7838760200151836001613337565b612ac18183614c85565b9150505b5f5f612ad68760200151848861345a565b9250509150818660800151612aeb9190614c85565b97505f612b58856001600160a01b03166394cc699e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b519190614c06565b83896137b6565b90505f88608001518960400151612b6f91906152de565b90505f818811612b7f5781612b81565b875b90505f612b918a60200151611af6565b6020808c01515f90815260059091526040902060020154909150612bc2906001600160a01b038084169116866118b9565b60208a810180515f90815260059092526040808320600201549151835291829020600101549151630cb69e2760e41b81526001600160a01b039283166004820152602481018590526044810187905230606482015291169063cb69e270906084015f604051808303815f87803b158015612c3a575f5ffd5b505af1158015612c4c573d5f5f3e3d5ffd5b505050505f831115612cdc57612cdc612c688b60200151612585565b6001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc79190614c06565b60208d01516001600160a01b031690856118b9565b60208b01516040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612d24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d489190614bdf565b90508015612dd85760035460208c01516040516331a9108f60e11b81526004810191909152612dd8916001600160a01b031690636352211e90602401602060405180830381865afa158015612d9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dc39190614c06565b60208e01516001600160a01b031690836118b9565b8a604001516001600160a01b03168b602001517fca43cc4f42a597401985d567370a3b0120f590a4aa4a4e34cbad1f3a06239a66898887604051612e2f939291909283526020830191909152604082015260600190565b60405180910390a3505050505050505050505050919050565b5f5f5f83806020019051810190612e5f919061503a565b90505f5f8260600151806020019051810190612e7b91906150ee565b915091505f5f82806020019051810190612e959190615380565b915091505f5f82806020019051810190612eaf91906152f1565b945050505091505f811115612ed557612ed5866060015130836109eb8a602001516124ae565b6020868101515f90815260058252604090819020815160a08101835281546001600160a01b0390811682526001830154811694820185905260029092015491821681840181905260ff600160a01b8404811615156060840152600160a81b909304909216151560808201529151633d417d2d60e01b8152600481018890526024810191909152909190633d417d2d906044016020604051808303815f875af1158015612f83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fa79190614bdf565b5060408082015160208301519151633879b0c560e01b81526001600160a01b03928316600482015260248101869052306044820152911690633879b0c5906064015f604051808303815f87803b158015612fff575f5ffd5b505af1158015613011573d5f5f3e3d5ffd5b505050505f5f61302a8960200151845f01518789613b03565b60208b8101515f90815260059091526040902060020154919d508d93509150600160a01b900460ff16156131bc578260800151156130d1576130ce835f01516001600160a01b0316634f4ce61d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130c89190614c06565b82613eca565b90505b6020830151604051635d043b2960e11b815260048101839052306024820181905260448201526001600160a01b039091169063ba087652906064016020604051808303815f875af1158015613128573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061314c9190614bdf565b5060208a01516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613195573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b99190614bdf565b90505b5f8a608001518b604001516131d191906152de565b90508181111561320f575f6131fc8b865f01518e6020015186866131f59190614c85565b888d6140cb565b909e50905061320b81846152de565b9250505b808210156132455760405162461bcd60e51b81526020600482015260036024820152622120a960e91b6044820152606401610640565b80156132cf576132cf61325b8b60200151612585565b6001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ba9190614c06565b60208d01516001600160a01b031690836118b9565b6132d98183614c85565b9b5089604001516001600160a01b03168a602001517f6f840f37dfd9cfb60428f847c7673096e908f32aae6692556d0c4ad04f0f95668860405161331f91815260200190565b60405180910390a35050505050505050505050915091565b5f82118015613355575060065461010090046001600160a01b031615155b15611bab57600654613379906001600160a01b0385811691610100900416846118b9565b600654600480546040516321c72b6760e11b81526001600160a01b038881169382019390935286831660248201526044810186905290821660648201528315156084820152610100909204169063438e56ce9060a4015f604051808303815f87803b1580156133e6575f5ffd5b505af1158015611200573d5f5f3e3d5ffd5b5f613401611f0b565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015613450575081156134425780600114613450565b5f866001600160a01b03163b115b9695505050505050565b5f5f5f5f5f8560c001518060200190518101906134779190615355565b6020898101515f81815260059092526040822060020154939650919450925082916134b091908c908c90600160a81b900460ff166142c2565b60208a8101515f908152600590915260408082205490516370a0823160e01b8152306004820152939550919350916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561350e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135329190614bdf565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa158015613579573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061359d9190614bdf565b60025460808c01516020808e01515f908152600590915260409020549293506135d3926001600160a01b03908116921690612500565b6002546135ed906001600160a01b03868116911685612500565b60025460208b8101515f908152600590915260408082205460808e01519151634230a70d60e11b81526001600160a01b0391821660048201526024810192909252878116604483015260648201879052608482019290925260a4810189905260c481018890529116906384614e1a9060e4016020604051808303815f875af115801561367b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369f9190614bdf565b5060208a8101515f90815260059091526040908190205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156136f8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061371c9190614bdf565b6137269083614c85565b6040516370a0823160e01b81523060048201529099506001600160a01b038516906370a0823190602401602060405180830381865afa15801561376b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061378f9190614bdf565b6137999082614c85565b97506137a58882614c85565b965050505050505093509350939050565b5f5f6137c58360200151611af6565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561380c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138309190614bdf565b90506138466001600160a01b0387168383612500565b604051636e553f6560e01b8152600481018290523060248201526001600160a01b03831690636e553f65906044016020604051808303815f875af1158015613890573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138b49190614bdf565b6020858101515f90815260059091526040902060020154909350600160a01b900460ff1680156138e357505f85115b15613afa576020848101515f90815260059091526040902060020154600160a81b900460ff1615613a6a576020808501515f90815260058252604090819020548151634f4ce61d60e01b8152915160609384936001600160a01b0390931692634f4ce61d92600480830193928290030181865afa158015613966573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061398a9190614c06565b6001600160a01b031663ee9c79da8884846040518463ffffffff1660e01b81526004016139b9939291906153ae565b5f604051808303815f87803b1580156139d0575f5ffd5b505af11580156139e2573d5f5f3e3d5ffd5b505050506020868101515f90815260059091526040908190206001015490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613a41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a659190614bdf565b965050505b6020848101515f9081526005909152604090819020600101549051635d043b2960e11b815260048101879052306024820181905260448201526001600160a01b039091169063ba087652906064016020604051808303815f875af1158015613ad4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af89190614bdf565b505b50509392505050565b5f5f5f5f84806020019051810190613b1b91906152f1565b505092509250505f876001600160a01b03166394cc699e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b839190614c06565b90505f886001600160a01b0316634f4ce61d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613be69190614c06565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038b16906370a0823190602401602060405180830381865afa158015613c2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c519190614bdf565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038416906370a0823190602401602060405180830381865afa158015613c98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cbc9190614bdf565b90505f613cc88d611af6565b604051635d043b2960e11b8152600481018d9052306024820181905260448201526001600160a01b03919091169063ba087652906064016020604051808303815f875af1158015613d1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d3f9190614bdf565b600254909150613d5c906001600160a01b03878116911683612500565b600254604051631fd8ecd960e01b81526001600160a01b038e8116600483015260248201849052604482018a90526064820189905242608483015290911690631fd8ecd99060a4015f604051808303815f87803b158015613dbb575f5ffd5b505af1158015613dcd573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528592506001600160a01b038f1691506370a0823190602401602060405180830381865afa158015613e15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e399190614bdf565b613e439190614c85565b6040516370a0823160e01b815230600482015290995082906001600160a01b038616906370a0823190602401602060405180830381865afa158015613e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eae9190614bdf565b613eb89190614c85565b97505050505050505094509492505050565b5f5f836001600160a01b0316632acada4d6040518163ffffffff1660e01b81526004015f60405180830381865afa158015613f07573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613f2e91908101906151d5565b6040805160018082528183019092529192505f91906020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050825f81518110613f8757613f876152ca565b60200260200101515f0151825f81518110613fa457613fa46152ca565b60200260200101906001600160a01b031690816001600160a01b0316815250506064815f81518110613fd857613fd86152ca565b60ff9092166020928302919091019091015260405163774e3ced60e11b81526001600160a01b0387169063ee9c79da9061401a908890869086906004016153ae565b5f604051808303815f87803b158015614031575f5ffd5b505af1158015614043573d5f5f3e3d5ffd5b50505050815f81518110614059576140596152ca565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156140a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134509190614bdf565b805182905f90859082906140e890860160209081019087016152f1565b5093505050505f8211156142b55760208a8101515f90815260059091526040812060020154600160a01b900460ff16156142945760208b8101515f90815260059091526040908190206001015490516363737ac960e11b8152600481018590526001600160a01b03909116906141ae908c9083908b90829063c6e6f59290602401602060405180830381865afa158015614184573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141a89190614bdf565b876144e7565b6040516370a0823160e01b815230600482015291975092506001600160a01b0382169063ba0876529082906370a0823190602401602060405180830381865afa1580156141fd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142219190614bdf565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303815f875af1158015614269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061428d9190614bdf565b50506142a7565b6142a18a8a8986866144e7565b90955090505b6142b181856152de565b9350505b5050965096945050505050565b5f8481526005602052604090206001810154600290910154849184916001600160a01b0390911690600160a01b900460ff16156144dd579150816143106001600160a01b0387168284612500565b604051636e553f6560e01b8152600481018390523060248201526001600160a01b03821690636e553f65906044016020604051808303815f875af115801561435a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061437e9190614bdf565b915083156144dd575f87815260056020908152604091829020548251634f4ce61d60e01b815292516001600160a01b0390911692634f4ce61d9260048083019391928290030181865afa1580156143d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143fb9190614c06565b92506144116001600160a01b0382168484612500565b60405163b08d033360e01b81526001600160a01b038281166004830152602482018490525f604483015284169063b08d0333906064015f604051808303815f87803b15801561445e575f5ffd5b505af1158015614470573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201526001600160a01b03861692506370a082319150602401602060405180830381865afa1580156144b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144da9190614bdf565b91505b5094509492505050565b5f5f5f876001600160a01b031663822631d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015614526573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061454a9190614c06565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038a16906370a0823190602401602060405180830381865afa158015614591573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b59190614bdf565b905086851561466a575f896001600160a01b03168b6001600160a01b0316106145de578a6145e0565b895b90505f816001600160a01b03168b6001600160a01b03161461461e57670de0b6b3a764000061460f898b614c4f565b6146199190614c66565b61463b565b876146318a670de0b6b3a7640000614c4f565b61463b9190614c66565b9050606461464a826069614c4f565b6146549190614c66565b92508983116146635782614665565b895b925050505b61467e6001600160a01b038b168483612500565b6040516383e4b89f60e01b81526001600160a01b038b811660048301528a8116602483015260448201839052606482018990523060848301528416906383e4b89f9060a4016020604051808303815f875af11580156146df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147039190614bdf565b6040516370a0823160e01b81523060048201529094506001600160a01b038b16906370a0823190602401602060405180830381865afa158015614748573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061476c9190614bdf565b6147769083614c85565b6147809089614c85565b94505050509550959350505050565b6107ec8061544383390190565b6001600160a01b0381168114610584575f5ffd5b5f602082840312156147c0575f5ffd5b813561231f8161479c565b5f5f604083850312156147dc575f5ffd5b82356147e78161479c565b915060208301356147f78161479c565b809150509250929050565b5f5f5f5f60808587031215614815575f5ffd5b8435935060208501356148278161479c565b925060408501356148378161479c565b9396929550929360600135925050565b8015158114610584575f5ffd5b5f5f5f60608486031215614866575f5ffd5b83356148718161479c565b925060208401356148818161479c565b9150604084013561489181614847565b809150509250925092565b5f5f5f5f608085870312156148af575f5ffd5b84359350602085013592506040850135915060608501356148cf8161479c565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b0381118282101715614910576149106148da565b60405290565b60405160e081016001600160401b0381118282101715614910576149106148da565b604051601f8201601f191681016001600160401b0381118282101715614960576149606148da565b604052919050565b5f6001600160401b03821115614980576149806148da565b50601f01601f191660200190565b5f82601f83011261499d575f5ffd5b81356149b06149ab82614968565b614938565b8181528460208386010111156149c4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f5f60e0888a0312156149f6575f5ffd5b873596506020880135614a088161479c565b955060408801359450606088013593506080880135925060a0880135614a2d81614847565b915060c08801356001600160401b03811115614a47575f5ffd5b614a538a828b0161498e565b91505092959891949750929550565b5f60208284031215614a72575f5ffd5b813561ffff8116811461231f575f5ffd5b5f5f5f5f5f5f5f5f610100898b031215614a9b575f5ffd5b883597506020890135614aad8161479c565b965060408901359550606089013594506080890135935060a0890135925060c0890135614ad981614847565b915060e08901356001600160401b03811115614af3575f5ffd5b614aff8b828c0161498e565b9150509295985092959890939650565b5f5f5f60608486031215614b21575f5ffd5b8335614b2c8161479c565b92506020840135614b3c8161479c565b915060408401356148918161479c565b5f5f5f60608486031215614b5e575f5ffd5b833592506020840135915060408401356001600160401b03811115614b81575f5ffd5b614b8d8682870161498e565b9150509250925092565b5f60208284031215614ba7575f5ffd5b81356001600160401b03811115614bbc575f5ffd5b6107ec8482850161498e565b5f60208284031215614bd8575f5ffd5b5035919050565b5f60208284031215614bef575f5ffd5b5051919050565b8051614c018161479c565b919050565b5f60208284031215614c16575f5ffd5b815161231f8161479c565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611b6c57611b6c614c3b565b5f82614c8057634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115611b6c57611b6c614c3b565b602080825260029082015261057360f41b604082015260600190565b5f60208284031215614cc4575f5ffd5b815161231f81614847565b805163ffffffff81168114614c01575f5ffd5b80516001600160401b0381168114614c01575f5ffd5b80516001600160801b0381168114614c01575f5ffd5b5f60408284031215614d1e575f5ffd5b604080519081016001600160401b0381118282101715614d4057614d406148da565b604052905080614d4f83614cf8565b8152614d5d60208401614cf8565b60208201525092915050565b5f5f5f5f5f5f868803610180811215614d80575f5ffd5b8751602089015160408a01519198509650945060a0605f1982011215614da4575f5ffd5b50614dad6148ee565b614db960608901614ccf565b8152614dc760808901614ccf565b6020820152614dd860a08901614ce2565b6040820152614de960c08901614ce2565b6060820152614dfa60e08901614ce2565b60808201529250614e0f886101008901614d0e565b9150614e1f886101408901614d0e565b90509295509295509295565b5f60408284031215614e3b575f5ffd5b61231f8383614d0e565b634e487b7160e01b5f52602160045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f6107ec6040830184614e59565b5f815160028110614ebe57634e487b7160e01b5f52602160045260245ffd5b80845250602082015160208401526040820151614ee660408501826001600160a01b03169052565b506060820151614f0160608501826001600160a01b03169052565b506080820151608084015260a082015160a084015260c082015160e060c08501526107ec60e0850182614e59565b604081525f614f416040830185614e9f565b8281036020840152614f538185614e59565b95945050505050565b6001600160a01b03858116825260208201859052831660408201526080606082018190525f9061345090830184614e59565b6020815260018060a01b03825116602082015260018060a01b036020830151166040820152604082015160608201525f606083015160a06080840152614fd760c0840182614e59565b9050608084015160a08401528091505092915050565b5f82601f830112614ffc575f5ffd5b815161500a6149ab82614968565b81815284602083860101111561501e575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561504a575f5ffd5b81516001600160401b0381111561505f575f5ffd5b820160a08185031215615070575f5ffd5b6150786148ee565b81516150838161479c565b815260208201516150938161479c565b60208201526040828101519082015260608201516001600160401b038111156150ba575f5ffd5b6150c686828501614fed565b606083015250608091820151918101919091529392505050565b805160028110614c01575f5ffd5b5f5f604083850312156150ff575f5ffd5b82516001600160401b03811115615114575f5ffd5b830160e08186031215615125575f5ffd5b61512d614916565b615136826150e0565b81526020828101519082015261514e60408301614bf6565b604082015261515f60608301614bf6565b60608201526080828101519082015260a0808301519082015260c08201516001600160401b03811115615190575f5ffd5b61519c87828501614fed565b60c083015250809350505060208301516001600160401b038111156151bf575f5ffd5b6151cb85828601614fed565b9150509250929050565b5f602082840312156151e5575f5ffd5b81516001600160401b038111156151fa575f5ffd5b8201601f8101841361520a575f5ffd5b80516001600160401b03811115615223576152236148da565b61523260208260051b01614938565b80828252602082019150602060a08402850101925086831115615253575f5ffd5b6020840193505b828410156134505760a08488031215615271575f5ffd5b6152796148ee565b84516152848161479c565b8152602085810151908201526040808601519082015260608501516152a88161479c565b606082015260808581015190820152825260a09093019260209091019061525a565b634e487b7160e01b5f52603260045260245ffd5b80820180821115611b6c57611b6c614c3b565b5f5f5f5f5f60a08688031215615305575f5ffd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b604081525f61533f6040830184614e9f565b8281036020938401525f81529190910192915050565b5f5f5f60608486031215615367575f5ffd5b5050815160208301516040909301519094929350919050565b5f5f60408385031215615391575f5ffd5b825160208401519092506001600160401b038111156151bf575f5ffd5b5f60608201858352606060208401528085518083526080850191506020870192505f5b818110156153f85783516001600160a01b03168352602093840193909201916001016153d1565b50508381036040850152845180825260209182019250908501905f5b8181101561543557825160ff16845260209384019390920191600101615414565b509197965050505050505056fe6080604052348015600e575f5ffd5b503380603357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b603a81603f565b50608e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107518061009b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633879b0c514610064578063715018a6146100795780638da5cb5b14610081578063cb69e2701461009f578063d9caed12146100b2578063f2fde38b146100c5575b5f5ffd5b6100776100723660046105e4565b6100d8565b005b610077610142565b5f54604080516001600160a01b039092168252519081900360200190f35b6100776100ad366004610623565b610155565b6100776100c036600461066a565b610250565b6100776100d33660046106a8565b6102e5565b6100e0610327565b604051636a0eee4b60e11b8152600481018390526001600160a01b03828116602483015284169063d41ddc96906044015f604051808303815f87803b158015610127575f5ffd5b505af1158015610139573d5f5f3e3d5ffd5b50505050505050565b61014a610327565b6101535f610353565b565b61015d610327565b6101d28483866001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c291906106ca565b6001600160a01b031691906103a2565b6040516372f89d8b60e11b815260048101849052602481018390526001600160a01b03828116604483015285169063e5f13b16906064016020604051808303815f875af1158015610225573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024991906106e5565b5050505050565b610258610327565b801561026457806102ca565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156102a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ca91906106e5565b90506102e06001600160a01b038416838361042f565b505050565b6102ed610327565b6001600160a01b03811661031b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61032481610353565b50565b5f546001600160a01b031633146101535760405163118cdaa760e01b8152336004820152602401610312565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156103ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041391906106e5565b9050610429848461042485856106fc565b61048e565b50505050565b6040516001600160a01b038381166024830152604482018390526102e091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610519565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526104df8482610585565b610429576040516001600160a01b0384811660248301525f604483015261051391869182169063095ea7b39060640161045c565b61042984825b5f5f60205f8451602086015f885af180610538576040513d5f823e3d81fd5b50505f513d9150811561054f57806001141561055c565b6001600160a01b0384163b155b1561042957604051635274afe760e01b81526001600160a01b0385166004820152602401610312565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156105c4575081156105b657806001146105c4565b5f866001600160a01b03163b115b93505050505b92915050565b6001600160a01b0381168114610324575f5ffd5b5f5f5f606084860312156105f6575f5ffd5b8335610601816105d0565b9250602084013591506040840135610618816105d0565b809150509250925092565b5f5f5f5f60808587031215610636575f5ffd5b8435610641816105d0565b93506020850135925060408501359150606085013561065f816105d0565b939692955090935050565b5f5f5f6060848603121561067c575f5ffd5b8335610687816105d0565b92506020840135610697816105d0565b929592945050506040919091013590565b5f602082840312156106b8575f5ffd5b81356106c3816105d0565b9392505050565b5f602082840312156106da575f5ffd5b81516106c3816105d0565b5f602082840312156106f5575f5ffd5b5051919050565b808201808211156105ca57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220d3f06c840010f1b4330932f04888a2c5cb2ec352e6b57005fb4e462ee219090c64736f6c634300081c0033a26469706673582212205352e02e747b9a5a3029761263994a021a78a9f8e8d3b4bec40290e4c273d60c64736f6c634300081c0033