2 txs
3 calls
constructor
constructor()
functions
decreaseOrders
viewfunction decreaseOrders(address, uint256) view returns (address account, address collateralToken, uint256 collateralDelta, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
decreaseOrdersIndex
viewfunction decreaseOrdersIndex(address) view returns (uint256)
getDecreaseOrder
viewfunction getDecreaseOrder(address _account, uint256 _orderIndex) view returns (address collateralToken, uint256 collateralDelta, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
getIncreaseOrder
viewfunction getIncreaseOrder(address _account, uint256 _orderIndex) view returns (address purchaseToken, uint256 purchaseTokenAmount, address collateralToken, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
getSwapOrder
viewfunction getSwapOrder(address _account, uint256 _orderIndex) view returns (address path0, address path1, address path2, uint256 amountIn, uint256 minOut, uint256 triggerRatio, bool triggerAboveThreshold, bool shouldUnwrap, uint256 executionFee)
getUsdgMinPrice
viewfunction getUsdgMinPrice(address _otherToken) view returns (uint256)
gov
viewfunction gov() view returns (address)
increaseOrders
viewfunction increaseOrders(address, uint256) view returns (address account, address purchaseToken, uint256 purchaseTokenAmount, address collateralToken, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
increaseOrdersIndex
viewfunction increaseOrdersIndex(address) view returns (uint256)
minExecutionFee
viewfunction minExecutionFee() view returns (uint256)
minPurchaseTokenAmountUsd
viewfunction minPurchaseTokenAmountUsd() view returns (uint256)
PRICE_PRECISION
viewfunction PRICE_PRECISION() view returns (uint256)
router
viewfunction router() view returns (address)
swapOrders
viewfunction swapOrders(address, uint256) view returns (address account, uint256 amountIn, uint256 minOut, uint256 triggerRatio, bool triggerAboveThreshold, bool shouldUnwrap, uint256 executionFee)
swapOrdersIndex
viewfunction swapOrdersIndex(address) view returns (uint256)
USDG_PRECISION
viewfunction USDG_PRECISION() view returns (uint256)
usdg
viewfunction usdg() view returns (address)
validatePositionOrderPrice
viewfunction validatePositionOrderPrice(bool _triggerAboveThreshold, uint256 _triggerPrice, address _indexToken, bool _maximizePrice, bool _raise) view returns (uint256, bool)
validateSwapOrderPriceWithTriggerAboveThreshold
viewfunction validateSwapOrderPriceWithTriggerAboveThreshold(address[] _path, uint256 _triggerRatio) view returns (bool)
vault
viewfunction vault() view returns (address)
weth
viewfunction weth() view returns (address)
cancelDecreaseOrder
nonpayablefunction cancelDecreaseOrder(uint256 _orderIndex)
cancelIncreaseOrder
nonpayablefunction cancelIncreaseOrder(uint256 _orderIndex)
cancelMultiple
nonpayablefunction cancelMultiple(uint256[] _swapOrderIndexes, uint256[] _increaseOrderIndexes, uint256[] _decreaseOrderIndexes)
cancelSwapOrder
nonpayablefunction cancelSwapOrder(uint256 _orderIndex)
createDecreaseOrder
payablefunction createDecreaseOrder(address _indexToken, uint256 _sizeDelta, address _collateralToken, uint256 _collateralDelta, bool _isLong, uint256 _triggerPrice, bool _triggerAboveThreshold) payable
createIncreaseOrder
payablefunction createIncreaseOrder(address[] _path, uint256 _amountIn, address _indexToken, uint256 _minOut, uint256 _sizeDelta, address _collateralToken, bool _isLong, uint256 _triggerPrice, bool _triggerAboveThreshold, uint256 _executionFee, bool _shouldWrap) payable
createSwapOrder
payablefunction createSwapOrder(address[] _path, uint256 _amountIn, uint256 _minOut, uint256 _triggerRatio, bool _triggerAboveThreshold, uint256 _executionFee, bool _shouldWrap, bool _shouldUnwrap) payable
executeDecreaseOrder
nonpayablefunction executeDecreaseOrder(address _address, uint256 _orderIndex, address _feeReceiver)
executeIncreaseOrder
nonpayablefunction executeIncreaseOrder(address _address, uint256 _orderIndex, address _feeReceiver)
executeSwapOrder
nonpayablefunction executeSwapOrder(address _account, uint256 _orderIndex, address _feeReceiver)
initialize
nonpayablefunction initialize(address _router, address _vault, address _weth, address _usdg, uint256 _minExecutionFee, uint256 _minPurchaseTokenAmountUsd)
setGov
nonpayablefunction setGov(address _gov)
setMinExecutionFee
nonpayablefunction setMinExecutionFee(uint256 _minExecutionFee)
setMinPurchaseTokenAmountUsd
nonpayablefunction setMinPurchaseTokenAmountUsd(uint256 _minPurchaseTokenAmountUsd)
updateDecreaseOrder
nonpayablefunction updateDecreaseOrder(uint256 _orderIndex, uint256 _collateralDelta, uint256 _sizeDelta, uint256 _triggerPrice, bool _triggerAboveThreshold)
updateIncreaseOrder
nonpayablefunction updateIncreaseOrder(uint256 _orderIndex, uint256 _sizeDelta, uint256 _triggerPrice, bool _triggerAboveThreshold)
updateSwapOrder
nonpayablefunction updateSwapOrder(uint256 _orderIndex, uint256 _minOut, uint256 _triggerRatio, bool _triggerAboveThreshold)
events
CancelDecreaseOrder
event CancelDecreaseOrder(address indexed account, uint256 orderIndex, address collateralToken, uint256 collateralDelta, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
CancelIncreaseOrder
event CancelIncreaseOrder(address indexed account, uint256 orderIndex, address purchaseToken, uint256 purchaseTokenAmount, address collateralToken, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
CancelSwapOrder
event CancelSwapOrder(address indexed account, uint256 orderIndex, address[] path, uint256 amountIn, uint256 minOut, uint256 triggerRatio, bool triggerAboveThreshold, bool shouldUnwrap, uint256 executionFee)
CreateDecreaseOrder
event CreateDecreaseOrder(address indexed account, uint256 orderIndex, address collateralToken, uint256 collateralDelta, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
CreateIncreaseOrder
event CreateIncreaseOrder(address indexed account, uint256 orderIndex, address purchaseToken, uint256 purchaseTokenAmount, address collateralToken, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee)
CreateSwapOrder
event CreateSwapOrder(address indexed account, uint256 orderIndex, address[] path, uint256 amountIn, uint256 minOut, uint256 triggerRatio, bool triggerAboveThreshold, bool shouldUnwrap, uint256 executionFee)
ExecuteDecreaseOrder
event ExecuteDecreaseOrder(address indexed account, uint256 orderIndex, address collateralToken, uint256 collateralDelta, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee, uint256 executionPrice)
ExecuteIncreaseOrder
event ExecuteIncreaseOrder(address indexed account, uint256 orderIndex, address purchaseToken, uint256 purchaseTokenAmount, address collateralToken, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold, uint256 executionFee, uint256 executionPrice)
ExecuteSwapOrder
event ExecuteSwapOrder(address indexed account, uint256 orderIndex, address[] path, uint256 amountIn, uint256 minOut, uint256 amountOut, uint256 triggerRatio, bool triggerAboveThreshold, bool shouldUnwrap, uint256 executionFee)
Initialize
event Initialize(address router, address vault, address weth, address usdg, uint256 minExecutionFee, uint256 minPurchaseTokenAmountUsd)
UpdateDecreaseOrder
event UpdateDecreaseOrder(address indexed account, uint256 orderIndex, address collateralToken, uint256 collateralDelta, address indexToken, uint256 sizeDelta, bool isLong, uint256 triggerPrice, bool triggerAboveThreshold)
UpdateGov
event UpdateGov(address gov)
UpdateIncreaseOrder
event UpdateIncreaseOrder(address indexed account, uint256 orderIndex, address collateralToken, address indexToken, bool isLong, uint256 sizeDelta, uint256 triggerPrice, bool triggerAboveThreshold)
UpdateMinExecutionFee
event UpdateMinExecutionFee(uint256 minExecutionFee)
UpdateMinPurchaseTokenAmountUsd
event UpdateMinPurchaseTokenAmountUsd(uint256 minPurchaseTokenAmountUsd)
UpdateSwapOrder
event UpdateSwapOrder(address indexed account, uint256 ordexIndex, address[] path, uint256 amountIn, uint256 minOut, uint256 triggerRatio, bool triggerAboveThreshold, bool shouldUnwrap, uint256 executionFee)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b506001600055600780546001600160a01b03191633179055614928806100376000396000f3fe6080604052600436106102285760003560e01c80639e71b0f011610123578063d38ab519116100ab578063f5b91b7b1161006f578063f5b91b7b14610b79578063f882ac0714610b99578063f887ea4014610bb9578063fbfa77cf14610bd9578063fc2cee6214610bf957600080fd5b8063d38ab519146108f5578063d3bab1d114610915578063d566d0ca14610a51578063d7c41c7914610a7e578063f2d2e01b14610a9e57600080fd5b8063c16cde8a116100f2578063c16cde8a146107f9578063c4a1821b1461080c578063c86b0f7d1461083c578063cfad57a21461085c578063d0d40cd61461087c57600080fd5b80639e71b0f014610779578063a397ea5414610799578063aec22455146107b9578063b142a4b0146107e657600080fd5b806347e0bbd0116101b1578063807c560011610175578063807c5600146106e25780638de10c2e1461070257806395082d25146107185780639983ee1b146107395780639e23de5c1461075957600080fd5b806347e0bbd0146105a95780634a686d67146105c95780634c54f0b0146105e557806363ae21031461061a57806379221fa21461063057600080fd5b806311d9444a116101f857806311d9444a1461043257806312d43a5114610452578063269ae6c21461048a5780632b7d62901461049d5780633fc8cef31461058957600080fd5b8062cf066b14610293578063026032ee146102d357806307c7edc3146103f25780630d5cc9381461041257600080fd5b3661028e576008546001600160a01b0316331461028c5760405162461bcd60e51b815260206004820152601960248201527f4f72646572426f6f6b3a20696e76616c69642073656e6465720000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561029f57600080fd5b506102c06102ae366004613c7d565b60066020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156102df57600080fd5b506103a26102ee366004613c9a565b6001600160a01b039182166000908152600360208181526040808420948452938152918390208351610120810185528154861681526001820154861693810184905260028201549481018590529181015490941660608201819052600485015460808301819052600586015460ff908116151560a08501819052600688015460c086018190526007890154909216151560e08601819052600890980154610100909501859052949795969295919493909291565b604080516001600160a01b03998a1681526020810198909852959097169486019490945260608501929092521515608084015260a0830152151560c082015260e0810191909152610100016102ca565b3480156103fe57600080fd5b5061028c61040d366004613cc6565b610c19565b34801561041e57600080fd5b5061028c61042d366004613d08565b610f3f565b34801561043e57600080fd5b5061028c61044d366004613cc6565b610fa5565b34801561045e57600080fd5b50600754610472906001600160a01b031681565b6040516001600160a01b0390911681526020016102ca565b61028c610498366004613e1e565b6112e6565b3480156104a957600080fd5b5061052a6104b8366004613c9a565b6001602081815260009384526040808520909152918352912080549181015460028201546003830154600484015460058501546006860154600787015460088801546009909801546001600160a01b03998a1699978816989697958616969490951694929360ff92831693919216908a565b604080516001600160a01b039b8c168152998b1660208b0152890197909752948816606088015296909216608086015260a0850152151560c084015260e0830193909352911515610100820152610120810191909152610140016102ca565b34801561059557600080fd5b50600854610472906001600160a01b031681565b3480156105b557600080fd5b5061028c6105c4366004613d08565b611598565b3480156105d557600080fd5b506102c0670de0b6b3a764000081565b3480156105f157600080fd5b50610605610600366004613ebc565b6117e3565b604080519283529015156020830152016102ca565b34801561062657600080fd5b506102c0600c5481565b34801561063c57600080fd5b5061069f61064b366004613c9a565b600560208181526000938452604080852090915291835291208054600282015460038301546004840154948401546006909401546001600160a01b03909316949193909260ff808316926101009004169087565b604080516001600160a01b039098168852602088019690965294860193909352606085019190915215156080840152151560a083015260c082015260e0016102ca565b3480156106ee57600080fd5b5061028c6106fd366004613f7f565b611916565b34801561070e57600080fd5b506102c0600d5481565b34801561072457600080fd5b506102c06c0c9f2c9cd04674edea4000000081565b34801561074557600080fd5b5061028c610754366004614007565b6119de565b34801561076557600080fd5b506102c0610774366004613c7d565b611ad4565b34801561078557600080fd5b5061028c610794366004613d08565b611c65565b3480156107a557600080fd5b5061028c6107b4366004614048565b611e11565b3480156107c557600080fd5b506102c06107d4366004613c7d565b60026020526000908152604090205481565b61028c6107f4366004614087565b611f19565b61028c61080736600461414f565b61227e565b34801561081857600080fd5b5061082c6108273660046141ca565b6122d2565b60405190151581526020016102ca565b34801561084857600080fd5b5061028c610857366004614007565b6124cd565b34801561086857600080fd5b5061028c610877366004613c7d565b612588565b34801561088857600080fd5b5061089c610897366004613c9a565b612600565b604080516001600160a01b039a8b168152988a1660208a015296909816958701959095526060860193909352608085019190915260a0840152151560c0830152151560e0820152610100810191909152610120016102ca565b34801561090157600080fd5b5061028c610910366004613cc6565b6127cd565b34801561092157600080fd5b506109f7610930366004613c9a565b6001600160a01b0391821660009081526001602081815260408084209484529381529183902083516101408101855281548616815291810154851692820183905260028101549382018490526003810154851660608301819052600482015490951660808301819052600582015460a08401819052600683015460ff908116151560c08601819052600785015460e0870181905260088601549092161515610100870181905260099095015461012090960186905295989697969295919491939092909190565b604080516001600160a01b039a8b1681526020810199909952968916968801969096529690931660608601526080850191909152151560a084015260c083015291151560e0820152610100810191909152610120016102ca565b348015610a5d57600080fd5b506102c0610a6c366004613c7d565b60046020526000908152604090205481565b348015610a8a57600080fd5b5061028c610a9936600461420f565b612bb8565b348015610aaa57600080fd5b50610b23610ab9366004613c9a565b600360208181526000938452604080852090915291835291208054600182015460028301549383015460048401546005850154600686015460078701546008909701546001600160a01b039687169895871697959690941694929360ff9283169391929091169089565b604080516001600160a01b039a8b168152988a1660208a01528801969096529690931660608601526080850191909152151560a084015260c083015291151560e0820152610100810191909152610120016102ca565b348015610b8557600080fd5b50600954610472906001600160a01b031681565b348015610ba557600080fd5b5061028c610bb4366004613d08565b612c97565b348015610bc557600080fd5b50600a54610472906001600160a01b031681565b348015610be557600080fd5b50600b54610472906001600160a01b031681565b348015610c0557600080fd5b5061028c610c14366004613d08565b612ef5565b610c21612f54565b6001600160a01b0380841660009081526005602090815260408083208684528252808320815161010081018352815490951685526001810180548351818602810186019094528084529495949193858101939290830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b5050509183525050600282015460208201526003820154604082015260048201546060820152600582015460ff8082161515608084015261010090910416151560a082015260069091015460c09091015280519091506001600160a01b0316610d295760405162461bcd60e51b81526004016102839061427d565b8060a0015115610d6157610d45816020015182608001516122d2565b610d615760405162461bcd60e51b8152600401610283906142b4565b6001600160a01b0384166000908152600560209081526040808320868452909152812080546001600160a01b031916815590610da06001830182613bd0565b50600060028201819055600382018190556004820181905560058201805461ffff191690556006909101819055600b54604083015160208401518051610e19946001600160a01b039094169390610df957610df96142fa565b60200260200101516001600160a01b0316612fae9092919063ffffffff16565b600854602082015180516000926001600160a01b03169190610e3d90600190614326565b81518110610e4d57610e4d6142fa565b60200260200101516001600160a01b0316148015610e6c57508160c001515b15610e9957610e848260200151836060015130613000565b9050610e94818360000151613136565b610eb3565b610eb0826020015183606001518460000151613000565b90505b610ec18260e0015184613136565b846001600160a01b03167f7e1fe496989eea92b738a562dbf9c0ae6aa6fcf3f1ef09e95ee4f7603721706b858460200151856040015186606001518688608001518960a001518a60c001518b60e00151604051610f2699989796959493929190614381565b60405180910390a25050610f3a6001600055565b505050565b6007546001600160a01b03163314610f695760405162461bcd60e51b8152600401610283906143d8565b600d8190556040518181527fe46d9daf6d25f7615efa1d0183b90ac6759d85014b598e409aadf0fd918d59a6906020015b60405180910390a150565b610fad612f54565b6001600160a01b03808416600090815260036020818152604080842087855282529283902083516101208101855281548616808252600183015487169382019390935260028201549481019490945291820154909316606083015260048101546080830152600581015460ff908116151560a0840152600682015460c0840152600782015416151560e083015260080154610100820152906110615760405162461bcd60e51b81526004016102839061427d565b60006110828260e001518360c0015184606001518560a001511560016117e3565b506001600160a01b0386811660009081526003602081815260408084208a8552825280842080546001600160a01b0319908116825560018201805482169055600282018690559381018054909416909355600480840185905560058401805460ff199081169091556006850186905560078501805490911690556008909301849055600a5488519289015160608a01518a84015160808c015160a08d01519551632662166b60e01b8152968a169787019790975291881660248601528716604485015260648401526084830193909352151560a48201523060c48201529394509092911690632662166b9060e4016020604051808303816000875af115801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190614406565b60085460208501519192506001600160a01b03918216911614156111e4576111df818460000151613136565b611201565b82516020840151611201916001600160a01b039091169083612fae565b61121083610100015185613136565b82600001516001600160a01b03167f9a382661d6573da86db000471303be6f0b2b1bb66089b08e3c16a85d7b6e94f88685602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518c6040516112d19a99989796959493929190998a526001600160a01b0398891660208b015260408a01979097529490961660608801526080870192909252151560a086015260c085015291151560e08401526101008301919091526101208201526101400190565b60405180910390a2505050610f3a6001600055565b6112ee612f54565b8751600214806112ff575087516003145b61131b5760405162461bcd60e51b81526004016102839061441f565b876001895161132a9190614326565b8151811061133a5761133a6142fa565b60200260200101516001600160a01b03168860008151811061135e5761135e6142fa565b60200260200101516001600160a01b031614156113b85760405162461bcd60e51b815260206004820152601860248201527709ee4c8cae484deded67440d2dcecc2d8d2c840bee0c2e8d60431b6044820152606401610283565b600087116114085760405162461bcd60e51b815260206004820152601c60248201527f4f72646572426f6f6b3a20696e76616c6964205f616d6f756e74496e000000006044820152606401610283565b600c5483101561142a5760405162461bcd60e51b815260040161028390614456565b6114326131ac565b81156114b55760085488516001600160a01b0390911690899060009061145a5761145a6142fa565b60200260200101516001600160a01b0316146114885760405162461bcd60e51b81526004016102839061449b565b6114928388613218565b34146114b05760405162461bcd60e51b8152600401610283906144e0565b611574565b8234146114d45760405162461bcd60e51b815260040161028390614526565b600a5488516001600160a01b0390911690631b827878908a906000906114fc576114fc6142fa565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152336024820152306044820152606481018a9052608401600060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b505050505b611584338989898989878a613224565b61158e6001600055565b5050505050505050565b6115a0612f54565b33600090815260016020818152604080842085855282529283902083516101408101855281546001600160a01b039081168083529483015481169382019390935260028201549481019490945260038101548216606085015260048101549091166080840152600581015460a0840152600681015460ff908116151560c0850152600782015460e085015260088201541615156101008401526009015461012083015261165f5760405162461bcd60e51b81526004016102839061427d565b3360009081526001602081815260408084208685528252832080546001600160a01b0319908116825592810180548416905560028101849055600381018054841690556004810180549093169092556005820183905560068201805460ff19908116909155600783018490556008808401805490921690915560099092019290925554908201516001600160a01b03908116911614156117235761171e611718826040015183610120015161321890919063ffffffff16565b33613136565b611758565b61174933826040015183602001516001600160a01b0316612fae9092919063ffffffff16565b61175881610120015133613136565b80600001516001600160a01b03167fd500f34e0ec655b7614ae42e1d9c666d5e4dde909a1297829f8c5ecf00805d328383602001518460400151856060015186608001518760a001518860c001518960e001518a61010001518b61012001516040516117cd9a99989796959493929190614574565b60405180910390a2506117e06001600055565b50565b60008060008461186057600b546040516340d3096b60e11b81526001600160a01b038881166004830152909116906381a612d690602401602060405180830381865afa158015611837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185b9190614406565b6118ce565b600b54604051637092736960e11b81526001600160a01b0388811660048301529091169063e124e6d290602401602060405180830381865afa1580156118aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ce9190614406565b90506000886118df578782106118e3565b8782115b9050841561190857806119085760405162461bcd60e51b8152600401610283906142b4565b909890975095505050505050565b60005b835181101561195657611944848281518110611937576119376142fa565b6020026020010151612c97565b8061194e816145cb565b915050611919565b5060005b825181101561199757611985838281518110611978576119786142fa565b6020026020010151611598565b8061198f816145cb565b91505061195a565b5060005b81518110156119d8576119c68282815181106119b9576119b96142fa565b6020026020010151611c65565b806119d0816145cb565b91505061199b565b50505050565b6119e6612f54565b336000908152600160209081526040808320878452909152902080546001600160a01b0316611a275760405162461bcd60e51b81526004016102839061427d565b6007810183905560088101805460ff191683151590811790915560058201859055600382015460048301546006840154604080518a81526001600160a01b039485166020820152939092169183019190915260ff16151560608201526080810186905260a0810185905260c081019190915233907f0a0360dd5c354235bbf8d386ba3b24ef8134088e0785677de1504df219d9149a9060e0015b60405180910390a2506119d86001600055565b600b54604051632c668ec160e01b81526001600160a01b038381166004830152670de0b6b3a764000060248301526000928392911690632c668ec190604401602060405180830381865afa158015611b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b549190614406565b600b546040516340d3096b60e11b81526001600160a01b038681166004830152929350600092909116906381a612d690602401602060405180830381865afa158015611ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc89190614406565b600b546040516323b95ceb60e21b81526001600160a01b03878116600483015292935060009290911690638ee573ac90602401602060405180830381865afa158015611c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3c9190614406565b9050611c5c611c4c82600a6146ca565b611c56858561339e565b906133aa565b95945050505050565b611c6d612f54565b33600090815260036020818152604080842085855282529283902083516101208101855281546001600160a01b03908116808352600184015482169483019490945260028301549582019590955292810154909316606083015260048301546080830152600583015460ff908116151560a0840152600684015460c0840152600784015416151560e083015260089092015461010082015290611d225760405162461bcd60e51b81526004016102839061427d565b336000818152600360208181526040808420878552909152822080546001600160a01b03199081168255600182018054821690556002820184905591810180549092169091556004810182905560058101805460ff1990811690915560068201839055600782018054909116905560080155610100820151611da391613136565b80600001516001600160a01b03167f1154174c82984656b028c8021671988f60a346497e56fe02554761184f82a0758383602001518460400151856060015186608001518760a001518860c001518960e001518a61010001516040516117cd999897969594939291906146d6565b611e19612f54565b336000908152600360209081526040808320888452909152902080546001600160a01b0316611e5a5760405162461bcd60e51b81526004016102839061427d565b6006810183905560078101805460ff19168315159081179091556004820185905560028201869055600182015460038301546005840154604080518b81526001600160a01b0394851660208201529081018a90529290911660608301526080820187905260ff16151560a082015260c0810185905260e081019190915233907f75781255bc71c83f89f29e5a2599f2c174a562d2cd8f2e818a47f132e7280498906101000160405180910390a250611f126001600055565b5050505050565b611f21612f54565b611f296131ac565b600c54821015611f4b5760405162461bcd60e51b815260040161028390614456565b8015611fce576008548b516001600160a01b03909116908c90600090611f7357611f736142fa565b60200260200101516001600160a01b031614611fa15760405162461bcd60e51b81526004016102839061449b565b611fab828b613218565b3414611fc95760405162461bcd60e51b8152600401610283906144e0565b61208d565b813414611fed5760405162461bcd60e51b815260040161028390614526565b600a548b516001600160a01b0390911690631b827878908d90600090612015576120156142fa565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152336024820152306044820152606481018d9052608401600060405180830381600087803b15801561207457600080fd5b505af1158015612088573d6000803e3d6000fd5b505050505b60008b60018d5161209e9190614326565b815181106120ae576120ae6142fa565b60200260200101519050600060018d51111561217a57816001600160a01b03168d6000815181106120e1576120e16142fa565b60200260200101516001600160a01b0316141561213b5760405162461bcd60e51b815260206004820152601860248201527709ee4c8cae484deded67440d2dcecc2d8d2c840bee0c2e8d60431b6044820152606401610283565b612168600b60009054906101000a90046001600160a01b03168d8f600081518110610df957610df96142fa565b6121738d8b30613000565b905061217d565b508a5b600b54604051630a48d5a960e01b81526001600160a01b038481166004830152602482018490526000921690630a48d5a990604401602060405180830381865afa1580156121cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f39190614406565b9050600d548110156122525760405162461bcd60e51b815260206004820152602260248201527f4f72646572426f6f6b3a20696e73756666696369656e7420636f6c6c61746572604482015261185b60f21b6064820152608401610283565b506122653383838b8f8e8d8d8d8d6133b6565b50506122716001600055565b5050505050505050505050565b612286612f54565b61228e6131ac565b600c5434116122af5760405162461bcd60e51b815260040161028390614456565b6122bf3386868a8a88888861356e565b6122c96001600055565b50505050505050565b60008251600214806122e5575082516003145b6123015760405162461bcd60e51b81526004016102839061441f565b600083600081518110612316576123166142fa565b60200260200101519050600084600186516123319190614326565b81518110612341576123416142fa565b602090810291909101015160095490915060009081906001600160a01b03858116911614156123945761238d87600181518110612380576123806142fa565b6020026020010151611ad4565b9150612405565b600b546040516340d3096b60e11b81526001600160a01b038681166004830152909116906381a612d690602401602060405180830381865afa1580156123de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124029190614406565b91505b6009546001600160a01b038481169116141561242f57506c0c9f2c9cd04674edea400000006124a0565b600b54604051637092736960e11b81526001600160a01b0385811660048301529091169063e124e6d290602401602060405180830381865afa158015612479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249d9190614406565b90505b60006124bd83611c56846c0c9f2c9cd04674edea4000000061339e565b8710955050505050505b92915050565b6124d5612f54565b336000908152600560209081526040808320878452909152902080546001600160a01b03166125165760405162461bcd60e51b81526004016102839061427d565b600381018490556004810183905560058101805460ff191683151517908190556002820154600683015460405133937fa7f9f4a25eb76f5ec01b1a429d95d6a00833f0f137c88827c58799a1c1ff0dfe93611ac1938b9360018901938c928c928c9260ff610100909104169190614726565b6007546001600160a01b031633146125b25760405162461bcd60e51b8152600401610283906143d8565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527fe24c39186e9137521953beaa8446e71f55b8f12296984f9d4273ceb1af728d9090602001610f9a565b6001600160a01b0380831660009081526005602090815260408083208584528252808320815161010081018352815490951685526001810180548351818602810186019094528084529495869586958695869586958695869586958695929493858201939290918301828280156126a057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612682575b505050918352505060028201546020808301919091526003830154604083015260048301546060830152600583015460ff8082161515608085015261010090910416151560a083015260069092015460c09091015281015151909150612707576000612727565b806020015160008151811061271e5761271e6142fa565b60200260200101515b60018260200151511161273b57600061275b565b8160200151600181518110612752576127526142fa565b60200260200101515b60028360200151511161276f57600061278f565b8260200151600281518110612786576127866142fa565b60200260200101515b8360400151846060015185608001518660a001518760c001518860e00151995099509950995099509950995099509950509295985092959850929598565b6127d5612f54565b6001600160a01b038084166000908152600160208181526040808420878552825292839020835161014081018552815486168082529382015486169281019290925260028101549382019390935260038301548416606082015260048301549093166080840152600582015460a0840152600682015460ff908116151560c0850152600783015460e085015260088301541615156101008401526009909101546101208301526128975760405162461bcd60e51b81526004016102839061427d565b60006128b88261010001518360e0015184608001518560c0015160016117e3565b506001600160a01b0380871660009081526001602081815260408084208a8552825280842080546001600160a01b0319908116825593810180548516905560028101859055600381018054851690556004810180549094169093556005830184905560068301805460ff19908116909155600784018590556008840180549091169055600990920192909255600b549086015191860151939450612960938316921690612fae565b81606001516001600160a01b031682602001516001600160a01b031614612a45576040805160028082526060820183526000926020830190803683370190505090508260200151816000815181106129ba576129ba6142fa565b60200260200101906001600160a01b031690816001600160a01b0316815250508260600151816001815181106129f2576129f26142fa565b60200260200101906001600160a01b031690816001600160a01b0316815250506000612a2082600030613000565b600b546060860151919250612a42916001600160a01b03908116911683612fae565b50505b600a5482516060840151608085015160a086015160c0870151604051630f8ee8bb60e11b81526001600160a01b03958616600482015293851660248501529184166044840152606483015215156084820152911690631f1dd1769060a401600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50505050612ae482610120015184613136565b81600001516001600160a01b03167f7fb1c74d1ea6aa1c9c585e17ce8274c8ff98745e85e7459b73f87d784494f58e8584602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518c604051610f269b9a999897969594939291909a8b526001600160a01b03998a1660208c015260408b019890985295881660608a015293909616608088015260a0870191909152151560c086015260e08501939093529115156101008401526101208301919091526101408201526101600190565b6007546001600160a01b03163314612be25760405162461bcd60e51b8152600401610283906143d8565b600a80546001600160a01b038881166001600160a01b03199283168117909355600b8054898316908416811790915560088054898416908516811790915560098054938916939094168317909355600c869055600d85905560408051948552602085019190915283019190915260608201526080810183905260a081018290527fcfb7ef8749fafc8da2af1ba3d025479ffc4e58f7dc420113e112512a3bda59639060c00160405180910390a1505050505050565b612c9f612f54565b336000908152600560209081526040808320848452825280832081516101008101835281546001600160a01b031681526001820180548451818702810187019095528085529194929385840193909290830182828015612d2857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d0a575b5050509183525050600282015460208201526003820154604082015260048201546060820152600582015460ff8082161515608084015261010090910416151560a082015260069091015460c09091015280519091506001600160a01b0316612da35760405162461bcd60e51b81526004016102839061427d565b336000908152600560209081526040808320858452909152812080546001600160a01b031916815590612dd96001830182613bd0565b50600060028201819055600382018190556004820181905560058201805461ffff191690556006909101819055600854602083015180516001600160a01b03909216929091612e2a57612e2a6142fa565b60200260200101516001600160a01b03161415612e6457612e5f61171882604001518360e0015161321890919063ffffffff16565b612e92565b612e843382604001518360200151600081518110610df957610df96142fa565b612e928160e0015133613136565b336001600160a01b03167fefd66d4f9c2f880c70aedeb5b26a44fb474cea07e5d6c533f2d27c303d5d94538383602001518460400151856060015186608001518760a001518860c001518960e001516040516117cd9897969594939291906147b2565b6007546001600160a01b03163314612f1f5760405162461bcd60e51b8152600401610283906143d8565b600c8190556040518181527fbde5eafdc37b81830d70124cddccaaa6d034e71dda3c8fc18a959ca76a7cbcfc90602001610f9a565b60026000541415612fa75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610283565b6002600055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f3a9084906136ef565b60008351600214156130535761304c84600081518110613022576130226142fa565b60200260200101518560018151811061303d5761303d6142fa565b602002602001015185856137c4565b905061312f565b8351600314156131175760006130a085600081518110613075576130756142fa565b602002602001015186600181518110613090576130906142fa565b60200260200101516000306137c4565b90506130cf600b60009054906101000a90046001600160a01b03168287600181518110610df957610df96142fa565b61310f856001815181106130e5576130e56142fa565b602002602001015186600281518110613100576131006142fa565b602002602001015186866137c4565b91505061312f565b60405162461bcd60e51b81526004016102839061441f565b9392505050565b600854604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561317c57600080fd5b505af1158015613190573d6000803e3d6000fd5b506131a8925050506001600160a01b03821683613997565b5050565b341561321657600860009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561320257600080fd5b505af1158015611f12573d6000803e3d6000fd5b565b600061312f8284614801565b6001600160a01b038816600081815260066020908152604091829020548251610100810184529384529083018a9052908201889052606082018790526080820186905284151560a083015283151560c083015260e082018390529061328a826001613218565b6001600160a01b038b8116600090815260066020908152604080832094909455600581528382208683528152929020835181546001600160a01b031916921691909117815582820151805184936132e8926001850192910190613bee565b506040828101516002830155606083015160038301556080830151600483015560a083015160058301805460c086015115156101000261ff00199315159390931661ffff199091161791909117905560e090920151600690910155516001600160a01b038b16907fdf06bb56ffc4029dc0b62b68bb5bbadea93a38b530cefc9b81afb742a6555d889061338a9085908d908d908d908d908d908d908d906147b2565b60405180910390a250505050505050505050565b600061312f8284614819565b600061312f8284614838565b33600090815260026020908152604091829020548251610140810184526001600160a01b038e811682528d8116938201939093529283018b90528982166060840152908816608083015260a0820187905285151560c083015260e08201859052831515610100830152610120820183905290613433826001613218565b6001600160a01b03808e166000818152600260208181526040808420969096556001808252868420898552825292869020875181549087166001600160a01b0319918216178255918801519381018054948716948316949094179093558686015191830191909155606086015160038301805491861691831691909117905560808601516004830180549190951691161790925560a0840151600583015560c084015160068301805491151560ff1992831617905560e085015160078401556101008501516008840180549115159190921617905561012084015160099092019190915590517fb27b9afe3043b93788c40cfc3cc73f5d928a2e40f3ba01820b246426de8fa1b9906135589085908f908f908f908f908f908f908f908f908f90614574565b60405180910390a2505050505050505050505050565b6001600160a01b03808916600081815260046020908152604091829020548251610120810184529384528b85169184019190915290820189905291871660608201526080810186905284151560a082015260c0810184905282151560e0820152346101008201526135e0826001613218565b6001600160a01b03808c166000818152600460208181526040808420969096556003808252868420898552825292869020875181549087166001600160a01b0319918216178255918801516001820180549188169184169190911790558787015160028201556060880151938101805494909616939091169290921790935560808501519281019290925560a084015160058301805491151560ff1992831617905560c0850151600684015560e08501516007840180549115159190921617905561010084015160089092019190915590517f48ee333d2a65cc45fdb83bc012920d89181c3377390cd239d2b63f2bef67a02d9061338a9085908d908d908d908d908d908d908d9034906146d6565b6000613744826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ab09092919063ffffffff16565b9050805160001480613765575080806020019051810190613765919061485a565b610f3a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610283565b60095460009081906001600160a01b038681169116141561385f57600b5460405163817bb85760e01b81526001600160a01b03888116600483015285811660248301529091169063817bb857906044015b6020604051808303816000875af1158015613834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138589190614406565b9050613932565b6009546001600160a01b03878116911614156138af57600b54604051630711e61960e41b81526001600160a01b03878116600483015285811660248301529091169063711e619090604401613815565b600b54604051634998b10960e11b81526001600160a01b03888116600483015287811660248301528581166044830152909116906393316212906064016020604051808303816000875af115801561390b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392f9190614406565b90505b8381101561398c5760405162461bcd60e51b815260206004820152602160248201527f4f72646572426f6f6b3a20696e73756666696369656e7420616d6f756e744f756044820152601d60fa1b6064820152608401610283565b90505b949350505050565b804710156139e75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610283565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613a34576040519150601f19603f3d011682016040523d82523d6000602084013e613a39565b606091505b5050905080610f3a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610283565b606061398f848460008585600080866001600160a01b03168587604051613ad791906148a3565b60006040518083038185875af1925050503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b5091509150613b2a87838387613b35565b979650505050505050565b60608315613ba1578251613b9a576001600160a01b0385163b613b9a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610283565b508161398f565b61398f8383815115613bb65781518083602001fd5b8060405162461bcd60e51b815260040161028391906148bf565b50805460008255906000526020600020908101906117e09190613c53565b828054828255906000526020600020908101928215613c43579160200282015b82811115613c4357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c0e565b50613c4f929150613c53565b5090565b5b80821115613c4f5760008155600101613c54565b6001600160a01b03811681146117e057600080fd5b600060208284031215613c8f57600080fd5b813561312f81613c68565b60008060408385031215613cad57600080fd5b8235613cb881613c68565b946020939093013593505050565b600080600060608486031215613cdb57600080fd5b8335613ce681613c68565b9250602084013591506040840135613cfd81613c68565b809150509250925092565b600060208284031215613d1a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613d6057613d60613d21565b604052919050565b600067ffffffffffffffff821115613d8257613d82613d21565b5060051b60200190565b600082601f830112613d9d57600080fd5b81356020613db2613dad83613d68565b613d37565b82815260059290921b84018101918181019086841115613dd157600080fd5b8286015b84811015613df5578035613de881613c68565b8352918301918301613dd5565b509695505050505050565b80151581146117e057600080fd5b8035613e1981613e00565b919050565b600080600080600080600080610100898b031215613e3b57600080fd5b883567ffffffffffffffff811115613e5257600080fd5b613e5e8b828c01613d8c565b9850506020890135965060408901359550606089013594506080890135613e8481613e00565b935060a0890135925060c0890135613e9b81613e00565b915060e0890135613eab81613e00565b809150509295985092959890939650565b600080600080600060a08688031215613ed457600080fd5b8535613edf81613e00565b9450602086013593506040860135613ef681613c68565b92506060860135613f0681613e00565b91506080860135613f1681613e00565b809150509295509295909350565b600082601f830112613f3557600080fd5b81356020613f45613dad83613d68565b82815260059290921b84018101918181019086841115613f6457600080fd5b8286015b84811015613df55780358352918301918301613f68565b600080600060608486031215613f9457600080fd5b833567ffffffffffffffff80821115613fac57600080fd5b613fb887838801613f24565b94506020860135915080821115613fce57600080fd5b613fda87838801613f24565b93506040860135915080821115613ff057600080fd5b50613ffd86828701613f24565b9150509250925092565b6000806000806080858703121561401d57600080fd5b843593506020850135925060408501359150606085013561403d81613e00565b939692955090935050565b600080600080600060a0868803121561406057600080fd5b853594506020860135935060408601359250606086013591506080860135613f1681613e00565b60008060008060008060008060008060006101608c8e0312156140a957600080fd5b8b3567ffffffffffffffff8111156140c057600080fd5b6140cc8e828f01613d8c565b9b505060208c0135995060408c01356140e481613c68565b985060608c0135975060808c0135965060a08c013561410281613c68565b955061411060c08d01613e0e565b945060e08c013593506141266101008d01613e0e565b92506101208c0135915061413d6101408d01613e0e565b90509295989b509295989b9093969950565b600080600080600080600060e0888a03121561416a57600080fd5b873561417581613c68565b965060208801359550604088013561418c81613c68565b94506060880135935060808801356141a381613e00565b925060a0880135915060c08801356141ba81613e00565b8091505092959891949750929550565b600080604083850312156141dd57600080fd5b823567ffffffffffffffff8111156141f457600080fd5b61420085828601613d8c565b95602094909401359450505050565b60008060008060008060c0878903121561422857600080fd5b863561423381613c68565b9550602087013561424381613c68565b9450604087013561425381613c68565b9350606087013561426381613c68565b9598949750929560808101359460a0909101359350915050565b6020808252601d908201527f4f72646572426f6f6b3a206e6f6e2d6578697374656e74206f72646572000000604082015260600190565b60208082526026908201527f4f72646572426f6f6b3a20696e76616c696420707269636520666f722065786560408201526531baba34b7b760d11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561433857614338614310565b500390565b600081518084526020808501945080840160005b838110156143765781516001600160a01b031687529582019590820190600101614351565b509495945050505050565b60006101208b835280602084015261439b8184018c61433d565b604084019a909a5250506060810196909652608086019490945260a0850192909252151560c0840152151560e08301526101009091015292915050565b60208082526014908201527327b93232b92137b7b59d103337b93134b23232b760611b604082015260600190565b60006020828403121561441857600080fd5b5051919050565b6020808252601f908201527f4f72646572426f6f6b3a20696e76616c6964205f706174682e6c656e67746800604082015260600190565b60208082526025908201527f4f72646572426f6f6b3a20696e73756666696369656e7420657865637574696f6040820152646e2066656560d81b606082015260800190565b60208082526025908201527f4f72646572426f6f6b3a206f6e6c79207765746820636f756c64206265207772604082015264185c1c195960da1b606082015260800190565b60208082526026908201527f4f72646572426f6f6b3a20696e636f72726563742076616c7565207472616e7360408201526519995c9c995960d21b606082015260800190565b6020808252602e908201527f4f72646572426f6f6b3a20696e636f727265637420657865637574696f6e206660408201526d1959481d1c985b9cd9995c9c995960921b606082015260800190565b998a526001600160a01b0398891660208b015260408a0197909752948716606089015292909516608087015260a086015292151560c085015260e08401929092529015156101008301526101208201526101400190565b60006000198214156145df576145df614310565b5060010190565b600181815b8085111561462157816000190482111561460757614607614310565b8085161561461457918102915b93841c93908002906145eb565b509250929050565b600082614638575060016124c7565b81614645575060006124c7565b816001811461465b576002811461466557614681565b60019150506124c7565b60ff84111561467657614676614310565b50506001821b6124c7565b5060208310610133831016604e8410600b84101617156146a4575081810a6124c7565b6146ae83836145e6565b80600019048211156146c2576146c2614310565b029392505050565b600061312f8383614629565b9889526001600160a01b0397881660208a015260408901969096529390951660608701526080860191909152151560a085015260c084019290925290151560e08301526101008201526101200190565b8881526101006020808301829052895491830182905260008a8152818120909261012085019290845b818110156147745783546001600160a01b03168552938201936001938401930161474f565b505050508091505087604083015286606083015285608083015261479c60a083018615159052565b92151560c082015260e001529695505050505050565b60006101008a83528060208401526147cc8184018b61433d565b604084019990995250506060810195909552608085019390935290151560a0840152151560c083015260e09091015292915050565b6000821982111561481457614814614310565b500190565b600081600019048311821515161561483357614833614310565b500290565b60008261485557634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561486c57600080fd5b815161312f81613e00565b60005b8381101561489257818101518382015260200161487a565b838111156119d85750506000910152565b600082516148b5818460208701614877565b9190910192915050565b60208152600082518060208401526148de816040850160208701614877565b601f01601f1916919091016040019291505056fea2646970667358221220d149ead1dbb45b180c4d4264b0f19662d6a955dc6ba8e9de2df8ae46f474d30664736f6c634300080c0033