0 txs
6 calls
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
gasLimit
viewfunction gasLimit() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
positions
viewfunction positions(address, address, bool) view returns (uint256 collateral, uint256 sizeDelta, bool isLong, bool isOpen)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
vaultToTrader
viewfunction vaultToTrader(address) view returns (address)
_syncPositionFromGMX
nonpayablefunction _syncPositionFromGMX(address vault, address market, bool isLong)
afterOrderCancellation
nonpayablefunction afterOrderCancellation(bytes32, tuple order, tuple)
afterOrderExecution
nonpayablefunction afterOrderExecution(bytes32, tuple order, tuple)
afterOrderFrozen
nonpayablefunction afterOrderFrozen(bytes32, tuple order, tuple)
allocateDepositForUser
nonpayablefunction allocateDepositForUser(address vault, address[] marketTokens, uint256[] collateralAmounts, uint256[] sizeDeltas, uint256[] acceptablePrices, uint256[] triggerPrices, bool[] isLongs, uint256[] execFees, uint8[] orderTypes, bool[] autoCancels, bool[] isTwaps, uint16[] twapSlices, uint32[] twapIntervals)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _initAdmin, address _beManager)
proportionalClosePositions
nonpayablefunction proportionalClosePositions(address vault, uint256 lpAmount, address[] marketTokens, bool[] isLongs, uint256[] acceptablePrices, uint256[] triggerPrices, uint256[] execFees, uint8[] orderTypes, bool[] autoCancels, bool[] isTwaps, uint16[] twapSlices, uint32[] twapIntervals)
refundExecutionFee
payablefunction refundExecutionFee(bytes32, tuple) payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
rescueFunds
nonpayablefunction rescueFunds(address token, address recipient, uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
traderClosePosition
payablefunction traderClosePosition(address vault, address marketToken, uint256 collateralDelta, uint256 sizeDelta, bool isLong, uint256 acceptablePrice, uint256 triggerPrice, uint256 executionFee, uint8 orderType, bool autoCancel, bool isTwap, uint16 twapSlices, uint32 twapInterval) payable
traderOpenPosition
payablefunction traderOpenPosition(address vault, address marketToken, uint256 amountIn, uint256 sizeDelta, bool isLong, uint256 acceptablePrice, uint256 triggerPrice, uint256 executionFee, uint8 orderType, bool autoCancel, bool isTwap, uint16 twapSlices, uint32 twapInterval) payable
updateCallbackGasLimit
nonpayablefunction updateCallbackGasLimit(uint256 limit)
updateVaultAccess
nonpayablefunction updateVaultAccess(address vault, address trader)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
ExecutionFeeRefunded
event ExecutionFeeRefunded(uint256 amt)
FundsRescued
event FundsRescued(address indexed token, address indexed recipient, uint256 amount, address indexed manager)
Initialized
event Initialized(uint64 version)
OrderCancelled
event OrderCancelled(address indexed cancellationReceiver, uint256 ethAmount)
OrderExecuted
event OrderExecuted(address indexed vault, address indexed marketToken, bool isLongType)
OrderFrozen
event OrderFrozen(address indexed cancellationReceiver, uint256 ethAmount)
PositionDecreased
event PositionDecreased(address indexed vault, address indexed marketToken, uint256 collateralDelta, uint256 sizeDelta, bool isLongType)
PositionIncreased
event PositionIncreased(address indexed vault, address indexed marketToken, uint256 amountIn, uint256 sizeDelta, bool isLongType, uint256 acceptablePrice, uint256 trigggerPrice)
PositionOpened
event PositionOpened(address indexed vault, address indexed marketToken, uint256 amountIn, uint256 sizeDelta, bool isLongType, uint256 acceptablePrice, uint256 trigggerPrice)
PositionSynced
event PositionSynced(address indexed vault, address indexed marketToken, uint256 collateral, uint256 sizeDelta, bool isLongType, bool isOpen)
ProportionalRedemptionExecuted
event ProportionalRedemptionExecuted(address indexed vault, uint256 lpAmount, uint256 totalMarkets)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Upgraded
event Upgraded(address indexed implementation)
UserDepositAllocated
event UserDepositAllocated(address indexed vault, uint256 totalAmount, uint256 positionsOpened)
VaultAccessUpdated
event VaultAccessUpdated(address indexed vault, address indexed trader, address indexed admin)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
IncorrectAcceptablePrice
error IncorrectAcceptablePrice()
IncorrectCaller
error IncorrectCaller()
IncorrectCollateralDelta
error IncorrectCollateralDelta()
IncorrectExecutionFee
error IncorrectExecutionFee()
IncorrectOrderType
error IncorrectOrderType()
IncorrectSizeDelta
error IncorrectSizeDelta()
IncorrectTriggerPrice
error IncorrectTriggerPrice()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidInitialization
error InvalidInitialization()
LengthMismatch
error LengthMismatch()
NotInitializing
error NotInitializing()
NotTraderToVault
error NotTraderToVault()
PositionNotOpen
error PositionNotOpen()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60a080604052346100c257306080525f516020613d5b5f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b604051613c9490816100c782396080518181816115d401526116a30152f35b6001600160401b0319166001600160401b039081175f516020613d5b5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6107e080604052600436101561001d575b50361561001b575f80fd5b005b5f6104e0525f3560e01c90816301ffc9a714611bed575080630672c1b214611b47578063248a9ca314611b085780632bdc0ad214611ac85780632f2ff15d14611a7e57806336568abe14611a3a5780633c372240146119db578063485cc955146118315780634f1ef2861461162857806352d1902d146115c25780636ccae054146114af578063750ff6b51461141c57806377463278146113ea578063854da3271461137357806391d148541461131e578063a217fddf14611304578063ad3cb1cc146112a6578063aea7e0bd14610c03578063b10eceb814610b58578063d547741f14610b01578063d8ef5c231461040b578063ed76f29d146102de578063edc8494c1461024c578063f68016b71461022a578063fdbca11f146101e95763ff427d471461014c575f610010565b346101e25761015a36611da5565b5090507fdd003742fb214507783ce004fe55f5ac14f89c6de4a7cd7487e47eb091c622656020610195604061018f85806122b3565b016122c8565b61019e81612c0f565b6101c46101b060a061018f87806122b3565b6101bd61018087016122dc565b9083611e8a565b60405160e0949094013584526001600160a01b031692a26104e05180f35b6104e05180fd5b346101e25760203660031901126101e2576004356102056126bb565b8015610215576104e05190815580f35b631f2a200560e01b6104e0515260046104e051fd5b346101e2576104e0513660031901126101e25760206104e05154604051908152f35b346101e25761025a36611da5565b50905061026a61018082016122dc565b7f26c93720fd1e2a71f959a8627261d81b3512be0b9533044755df1c514eea94fe60206102ab604061018f6102a460a061018f89806122b3565b96806122b3565b936102b585612c0f565b6102c0848287611e8a565b60405193151584526001600160a01b03908116941692a36104e05180f35b6102e736611c7b565b9a6102ff9a919a99929998939897949796959661234b565b6104e080516001600160a01b038f81169182905260016020529151604090205490911633036103f657610356838f8e8e806103e8575b156103d75761034c61ffff610351925b168d611e30565b612390565b612b09565b90803b156101e257604051916360c66b1360e11b83526004830152816024816104e051936104e051905af180156103c9576103ae575b506103969c612d7f565b60015f516020613c485f395f51905f52556104e05180f35b6104e0516103bb91611d69565b6104e0516101e2578d61038c565b6040513d6104e051823e3d90fd5b5061035161034c61ffff6001610345565b50600161ffff821611610335565b633b4e077560e11b6104e0515260046104e051fd5b346101e2576101803660031901126101e257610425611c40565b610520526044356001600160401b0381116101e257610448903690600401611e00565b610500526080526064356001600160401b0381116101e25761046e903690600401611e00565b60c05260a0526084356001600160401b0381116101e257610493903690600401611e00565b6102205260e05260a4356001600160401b0381116101e2576104b9903690600401611e00565b6103e0526102405260c4356001600160401b0381116101e2576104e0903690600401611e00565b610400526102605260e4356001600160401b0381116101e257610507903690600401611e00565b6104605261028052610104356001600160401b0381116101e25761052f903690600401611e00565b610340526102a052610124356001600160401b0381116101e257610557903690600401611e00565b6104a0526103a052610144356001600160401b0381116101e25761057f903690600401611e00565b6104c0526103c0526001600160401b0361016435116101e2576105a83661016435600401611e00565b610480526102e0526105b861234b565b6105c061270a565b610520516104e080516001600160a01b039283169052600160205251604090205416156103f657602435156102155761050051151580610af3575b80610ae4575b80610ad5575b80610ac6575b80610ab7575b80610aa8575b80610a99575b80610a8a575b80610a7b575b15610a6657604051636dc7b0a160e01b815260408160048160018060a01b0361052051165afa9081156103c9576104e05191610a31575b50602435670de0b6b3a76400006024350204670de0b6b3a764000003610a175761069890670de0b6b3a76400006024350261232d565b6102c0526104e051610200525b61050051610200511061070d57604080516024358152610500516020820152610520516001600160a01b0316917f8c7800309791647cebc58a9ad7f5b61cd35f8c5a112e600b8b47aa801e2c4a4491a260015f516020613c485f395f51905f52556104e05180f35b61072861072361020051610500516080516122e9565b6122c8565b61074261073d6102005160c05160a0516122e9565b6122dc565b610750818361052051611e8a565b60018060a01b0361052051166104e05152600260205260406104e0512060018060a01b0383165f5260205260405f208115156104e0515260205260406104e0512060ff6002604051926107a284611d1f565b805484526001810154602085015201548181161515604084015260081c161580156060830152610a0257670de0b6b3a76400006107f7816107ea6102c0516020860151611e30565b04926102c0519051611e30565b04811580156109fa575b6109f15764e8d4a5100090049161082561073d610200516104a0516103a0516122e9565b806109cd575b156109c05761086d61ffff61085261084d610200516104c0516103c0516122e9565b61230d565b166108676102005161040051610260516122e9565b35611e30565b610520516001600160a01b03163b156101e25760405163c7abd40b60e01b815260048101919091526104e051610520518290602490829084906001600160a01b03165af180156103c9576109a5575b506108d0610200516102205160e0516122e9565b356108e5610200516103e051610240516122e9565b35610100526108fe6102005161040051610260516122e9565b356109136102005161046051610280516122e9565b359060098210156101e2576109959661093961073d61020051610340516102a0516122e9565b9361095161073d610200516104a0516103a0516122e9565b9561096961084d610200516104c0516103c0516122e9565b9761098661098161020051610480516102e0516122e9565b61231c565b996101005194610520516123fe565b60016102005101610200526106a5565b6104e0516109b291611d69565b6104e0516101e257846108bc565b61086d61ffff6001610852565b50600161ffff6109ea61084d610200516104c0516103c0516122e9565b161161082b565b50505050610995565b508015610801565b6394e88a2160e01b6104e0515260046104e051fd5b634e487b7160e01b6104e05152601160045260246104e051fd5b90506040813d604011610a5e575b81610a4c60409383611d69565b810103126101e2576020015181610662565b3d9150610a3f565b631fec674760e31b6104e0515260046104e051fd5b5061048051610500511461062b565b506104c0516105005114610625565b506104a051610500511461061f565b50610340516105005114610619565b50610460516105005114610613565b5061040051610500511461060d565b506103e0516105005114610607565b50610220516105005114610601565b5060c05161050051146105fb565b346101e25760403660031901126101e257610b50600435610b20611c56565b90610b4b610b46825f525f516020613c285f395f51905f52602052600160405f20015490565b612779565b6129de565b506104e05180f35b346101e25760403660031901126101e257610b71611c40565b610b79611c56565b90610b8261270a565b6001600160a01b0316908115610bee576104e080518390526001602052516040812080546001600160a01b0319166001600160a01b0390931692831790553392907f38e97131c41f365b330583dbfa8b164e45cafde736f4842613f04ae7700155709080a46104e05180f35b63d92e233d60e01b6104e0515260046104e051fd5b346111aa576101a03660031901126111aa57610c1d611c40565b610680526024356001600160401b0381116111aa57610c40903690600401611e00565b61036052610380526044356001600160401b0381116111aa57610c67903690600401611e00565b61044052610140526064356001600160401b0381116111aa57610c8e903690600401611e00565b6106a052610160526084356001600160401b0381116111aa57610cb5903690600401611e00565b610720526101c05260a4356001600160401b0381116111aa57610cdc903690600401611e00565b610640526101e05260c4356001600160401b0381116111aa57610d03903690600401611e00565b6106c0526101805260e4356001600160401b0381116111aa57610d2a903690600401611e00565b61070052610560526001600160401b0361010435116111aa57610d533661010435600401611e00565b6106e052610580526001600160401b0361012435116111aa57610d7c3661012435600401611e00565b610600526105a0526001600160401b0361014435116111aa57610da53661014435600401611e00565b6106605261062052610164356001600160401b0381116111aa57610dcd903690600401611e00565b6105e0526105c052610184356001600160401b0381116111aa57610df5903690600401611e00565b6105405261042052610e0561234b565b610e0d61270a565b610680516001600160a01b039081165f9081526001602052604090205416156112975761036051151580611288575b80611279575b8061126a575b8061125b575b8061124c575b8061123d575b8061122e575b8061121f575b80611210575b80611201575b806111f2575b156111e3575f610320819052610300525b6104405161030051106111ae57610ea66103205161068051612b09565b610680516001600160a01b03163b156111aa57604051906360c66b1360e11b825260048201525f816024818360018060a01b0361068051165af1801561119f5761118a575b506104e051610120525b610360516101205110610f5e5760408051610320518152610360516020820152610680516001600160a01b0316917fdcde17004932a81154ef61951ce171646b0e83ee2cd0ed4e1c01ab178634563791a260015f516020613c485f395f51905f52556104e05180f35b610f7561073d6101205161066051610620516122e9565b80611166575b1561115957610fb261ffff610f9d61084d610120516105e0516105c0516122e9565b166108676101205161070051610560516122e9565b610680516001600160a01b03163b156101e25760405163c7abd40b60e01b815260048101919091526104e051610680518290602490829084906001600160a01b03165af180156103c95761113e575b506110196107236101205161036051610380516122e9565b61102d6101205161044051610140516122e9565b35611042610120516106a051610160516122e9565b3561105a61073d610120516106c051610180516122e9565b61106e61012051610720516101c0516122e9565b3561108361012051610640516101e0516122e9565b356101a05261109c6101205161070051610560516122e9565b356110b1610120516106e051610580516122e9565b359060098210156101e25761112e966110d761073d61012051610600516105a0516122e9565b936110ef61073d6101205161066051610620516122e9565b9561110761084d610120516105e0516105c0516122e9565b9761111f6109816101205161054051610420516122e9565b996101a0519461068051612d7f565b6001610120510161012052610ef5565b6104e05161114b91611d69565b6104e0516101e25780611001565b610fb261ffff6001610f9d565b50600161ffff61118361084d610120516105e0516105c0516122e9565b1611610f7b565b5f61119491611d69565b5f6104e05280610eeb565b6040513d5f823e3d90fd5b5f80fd5b6111cf6111c56103005161044051610140516122e9565b35610320516123f1565b610320526001610300510161030052610e89565b631fec674760e31b5f5260045ffd5b50610540516103605114610e78565b506105e0516103605114610e72565b50610660516103605114610e6c565b50610600516103605114610e66565b506106e0516103605114610e60565b50610700516103605114610e5a565b506106c0516103605114610e54565b50610640516103605114610e4e565b50610720516103605114610e48565b506106a0516103605114610e42565b50610440516103605114610e3c565b633b4e077560e11b5f5260045ffd5b346111aa575f3660031901126111aa5760408051906112c58183611d69565b600582526020820191640352e302e360dc1b83528151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b346111aa575f3660031901126111aa5760206040515f8152f35b346111aa5760403660031901126111aa57611337611c56565b6004355f525f516020613c285f395f51905f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346111aa5761138136611da5565b5090507fb255fad558f3e9e70ce7dd650085b45f7536ab33f1249bc476d06143dede56ee60206113b6604061018f85806122b3565b6113bf81612c0f565b6113d16101b060a061018f87806122b3565b60405160e0949094013584526001600160a01b031692a2005b346111aa5760603660031901126111aa5761001b611406611c40565b61140e611c56565b611416611c6c565b91611e8a565b346111aa5760603660031901126111aa57611435611c40565b61143d611c56565b611445611c6c565b6001600160a01b039283165f908152600260208181526040808420959096168352938452848220921515825291835283902080546001820154919092015484519283529282015260ff80831615159382019390935260089190911c90911615156060820152608090f35b346111aa5760603660031901126111aa576114c8611c40565b6114d0611c56565b90604435916114dd61234b565b6114e56126bb565b6001600160a01b0381169182156115b35783156115a4576001600160a01b03169083821561158d5760405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830191909152815261154e90611548606482611d69565b82613b2b565b6040519283527f2098976920827f095c56419969a63d95c46499f652b474df5dc8b5433faa64b260203394a460015f516020613c485f395f51905f5255005b905047106115a45761159f8383612aa9565b61154e565b631f2a200560e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b346111aa575f3660031901126111aa577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036116195760206040515f516020613c085f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b60403660031901126111aa5761163c611c40565b602435906001600160401b0382116111aa57366023830112156111aa5781600401359061166882611d8a565b916116766040519384611d69565b808352602083019336602483830101116111aa57815f926024602093018737840101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630811490811561180f575b50611619576116db6126bb565b6040516352d1902d60e01b81526001600160a01b0382169390602081600481885afa5f91816117db575b5061171d5784634c9c8ce360e01b5f5260045260245ffd5b805f516020613c085f395f51905f528692036117c95750823b156117b7575f516020613c085f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561179e575f809161001b945190845af4611798612a7a565b91613bc2565b505050346117a857005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d602011611807575b816117f760209383611d69565b810103126111aa57519086611705565b3d91506117ea565b5f516020613c085f395f51905f52546001600160a01b031614159050846116ce565b346111aa5760403660031901126111aa5761184a611c40565b611852611c56565b905f516020613c685f395f51905f52549160ff8360401c1615926001600160401b038116801590816119d3575b60011490816119c9575b1590816119c0575b506119b15767ffffffffffffffff1981166001175f516020613c685f395f51905f525583611985575b506001600160a01b038216151580611973575b156115b35761190f611915926118e1613ae2565b6118e9613ae2565b6118f1613ae2565b6118f9613ae2565b60015f516020613c485f395f51905f52556127bf565b5061286e565b5061191c57005b68ff0000000000000000195f516020613c685f395f51905f5254165f516020613c685f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b506001600160a01b03811615156118cd565b68ffffffffffffffffff191668010000000000000001175f516020613c685f395f51905f5255836118ba565b63f92ee8a960e01b5f5260045ffd5b90501585611891565b303b159150611889565b85915061187f565b60403660031901126111aa576024356001600160401b0381116111aa5760e09060031990360301126111aa5734611a0e57005b7fc202efce9101af0f52dd65dab6174a60de5e3c29f65a1711b050e306933045436020604051348152a1005b346111aa5760403660031901126111aa57611a53611c56565b336001600160a01b03821603611a6f5761001b906004356129de565b63334bd91960e11b5f5260045ffd5b346111aa5760403660031901126111aa5761001b600435611a9d611c56565b90611ac3610b46825f525f516020613c285f395f51905f52602052600160405f20015490565b61293a565b346111aa5760203660031901126111aa576001600160a01b03611ae9611c40565b165f526001602052602060018060a01b0360405f205416604051908152f35b346111aa5760203660031901126111aa576020611b3f6004355f525f516020613c285f395f51905f52602052600160405f20015490565b604051908152f35b611b5036611c7b565b9a611b689a919a99929998939897949796959661234b565b6001600160a01b038d81165f9081526001602052604090205416330361129757611bbb9c8b8b80611bdf575b15611bce5761034c61ffff611bab925b168a611e30565b611bb6858383611e8a565b6123fe565b60015f516020613c485f395f51905f5255005b50611bab61034c61ffff6001611ba4565b50600161ffff821611611b94565b346111aa5760203660031901126111aa576004359063ffffffff60e01b82168092036111aa57602091637965db0b60e01b8114908115611c2f575b5015158152f35b6301ffc9a760e01b14905083611c28565b600435906001600160a01b03821682036111aa57565b602435906001600160a01b03821682036111aa57565b6044359081151582036111aa57565b6101a09060031901126111aa576004356001600160a01b03811681036111aa57906024356001600160a01b03811681036111aa5790604435906064359060843580151581036111aa579060a4359060c4359060e435906101043560098110156111aa57906101243580151581036111aa57906101443580151581036111aa57906101643561ffff811681036111aa57906101843563ffffffff811681036111aa5790565b608081019081106001600160401b03821117611d3a57604052565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117611d3a57604052565b90601f801991011681019081106001600160401b03821117611d3a57604052565b6001600160401b038111611d3a57601f01601f191660200190565b60606003198201126111aa57600435916024356001600160401b0381116111aa5761022081840360031901126111aa5760040191604435906001600160401b0382116111aa5760e09082900360031901126111aa5760040190565b9181601f840112156111aa578235916001600160401b0383116111aa576020808501948460051b0101116111aa57565b81810292918115918404141715611e4357565b634e487b7160e01b5f52601160045260245ffd5b908160209103126111aa57516001600160a01b03811681036111aa5790565b51906001600160a01b03821682036111aa57565b90916001600160a01b0382169190821515806122a1575b156115b35760405163046bb67760e31b815293602085600481875afa94851561119f575f95612280575b50604051630111635160e71b8152602081600481885afa90811561119f575f91612246575b50604051631b206b7360e01b815295602087600481895afa96871561119f575f97612207575b50611f979392916101c09160405193602085019089825260018060a01b0316998a604087015260018060a01b031660608601528515159485608082015260808152611f6260a082611d69565b5190206040516307d47a8b60e11b81526001600160a01b03909316600484015260248301529094859190829081906044820190565b03916001600160a01b03165afa92831561119f575f93612083575b507f19a4f9dcebdf5fdb04a346c4cea61f791bd5fa0a08d490ff8b9f687b1441583e9360ff939261207e92875f52600260205260405f20895f5260205260405f20905f5260205260405f206040602086019561201d8751958387519760018701988955015190612b09565b8355015151151594600282019587801988541691161786555151151561ff0086549160081b169061ff0019161780955554915460405195869560081c1692859260609295949195608085019685526020850152151560408401521515910152565b0390a3565b925090826101c03d8111612200575b61209c8183611d69565b810103936101c085126111aa57604051946120b686611d4e565b606081126111aa576040516120ca81611d4e565b6120d386611e76565b81526120e160208701611e76565b60208201526120f260408701611e76565b60408201528652610140605f198201126111aa57604051906101408201918083106001600160401b03841117611d3a576020926040526060870151815260808701518382015260a0870151604082015260c0870151606082015260e0870151608082015261010087015160a082015261012087015160c082015261014087015160e08201526101608701516101008201526101808701516101208201528288015261019f1901126111aa576040519360208501908582106001600160401b03831117611d3a576101a09160405201519182151583036111aa579184526040850193909352919291907f19a4f9dcebdf5fdb04a346c4cea61f791bd5fa0a08d490ff8b9f687b1441583e611fb2565b503d612092565b6101c091975091612234611f9795949360203d60201161223f575b61222c8183611d69565b810190611e57565b979150919293611f16565b503d612222565b90506020813d602011612278575b8161226160209383611d69565b810103126111aa5761227290611e76565b5f611ef0565b3d9150612254565b61229a91955060203d60201161223f5761222c8183611d69565b935f611ecb565b506001600160a01b0384161515611ea1565b90359060fe19813603018212156111aa570190565b356001600160a01b03811681036111aa5790565b3580151581036111aa5790565b91908110156122f95760051b0190565b634e487b7160e01b5f52603260045260245ffd5b3561ffff811681036111aa5790565b3563ffffffff811681036111aa5790565b8115612337570490565b634e487b7160e01b5f52601260045260245ffd5b60025f516020613c485f395f51905f5254146123745760025f516020613c485f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b91908203918211611e4357565b61239a3447612383565b8181106123b6575050346123aa57565b6123b43433612aa9565b565b6123bf91612383565b8034106123e2576123d09034612383565b806123d85750565b6123b49033612aa9565b63451fd27960e01b5f5260045ffd5b91908201809211611e4357565b959196929793989490999b87156115a45761241a848a8d613001565b600985101580612626576002861480156126ae575b819061269c575b61262657600386148015612690575b818115612680575b8115612670575b50612646575b80612626576004861490811561263a575b8115612616575b501561260757600160a01b6001900387169b8c5f52600260205260405f20600160a01b600190038d165f5260205260405f208b15155f5260205260405f209d60028f015460081c60ff16156125f85760018f01548b116125e9576124d68a8a612b09565b9e8f80151591826125dd575b5050156125ce57806125c0575b156125b55761ffff905b165f5b8181106125515750505050505050505050916060917f5a1db253d0cebefad834e563e849581d4d87b7b91e75ccb6d72d401707d1c4ff9360405196875260208701521515604086015260018060a01b031693a3565b806125908a8f8f8f908f8b8f948f948f93908e928b8f938f9e60019f61257b828261258195613032565b95613032565b93816125965750505f99613068565b016124fc565b6125af9163ffffffff6125a99216611e30565b426123f1565b99613068565b5061ffff60016124f9565b50600161ffff8216116124ef565b63174ab2cb60e31b5f5260045ffd5b54101590508f5f6124e2565b63fa98bf3d60e01b5f5260045ffd5b6394e88a2160e01b5f5260045ffd5b634c3bfd5960e11b5f5260045ffd5b905061262657600685145f612472565b634e487b7160e01b5f52602160045260245ffd5b5050600585145f61246b565b8315612661578261245a575b633110117d60e21b5f5260045ffd5b6302631ea760e01b5f5260045ffd5b9050612626576006861481612454565b905061262657600886148161244d565b50505f60058614612445565b50836126615782156126525780612436565b505f90506004861461242f565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16156126f357565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527f9820777f3b5c4a55ba3649af6ff157717cfd4aa964ddedabebc16c5bafb84aba602052604090205460ff161561274257565b63e2517d3f60e01b5f52336004527f205783d38d15a7146707395edcf4f3346fe724136da9a399f4abb11a50e4316c60245260445ffd5b5f8181525f516020613c285f395f51905f526020908152604080832033845290915290205460ff16156127a95750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16612869576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b6001600160a01b0381165f9081527f9820777f3b5c4a55ba3649af6ff157717cfd4aa964ddedabebc16c5bafb84aba602052604090205460ff16612869576001600160a01b03165f8181527f9820777f3b5c4a55ba3649af6ff157717cfd4aa964ddedabebc16c5bafb84aba60205260408120805460ff191660011790553391907f205783d38d15a7146707395edcf4f3346fe724136da9a399f4abb11a50e4316c907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5f8181525f516020613c285f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff166129d8575f8181525f516020613c285f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181525f516020613c285f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16156129d8575f8181525f516020613c285f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b3d15612aa4573d90612a8b82611d8a565b91612a996040519384611d69565b82523d5f602084013e565b606090565b814710612ad9575f918291829182916001600160a01b03165af1612acb612a7a565b9015612ad45750565b613b0d565b504763cf47918160e01b5f5260045260245260445ffd5b908160209103126111aa575160ff811681036111aa5790565b604051631b206b7360e01b815291906001600160a01b0316602083600481845afa92831561119f576004936020915f91612bf2575b5060405163313ce56760e01b815294859182906001600160a01b03165afa90811561119f576004935f92612bd0575b506020906040519485809263313ce56760e01b82525afa91821561119f57612b9c935f93612b9f575b50613b83565b90565b612bc291935060203d602011612bc9575b612bba8183611d69565b810190612af0565b915f612b96565b503d612bb0565b6020919250612beb90823d8411612bc957612bba8183611d69565b9190612b6d565b612c099150823d841161223f5761222c8183611d69565b5f612b3e565b60405163f132f9f760e01b8152906001600160a01b0316602082600481845afa91821561119f575f92612d43575b50604051635d9f4eaf60e01b815290602082600481845afa91821561119f575f92612d02575b50602060049160405192838092630e3a261d60e41b82525afa90811561119f575f91612ce3575b506001600160a01b03163314918215612cd0575b508115612cbd575b5015612cae57565b6317fe949f60e01b5f5260045ffd5b6001600160a01b0316331490505f612ca6565b6001600160a01b0316331491505f612c9e565b612cfc915060203d60201161223f5761222c8183611d69565b5f612c8a565b9091506020813d602011612d3b575b81612d1e60209383611d69565b810103126111aa576020612d33600492611e76565b929150612c63565b3d9150612d11565b9091506020813d602011612d77575b81612d5f60209383611d69565b810103126111aa57612d7090611e76565b905f612c3d565b3d9150612d52565b9b9496919a909792989395998b156115a457612d9c838b8b613001565b6009841015806126265760028514908182159283612ff4575b8290612fe2575b6126265760038714908e828015612fd5575b8491908015612fc4575b8015612fb3575b612f9f575b506126265792612f95575b508115612f85575b50156126075780612f77575b15612f675761ffff908b888e97938d935b16978b8d8b5f955b8c8710612f37575050505050505050505050505060ff6002612e7060018060a01b038a1698895f528260205260405f2060018060a01b0388165f5260205260405f208515155f5260205260405f209a612b09565b98015460081c16612ed957604080519788526020880194909452151592860192909252606085019190915260808401919091526001600160a01b0316917f9f000dddd6c040982ed4c0ff91e48ded516eada329b0e43af2935f24255856e7908060a0810161207e565b604080519788526020880194909452151592860192909252606085019190915260808401919091526001600160a01b0316917fcb92546a59e272e39d67fd89f8c6026242b9c190258225c7d6de6cc37d076ba8908060a0810161207e565b600197612f58968a8f958f978f978f968d8261257b82809561258195613032565b018a90888e8b8f8b8f91612e1c565b508a93898b8861ffff6001612e14565b50600161ffff821611612e03565b905061262657600884145f612df7565b9150505f5f612def565b905015612661578b1561265257828f612de4565b505061262657828f60068a14612ddf565b505061262657828f60088a14612dd8565b505f935060058914612dce565b508d612661578a156126525781612dbc565b505f915060048714612db5565b90156125e9576001600160a01b0316156115b3578015159081613027575b50156123e257565b90504710155f61301f565b9190600181111561306357613047818461232d565b92811561233757061115612b9c5760018101809111611e435790565b505090565b999499979193969592976107a05261078052610740526040519463046bb67760e31b865260208660048160018060a01b036107a051165afa95861561119f575f610760525f96613ac1575b506040519863f132f9f760e01b8a5260208a60048160018060a01b036107a051165afa998a1561119f575f9a613a85575b5060405199630111635160e71b8b5260208b60048160018060a01b036107a051165afa9a8b1561119f575f9b613a49575b506040519a631b206b7360e01b8c5260208c60048160018060a01b036107a051165afa9b8c1561119f575f9c613a28575b5060405198630e3a261d60e41b8a5260208a60048160018060a01b036107a051165afa998a1561119f575f9a613a07575b5060096107405110156107c0526107c051612626576004610740511480156139f5575b80156139e0575b156139d05760405163714af34b60e01b8152610780516001600160a01b039384166004830152831660248201529160809183916044918391165afa90811561119f575f91613955575b50871561394357604001516001600160a01b03165b6001600160a01b0390811691908c16821461392457604051613222606082611d69565b600281526020810192604036853781938251156122f957528051600110156122f9576001600160a01b038d16604091909101526001985b6001600160a01b0381163b156111aa57604051637d39aaf160e01b81526001600160a01b0383166004820152602481018790525f81806044810103818a6001600160a01b0387165af1801561119f5761390f575b506107c051613615576002610740511480156138fa575b80156138e5575b613666575b50506040519a60e08c018c81106001600160401b0382111761364c5760405260018060a01b036107a051168c5260018060a01b036107a0511660208d01523060408d01526107605160608d015260018060a01b03610780511660808d015260018060a01b031660a08c015260c08b0152610760515493604051986101008a018a81106001600160401b0382111761364c576040528952602089015260408801526060870152608086015260a08501526107605160c085015260e0840152610760515061076051506107605150602093604051926133ad8685611d69565b6107605184525f3681376040519661012088018881106001600160401b0382111761364c57604052875285870194855260408701926107c051613615576107405184526060880191600381101561361557825260808801901515815260a088019161076051835260c08901931515845260e089019460018060a01b036107a0511686526101008a0196875260018060a01b036107a051163b156135ec576040805163c3427d0960e01b8152600481018b90529a5161020060248d015280516001600160a01b039081166102248e0152818c015181166102448e01529181015182166102648d0152606081015182166102848d0152608081015182166102a48d015260a08101519091166102c48c015260c0015160e06102e48c015280516103048c01819052610760516103248d019a928c0191905b8c82821061362f575050505060e09051805160448d01528a81015160648d0152604081015160848d0152606081015160a48d0152608081015160c48d015260a081015160e48d015260c08101516101048d015201516101248b0152516009811015613615576101448a0152516003811015613615576101648901525115156101848801525115156101a48701525115156101c4860152516101e4850152518382036023190161020485015280518083526107605192840193918201929091905b82811061360157505050508180610760519203816107605160018060a01b036107a051165af180156135f3576135d55750565b610760516135e291611d69565b610760516135ec57565b6107605180fd5b6040513d61076051823e3d90fd5b8351855293810193928101926001016135a2565b634e487b7160e01b61076051526021600452602461076051fd5b83516001600160a01b03168d529b8c019b909201916001016134e2565b634e487b7160e01b61076051526041600452602461076051fd5b6040516303e21fa960e61b81526020816004816001600160a01b0386165afa9081156135f35761076051916138ab575b508d60206040518092636eb1769f60e11b825281806136d6873060048401909291602090604083019460018060a01b0316835260018060a01b0316910152565b03916001600160a01b03165afa80156135f3578f908a906107605190613873575b6137029293506123f1565b60405163095ea7b360e01b60208083019182526001600160a01b03861660248401526044808401949094529282529092919061373f606485611d69565b6107605184519091826001600160a01b0386165af161076051513d8261384e575b5050156137e7575b5050506001600160a01b0381163b156135ec57604051631cdacd5960e31b81526001600160a01b03808f1660048301529283166024820152604481018890526107605190929091839160649183918591165af180156135f3576137cc575b806132d0565b610760516137d991611d69565b610760516135ec575f6137c6565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401526107605160448085019190915283526138469261383890613829606482611d69565b6001600160a01b038316613b2b565b6001600160a01b0316613b2b565b5f808e613768565b90915061386b57506001600160a01b0381163b15155b5f80613760565b600114613864565b5050506020813d6020116138a3575b8161388f60209383611d69565b810103126135ec57518e9081908a906136f7565b3d9150613882565b90506020813d6020116138dd575b816138c660209383611d69565b810103126135ec576138d790611e76565b5f613696565b3d91506138b9565b506107c05161361557600861074051146132cb565b50610760516107c052600361074051146132c4565b5f61391991611d69565b5f610760525f6132ad565b9050604051613934602082611d69565b5f81525f368137905f98613259565b606001516001600160a01b03166131ff565b90506080813d6080116139c8575b8161397060809383611d69565b810103126111aa576139bd60606040519261398a84611d1f565b61399381611e76565b84526139a160208201611e76565b60208501526139b260408201611e76565b604085015201611e76565b60608201525f6131ea565b3d9150613963565b5050604051613934602082611d69565b506107c05161262657600661074051146131a1565b505f6107c0526005610740511461319a565b613a21919a5060203d60201161223f5761222c8183611d69565b985f613177565b613a42919c5060203d60201161223f5761222c8183611d69565b9a5f613146565b909a506020813d602011613a7d575b81613a6560209383611d69565b810103126111aa57613a7690611e76565b995f613115565b3d9150613a58565b9099506020813d602011613ab9575b81613aa160209383611d69565b810103126111aa57613ab290611e76565b985f6130e4565b3d9150613a94565b613adb91965060203d60201161223f5761222c8183611d69565b945f6130b3565b60ff5f516020613c685f395f51905f525460401c1615613afe57565b631afcd79f60e31b5f5260045ffd5b805115613b1c57805190602001fd5b63d6bda27560e01b5f5260045ffd5b905f602091828151910182855af11561119f575f513d613b7a57506001600160a01b0381163b155b613b5a5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415613b53565b9060ff831660ff82168181145f14613b9d57505050905090565b1015613bb05760ff91920316600a0a0290565b612b9c9260ff910316600a0a9061232d565b90613bcd5750613b0d565b81511580613bfe575b613bde575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15613bd656fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a164736f6c634300081d000af0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00