0 txs
18.4k calls
constructor
No constructor.
functions
getAccountOrders
viewfunction getAccountOrders(address dataStore, address account, uint256 start, uint256 end) view returns (tuple[])
getAccountPositionInfoList
viewfunction getAccountPositionInfoList(address dataStore, address referralStorage, address account, address[] markets, tuple[] marketPrices, address uiFeeReceiver, uint256 start, uint256 end) view returns (tuple[])
getAccountPositions
viewfunction getAccountPositions(address dataStore, address account, uint256 start, uint256 end) view returns (tuple[])
getAdlState
viewfunction getAdlState(address dataStore, address market, bool isLong, tuple prices) view returns (uint256, bool, int256, uint256)
getDeposit
viewfunction getDeposit(address dataStore, bytes32 key) view returns (tuple)
getDepositAmountOut
viewfunction getDepositAmountOut(address dataStore, tuple market, tuple prices, uint256 longTokenAmount, uint256 shortTokenAmount, address uiFeeReceiver, uint8 swapPricingType, bool includeVirtualInventoryImpact) view returns (uint256)
getExecutionPrice
viewfunction getExecutionPrice(address dataStore, address marketKey, tuple prices, uint256 positionSizeInUsd, uint256 positionSizeInTokens, int256 sizeDeltaUsd, int256 pendingImpactAmount, bool isLong) view returns (tuple)
getMarket
viewfunction getMarket(address dataStore, address key) view returns (tuple)
getMarketBySalt
viewfunction getMarketBySalt(address dataStore, bytes32 salt) view returns (tuple)
getMarketInfo
viewfunction getMarketInfo(address dataStore, tuple prices, address marketKey) view returns (tuple)
getMarketInfoList
viewfunction getMarketInfoList(address dataStore, tuple[] marketPricesList, uint256 start, uint256 end) view returns (tuple[])
getMarkets
viewfunction getMarkets(address dataStore, uint256 start, uint256 end) view returns (tuple[])
getMarketTokenPrice
viewfunction getMarketTokenPrice(address dataStore, tuple market, tuple indexTokenPrice, tuple longTokenPrice, tuple shortTokenPrice, bytes32 pnlFactorType, bool maximize) view returns (int256, tuple)
getNetPnl
viewfunction getNetPnl(address dataStore, tuple market, tuple indexTokenPrice, bool maximize) view returns (int256)
getOpenInterestWithPnl
viewfunction getOpenInterestWithPnl(address dataStore, tuple market, tuple indexTokenPrice, bool isLong, bool maximize) view returns (int256)
getOrder
viewfunction getOrder(address dataStore, bytes32 key) view returns (tuple)
getPendingPositionImpactPoolDistributionAmount
viewfunction getPendingPositionImpactPoolDistributionAmount(address dataStore, address market) view returns (uint256, uint256)
getPnl
viewfunction getPnl(address dataStore, tuple market, tuple indexTokenPrice, bool isLong, bool maximize) view returns (int256)
getPnlToPoolFactor
viewfunction getPnlToPoolFactor(address dataStore, address marketAddress, tuple prices, bool isLong, bool maximize) view returns (int256)
getPosition
viewfunction getPosition(address dataStore, bytes32 key) view returns (tuple)
getPositionInfo
viewfunction getPositionInfo(address dataStore, address referralStorage, bytes32 positionKey, tuple prices, uint256 sizeDeltaUsd, address uiFeeReceiver, bool usePositionSizeAsSizeDeltaUsd) view returns (tuple)
getPositionInfoList
viewfunction getPositionInfoList(address dataStore, address referralStorage, bytes32[] positionKeys, tuple[] prices, address uiFeeReceiver) view returns (tuple[])
getPositionPnlUsd
viewfunction getPositionPnlUsd(address dataStore, tuple market, tuple prices, bytes32 positionKey, uint256 sizeDeltaUsd) view returns (int256, int256, uint256)
getShift
viewfunction getShift(address dataStore, bytes32 key) view returns (tuple)
getSwapAmountOut
viewfunction getSwapAmountOut(address dataStore, tuple market, tuple prices, address tokenIn, uint256 amountIn, address uiFeeReceiver) view returns (uint256, int256, tuple fees)
getSwapPriceImpact
viewfunction getSwapPriceImpact(address dataStore, address marketKey, address tokenIn, address tokenOut, uint256 amountIn, tuple tokenInPrice, tuple tokenOutPrice) view returns (int256, int256, int256)
getWithdrawal
viewfunction getWithdrawal(address dataStore, bytes32 key) view returns (tuple)
getWithdrawalAmountOut
viewfunction getWithdrawalAmountOut(address dataStore, tuple market, tuple prices, uint256 marketTokenAmount, address uiFeeReceiver, uint8 swapPricingType) view returns (uint256, uint256)
isPositionLiquidatable
viewfunction isPositionLiquidatable(address dataStore, address referralStorage, bytes32 positionKey, tuple market, tuple prices, bool shouldValidateMinCollateralUsd, bool forLiquidation) view returns (bool, string, tuple)
events
No events.
errors
No errors.
creation bytecode
0x6080604052348015600f57600080fd5b50615db38061001f6000396000f3fe608060405234801561001057600080fd5b506004361061015f5760003560e01c80630815bce114610164578063095ce6c51461018d5780630fa8f5161461023a5780631485d2971461025a57806324c029e01461027a5780632572d8f91461029b5780632b17b4fd146102c3578063409f37c7146102f657806342a6f8d314610368578063456110f91461038857806349651b6a146103aa5780635d5c6efe146103ca5780635deceb84146103f8578063689031a21461040b578063714af34b1461042b57806377cfb1621461044b578063847bb4691461046b57806393703f871461048b578063971de27d1461049e578063a0140938146104b1578063a4f0d550146104c4578063addac2e0146104d7578063b05e0ea0146104f7578063b4976dae14610517578063bc7b5bba1461052a578063bfbf451a1461054a578063ce3264bf1461055d578063ceeea3bf1461057d578063fd50649d1461059d575b600080fd5b610177610172366004612aee565b6105b0565b6040516101849190612ed7565b60405180910390f35b6101a061019b366004612f4e565b61064b565b60405161018492919060006101a08201905083825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e08301516101008301526101008301516101208301526101208301516101408301526101408301516101608301526101608301516101808301529392505050565b61024d610248366004612fcb565b610746565b6040516101849190612ff7565b61026d610268366004612fcb565b6107d2565b604051610184919061307d565b61028d6102883660046131d1565b610858565b604051908152602001610184565b6102ae6102a9366004613251565b610873565b60408051928352602083019190915201610184565b6102d66102d13660046132c8565b610906565b604080519485529215156020850152918301526060820152608001610184565b610309610304366004613324565b61099c565b604080519384526020808501939093528151848201529181015160608085019190915291810151608080850191909152918101516001600160a01b031660a0808501919091529181015160c0840152015160e082015261010001610184565b61037b61037636600461339f565b610a76565b60405161018491906135ba565b61039b610396366004613636565b610afb565b604051610184939291906136d8565b6103bd6103b8366004612fcb565b610c40565b6040516101849190613732565b6103dd6103d8366004613745565b610cc5565b60408051938452602084019290925290820152606001610184565b61028d6104063660046137cf565b610dcc565b61041e610419366004613867565b610e64565b60405161018491906138df565b61043e6104393660046138ed565b610f80565b6040516101849190613959565b61045e61045936600461339f565b611002565b6040516101849190613967565b61047e6104793660046139b6565b611087565b6040516101849190613ad8565b6102ae6104993660046138ed565b611116565b61028d6104ac366004613ae7565b61112f565b61028d6104bf3660046131d1565b6111bb565b61043e6104d2366004612fcb565b6111ca565b6104ea6104e5366004612fcb565b61120b565b6040516101849190613b4c565b61050a610505366004613c6f565b611291565b6040516101849190613d98565b6103dd610525366004613ddc565b61131e565b61053d610538366004613e38565b611434565b6040516101849190613e97565b61050a610558366004613edb565b6114b9565b61057061056b366004613fd1565b611540565b6040516101849190614006565b61059061058b366004612fcb565b6115d1565b6040516101849190614049565b61028d6105ab3660046140ec565b611657565b6105b8612260565b6040516306bc109960e31b81527312ac77003b3d11b0853d1fd12e5af22a9060ec4b906335e084c8906105fb908b908b908b908b908b908b908b90600401614177565b61084060405180830381865af4158015610619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190614719565b90505b979650505050505050565b60006106b16040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051637d494dc360e01b815273f62e9cfa1ffd446e3516dc2f19f2818911bf7d9690637d494dc3906106f4908c908c908c908c908c908c908c90600401614736565b6101a060405180830381865af4158015610712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107369190614798565b9150915097509795505050505050565b61074e6122b0565b60405163fdfc26f360e01b815273065799d0af51ef81686a641d4e5a58a0b8186e3e9063fdfc26f3906107879086908690600401614870565b6101c060405180830381865af41580156107a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c99190614889565b90505b92915050565b6107da61234d565b60405163fdfc26f360e01b8152732c4f39fe8f558d84811e875aaf0903ba86bebb1b9063fdfc26f3906108139086908690600401614870565b600060405180830381865af4158015610830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c991908101906149ce565b60006108678686868686611665565b90505b95945050505050565b6000807378ab7190972ddf75f54ccf468bb2178210a6719463b027d32d8989898989896040518763ffffffff1660e01b81526004016108b796959493929190614b77565b6040805180830381865af41580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190614bc8565b91509150965096945050505050565b600080600080731e6e449f4052db43edbda8b7b9c82a489a5a1550631d81085c898989896040518563ffffffff1660e01b81526004016109499493929190614bec565b608060405180830381865af4158015610966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098a9190614c1a565b929b919a509850909650945050505050565b6000806109e16040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b60405163dafa66bf60e01b81527360dfa6974a1c3a45918b6b4e6f365fcc2222df7e9063dafa66bf90610a22908c908c908c908c908c908c90600401614c59565b61010060405180830381865af4158015610a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a649190614cb1565b92509250925096509650969350505050565b604051635b4df72360e11b8152606090731e6e449f4052db43edbda8b7b9c82a489a5a15509063b69bee4690610ab6908890889088908890600401614d3a565b600060405180830381865af4158015610ad3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a9190810190614fcc565b60006060610b2360405180606001604052806000815260200160008152602001600081525090565b60405163fdfc26f360e01b815260009073065799d0af51ef81686a641d4e5a58a0b8186e3e9063fdfc26f390610b5f908e908d90600401614870565b6101c060405180830381865af4158015610b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba19190614889565b60405163536e6cbb60e11b815290915073f718ae0025504577b18f8773e56986b6e29c819f9063a6dcd97690610be7908e908e9086908e908e908e908e906004016150cc565b600060405180830381865af4158015610c04573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c2c919081019061512a565b935093509350509750975097945050505050565b610c4861240b565b6040516218cbb560eb1b8152731e6e449f4052db43edbda8b7b9c82a489a5a15509063c65da80090610c809086908690600401614870565b600060405180830381865af4158015610c9d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c991908101906151e5565b60008060008073d727120ac811e9136d4a5d5c6219aee37e27578563a8d8fff58c8c6040518363ffffffff1660e01b8152600401610d04929190615219565b608060405180830381865af4158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190615290565b6040516340f5d44f60e11b81529091507360dfa6974a1c3a45918b6b4e6f365fcc2222df7e906381eba89e90610d8b908e9085908e908e908e908e908e906004016152ac565b606060405180830381865af4158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190615304565b604051632bf0549960e11b815260009073698ef7eb7a46458e1f9b9181354955809bad5a6f906357e0a93290610e14908c908c908c908c908c908c908c908c90600401615332565b602060405180830381865af4158015610e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5591906153a1565b90505b98975050505050505050565b610e6c612490565b60405163a8d8fff560e01b815260009073d727120ac811e9136d4a5d5c6219aee37e2757859063a8d8fff590610ea8908d908d90600401615219565b608060405180830381865af4158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee99190615290565b60405163da1d77b960e01b81529091507360dfa6974a1c3a45918b6b4e6f365fcc2222df7e9063da1d77b990610f31908d9085908d908d908d908d908d908d906004016153ba565b60c060405180830381865af4158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f729190615416565b9a9950505050505050505050565b610f886124c8565b60405163a8d8fff560e01b815273d727120ac811e9136d4a5d5c6219aee37e2757859063a8d8fff590610fc19086908690600401615219565b608060405180830381865af4158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c99190615290565b60405163282ece5960e11b81526060907312ac77003b3d11b0853d1fd12e5af22a9060ec4b9063505d9cb290611042908890889088908890600401614d3a565b600060405180830381865af415801561105f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a9190810190615432565b61108f6124ef565b60405163619c4ddb60e01b8152731e6e449f4052db43edbda8b7b9c82a489a5a15509063619c4ddb906110ca908790879087906004016154d3565b6103a060405180830381865af41580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190615692565b90505b9392505050565b60008061112384846116f6565b915091505b9250929050565b60008073d727120ac811e9136d4a5d5c6219aee37e27578563a8d8fff588886040518363ffffffff1660e01b815260040161116b929190615219565b608060405180830381865af4158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac9190615290565b9050610640878287878761188b565b600061086786868686866118cf565b6111d26124c8565b6040516329bc01e160e11b815273d727120ac811e9136d4a5d5c6219aee37e2757859063537803c290610fc19086908690600401614870565b611213612560565b60405163fdfc26f360e01b8152737ea79eac0009f7888b6f8dcfffa1ea9aa8c30f7d9063fdfc26f39061124c9086908690600401614870565b600060405180830381865af4158015611269573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c991908101906156af565b604051637810908160e01b81526060907312ac77003b3d11b0853d1fd12e5af22a9060ec4b906378109081906112d9908c908c908c908c908c908c908c908c906004016157ff565b600060405180830381865af41580156112f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e5591908101906158a2565b60008060008073065799d0af51ef81686a641d4e5a58a0b8186e3e63fdfc26f38a886040518363ffffffff1660e01b815260040161135d929190614870565b6101c060405180830381865af415801561137b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139f9190614889565b60405163e22de79360e01b815290915073f718ae0025504577b18f8773e56986b6e29c819f9063e22de793906113e1908c908c908c9087908c90600401615939565b606060405180830381865af41580156113fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114229190615304565b93509350935050955095509592505050565b6040516340c774bb60e11b8152606090731e6e449f4052db43edbda8b7b9c82a489a5a15509063818ee97690611474908890889088908890600401615983565b600060405180830381865af4158015611491573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a91908101906159ba565b604051636aeb875560e01b81526060907312ac77003b3d11b0853d1fd12e5af22a9060ec4b90636aeb8755906114fb9089908990899089908990600401615a51565b600060405180830381865af4158015611518573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086791908101906158a2565b6040516326d0fa7f60e21b81526001600160a01b03841660048201526024810183905260448101829052606090731e6e449f4052db43edbda8b7b9c82a489a5a155090639b43e9fc90606401600060405180830381865af41580156115a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110c9190810190615aca565b6115d96125da565b60405163fdfc26f360e01b815273c7cc50ba99b7c07c09beefa1ccdb9259b342c66d9063fdfc26f3906116129086908690600401614870565b600060405180830381865af415801561162f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c99190810190615b5f565b600061086a858585856118fa565b60008061167b611676888887611929565b61197c565b9050600061168a8888876119ef565b9050811580611697575080155b156116a75760009250505061086a565b60006116b4878787611a36565b905060006116c56116768385615c9d565b90506000876116dd576116d88286615cb4565b6116e7565b6116e78583615cb4565b9b9a5050505050505050505050565b60008060006117058585611a6f565b90508060000361171a57600092509050611128565b6000856001600160a01b031663bd02d0f561173487611ae8565b6040518263ffffffff1660e01b815260040161175291815260200190565b602060405180830381865afa15801561176f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179391906153a1565b9050806000036117a95750600092509050611128565b6000866001600160a01b031663bd02d0f56117c388611b84565b6040518263ffffffff1660e01b81526004016117e191815260200190565b602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182291906153a1565b905080831161183a5760008394509450505050611128565b60006118468285615cdb565b905060006118548989611bc7565b905060006118628286611c67565b90508281111561186f5750815b8061187a8188615cdb565b975097505050505050509250929050565b60008061189c878787878715611c80565b9050806000036118b057600091505061086a565b60006118c3888888600001518888611665565b9050610e588183611d06565b6000806118dd878786611929565b905060006118ee8888888888611665565b9050610e588282611d45565b60008061190b868686600187611665565b9050600061191d878787600088611665565b90506106408183615cee565b60008061193e84604001518560600151611d5b565b9050600061195786866000015187604001518786611d8a565b9050600061197087876000015188606001518887611d8a565b90506106408183615d16565b60006001600160ff1b038211156119eb5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084015b60405180910390fd5b5090565b600080611a0484604001518560600151611d5b565b90506000611a1d86866000015187604001518786611e10565b9050600061197087876000015188606001518887611e10565b60008215611a575781611a4a578351611a50565b83602001515b905061110f565b81611a6657836020015161110c565b50509051919050565b6000826001600160a01b031663bd02d0f5611a8984611e2d565b6040518263ffffffff1660e01b8152600401611aa791815260200190565b602060405180830381865afa158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c991906153a1565b6000604051602001611b3a9060208082526026908201527f504f534954494f4e5f494d504143545f504f4f4c5f444953545249425554494f6040820152654e5f5241544560d01b606082015260800190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03841690820152606001604051602081830303815290604052805190602001209050919050565b6000604051602001611b3a906020808252601f908201527f4d494e5f504f534954494f4e5f494d504143545f504f4f4c5f414d4f554e5400604082015260600190565b600080836001600160a01b031663bd02d0f5611be285611e6e565b6040518263ffffffff1660e01b8152600401611c0091815260200190565b602060405180830381865afa158015611c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4191906153a1565b905080600003611c555760009150506107cc565b611c5f8142615cdb565b949350505050565b60006107c9838368327cb2734119d3b7a9601e1b611ebd565b60008083611c92578560600151611c98565b85604001515b90506000611ca7888884611eca565b905060008415611cd55785611cc457866040015160200151611cce565b8660200151602001515b9050611cef565b85611ce557604087015151611cec565b6020870151515b90505b611cf98183615c9d565b9998505050505050505050565b600080611d1b611d1585611f68565b84611f79565b905060008413611d3c57611d2e8161197c565b611d3790615d29565b611c5f565b611c5f8161197c565b600081611d518461197c565b6107c99190615cee565b6000816001600160a01b0316836001600160a01b031614611d7d576001611d80565b60025b60ff169392505050565b600081866001600160a01b031663bd02d0f5611da7888888611f87565b6040518263ffffffff1660e01b8152600401611dc591815260200190565b602060405180830381865afa158015611de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0691906153a1565b6108679190615d5b565b600081866001600160a01b031663bd02d0f5611da7888888612019565b6000604051602001611b3a906020808252601b908201527a1413d4d2551253d397d253541050d517d413d3d317d05353d55395602a1b604082015260600190565b6000604051602001611b3a9060208082526023908201527f504f534954494f4e5f494d504143545f504f4f4c5f444953545249425554454460408201526217d05560ea1b606082015260800190565b600061110c848484612056565b600080611edf84604001518560600151611d5b565b905080856001600160a01b031663bd02d0f5611eff876000015187612140565b6040518263ffffffff1660e01b8152600401611f1d91815260200190565b602060405180830381865afa158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e91906153a1565b61086a9190615d5b565b6000808212156119eb575060000390565b60006107c9838360006121c7565b6000604051602001611fba906020808252600d908201526c13d4115397d2539511549154d5609a1b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038087169183019190915284166060820152821515608082015260a0016040516020818303038152906040528051906020012090509392505050565b6000604051602001611fba906020808252601790820152764f50454e5f494e5445524553545f494e5f544f4b454e5360481b604082015260600190565b60008080600019858709858702925082811083820303915050806000036120905783828161208657612086615d45565b049250505061110f565b8084116120d75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016119e2565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000604051602001612171906020808252600b908201526a1413d3d317d05353d5539560aa1b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03808616918301919091528316606082015260800160405160208183030381529060405280519060200120905092915050565b6000836000036121d95750600061110f565b81156121f857611a508468327cb2734119d3b7a9601e1b85600161220f565b61110c8468327cb2734119d3b7a9601e1b85612056565b60008061221d868686612056565b90506001836002811115612233576122336133e5565b14801561225057506000848061224b5761224b615d45565b868809115b1561086a57610867600182615d16565b6040805160e08101909152600081526020810161227b6122b0565b8152602001612288612624565b8152602001612295612490565b81526020016000815260200160008152602001600081525090565b6040805160c081019091526000606082018181526080830182905260a083019190915281908152602001612330604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81526040805160208181019092526000815291015290565b905290565b604080516101a0810190915260006080820181815260a0830182905260c0830182905260e08301829052610100830182905261012083018290526101408301919091526060610160830181905261018083015281905b81526020016123e86040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152604080516020818101909252600081529101905b8152602001606081525090565b60408051610180810190915260006080820181815260a0830182905260c0830182905260e083018290526101008301829052610120830182905261014083019190915260606101608301528152602081016124646127f0565b8152604080516080810182526000808252602082810182905292820181905260608201529101906123fe565b6040518060c0016040528060008152602001600081526020016000151581526020016000815260200160008152602001600081525090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040518060e001604052806125026124c8565b8152602001600081526020016000815260200161251d61280b565b815260200161252a61282b565b815260200161255360405180606001604052806000815260200160008152602001600081525090565b8152600060209091015290565b6040805161012081019091526000606082018181526080830182905260a0830182905260c0830182905260e08301829052610100830191909152819081526020016123fe6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60408051610160810190915260006080820181815260a0830182905260c0830182905260e083018290526101008301919091526060610120830181905261014083015281906123a3565b60405180610220016040528061269b6040518061014001604052806000801916815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81526020016126c460405180606001604052806000815260200160008152602001600081525090565b81526020016127026040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81526020016127326040518060800160405280600081526020016000815260200160008152602001600081525090565b815260408051606081018252600080825260208281018290529282015291019081526020016127826040518060800160405280600081526020016000815260200160008152602001600081525090565b81526020016127a4604051806040016040528060008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516101808101909152806000815260200160006127a4565b604051806040016040528061281e612851565b8152602001612348612851565b6040518060a00160405280600015158152602001600081526020016000815260200161281e5b60408051608081018252600091810182815260608201929092529081908152602001612348604051806040016040528060008152602001600081525090565b6001600160a01b03811681146128a557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156128e0576128e06128a8565b60405290565b604051606081016001600160401b03811182821017156128e0576128e06128a8565b604051608081016001600160401b03811182821017156128e0576128e06128a8565b60405161014081016001600160401b03811182821017156128e0576128e06128a8565b60405160c081016001600160401b03811182821017156128e0576128e06128a8565b60405160e081016001600160401b03811182821017156128e0576128e06128a8565b60405161022081016001600160401b03811182821017156128e0576128e06128a8565b60405161018081016001600160401b03811182821017156128e0576128e06128a8565b60405161012081016001600160401b03811182821017156128e0576128e06128a8565b60405161010081016001600160401b03811182821017156128e0576128e06128a8565b604051601f8201601f191681016001600160401b0381118282101715612a4557612a456128a8565b604052919050565b600060408284031215612a5f57600080fd5b612a676128be565b823581526020928301359281019290925250919050565b600060c08284031215612a9057600080fd5b612a986128e6565b9050612aa48383612a4d565b8152612ab38360408401612a4d565b6020820152612ac58360808401612a4d565b604082015292915050565b8035612adb81612890565b919050565b80151581146128a557600080fd5b6000806000806000806000610180888a031215612b0a57600080fd5b8735612b1581612890565b96506020880135612b2581612890565b955060408801359450612b3b8960608a01612a7e565b93506101208801359250610140880135612b5481612890565b9150610160880135612b6581612ae0565b8091505092959891949750929550565b6001600160a01b03169052565b805160018060a01b03815116835260018060a01b03602082015116602084015260018060a01b03604082015116604084015250602081015160608301815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e0820152610100820151610100820152610120820151610120820152505060408101515115156101a08301525050565b805182526020810151612c4a6020840182612b75565b506040810151612c5d6040840182612b75565b50606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301525050565b8051825260208082015190830152604090810151910152565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b805182526020810151602083015260408101516040830152606081015160608301525050565b80518252602090810151910152565b8051825260208101516020830152604081015115156040830152606081015160608301526080810151608083015260a081015160a08301525050565b805182526020810151612d866020840182612b82565b506040810151612d9b6101e084018251612c34565b6020810151612dae610320850182612cac565b506040810151612dc2610380850182612cc5565b506060810151612dd6610440850182612cff565b50608081015180516001600160a01b03166104c085015260208101516104e08501526040015161050084015260a0810151612e15610520850182612cff565b5060c0810151612e296105a0850182612d25565b5060e08101516105e08401526101008101516106008401526101208101516106208401526101408101516106408401526101608101516106608401526101808101516106808401526101a08101516106a08401526101c08101516106c08401526101e08101516106e084015261020001516107008301526060810151612eb3610720840182612d34565b5060808101516107e083015260a081015161080083015260c0015161082090910152565b61084081016107cc8284612d70565b600060808284031215612ef857600080fd5b612f00612908565b90508135612f0d81612890565b81526020820135612f1d81612890565b60208201526040820135612f3081612890565b60408201526060820135612f4381612890565b606082015292915050565b60008060008060008060006101a0888a031215612f6a57600080fd5b8735612f7581612890565b9650612f848960208a01612ee6565b9550612f938960a08a01612a4d565b9450612fa28960e08a01612a4d565b9350612fb2896101208a01612a4d565b92506101608801359150610180880135612b6581612ae0565b60008060408385031215612fde57600080fd5b8235612fe981612890565b946020939093013593505050565b6101c081016107cc8284612b82565b600081518084526020840193506020830160005b828110156130415781516001600160a01b031686526020958601959091019060010161301a565b5093949350505050565b600081518084526020840193506020830160005b8281101561304157815186526020958601959091019060010161305f565b6020815260008251610140602084015261309c61016084018251612b75565b60208101516130af610180850182612b75565b5060408101516130c36101a0850182612b75565b5060608101516130d76101c0850182612b75565b5060808101516130eb6101e0850182612b75565b5060a08101516130ff610200850182612b75565b5060c0810151613113610220850182612b75565b5060e0810151610120610240850152613130610280850182613006565b9050610100820151915061015f19848203016102608501526131528183613006565b91505060208401516131a66040850182805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c08301525050565b5060408401515115156101208401526060840151601f198483030161014085015261086a828261304b565b600080600080600061012086880312156131ea57600080fd5b85356131f581612890565b94506132048760208801612ee6565b93506132138760a08801612a4d565b925060e086013561322381612ae0565b915061010086013561323481612ae0565b809150509295509295909350565b803560068110612adb57600080fd5b6000806000806000806101c0878903121561326b57600080fd5b863561327681612890565b95506132858860208901612ee6565b94506132948860a08901612a7e565b935061016087013592506101808701356132ad81612890565b91506132bc6101a08801613242565b90509295509295509295565b60008060008061012085870312156132df57600080fd5b84356132ea81612890565b935060208501356132fa81612890565b9250604085013561330a81612ae0565b91506133198660608701612a7e565b905092959194509250565b6000806000806000806101c0878903121561333e57600080fd5b863561334981612890565b95506133588860208901612ee6565b94506133678860a08901612a7e565b935061016087013561337881612890565b925061018087013591506101a087013561339181612890565b809150509295509295509295565b600080600080608085870312156133b557600080fd5b84356133c081612890565b935060208501356133d081612890565b93969395505050506040820135916060013590565b634e487b7160e01b600052602160045260246000fd5b6009811061340b5761340b6133e5565b9052565b6003811061340b5761340b6133e5565b61342a8282516133fb565b602081015161343c602084018261340f565b5060408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516101608301525050565b805161024080845281516001600160a01b03908116918501919091526020820151166102608401526040810151600091906134ec610280860182612b75565b5060608101516135006102a0860182612b75565b5060808101516135146102c0860182612b75565b5060a08101516135286102e0860182612b75565b5060c081015161353c610300860182612b75565b5060e00151610100610320850152613558610340850182613006565b9050602083015161356c602086018261341f565b50604083810151805115156101a0870152602081015115156101c08701529081015115156101e0860152606090810151151561020086015283015184820361022086015261086a828261304b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561362a57603f19878603018452815180518652602081015190506040602087015261361460408701826134ad565b95505060209384019391909101906001016135e2565b50929695505050505050565b60008060008060008060006101e0888a03121561365257600080fd5b873561365d81612890565b9650602088013561366d81612890565b9550604088013594506136838960608a01612ee6565b93506136928960e08a01612a7e565b92506101a08801356136a381612ae0565b91506101c0880135612b6581612ae0565b60005b838110156136cf5781810151838201526020016136b7565b50506000910152565b831515815260a06020820152600083518060a08401526136ff8160c08501602088016136b4565b60c0601f19601f830116840101915050825160408301526020830151606083015260408301516080830152949350505050565b6020815260006107c960208301846134ad565b6000806000806000806000610120888a03121561376157600080fd5b873561376c81612890565b9650602088013561377c81612890565b9550604088013561378c81612890565b9450606088013561379c81612890565b9350608088013592506137b28960a08a01612a4d565b91506137c18960e08a01612a4d565b905092959891949750929550565b600080600080600080600080610200898b0312156137ec57600080fd5b88356137f781612890565b97506138068a60208b01612ee6565b96506138158a60a08b01612a7e565b9550610160890135945061018089013593506101a089013561383681612890565b92506138456101c08a01613242565b91506101e089013561385681612ae0565b809150509295985092959890939650565b6000806000806000806000806101a0898b03121561388457600080fd5b883561388f81612890565b9750602089013561389f81612890565b96506138ae8a60408b01612a7e565b9550610100890135945061012089013593506101408901359250610160890135915061018089013561385681612ae0565b60c081016107cc8284612d34565b6000806040838503121561390057600080fd5b823561390b81612890565b9150602083013561391b81612890565b809150509250929050565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260609182015116910152565b608081016107cc8284613926565b602080825282518282018190526000918401906040840190835b818110156139ab57613994838551612b82565b602093909301926101c09290920191600101613981565b509095945050505050565b600080600061010084860312156139cc57600080fd5b83356139d781612890565b92506139e68560208601612a7e565b915060e08401356139f681612890565b809150509250925092565b613a0c828251612d25565b6020810151613a1e6040840182612d25565b505050565b613a2e828251613926565b60208101516080830152604081015160a08301526060810151613a5560c084018251613a01565b60200151613a67610140840182613a01565b506080810151805115156101c084015260208101516101e084015260408101516102008401526060810151613aa0610220850182613a01565b5060800151613ab36102a0840182613a01565b5060a0810151613ac7610320840182612cac565b5060c0015115156103809190910152565b6103a081016107cc8284613a23565b60008060008060006101408688031215613b0057600080fd5b8535613b0b81612890565b94506020860135613b1b81612890565b9350613b2a8760408801612a7e565b9250610100860135613b3b81612ae0565b915061012086013561323481612ae0565b6020808252825180516001600160a01b039081168484015281830151811660408086019190915282015181166060808601919091528201518116608080860191909152820151811660a080860191909152909101511660c0830152820151600090613bba60e0840182612cc5565b5060408301516101a080840152611c5f6101c084018261304b565b60006001600160401b03821115613bee57613bee6128a8565b5060051b60200190565b600082601f830112613c0957600080fd5b8135613c1c613c1782613bd5565b612a1d565b80828252602082019150602060c08402860101925085831115613c3e57600080fd5b602085015b83811015613c6557613c558782612a7e565b835260209092019160c001613c43565b5095945050505050565b600080600080600080600080610100898b031215613c8c57600080fd5b8835613c9781612890565b97506020890135613ca781612890565b96506040890135613cb781612890565b955060608901356001600160401b03811115613cd257600080fd5b89016000601f82018c13613ce557600080fd5b8135613cf3613c1782613bd5565b8082825260208201915060208360051b86010192508e831115613d1557600080fd5b6020850194505b82851015613d40578435613d2f81612890565b825260209485019490910190613d1c565b985050505060808a013590506001600160401b03811115613d6057600080fd5b613d6c8b828c01613bf8565b945050613d7b60a08a01612ad0565b979a969950949793969295929450505060c08201359160e0013590565b602080825282518282018190526000918401906040840190835b818110156139ab57613dc5838551612d70565b602093909301926108409290920191600101613db2565b60008060008060006101a08688031215613df557600080fd5b8535613e0081612890565b9450613e0f8760208801612ee6565b9350613e1e8760a08801612a7e565b949793965093946101608101359450610180013592915050565b60008060008060808587031215613e4e57600080fd5b8435613e5981612890565b935060208501356001600160401b03811115613e7457600080fd5b613e8087828801613bf8565b949794965050505060408301359260600135919050565b602080825282518282018190526000918401906040840190835b818110156139ab57613ec4838551613a23565b602093909301926103a09290920191600101613eb1565b600080600080600060a08688031215613ef357600080fd5b8535613efe81612890565b94506020860135613f0e81612890565b935060408601356001600160401b03811115613f2957600080fd5b8601601f81018813613f3a57600080fd5b8035613f48613c1782613bd5565b8082825260208201915060208360051b85010192508a831115613f6a57600080fd5b6020840193505b82841015613f8c578335825260209384019390910190613f71565b955050505060608601356001600160401b03811115613faa57600080fd5b613fb688828901613bf8565b925050613fc560808701612ad0565b90509295509295909350565b600080600060608486031215613fe657600080fd5b8335613ff181612890565b95602085013595506040909401359392505050565b602080825282518282018190526000918401906040840190835b818110156139ab57614033838551613926565b6020939093019260809290920191600101614020565b602080825282516101408383015280516001600160a01b0390811661016085015291810151821661018084015260408101519091166101a083015260608101516000919061409b6101c0850182612b75565b5060808101516140af6101e0850182612b75565b5060a081015160e06102008501526140cb610240850182613006565b905060c0820151915061015f19848203016102208501526131528183613006565b600080600080610100858703121561410357600080fd5b843561410e81612890565b935061411d8660208701612ee6565b925061412c8660a08701612a4d565b915060e085013561413c81612ae0565b939692955090935050565b614152828251612d25565b60208101516141646040840182612d25565b506040810151613a1e6080840182612d25565b6001600160a01b038881168252871660208201526040810186905261018081016141a46060830187614147565b6101208201949094526001600160a01b0392909216610140830152151561016090910152949350505050565b8051612adb81612890565b8051612adb81612ae0565b6000602082840312156141f857600080fd5b604051602081016001600160401b038111828210171561421a5761421a6128a8565b8060405250809150825161422d81612ae0565b905292915050565b60008183036101c081121561424957600080fd5b6142516128e6565b9150606081121561426157600080fd5b6142696128e6565b835161427481612890565b8152602084015161428481612890565b6020820152604084015161429781612890565b60408201528252610140605f19820112156142b157600080fd5b506142ba61292a565b606083810151825260808085015160208085019190915260a080870151604086015260c0808801519486019490945260e0808801519386019390935261010080880151918601919091526101208088015194860194909452610140870151928501929092526101608601519184019190915261018085015191830191909152820152612ac5836101a084016141e6565b6000610140828403121561435d57600080fd5b61436561292a565b825181529050614377602083016141d0565b6020820152614388604083016141d0565b6040820152606082810151908201526080808301519082015260a0808301519082015260c0808301519082015260e0808301519082015261010080830151908201526101209182015191810191909152919050565b6000606082840312156143ef57600080fd5b6143f76128e6565b82518152602080840151908201526040928301519281019290925250919050565b600060c0828403121561442a57600080fd5b61443261294d565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b60006080828403121561448357600080fd5b61448b612908565b8251815260208084015190820152604080840151908201526060928301519281019290925250919050565b6000606082840312156144c857600080fd5b6144d06128e6565b905081516144dd81612890565b81526020828101519082015260409182015191810191909152919050565b60006040828403121561450d57600080fd5b6145156128be565b825181526020928301519281019290925250919050565b600060c0828403121561453e57600080fd5b61454661294d565b8251815260208084015190820152604083015190915061456581612ae0565b6040820152606082810151908201526080808301519082015260a09182015191810191909152919050565b60008183036108408112156145a457600080fd5b6145ac61296f565b8351815291506145bf8460208501614235565b60208301526105406101df19820112156145d857600080fd5b506145e1612991565b6145ef846101e0850161434a565b81526145ff8461032085016143dd565b6020820152614612846103808501614418565b6040820152614625846104408501614471565b6060820152614638846104c085016144b6565b608082015261464b846105208501614471565b60a082015261465e846105a085016144fb565b60c08201526105e083015160e08201526106008301516101008201526106208301516101208201526106408301516101408201526106608301516101608201526106808301516101808201526106a08301516101a08201526106c08301516101c08201526106e08301516101e082015261070083015161020082015260408201526146ed83610720840161452c565b60608201526107e0820151608082015261080082015160a08201526108209091015160c0820152919050565b6000610840828403121561472c57600080fd5b6107c98383614590565b6001600160a01b03881681526101a081016147546020830189613926565b61476160a0830188612d25565b61476e60e0830187612d25565b61477c610120830186612d25565b8361016083015282151561018083015298975050505050505050565b6000808284036101a08112156147ad57600080fd5b83519250610180601f19820112156147c457600080fd5b506147cd6129b4565b602084810151825260408086015191830191909152606080860151918301919091526080808601519183019190915260a0808601519183019190915260c0808601519183019190915260e08086015191830191909152610100808601519183019190915261012080860151918301919091526101408086015191830191909152610160808601519183019190915261018090940151938101939093525092909150565b6001600160a01b03929092168252602082015260400190565b60006101c0828403121561489c57600080fd5b6107c98383614235565b600082601f8301126148b757600080fd5b81516148c5613c1782613bd5565b8082825260208201915060208360051b8601019250858311156148e757600080fd5b602085015b83811015613c655780516148ff81612890565b8352602092830192016148ec565b600060e0828403121561491f57600080fd5b61492761296f565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0928301519281019290925250919050565b600082601f83011261498157600080fd5b815161498f613c1782613bd5565b8082825260208201915060208360051b8601019250858311156149b157600080fd5b602085015b83811015613c655780518352602092830192016149b6565b6000602082840312156149e057600080fd5b81516001600160401b038111156149f657600080fd5b82016101408185031215614a0957600080fd5b614a11612908565b81516001600160401b03811115614a2757600080fd5b82016101208187031215614a3a57600080fd5b614a426129d7565b614a4b826141d0565b8152614a59602083016141d0565b6020820152614a6a604083016141d0565b6040820152614a7b606083016141d0565b6060820152614a8c608083016141d0565b6080820152614a9d60a083016141d0565b60a0820152614aae60c083016141d0565b60c082015260e08201516001600160401b03811115614acc57600080fd5b614ad8888285016148a6565b60e0830152506101008201516001600160401b03811115614af857600080fd5b614b04888285016148a6565b61010083015250825250614b1b856020840161490d565b6020820152614b2e8561010084016141e6565b60408201526101208201516001600160401b03811115614b4d57600080fd5b614b5986828501614970565b606083015250949350505050565b6006811061340b5761340b6133e5565b6001600160a01b03871681526101c08101614b956020830188613926565b614ba260a0830187614147565b61016082018590526001600160a01b0384166101808301526106406101a0830184614b67565b60008060408385031215614bdb57600080fd5b505080516020909101519092909150565b6001600160a01b038581168252841660208201528215156040820152610120810161086a6060830184614147565b60008060008060808587031215614c3057600080fd5b84516020860151909450614c4381612ae0565b6040860151606090960151949790965092505050565b6001600160a01b03871681526101c08101614c776020830188613926565b614c8460a0830187614147565b6001600160a01b0394851661016083015261018082019390935292166101a0909201919091529392505050565b6000806000838503610100811215614cc857600080fd5b84516020860151909450925060c0603f1982011215614ce657600080fd5b50614cef61294d565b60408581015182526060860151602083015260808601519082015260a0850151614d1881612890565b606082015260c0850151608082015260e09094015160a0850152509093909250565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b805160098110612adb57600080fd5b805160038110612adb57600080fd5b60006101808284031215614d9457600080fd5b614d9c6129b4565b9050614da782614d63565b8152614db560208301614d72565b602082015260408281015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101008083015190820152610120808301519082015261014080830151908201526101609182015191810191909152919050565b600060808284031215614e3c57600080fd5b614e44612908565b90508151614e5181612ae0565b81526020820151614e6181612ae0565b60208201526040820151614e7481612ae0565b60408201526060820151612f4381612ae0565b60006102408284031215614e9a57600080fd5b614ea2612908565b82519091506001600160401b03811115614ebb57600080fd5b82016101008185031215614ece57600080fd5b614ed66129fa565b614edf826141d0565b8152614eed602083016141d0565b6020820152614efe604083016141d0565b6040820152614f0f606083016141d0565b6060820152614f20608083016141d0565b6080820152614f3160a083016141d0565b60a0820152614f4260c083016141d0565b60c082015260e08201516001600160401b03811115614f6057600080fd5b614f6c868285016148a6565b60e083015250825250614f828360208401614d81565b6020820152614f95836101a08401614e2a565b60408201526102208201516001600160401b03811115614fb457600080fd5b614fc084828501614970565b60608301525092915050565b600060208284031215614fde57600080fd5b81516001600160401b03811115614ff457600080fd5b8201601f8101841361500557600080fd5b8051615013613c1782613bd5565b8082825260208201915060208360051b85010192508683111561503557600080fd5b602084015b838110156150c15780516001600160401b0381111561505857600080fd5b85016040818a03601f1901121561506e57600080fd5b6150766128be565b6020820151815260408201516001600160401b0381111561509657600080fd5b6150a58b602083860101614e87565b602083015250808552505060208301925060208101905061503a565b509695505050505050565b6001600160a01b0388811682528716602082015261038081016150f26040830188612b82565b615100610200830187613926565b61510e610280830186614147565b9215156103408201529015156103609091015295945050505050565b600080600060a0848603121561513f57600080fd5b835161514a81612ae0565b60208501519093506001600160401b0381111561516657600080fd5b8401601f8101861361517757600080fd5b80516001600160401b03811115615190576151906128a8565b6151a3601f8201601f1916602001612a1d565b8181528760208385010111156151b857600080fd5b6151c98260208301602086016136b4565b8094505050506151dc85604086016143dd565b90509250925092565b6000602082840312156151f757600080fd5b81516001600160401b0381111561520d57600080fd5b611c5f84828501614e87565b6001600160a01b0392831681529116602082015260400190565b60006080828403121561524557600080fd5b61524d612908565b9050815161525a81612890565b8152602082015161526a81612890565b6020820152604082015161527d81612890565b60408201526060820151612f4381612890565b6000608082840312156152a257600080fd5b6107c98383615233565b6001600160a01b038816815261018081016152ca6020830189613926565b6001600160a01b0387811660a0840152861660c083015260e082018590526152f6610100830185612d25565b610e58610140830184612d25565b60008060006060848603121561531957600080fd5b5050815160208301516040909301519094929350919050565b6001600160a01b03891681526102008101615350602083018a613926565b61535d60a0830189614147565b610160820187905261018082018690526001600160a01b0385166101a083015261538b6101c0830185614b67565b8215156101e08301529998505050505050505050565b6000602082840312156153b357600080fd5b5051919050565b6001600160a01b038916815261020081016153d8602083018a613926565b6153e560a0830189614147565b6101608201969096526101808101949094526101a08401929092526101c083015215156101e0909101529392505050565b600060c0828403121561542857600080fd5b6107c9838361452c565b60006020828403121561544457600080fd5b81516001600160401b0381111561545a57600080fd5b8201601f8101841361546b57600080fd5b8051615479613c1782613bd5565b8082825260208201915060206101c0840285010192508683111561549c57600080fd5b6020840193505b828410156154c9576154b58785614235565b82526020820191506101c0840193506154a3565b9695505050505050565b6001600160a01b038416815261010081016154f16020830185614147565b6001600160a01b039290921660e0919091015292915050565b60006080828403121561551c57600080fd5b6155246128be565b905061553083836144fb565b815261553f83604084016144fb565b602082015292915050565b6000610160828403121561555d57600080fd5b60405160a081016001600160401b038111828210171561557f5761557f6128a8565b8060405250809150825161559281612ae0565b815260208381015190820152604080840151908201526155b5846060850161550a565b60608201526155c78460e0850161550a565b60808201525092915050565b60008183036103a08112156155e757600080fd5b6155ef61296f565b91506155fb8484615233565b82526080830151602083015260a0830151604083015261010060bf198201121561562457600080fd5b5061562d6128be565b61563a8460c0850161550a565b815261564a84610140850161550a565b60208201526060820152615662836101c0840161554a565b60808201526156758361032084016143dd565b60a082015261568761038083016141db565b60c082015292915050565b60006103a082840312156156a557600080fd5b6107c983836155d3565b6000602082840312156156c157600080fd5b81516001600160401b038111156156d757600080fd5b82018084036101a08112156156eb57600080fd5b6156f36128e6565b60c082121561570157600080fd5b61570961294d565b9150825161571681612890565b8252602083015161572681612890565b6020830152604083015161573981612890565b6040830152606083015161574c81612890565b6060830152608083015161575f81612890565b608083015260a083015161577281612890565b60a08301528181526157878660c08501614418565b602082015261018083015191506001600160401b038211156157a857600080fd5b6157b486838501614970565b604082015295945050505050565b600081518084526020840193506020830160005b82811015613041576157e9868351614147565b60c09590950194602091909101906001016157d6565b6001600160a01b0389811682528881166020808401919091529088166040830152610100606083018190528751908301819052600091880190610120840190835b818110156158675783516001600160a01b0316835260209384019390920191600101615840565b5050838103608085015261587b81896157c2565b9250505061588c60a0830186612b75565b60c082019390935260e001529695505050505050565b6000602082840312156158b457600080fd5b81516001600160401b038111156158ca57600080fd5b8201601f810184136158db57600080fd5b80516158e9613c1782613bd5565b808282526020820191506020610840840285010192508683111561590c57600080fd5b6020840193505b828410156154c9576159258785614590565b825260208201915061084084019350615913565b6001600160a01b038616815261034081016159576020830187613926565b61596460a0830186614147565b615972610160830185612b82565b826103208301529695505050505050565b6001600160a01b03851681526080602082018190526000906159a7908301866157c2565b6040830194909452506060015292915050565b6000602082840312156159cc57600080fd5b81516001600160401b038111156159e257600080fd5b8201601f810184136159f357600080fd5b8051615a01613c1782613bd5565b8082825260208201915060206103a08402850101925086831115615a2457600080fd5b6020840193505b828410156154c957615a3d87856155d3565b82526020820191506103a084019350615a2b565b6001600160a01b038681168252851660208083019190915260a060408301819052855190830181905260009186019060c0840190835b81811015615aa5578351835260209384019390920191600101615a87565b50508381036060850152615ab981876157c2565b925050506154c96080830184612b75565b600060208284031215615adc57600080fd5b81516001600160401b03811115615af257600080fd5b8201601f81018413615b0357600080fd5b8051615b11613c1782613bd5565b8082825260208201915060208360071b850101925086831115615b3357600080fd5b6020840193505b828410156154c957615b4c8785615233565b8252602082019150608084019350615b3a565b600060208284031215615b7157600080fd5b81516001600160401b03811115615b8757600080fd5b82016101408185031215615b9a57600080fd5b615ba2612908565b81516001600160401b03811115615bb857600080fd5b820160e08187031215615bca57600080fd5b615bd261296f565b615bdb826141d0565b8152615be9602083016141d0565b6020820152615bfa604083016141d0565b6040820152615c0b606083016141d0565b6060820152615c1c608083016141d0565b608082015260a08201516001600160401b03811115615c3a57600080fd5b615c46888285016148a6565b60a08301525060c08201516001600160401b03811115615c6557600080fd5b615c71888285016148a6565b60c083015250825250614b1b856020840161490d565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107cc576107cc615c87565b8181036000831280158383131683831282161715615cd457615cd4615c87565b5092915050565b818103818111156107cc576107cc615c87565b8082018281126000831280158216821582161715615d0e57615d0e615c87565b505092915050565b808201808211156107cc576107cc615c87565b6000600160ff1b8201615d3e57615d3e615c87565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082615d7857634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220d16b6d3e167d43aaf1d4d099fe24de02af8af3ff5c1e870bffd5d9a312fbec4164736f6c634300081d0033