0 txs
0 calls
constructor
No constructor.
functions
calcAmountsForLiquidity
viewfunction calcAmountsForLiquidity(uint256 price, uint256 decimals0, int24 tickLower, int24 tickUpper, uint128 liquidity) view returns (uint256 amount0, uint256 amount1)
calcCollateralPostTrade
viewfunction calcCollateralPostTrade(uint256 delta, uint256 tokensHeld0, uint256 tokensHeld1, uint256 reserve0, uint256 reserve1, uint256 fee1, uint256 fee2) view returns (uint256 collateral)
calcDeltasForMaxLP
viewfunction calcDeltasForMaxLP(uint256 tokensHeld0, uint256 tokensHeld1, uint256 reserve0, uint256 reserve1, uint256 fee1, uint256 fee2, uint8 decimals0) view returns (int256[] deltas)
calcDeltasForRatio
viewfunction calcDeltasForRatio(uint256 ratio0, uint256 ratio1, uint256 tokensHeld0, uint256 tokensHeld1, uint256 reserve0, uint256 reserve1, uint256 fee1, uint256 fee2) view returns (int256[] deltas)
calcDeltasForWithdrawal
viewfunction calcDeltasForWithdrawal(uint256 amount, uint256 ratio0, uint256 ratio1, uint256 tokensHeld0, uint256 tokensHeld1, uint256 reserve0, uint256 reserve1, uint256 fee1, uint256 fee2) view returns (int256[] deltas)
calcDeltasToClose
purefunction calcDeltasToClose(uint256 liquidity, uint256 lastCFMMInvariant, uint256 collateral, uint256 reserve) pure returns (int256 delta)
calcDeltasToCloseSetRatio
viewfunction calcDeltasToCloseSetRatio(uint256 liquidity, uint256 ratio0, uint256 ratio1, uint256 tokensHeld0, uint256 tokensHeld1, uint256 reserve0, uint256 reserve1, uint8 decimals0) view returns (int256[] deltas)
calcExpectedDepositWithdrawalParams
viewfunction calcExpectedDepositWithdrawalParams(address vault, uint256 price, bool useRangeAMMPrice) view returns (tuple expParams)
calcExpectedRebalanceParams
viewfunction calcExpectedRebalanceParams(address vault, uint256 priceA, uint256 priceB, uint256 price, uint256 hedgePrice, uint256 hedgeSize, bool useRangeAMMPrice) view returns (tuple params)
calcGSPnL
viewfunction calcGSPnL(address vault, uint128[] cfmmReserves, bool isAssetToken0) view returns (uint256 pnl, bool isNeg)
calcLoanProfitShare
viewfunction calcLoanProfitShare(address gsPool, uint256 gsTokenId) view returns (uint256 loanShare, uint8 amountsType, uint128[] amounts)
calcNetDeposit
viewfunction calcNetDeposit(tuple params) view returns (tuple data)
calcProfitShare
viewfunction calcProfitShare(uint256 liquidity, uint256 tokensHeld0, uint256 tokensHeld1, uint256 reserve0, uint256 reserve1) view returns (uint256 share, uint8 amountsType, uint256 loanSharePct)
calcSqrtPriceX96AtTick
viewfunction calcSqrtPriceX96AtTick(int24 tick) view returns (uint160)
calcTickAtPrice
viewfunction calcTickAtPrice(uint256 price, uint256 decimals) view returns (int24)
calcTickAtSqrtPriceX96
viewfunction calcTickAtSqrtPriceX96(uint160 sqrtPriceX96) view returns (int24)
calcTickRange
viewfunction calcTickRange(uint256 price, uint256 decimals, uint256 range, bool isLog) view returns (int24 tickLower, int24 tickUpper, uint256 sqrtPriceAX96, uint256 sqrtPriceBX96)
calculateLambda
viewfunction calculateLambda(uint256 sqrtPriceAX96, uint256 sqrtPriceBX96, uint256 ratio0, uint256 ratio1, uint256 decimals0, uint256 decimals1) view returns (uint256 lambda)
calculateLPLiquidity
viewfunction calculateLPLiquidity(address vault, uint256 amount0, uint256 amount1, uint256 price) view returns (uint256)
calculateLPLiquidityChange
viewfunction calculateLPLiquidityChange(tuple data, uint160 sqrtPriceX96, uint160 sqrtPriceAX96, uint160 sqrtPriceBX96, uint256 decimals0, uint256 decimals1, bool isAssetToken0) view returns (uint256 lpLiquidity, bool isDeposit)
calculateNAV
viewfunction calculateNAV(address vault, uint256 price, bool useRangeAMMPrice, bool includeFees) view returns (uint256 nav, uint256 amount0, uint256 amount1, uint256 gsPnl, bool isGSPnlNeg)
calcVaultLoanProfitShare
viewfunction calcVaultLoanProfitShare(address gsPool, uint256 gsTokenId, uint256 nav, bool isAssetToken0) view returns (uint256 loanShare, uint8 amountsType, uint128[] tokensHeld)
decodePrice
viewfunction decodePrice(uint256 sqrtPriceX96, uint256 decimals) view returns (uint256 price)
decodeSqrtPrice
viewfunction decodeSqrtPrice(uint256 sqrtPriceX96, uint256 decimals) view returns (uint256 sqrtPrice)
encodePrice
viewfunction encodePrice(uint256 price, uint256 decimals) view returns (uint256 sqrtPriceX96)
getAmountsForLiquidity
viewfunction getAmountsForLiquidity(uint160 sqrtPriceX96, uint160 sqrtPriceAX96, uint160 sqrtPriceBX96, uint128 liquidity) view returns (uint256 amount0, uint256 amount1)
getLastFeesEarned
viewfunction getLastFeesEarned(address vault, bool includePaidFees) view returns (uint256 feesInToken0, uint256 feesInToken1, uint256 totalFees0, uint256 totalFees1)
getLiquidityForAmounts
viewfunction getLiquidityForAmounts(uint160 sqrtPriceX96, uint160 sqrtPriceAX96, uint160 sqrtPriceBX96, uint256 amount0, uint256 amount1) view returns (uint128 liquidity)
getTotalFeesEarned
viewfunction getTotalFeesEarned(address vault) view returns (uint256 totalFees0, uint256 totalFees1)
getTotalTokens
viewfunction getTotalTokens(address vault, bool includeFees) view returns (uint256 amount0, uint256 amount1)
events
No events.
errors
CastOverflow
error CastOverflow()
ComplexNumber
error ComplexNumber()
InvalidHedgeSizeCalc
error InvalidHedgeSizeCalc()
InvalidLambda
error InvalidLambda()
InvalidPrice
error InvalidPrice()
MaxRatio
error MaxRatio()
MaxTick
error MaxTick()
SoldTokenGTTokensHeld1
error SoldTokenGTTokensHeld1()
ZeroDecimals
error ZeroDecimals()
ZeroFees
error ZeroFees()
ZeroRatio
error ZeroRatio()
ZeroReserves
error ZeroReserves()
ZeroSqrtPriceX96
error ZeroSqrtPriceX96()
ZeroTokensHeld
error ZeroTokensHeld()
creation bytecode
0x608060405234801561001057600080fd5b50615d8c80620000216000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063809facb411610104578063c2a6ca4b116100a2578063ef5a6ab811610071578063ef5a6ab81461055d578063f82732be14610570578063f969557d14610583578063ff2804231461059657600080fd5b8063c2a6ca4b146104f6578063c72e160b14610529578063ca57bcb61461053c578063e328c0ec1461054f57600080fd5b8063a4a299c2116100de578063a4a299c214610413578063b0591ada14610426578063b23b53d61461044e578063b4c2c923146104b957600080fd5b8063809facb4146103af5780638ceded74146103c757806394abd4fa146103e357600080fd5b80634fde60691161017c5780636ff55f851161014b5780636ff55f85146103475780637273cc42146103675780637d26b3f11461037a5780637f1a570a1461038d57600080fd5b80634fde6069146102a457806358ff3de5146102ce5780636098fd4a146102e1578063663d60861461030c57600080fd5b80632f5fd348116101b85780632f5fd348146102405780632f9ee0ae1461025357806333aa1d4b146102405780634888233f1461027957600080fd5b806325e3e2aa146101df5780632c29bda01461020c5780632d98bd7f1461022d575b600080fd5b6101f26101ed366004614455565b6105a9565b604080519283526020830191909152015b60405180910390f35b61021f61021a3660046144b4565b6105ee565b604051908152602001610203565b61021f61023b3660046144f6565b610603565b61021f61024e3660046144b4565b61064f565b6102666102613660046144b4565b61065b565b60405160029190910b8152602001610203565b61028c610287366004614531565b61067b565b6040516001600160a01b039091168152602001610203565b6102c16102b2366004614555565b60609998505050505050505050565b60405161020391906145b4565b6101f26102dc366004614611565b610686565b6102f46102ef36600461464a565b6106ac565b6040516001600160801b039091168152602001610203565b61031f61031a3660046146a5565b6106c7565b60408051600295860b81529390940b6020840152928201526060810191909152608001610203565b61035a6103553660046147e1565b6107b6565b6040516102039190614872565b6102666103753660046148ee565b610b0f565b61021f61038836600461490b565b610b1a565b6103a061039b36600461494e565b610b35565b6040516102039392919061498d565b61021f6103bd3660046149ee565b6000949350505050565b6102c16103d5366004614a20565b606098975050505050505050565b6103f66103f1366004614a75565b610c8d565b6040805193845260ff909216602084015290820152606001610203565b61021f610421366004614ab0565b610d72565b610439610434366004614b1f565b610e86565b60408051928352901515602083015201610203565b61046161045c366004614be2565b610f75565b6040516102039190600060e0820190508251825260208301516020830152604083015160408301526060830151606083015260808301511515608083015260a083015160a083015260c083015160c083015292915050565b6104cc6104c7366004614c24565b611443565b6040805195865260208601949094529284019190915260608301521515608082015260a001610203565b610509610504366004614611565b611494565b604080519485526020850193909352918301526060820152608001610203565b6101f2610537366004614c6c565b611779565b6101f261054a3660046148ee565b611796565b6102c16103d5366004614cd7565b61046161056b366004614d41565b611814565b6103a061057e366004614daa565b611a61565b610439610591366004614dd6565b611ba3565b6102c16105a4366004614ed1565b611c13565b60008060006105b786611f23565b905060006105c486611f23565b90506105d0898961224f565b98506105de8983838861227b565b909a909950975050505050505050565b60006105fa838361224f565b90505b92915050565b60008061060f86612316565b905061062083826101c0015161224f565b9250610645858585846101800151856101a00151866101c00151876101e001516123ed565b9695505050505050565b60006105fa8383612441565b600080610668848461224f565b90506106738161245a565b949350505050565b60006105fd82611f23565b600080600061069485612316565b90506106a08185612639565b90969095509350505050565b60006106bb86868686866127ad565b90505b95945050505050565b6000806000806000806000871561072f576106ea89670de0b6b3a7640000614f37565b9250826106ff8c670de0b6b3a7640000614f4a565b6107099190614f77565b9150670de0b6b3a764000061071e848d614f4a565b6107289190614f77565b905061077a565b610755670de0b6b3a76400006107458b8e614f4a565b61074f9190614f77565b8c612865565b925061076b610764848d614f99565b600161287b565b9150610777838c614f37565b90505b610784828b61224f565b9450610790818b61224f565b935061079b8561245a565b96506107a68461245a565b9550505050945094509450949050565b6107be6142c3565b600080600084600001516001600160a01b031663ef78d4fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108299190614fac565b9050846080015185600001516001600160a01b0316637614f02a836040518263ffffffff1660e01b815260040161086291815260200190565b602060405180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190614fac565b6108ad9190614f37565b9250600085602001516001600160a01b031663ef78d4fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109179190614fac565b6020870151604051633b0a781560e11b8152600481018390529192506001600160a01b031690637614f02a90602401602060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190614fac565b92505050600084606001511180156109a3575060008460400151115b156109f257604084015160608501516109bc9083614f4a565b6109c69190614f77565b6040808501919091526060850151908501516109e29084614f4a565b6109ec9190614f77565b60608401525b8260400151821115610a7a576040830151610a0d9083614f99565b80845260c085015160e0860151606087015160a0880151610a31949190600161288a565b60ff1661012086015261010085015260c0840152606084015115610a7557606084015160408501518451610a659190614f4a565b610a6f9190614f77565b60808401525b610b08565b8260600151811115610b08576060830151610a959082614f99565b6020840152604084015115610b0857836040015184606001518460200151610abd9190614f4a565b610ac79190614f77565b8360a0018181525050610af38460c001518560e001518560a0015187606001518860a00151600061288a565b60ff1661012086015261010085015260e08401525b5050919050565b60006105fd8261245a565b6000610b2a878787878787612951565b979650505050505050565b6000806060851580610b45575084155b15610b78576040805160028082526060820183526000928392919060208301908036833701905050925092509250610c83565b6060610b848888612a7c565b805194985092965094509092506000918391508290610ba557610ba5614fc5565b60200260200101516001600160801b0316118015610be65750600081600181518110610bd357610bd3614fc5565b60200260200101516001600160801b0316115b15610c78578415610c275780600181518110610c0457610c04614fc5565b60200260200101516001600160801b031684610c209190614f77565b9350610c59565b80600081518110610c3a57610c3a614fc5565b60200260200101516001600160801b031684610c569190614f77565b93505b85610c6785620f4240614f4a565b610c719190614f77565b9350610c81565b60009350600092505b505b9450945094915050565b60008080871580610c9c575084155b80610ca5575083155b15610cb857506000915081905080610d67565b6000610cc48688614f4a565b610cce868a614f4a565b610cd89190614f37565b9050600089610cef610cea888a614f4a565b612c83565b610cfa906002614f4a565b610d049190614f4a565b905080600003610d205760008060009450945094505050610d67565b80821115610d3657600193508082039450610d48565b80821015610d48576002935081810394505b81610d588664e8d4a51000614f4a565b610d629190614f77565b925050505b955095509592505050565b600086158015610d80575085155b15610d9e576040516360e61ea560e11b815260040160405180910390fd5b841580610da9575083155b15610dc757604051636e5e779f60e11b815260040160405180910390fd5b821580610dd2575081155b15610df057604051634716db3560e01b815260040160405180910390fd5b600083610dfd8a88614f99565b610e079190614f4a565b83610e128b88614f4a565b610e1c9190614f4a565b610e269190614f77565b610e31906001614f37565b905086811115610e5457604051632a6b377760e21b815260040160405180910390fd5b610e5e8188614f99565b9650610e6a8989614f37565b9750610e79610cea888a614f4a565b9998505050505050505050565b6000806000856001600160a01b031663f30878c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eed9190614fe6565b604051631ac7951960e31b81526001600160a01b038881166004830152919091169063d63ca8c89060240161010060405180830381865afa158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a91906150a8565b9050610f67818686612d18565b92509250505b935093915050565b610fb76040518060e001604052806000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b6000846001600160a01b031663fef840ff6040518163ffffffff1660e01b815260040161054060405180830381865afa158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101c9190615117565b905060006040518061010001604052808361022001516001600160a01b031681526020018361024001516001600160a01b031681526020018361052001518152602001600081526020016000815260200160001515815260200160006001600160a01b03168152602001600081525090506110956142c3565b60006110a088612e99565b90506110b087826040015161224f565b815161016001526110c381876001612f70565b50505050606084015260208082018051516001600160a01b031660c086015251015160e08401526080810151151560a08401526110ff836107b6565b606084015160a087015280519092501561113c5760016080860152815160c0860152815160a08601516111329190614f37565b60a086015261117e565b60208201511561117e576000608086015260a0808301805160c08801529086015190516111699190612865565b8560a001516111789190614f99565b60a08601525b600061118c82886000612f70565b5050505090506000806111ad8660c001518760e00151858960a00151610b35565b509150915060008660600151116111c8578760a001516111e7565b8560600151838960a001516111dd9190614f4a565b6111e79190614f77565b60a089015260ff81166001036112365760a088015161121d90620f424061120e8583614f4a565b6112189190614f77565b612865565b8860a0015161122c9190614f99565b60a0890152611274565b8060ff1660020361127457620f4240828960a001516112559190614f4a565b61125f9190614f77565b8860a0015161126e9190614f37565b60a08901525b50505060c0850151156112e3576112bb8560c001518460a00151836000015161016001518460000151610180015185600001516101a0015186604001518760600151613168565b60c086015260808501516112e3578460c001518260a001516112dd9190614f99565b60c08601525b80608001511561132b576113248560a001516000836000015161016001518460000151610180015185600001516101a00151866040015187606001516123ed565b8552611365565b61136260008660a00151836000015161016001518460000151610180015185600001516101a00151866040015187606001516123ed565b85525b508360800151156113c2578051606080860191909152820151600003611394576060840151604085015261140e565b816060015183610520015185606001516113ae9190614f4a565b6113b89190614f77565b604085015261140e565b8261052001516000036113db576000606085015261140e565b602081015160408501819052610520840151606084015190916113fe9190614f4a565b6114089190614f77565b60608501525b6101008301518451670de0b6b3a76400009161142991614f4a565b6114339190614f77565b6020850152509195945050505050565b6000806000806000806114558a612e99565b905088156114735761146b89826040015161224f565b815161016001525b61147e818989612f70565b939e929d50909b50995090975095505050505050565b60008060008060006114a587612316565b905080602001516000036114c757600080600080945094509450945050611770565b6114f581604001518260e00151836101400151846101000151856101200151866060015187608001516131d9565b60a08301519194509250611512906001600160801b031684614f37565b92508060c001516001600160801b03168261152d9190614f37565b9150856116cf576000876001600160a01b03166397ee11446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190614fe6565b90506000886001600160a01b0316635e62520b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fe9190614fe6565b61022084015160405163111ced7f60e01b81526001600160a01b0380841660048301529293506001600160401b03909116916116ad91670de0b6b3a76400009186169063111ced7f90602401602060405180830381865afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b9190614fac565b6116959084614f4a565b61169f9190614f77565b670de0b6b3a7640000612865565b90506116c681856102400151866102600151898961325a565b90965094505050505b60006116e5826101600151836101c00151612441565b905060008082116116f7576000611718565b81836101e00151846101c0015161170e9190614f4a565b6117189190614f77565b905084836101e00151828661172d9190614f4a565b6117379190614f77565b6117419190614f37565b965083836101c0015183876117569190614f4a565b6117609190614f77565b61176a9190614f37565b95505050505b92959194509250565b6000806117888686868661227b565b915091505b94509492505050565b60008060006117a484612316565b90506117d481604001518260e00151836101400151846101000151856101200151866060015187608001516131d9565b60a083015191945092506117f1906001600160801b031684614f37565b92508060c001516001600160801b03168261180c9190614f37565b915050915091565b6118566040518060e001604052806000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b600061186189612e99565b90506118c46040518061016001604052806000815260200160008152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60e0810187905260408201516118db90889061224f565b825161016001819052608080840151151590830152604083015160a0830152606083015160c0830152965061191282856001612f70565b15156060860152604080860191909152602085019190915290835260a0850191909152820151611943908a9061224f565b985061195388836040015161224f565b610100820188905261012082018a9052610140820181905260808301519098501561199b576119948360a001516000898c8c876040015188606001516123ed565b83526119ba565b6119b760008460a00151898c8c876040015188606001516123ed565b83525b6119c8818460000151613325565b60c084015260808201516119ff5781604001518160e001518460c001516119ef9190614f4a565b6119f99190614f77565b60c08401525b84600003611a2457611a21898984604001518986604001518760600151612951565b94505b611a2d85613400565b8251670de0b6b3a764000090611a44908790614f4a565b611a4e9190614f77565b6020840152509098975050505050505050565b600080606083600003611a9c576040805160028082526060820183526000928392919060208301908036833701905050925092509250611b9c565b6000611aa88686612a7c565b508051939750919550909350915064e8d4a510009082908490600090611ad057611ad0614fc5565b60200260200101516001600160801b0316611aeb9190614f4a565b611af59190614f77565b82600081518110611b0857611b08614fc5565b60200260200101906001600160801b031690816001600160801b03168152505064e8d4a510008183600181518110611b4257611b42614fc5565b60200260200101516001600160801b0316611b5d9190614f4a565b611b679190614f77565b82600181518110611b7a57611b7a614fc5565b60200260200101906001600160801b031690816001600160801b031681525050505b9250925092565b60008060008060008b60c001511192508215611bc5578a60c001519150611be9565b60a08b015115611bdb578a60e001519150611be9565b600080935093505050611c07565b84611bf357506000905b611c0282828c8c8c8c8c6123ed565b935050505b97509795505050505050565b606087158015611c21575086155b15611c3f576040516360e61ea560e11b815260040160405180910390fd5b851580611c4a575084155b15611c6857604051636e5e779f60e11b815260040160405180910390fd5b831580611c73575082155b15611c9157604051634716db3560e01b815260040160405180910390fd5b8160ff16600003611cb557604051632bfdde1160e21b815260040160405180910390fd5b600083611cc28988614f37565b611ccc9087614f4a565b611cd69190614f77565b9050600084611ce5878a614f4a565b611cef9190614f77565b611cfa8a6002614f4a565b611d049190614f4a565b905084611d118782614f37565b611d1b9089614f4a565b611d259190614f77565b611d2f9089614f4a565b611d399082614f37565b905084611d468782614f99565b611d509089614f4a565b611d5a9190614f77565b611d64908b614f4a565b611d6e9082614f37565b9050611d7b84600a6154c2565b611d859082614f77565b905060008080611d958b8d614f4a565b91506000611da38b8f614f4a565b9050808311611dbd576001611db88483614f99565b611dc9565b6000611dc98285614f99565b9094509250611dd988600a6154c2565b611de39084614f77565b9250611e0e83611df38c8f614f4a565b8b611dff8c600a6154c2565b611e099190614f4a565b61343d565b9093509150508015611e2e57611e2785858484876134bc565b9050611e3d565b611e3a8585848661356f565b90505b6040805160028082526060820183529091602083019080368337019050509550611e85611e6a8286614f37565b611e7589600a6154c2565b611e80886002614f4a565b613620565b86600081518110611e9857611e98614fc5565b60200260200101818152505080841115611edd57611eb9611e6a8286614f99565b86600181518110611ecc57611ecc614fc5565b602002602001018181525050611f13565b611eea611e6a8583614f99565b611ef3906154d1565b86600181518110611f0657611f06614fc5565b6020026020010181815250505b5050505050979650505050505050565b60008060008360020b12611f3a578260020b611f47565b8260020b611f47906154d1565b9050611f56620d89e7196154ed565b62ffffff16811115611f7b5760405163d63f4fb360e01b815260040160405180910390fd5b600081600116600003611f9257600160801b611fa4565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611fce576ffff97272373d413259a46990580e213a0260801c5b6004821615611fed576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561200c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561202b576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561204a576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612069576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612088576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156120a8576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156120c8576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156120e8576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612108576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612128576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612148576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612168576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612188576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156121a9576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156121c9576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156121e8576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612205576b048a170391f7dc42444e8fa20260801c5b60008460020b131561222657806000198161222257612222614f61565b0490505b64010000000081061561223a57600161223d565b60005b60ff16602082901c0192505050919050565b600061225a82612c83565b61226384612c83565b61227190600160601b614f4a565b6105fa9190614f77565b600080836001600160a01b0316856001600160a01b0316111561229c579293925b846001600160a01b0316866001600160a01b0316116122c7576122c085858561367f565b915061178d565b836001600160a01b0316866001600160a01b03161015612300576122ec86858561367f565b91506122f98587856136f2565b905061178d565b61230b8585856136f2565b905094509492505050565b61231e614319565b816001600160a01b031663f30878c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561235c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123809190614fe6565b6040516303f2899360e51b81526001600160a01b0384811660048301529190911690637e5132609060240161028060405180830381865afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd9190615654565b6000871580156123fb575086155b1561240857506000610b2a565b6124178888888888888861373c565b50919950975061242c90508686868b8b6127ad565b6001600160801b031698975050505050505050565b60008061244e84846137b6565b90506106738180614f4a565b60006401000276a3826001600160a01b03161080612495575073fffd8963efd1fc6a506488495d951d5263988d26826001600160a01b031610155b156124b35760405163595b504b60e01b815260040160405180910390fd5b640100000000600160c01b03602083901b168060006001600160801b03604060075b80156124fd57828511811b94851c94939093179291811c9160019190911c90600019016124d5565b50600184119290921791608083106125245761251a607f84614f99565b85901c9350612535565b61252f83607f614f99565b85901b93505b60006040612544608086615671565b901b9050603f5b603281111561257757948002607f81901c60ff9190911c90811c9590811b91909117906000190161254b565b50938002607f81901c9460cd9190911c6604000000000000161760006125a782693627a301d71055774c85615698565b9050600060806125c76f028f6481ab7f045a5af012a19d003aaa84615671565b901d9050600060806125e9846fdb2df09e81959a81455e260799a0632f6156c8565b901d90508060020b8260020b14612628578a6001600160a01b031661260d82611f23565b6001600160a01b03161115612622578161262a565b8061262a565b815b9b9a5050505050505050505050565b6000808360200151600003612653575060009050806127a6565b612672846101600151856101800151866101a001518760e0015161227b565b909250905082156127a6576000806126ae86604001518760e001518861014001518961010001518a61012001518b606001518c608001516131d9565b915091508560a001516001600160801b0316826126cb9190614f37565b91508560c001516001600160801b0316816126e69190614f37565b9050612704866102200151876102400151886102600151858561325a565b90925090506127138285614f37565b935061271f8184614f37565b925085600001516001600160a01b031663d54a8d186040518163ffffffff1660e01b81526004016040805180830381865afa158015612762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278691906156e8565b90925090506127958285614f37565b93506127a18184614f37565b925050505b9250929050565b6000836001600160a01b0316856001600160a01b031611156127cd579293925b846001600160a01b0316866001600160a01b0316116127f8576127f18585856137d0565b90506106be565b836001600160a01b0316866001600160a01b0316101561285a57600061281f8786866137d0565b9050600061282e87898661383a565b9050806001600160801b0316826001600160801b03161061284f5780612851565b815b925050506106be565b6106bb85858461383a565b600081831061287457816105fa565b5090919050565b600081831161287457816105fa565b60008080871580612899575085155b156128ac57508591506000905080612945565b6000806128bb8b8b8a8a610b35565b50915091508060ff16600103612900576128dd89620f424061120e8583614f4a565b915085156128f6576128ef828a614f99565b985061293c565b6128ef828a614f37565b8060ff1660020361293c5761291d89620f424061120e8583614f4a565b9150851561292f576128ef828a614f37565b612939828a614f99565b98505b88945090925090505b96509650969350505050565b60008061295d83612c83565b90508061296a89866137b6565b6129749190614f4a565b97508061298188866137b6565b61298b9190614f4a565b965082612998888a614f4a565b6129a29190614f77565b905060006129b3610cea8584614f4a565b90506000876129c28789614f4a565b6129cc9190614f77565b90508982036000866129de8685614f37565b6129e89084614f4a565b6129f29190614f77565b905082851115612a06578285039150612a0c565b84830391505b600087612a198685614f4a565b612a239190614f77565b9050811580612a30575080155b15612a4e576040516338daf26560e01b815260040160405180910390fd5b80612a6183670de0b6b3a7640000614f4a565b612a6b9190614f77565b9d9c50505050505050505050505050565b600080600060608085600003612ade576040805160028082526060820183526000928392839290916020830190803683375050604080516002808252606082018352909250906020830190803683370190505094509450945094509450612c79565b604051631b2d298360e11b8152600481018790526000906001600160a01b0389169063365a530690602401600060405180830381865afa158015612b26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b4e9190810190615959565b90508061012001519250876001600160a01b0316636f56f4d36040518163ffffffff1660e01b8152600401600060405180830381865afa158015612b96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bbe9190810190615bcc565b9150612c708160c001516001600160801b0316826101200151600081518110612be957612be9614fc5565b60200260200101516001600160801b0316836101200151600181518110612c1257612c12614fc5565b60200260200101516001600160801b031685600081518110612c3657612c36614fc5565b60200260200101516001600160801b031686600181518110612c5a57612c5a614fc5565b60200260200101516001600160801b0316610c8d565b91975095509350505b9295509295909350565b600081600003612c9557506000919050565b506001600160881b03811160071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b6000808460400151600003612d3257506000905080610f6d565b83516002141580612d66575083600081518110612d5157612d51614fc5565b60200260200101516001600160801b03166000145b80612d94575083600181518110612d7f57612d7f614fc5565b60200260200101516001600160801b03166000145b15612db15760405162bfc92160e01b815260040160405180910390fd5b8351600003612e275784600001516001600160a01b0316636f56f4d36040518163ffffffff1660e01b8152600401600060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e249190810190615bcc565b93505b6106a085606001516001600160801b031686608001516001600160801b031686600081518110612e5957612e59614fc5565b60200260200101516001600160801b031687600181518110612e7d57612e7d614fc5565b60200260200101516001600160801b0316896040015188613870565b612ea16143bd565b816001600160a01b031663f30878c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612edf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f039190614fe6565b604051631d6e43ab60e11b81526001600160a01b0384811660048301529190911690633adc8756906024016103e060405180830381865afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd9190615c00565b600080600080600087600001516101600151600003612fa25760405163b3e8bf4960e01b815260040160405180910390fd5b8751612fae9087612639565b6040805160008152602081019091529195509350871561306f57604080516002808252606082018352909160208301908036833701905050905088604001518160008151811061300057613000614fc5565b60200260200101906001600160801b031690816001600160801b031681525050613037896000015161016001518a60400151612441565b8160018151811061304a5761304a614fc5565b60200260200101906001600160801b031690816001600160801b0316815250506130e6565b60008960200151600001519050806001600160a01b0316636f56f4d36040518163ffffffff1660e01b8152600401600060405180830381865afa1580156130ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130e29190810190615bcc565b9150505b6130f98960200151828b60800151612d18565b809350819450505061315a858585858560008151811061311b5761311b614fc5565b60200260200101516001600160801b03168660018151811061313f5761313f614fc5565b60200260200101516001600160801b03168f60800151613906565b955050939792965093509350565b60008060008861317a5760008a61317e565b8960005b9150915061319182828a8a8a8a8a61398a565b9092509050886131b8576131b38a611218836131ae600384614f77565b61287b565b6131cb565b6131cb8a611218846131ae600384614f77565b9a9950505050505050505050565b6000806000806131eb8b8a8a8a6139f7565b9092509050600160801b6131ff8784614f99565b613212906001600160801b038d16614f4a565b61321c9190614f77565b9350600160801b61322d8683614f99565b613240906001600160801b038d16614f4a565b61324a9190614f77565b9250505097509795505050505050565b6000806001600160a01b03851661327057600095505b61ffff8616156132b55761328b848761ffff16612710613c18565b6132959085614f99565b93506132a8838761ffff16612710613c18565b6132b29084614f99565b92505b6001600160401b03871615613315576132e084886001600160401b0316670de0b6b3a7640000613c18565b6132ea9085614f99565b935061330883886001600160401b0316670de0b6b3a7640000613c18565b6133129084614f99565b92505b50829050815b9550959350505050565b60008060006133458561010001518661012001518761014001518761227b565b915091508460800151156133a75761337985600001518660200151876040015188606001518960e001518a60a00151613c38565b6020870181905281875260e087015160c088015161339d9392918691869190613cc0565b90925090506133f6565b6133cd85602001518660000151876040015188606001518960c001518a60e00151613c38565b6020870181905281875260c087015160e08801516133f093918591879190613cc0565b90925090505b6106be828261287b565b662386f26fc1000081108061341c5750670de0b6b3a764000081115b1561343a576040516322af142760e11b815260040160405180910390fd5b50565b6000808260000361348b5760405162461bcd60e51b815260206004820152601360248201527226aaa62224ab2fad22a927afa224ab24a9a7a960691b60448201526064015b60405180910390fd5b6000806000198688098688029250828110838203039150506134ae828287613d12565b909890975095505050505050565b60008060006134cb8788613dff565b915091506000806134dd88888c613e1e565b915091506134ed82826004613e1e565b9092509050851561351a5761350484848484613eaa565b90945092506135138484613f0b565b9450613562565b6135268484848461402b565b156135445760405163a3e1dd1560e01b815260040160405180910390fd5b6135508484848461404a565b909450925061355f8484613f0b565b94505b5050505095945050505050565b600080600061357e8687613dff565b9150915060008061358f8988613dff565b9150915061359f82826004613e1e565b909250905085156135cc576135b684848484613eaa565b90945092506135c58484613f0b565b9450613614565b6135d88484848461402b565b156135f65760405163a3e1dd1560e01b815260040160405180910390fd5b6136028484848461404a565b90945092506136118484613f0b565b94505b50505050949350505050565b600080600061363086868661343d565b91509150806000146136765760405162461bcd60e51b815260206004820152600f60248201526e4d554c4449565f4f564552464c4f5760881b6044820152606401613482565b50949350505050565b6000826001600160a01b0316846001600160a01b0316111561369f579192915b6001600160a01b0384166136e86fffffffffffffffffffffffffffffffff60601b606085901b166136d08787615c88565b6001600160a01b0316866001600160a01b0316613620565b6106739190614f77565b6000826001600160a01b0316846001600160a01b03161115613712579192915b6106736001600160801b0383166137298686615c88565b6001600160a01b0316600160601b613620565b60008080808a15801561374d575089155b15613763575060009250829150819050806137a8565b6000806137738b8b8b8b8b6140b2565b91509150600061378c8c6001600160a01b03168a612441565b905061379c8e8e8585858e61412b565b96509650965096505050505b975097509750979350505050565b6000600160601b6137c683612c83565b6122719085614f4a565b6000826001600160a01b0316846001600160a01b031611156137f0579192915b6000613813856001600160a01b0316856001600160a01b0316600160601b613620565b90506106be61383584836138278989615c88565b6001600160a01b0316613620565b61416c565b6000826001600160a01b0316846001600160a01b0316111561385a579192915b61067361383583600160601b6138278888615c88565b6000808061387e868a614f4a565b613888888a614f4a565b6138929190614f37565b905060006138a3610cea888a614f4a565b6138ae876002614f4a565b6138b89190614f4a565b9050818111925082156138cf5781810393506138d5565b80820393505b84156138ec576138e58785614f77565b93506138f9565b6138f68885614f77565b93505b5050965096945050505050565b6000811561393457826139198589614f4a565b6139239190614f77565b61392d9089614f37565b9050613956565b8361393f848a614f4a565b6139499190614f77565b6139539088614f37565b90505b8415613974578581111561396c57859003610b2a565b506000610b2a565b61397e8682614f37565b98975050505050505050565b60008088158015613999575087155b156139a957506000905080611c07565b6000806139b989898989896140b2565b9150915060006139d28a6001600160a01b031688612441565b90506139e28c8c8585858c61412b565b909f909e509c50505050505050505050505050565b60405163f30dba9360e01b8152600283900b60048201526000908190819081906001600160a01b0389169063f30dba939060240161010060405180830381865afa158015613a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a6d9190615ca8565b505060405163f30dba9360e01b815260028c900b600482015293975091955060009450849350506001600160a01b038c169163f30dba93915060240161010060405180830381865afa158015613ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aeb9190615ca8565b5050505093509350505060008a6001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b599190614fac565b905060008b6001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbf9190614fac565b90508960020b8b60020b1215613bde5783860397508285039650613c09565b8860020b8b60020b12613bfa5785840397508483039650613c09565b83868303039750828582030396505b50505050505094509492505050565b600061067382613c288587614f4a565b613c329190614f77565b85612865565b6000808415613ca75787861115613c96576000613c558988614f99565b905083613c628683614f4a565b613c6c9190614f77565b905087811115613c7f5760009750613c8c565b613c898189614f99565b97505b6000985050613cb4565b613ca08689614f99565b9750613cb4565b613cb18689614f37565b97505b50959694955050505050565b60008085881115613cd857613cd58689614f99565b95505b84871115613d0457613cea8588614f99565b945083613cf78487614f4a565b613d019190614f77565b94505b509396929550919350505050565b60008082600003613d585760405162461bcd60e51b815260206004820152601060248201526f4449564953494f4e5f42595f5a45524f60801b6044820152606401613482565b83600003613d7557613d6a8386614f77565b600091509150610f6d565b82600103613d87575083905082610f6d565b6000838103848104600101919085900690805b8715613deb576000198489098489028781019788108183108284030397880101969093509150600019848a099050838902925082811083820303915050888201985081891060008201019750613d9a565b505050509190930483019392841001919050565b6000806000198385098385029250828110838203039150509250929050565b60008080600019848709868502935083811084820303600019868809868802918201945081811090829003039084101791505060018110613ea15760405162461bcd60e51b815260206004820152601760248201527f4d554c5449504c49434154494f4e5f4f564552464c4f570000000000000000006044820152606401613482565b50935093915050565b8184018184018582108101908086119082101760018110613f015760405162461bcd60e51b81526020600482015260116024820152704144444954494f4e5f4f564552464c4f5760781b6044820152606401613482565b5094509492505050565b600081600003613f2557613f1e83612c83565b90506105fd565b6002600160fe1b6080600160801b85100293841b6040600160c01b82100290811b6020600160e01b82100290811b6010600160f01b82100290811b6008600160f81b82100290811b6004600160fc1b82100290811b958610969096029390970191909101019490940191909101830184811b946101008290031c9190931b17916000613fb084612c83565b600181901b8180028603608081811c600081900384810690910192821b8a831c17848106939093018481049185900493859004939093010180821c9390920680821c848110941483800291831b6001600160801b038c161791909110169290921715159290911b010360029092049190911c91505092915050565b6000818410806106be575081841480156106be57505050909110919050565b6000806140598686868661419b565b61409d5760405162461bcd60e51b81526020600482015260156024820152745355425452414354494f4e5f554e444552464c4f5760581b6044820152606401613482565b50508184039491909310929091039190910390565b600080856001600160a01b0316876001600160a01b031610156140da5750829050600061331b565b846001600160a01b0316876001600160a01b031611156140ff5750600090508161331b565b600061410e610cea8587614f4a565b905061411c8888888461227b565b90999098509650505050505050565b60008060008061413f8a8a8a8a8a8a6141bb565b9094509250838a111561415257838a0391505b8289111561415f57508188035b9650965096509692505050565b806001600160801b038116811461419657604051631cb1a8e360e31b815260040160405180910390fd5b919050565b6000818411806106be575081841480156106be5750505090911015919050565b600080806141c9868a614f4a565b905060006141d7888a614f4a565b90508082111561424d576141eb8183614f99565b915086856141f9888b614f4a565b6142039190614f77565b61420d9190614f37565b90506142198183614f77565b9150614225828b614f99565b9950846142328784614f4a565b61423c9190614f77565b614246908a614f37565b98506142b5565b6142578282614f99565b91508685614265888b614f4a565b61426f9190614f77565b6142799190614f37565b90506142858183614f77565b9150614291828b614f37565b99508461429e8784614f4a565b6142a89190614f77565b6142b2908a614f99565b98505b509798969750505050505050565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040805161028081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101829052610240810182905261026081019190915290565b6040518060a001604052806143d0614319565b8152604080516101008101825260008082526020828101829052928201819052606082018190526080820181905260a0820181905260c0820181905260e0820152910190815260200160008152602001600081526020016000151581525090565b8060020b811461343a57600080fd5b6001600160801b038116811461343a57600080fd5b600080600080600060a0868803121561446d57600080fd5b8535945060208601359350604086013561448681614431565b9250606086013561449681614431565b915060808601356144a681614440565b809150509295509295909350565b600080604083850312156144c757600080fd5b50508035926020909101359150565b6001600160a01b038116811461343a57600080fd5b8035614196816144d6565b6000806000806080858703121561450c57600080fd5b8435614517816144d6565b966020860135965060408601359560600135945092505050565b60006020828403121561454357600080fd5b813561454e81614431565b9392505050565b60008060008060008060008060006101208a8c03121561457457600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6020808252825182820181905260009190848201906040850190845b818110156145ec578351835292840192918401916001016145d0565b50909695505050505050565b801515811461343a57600080fd5b8035614196816145f8565b6000806040838503121561462457600080fd5b823561462f816144d6565b9150602083013561463f816145f8565b809150509250929050565b600080600080600060a0868803121561466257600080fd5b853561466d816144d6565b9450602086013561467d816144d6565b9350604086013561468d816144d6565b94979396509394606081013594506080013592915050565b600080600080608085870312156146bb57600080fd5b84359350602085013592506040850135915060608501356146db816145f8565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b038111828210171561471f5761471f6146e6565b60405290565b60405161014081016001600160401b038111828210171561471f5761471f6146e6565b60405161054081016001600160401b038111828210171561471f5761471f6146e6565b60405161028081016001600160401b038111828210171561471f5761471f6146e6565b6040516103e081016001600160401b038111828210171561471f5761471f6146e6565b604051601f8201601f191681016001600160401b03811182821017156147d9576147d96146e6565b604052919050565b600061010082840312156147f457600080fd5b6147fc6146fc565b8235614807816144d6565b81526020830135614817816144d6565b8060208301525060408301356040820152606083013560608201526080830135608082015261484860a08401614606565b60a082015261485960c084016144eb565b60c082015260e083013560e08201528091505092915050565b600061014082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401516148e68285018260ff169052565b505092915050565b60006020828403121561490057600080fd5b813561454e816144d6565b60008060008060008060c0878903121561492457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806000806080858703121561496457600080fd5b843561496f816144d6565b9350602085013592506040850135915060608501356146db816145f8565b600060608201858352602060ff86168185015260606040850152818551808452608086019150828701935060005b818110156149e05784516001600160801b0316835293830193918301916001016149bb565b509098975050505050505050565b60008060008060808587031215614a0457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b031215614a3d57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080600080600060a08688031215614a8d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600080600080600060e0888a031215614acb57600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60006001600160401b03821115614b1557614b156146e6565b5060051b60200190565b600080600060608486031215614b3457600080fd5b8335614b3f816144d6565b92506020848101356001600160401b03811115614b5b57600080fd5b8501601f81018713614b6c57600080fd5b8035614b7f614b7a82614afc565b6147b1565b81815260059190911b82018301908381019089831115614b9e57600080fd5b928401925b82841015614bc5578335614bb681614440565b82529284019290840190614ba3565b8096505050505050614bd960408501614606565b90509250925092565b600080600060608486031215614bf757600080fd5b8335614c02816144d6565b9250602084013591506040840135614c19816145f8565b809150509250925092565b60008060008060808587031215614c3a57600080fd5b8435614c45816144d6565b9350602085013592506040850135614c5c816145f8565b915060608501356146db816145f8565b60008060008060808587031215614c8257600080fd5b8435614c8d816144d6565b93506020850135614c9d816144d6565b92506040850135614cad816144d6565b915060608501356146db81614440565b60ff8116811461343a57600080fd5b803561419681614cbd565b600080600080600080600080610100898b031215614cf457600080fd5b883597506020890135965060408901359550606089013594506080890135935060a0890135925060c0890135915060e0890135614d3081614cbd565b809150509295985092959890939650565b600080600080600080600060e0888a031215614d5c57600080fd5b8735614d67816144d6565b96506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135614d9a816145f8565b8091505092959891949750929550565b60008060408385031215614dbd57600080fd5b8235614dc8816144d6565b946020939093013593505050565b6000806000806000806000878903610200811215614df357600080fd5b61014080821215614e0357600080fd5b614e0b614725565b91508935825260208a0135602083015260408a0135604083015260608a0135606083015260808a0135608083015260a08a013560a083015260c08a013560c083015260e08a013560e0830152610100808b01358184015250610120614e71818c01614ccc565b8184015250819850614e84818b016144eb565b97505050614e9561016089016144eb565b9450614ea461018089016144eb565b93506101a088013592506101c08801359150614ec36101e08901614606565b905092959891949750929550565b600080600080600080600060e0888a031215614eec57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135614d9a81614cbd565b634e487b7160e01b600052601160045260246000fd5b808201808211156105fd576105fd614f21565b80820281158282048414176105fd576105fd614f21565b634e487b7160e01b600052601260045260246000fd5b600082614f9457634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156105fd576105fd614f21565b600060208284031215614fbe57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b8051614196816144d6565b600060208284031215614ff857600080fd5b815161454e816144d6565b805161419681614440565b8051614196816145f8565b6000610100828403121561502c57600080fd5b6150346146fc565b90508151615041816144d6565b808252506020820151602082015260408201516040820152606082015161506781614440565b606082015261507860808301615003565b608082015260a082015160a082015260c082015160c082015261509d60e0830161500e565b60e082015292915050565b600061010082840312156150bb57600080fd5b6105fa8383615019565b805161ffff8116811461419657600080fd5b80516001600160401b038116811461419657600080fd5b805161419681614cbd565b805162ffffff8116811461419657600080fd5b805161419681614431565b6000610540828403121561512a57600080fd5b615132614748565b61513b83614fdb565b8152615149602084016150c5565b602082015261515a604084016150c5565b604082015261516b606084016150c5565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101606151ca818501615003565b908201526101806151dc848201615003565b908201526101a083810151908201526101c080840151908201526101e0615204818501614fdb565b90820152610200615216848201614fdb565b90820152610220615228848201614fdb565b9082015261024061523a848201614fdb565b9082015261026061524c848201614fdb565b9082015261028061525e848201614fdb565b908201526102a0615270848201614fdb565b908201526102c0615282848201614fdb565b908201526102e0615294848201614fdb565b908201526103006152a6848201614fdb565b908201526103206152b8848201614fdb565b908201526103406152ca848201614fdb565b908201526103606152dc848201614fdb565b908201526103806152ee84820161500e565b908201526103a06153008482016150d7565b908201526103c06153128482016150d7565b908201526103e06153248482016150ee565b908201526104006153368482016150ee565b908201526104206153488482016150f9565b9082015261044061535a84820161510c565b9082015261046061536c84820161510c565b9082015261048061537e84820161510c565b908201526104a06153908482016150d7565b908201526104c06153a28482016150c5565b908201526104e06153b4848201614fdb565b908201526105006153c68482016150ee565b90820152610520928301519281019290925250919050565b600181815b808511156154195781600019048211156153ff576153ff614f21565b8085161561540c57918102915b93841c93908002906153e3565b509250929050565b600082615430575060016105fd565b8161543d575060006105fd565b8160018114615453576002811461545d57615479565b60019150506105fd565b60ff84111561546e5761546e614f21565b50506001821b6105fd565b5060208310610133831016604e8410600b841016171561549c575081810a6105fd565b6154a683836153de565b80600019048211156154ba576154ba614f21565b029392505050565b60006105fa60ff841683615421565b6000600160ff1b82016154e6576154e6614f21565b5060000390565b60008160020b627fffff19810361550657615506614f21565b60000392915050565b6000610280828403121561552257600080fd5b61552a61476b565b905061553582614fdb565b81526020820151602082015261554d60408301614fdb565b6040820152606082015160608201526080820151608082015261557260a08301615003565b60a082015261558360c08301615003565b60c082015261559460e08301615003565b60e08201526101006155a781840161510c565b908201526101206155b983820161510c565b908201526101406155cb83820161510c565b90820152610160828101519082015261018080830151908201526101a080830151908201526101c080830151908201526101e0808301519082015261020061561481840161500e565b908201526102206156268382016150d7565b908201526102406156388382016150c5565b9082015261026061564a838201614fdb565b9082015292915050565b6000610280828403121561566757600080fd5b6105fa838361550f565b818103600083128015838313168383128216171561569157615691614f21565b5092915050565b80820260008212600160ff1b841416156156b4576156b4614f21565b81810583148215176105fd576105fd614f21565b80820182811260008312801582168215821617156148e6576148e6614f21565b600080604083850312156156fb57600080fd5b505080516020909101519092909150565b80516bffffffffffffffffffffffff8116811461419657600080fd5b600082601f83011261573957600080fd5b81516020615749614b7a83614afc565b82815260059290921b8401810191818101908684111561576857600080fd5b8286015b8481101561578c57805161577f81614440565b835291830191830161576c565b509695505050505050565b600082601f8301126157a857600080fd5b815160206157b8614b7a83614afc565b82815260059290921b840181019181810190868411156157d757600080fd5b8286015b8481101561578c5780516157ee816144d6565b83529183019183016157db565b600082601f83011261580c57600080fd5b8151602061581c614b7a83614afc565b82815260059290921b8401810191818101908684111561583b57600080fd5b8286015b8481101561578c57805161585281614cbd565b835291830191830161583f565b6000601f838184011261587157600080fd5b82516020615881614b7a83614afc565b82815260059290921b850181019181810190878411156158a057600080fd5b8287015b8481101561594d5780516001600160401b03808211156158c45760008081fd5b818a0191508a603f8301126158d95760008081fd5b85820151818111156158ed576158ed6146e6565b6158fe818a01601f191688016147b1565b915080825260408c818386010111156159175760008081fd5b60005b82811015615935578481018201518482018a0152880161591a565b505060009082018701528452509183019183016158a4565b50979650505050505050565b60006020828403121561596b57600080fd5b81516001600160401b038082111561598257600080fd5b908301906103e0828603121561599757600080fd5b61599f61478e565b82518152602083015160208201526159b960408401614fdb565b60408201526159ca6060840161570c565b60608201526159db60808401615003565b60808201526159ec60a08401615003565b60a08201526159fd60c08401615003565b60c082015260e083015160e08201526101008084015181830152506101208084015183811115615a2c57600080fd5b615a3888828701615728565b828401525050610140615a4c818501614fdb565b90820152610160615a5e8482016150c5565b90820152610180615a708482016150ee565b908201526101a083810151908201526101c0615a8d81850161500e565b908201526101e08381015190820152610200808401519082015261022080840151908201526102408084015183811115615ac657600080fd5b615ad288828701615797565b8284015250506102608084015183811115615aec57600080fd5b615af8888287016157fb565b8284015250506102808084015183811115615b1257600080fd5b615b1e8882870161585f565b8284015250506102a08084015183811115615b3857600080fd5b615b448882870161585f565b8284015250506102c09150615b5a828401614fdb565b828201526102e09150615b6e828401614fdb565b91810191909152610300828101519082015261032080830151908201526103408083015190820152610360808301519082015261038080830151908201526103a080830151908201526103c091820151918101919091529392505050565b600060208284031215615bde57600080fd5b81516001600160401b03811115615bf457600080fd5b61067384828501615728565b60006103e08284031215615c1357600080fd5b60405160a081018181106001600160401b0382111715615c3557615c356146e6565b604052615c42848461550f565b8152615c52846102808501615019565b602082015261038083015160408201526103a083015160608201526103c0830151615c7c816145f8565b60808201529392505050565b6001600160a01b0382811682821603908082111561569157615691614f21565b600080600080600080600080610100898b031215615cc557600080fd5b8851615cd081614440565b80985050602089015180600f0b8114615ce857600080fd5b80975050604089015195506060890151945060808901518060060b8114615d0e57600080fd5b60a08a0151909450615d1f816144d6565b60c08a015190935063ffffffff81168114615d3957600080fd5b9150615d4760e08a0161500e565b9050929598509295989093965056fea264697066735822122082c88ea4884a4c87c7d7cdd82ff004293f598344d8788a047f75bb7b75159dca64736f6c63430008150033