0 txs
1.1k calls
constructor
constructor((uint16 protocolId, address mathLib, address viewer, address manager, address feeModel, address gvFactory, address gsFactory, address nftPosMgr, address router, address initializationProcess, address nettingProcess, address depositProcess, address withdrawProcess, address rebalanceProcess, address collectFeesProcess) params)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
assetToken
viewfunction assetToken() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
calculateLPTokensToReserve
viewfunction calculateLPTokensToReserve(uint256 assetDeposit) view returns (int256)
calculateNAV
viewfunction calculateNAV() view returns (uint256 nav, uint256 amount0, uint256 amount1, uint256 gsPnl, bool isGSPnlNeg)
canReserveLPTokens
viewfunction canReserveLPTokens(uint256 lpTokensToReserve) view returns (bool)
collectFeesProcess
viewfunction collectFeesProcess() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
depositProcess
viewfunction depositProcess() view returns (address)
depositVault
viewfunction depositVault() view returns (address)
factory
viewfunction factory() view returns (address)
feeModel
viewfunction feeModel() view returns (address)
getAssetDust
viewfunction getAssetDust() view returns (uint256)
getCollateral
viewfunction getCollateral() view returns (uint256)
getCollateral
viewfunction getCollateral(address gammaPool, uint256 tokenId) view returns (uint256 collateral)
getCollectedFees
viewfunction getCollectedFees() view returns (uint256 fees0, uint256 fees1)
getPeriodInfo
viewfunction getPeriodInfo() view returns (uint256 period, uint256 periodLength, uint256 periodExpiration)
getVaultData
viewfunction getVaultData() view returns (tuple data)
getVaultDust
viewfunction getVaultDust() view returns (uint256)
gsPool
viewfunction gsPool() view returns (address)
gvFactory
viewfunction gvFactory() view returns (address)
initializationProcess
viewfunction initializationProcess() view returns (address)
lpPool
viewfunction lpPool() view returns (address)
manager
viewfunction manager() view returns (address)
mathLib
viewfunction mathLib() view returns (address)
name
viewfunction name() view returns (string)
nettingProcess
viewfunction nettingProcess() view returns (address)
nftPosMgr
viewfunction nftPosMgr() view returns (address)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256 shares)
previewWithdraw
viewfunction previewWithdraw(uint256 shares) view returns (uint256 assets)
protocolId
viewfunction protocolId() view returns (uint16)
rebalanceProcess
viewfunction rebalanceProcess() view returns (address)
refId
viewfunction refId() view returns (uint16)
refType
viewfunction refType() view returns (uint16)
router
viewfunction router() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
validate
viewfunction validate(address assetToken, address lpPool, address gsPool, bytes data) view returns (address, address, address, int24, uint24)
validate
viewfunction validate(address gammaPool) view returns (bool)
viewer
viewfunction viewer() view returns (address)
withdrawProcess
viewfunction withdrawProcess() view returns (address)
withdrawVault
viewfunction withdrawVault() view returns (address)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
clearToken
nonpayablefunction clearToken(address token, address to, uint256 amount)
freeReservedLPTokens
nonpayablefunction freeReservedLPTokens(uint256 lpTokens)
initialize
nonpayablefunction initialize(tuple params, bytes data)
liquidateCollateral
nonpayablefunction liquidateCollateral(address cfmm, uint16 protocolId, uint256 tokenId, uint256 amount, address to) returns (uint256 collateral)
onLoanUpdate
nonpayablefunction onLoanUpdate(address cfmm, uint16 protocolId, uint256 tokenId, bytes data) returns (uint256 collateral)
processDepositsAndWithdrawals
nonpayablefunction processDepositsAndWithdrawals(bytes path0, bytes path1) returns (uint8 processType, uint256 assets)
processFeeCollection
nonpayablefunction processFeeCollection() returns (uint256 fees0, uint256 fees1)
rebalancePosition
nonpayablefunction rebalancePosition(tuple params)
reserveLPTokens
nonpayablefunction reserveLPTokens() returns (int256 lpTokens)
setPoolShare
nonpayablefunction setPoolShare(uint64 poolShare)
setVaultParameters
nonpayablefunction setVaultParameters(uint8 maxBorrowReservePct, uint64 dust0, uint64 dust1)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
ReserveLPTokens
event ReserveLPTokens(address indexed pool, uint256 lpTokens, bool isDeposit)
TotalNetFees
event TotalNetFees(address indexed vault, uint256 _fees0, uint256 _fees1, uint64 _poolShare, uint16 _protocolShare)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
TransferFunds
event TransferFunds(address indexed from, address indexed to, uint256 amount, uint256 period)
UpdateVault
event UpdateVault(uint256 nav, uint256 shares, uint256 period, uint256 timestamp, uint8 indexed typ)
errors
ERC165InvalidInterfaceId
error ERC165InvalidInterfaceId()
ERC20Allowance
error ERC20Allowance()
ERC20Transfer
error ERC20Transfer()
ExcessiveBurn
error ExcessiveBurn()
Expired
error Expired()
Forbidden
error Forbidden()
Initialized
error Initialized()
InvalidGSPool
error InvalidGSPool()
InvalidLPPool
error InvalidLPPool()
Locked
error Locked()
MaxTick
error MaxTick()
NotEnoughTokens
error NotEnoughTokens()
RestrictedToken
error RestrictedToken()
ST_Fail
error ST_Fail()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x6102806040523480156200001257600080fd5b5060405162005877380380620058778339810160408190526200003591620002ff565b60c08101516001600160a01b038116608052600360a081905281906200006263ab90b69160e01b620001bf565b50620000779050633b3e7aab60e01b620001bf565b50805161ffff1660c05260208101516001600160a01b0390811660e0908152604083015182166101009081528301518216610120908152908301518216610140908152606084015183166101609081526080850151841661018090815260a08601805186166101a0908152948701805187166101c09081529488015187166101e052928701518616610200529086015185166102205292850151841661024052908401519092166102605251905162000131919062000210565b6200014c8160a001518261014001516200021060201b60201c565b620001678160a001518261016001516200021060201b60201c565b620001828160a001518261018001516200021060201b60201c565b6200019d8160a00151826101a001516200021060201b60201c565b620001b88160a00151826101c001516200021060201b60201c565b5062000467565b6001600160e01b03198082169003620001eb5760405163117ea9a160e31b815260040160405180910390fd5b6001600160e01b0319166000908152601160205260409020805460ff19166001179055565b806001600160a01b031663622f18f86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000442565b6001600160a01b0316826001600160a01b0316146200029357600080fd5b5050565b6040516101e081016001600160401b0381118282101715620002c957634e487b7160e01b600052604160045260246000fd5b60405290565b805161ffff81168114620002e257600080fd5b919050565b80516001600160a01b0381168114620002e257600080fd5b60006101e082840312156200031357600080fd5b6200031d62000297565b6200032883620002cf565b81526200033860208401620002e7565b60208201526200034b60408401620002e7565b60408201526200035e60608401620002e7565b60608201526200037160808401620002e7565b60808201526200038460a08401620002e7565b60a08201526200039760c08401620002e7565b60c0820152620003aa60e08401620002e7565b60e0820152610100620003bf818501620002e7565b90820152610120620003d3848201620002e7565b90820152610140620003e7848201620002e7565b90820152610160620003fb848201620002e7565b908201526101806200040f848201620002e7565b908201526101a062000423848201620002e7565b908201526101c062000437848201620002e7565b908201529392505050565b6000602082840312156200045557600080fd5b6200046082620002e7565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516102605161526b6200060c6000396000818161071201528181611b090152611da50152600081816106a10152610f1301526000818161063e0152611a7501526000818161051e01526119e601526000818161047c015281816113e9015281816119180152818161222901528181612a350152612e0e0152600081816107f101528181610b0c01526118480152600081816106170152818161145901528181611c5101528181611f530152818161241e015261361a0152600081816107700152611edb0152600081816105a901528181610bc201528181610e710152818161181a015281816118b201528181611d5201528181612186015281816124490152612d2e0152600081816109ae015261231a01526000610987015260008181610945015281816115f6015261234c0152600081816106c801528181612375015261268a0152600081816108ac01526122bd015260006109d5015260008181610848015261282d015261526b6000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c806389cdfb8f116101de578063ccbe764a1161010f578063ef8b30f7116100ad578063f887ea401161007c578063f887ea4014610982578063f9f1c9c4146109a9578063fd08b0f3146109d0578063fef840ff146109f757600080fd5b8063ef8b30f71461092d578063f30878c114610940578063f386685614610967578063f4e444a11461096f57600080fd5b8063d7cd3949116100e9578063d7cd394914610896578063da1f12ab146108a7578063dd62ed3e146108e1578063ecfc4f201461091a57600080fd5b8063ccbe764a1461086a578063d0d0ed051461087d578063d54a8d181461088e57600080fd5b8063a4f46f9f1161017c578063ac960a6911610156578063ac960a69146107ec578063b6d6370514610813578063b719f0d414610826578063c45a01551461084357600080fd5b8063a4f46f9f146107a5578063a6eef161146107d1578063a9059cbb146107d957600080fd5b806390cbda39116101b857806390cbda391461073457806395d89b411461074757806397ee11441461076b578063a373a5301461079257600080fd5b806389cdfb8f146106c35780638d227fc0146106ea578063906257bd1461070d57600080fd5b806331c8b885116102b85780635c1548fb1161025657806362b50a9f1161023057806362b50a9f14610639578063633c35651461066057806370a0823114610673578063867fc7aa1461069c57600080fd5b80635c1548fb146105f95780635e62520b14610601578063622f18f81461061257600080fd5b8063481c6a7511610292578063481c6a75146105a457806349e70957146105cb578063522d6ae8146105de57806358024fce146105e657600080fd5b806331c8b8851461056d5780633737bcb414610580578063465a276d1461059157600080fd5b8063185d8abd11610325578063207c64fb116102ff578063207c64fb146105065780632243fd831461051957806323b872dd14610540578063313ce5671461055357600080fd5b8063185d8abd146104775780631914ab651461049e57806319ec4139146104f157600080fd5b80630a28a477116103615780630a28a477146103fc5780631083f7611461041d57806311ebc6191461043d57806318160ddd1461046f57600080fd5b806301ffc9a71461038857806306fdde03146103b0578063095ea7b3146103e9575b600080fd5b61039b61039636600461398b565b610a0c565b60405190151581526020015b60405180910390f35b6103dc6040518060400160405280600d81526020016c47616d6d615661756c7420563160981b81525081565b6040516103a79190613a05565b61039b6103f7366004613a3d565b610a4c565b61040f61040a366004613a69565b610a62565b6040519081526020016103a7565b610425610aaa565b6040516001600160a01b0390911681526020016103a7565b610445610ae0565b6040805195865260208601949094529284019190915260608301521515608082015260a0016103a7565b600e5461040f565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6104b16104ac366004613ac3565b610b02565b604080516001600160a01b0396871681529486166020860152929094169183019190915260020b606082015262ffffff909116608082015260a0016103a7565b6105046104ff366004613a69565b610bb5565b005b61039b610514366004613b3e565b610c9e565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b61039b61054e366004613b5b565b610d9e565b61055b610e2d565b60405160ff90911681526020016103a7565b61050461057b366004613d0a565b610e64565b6007546001600160a01b0316610425565b61040f61059f366004613e0d565b6111b1565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b61040f6105d9366004613a69565b611217565b61040f611222565b61040f6105f4366004613a3d565b6112b1565b61040f6112bd565b6008546001600160a01b0316610425565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b61040f61066e366004613e78565b6112db565b61040f610681366004613b3e565b6001600160a01b03166000908152600f602052604090205490565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6106f2611320565b604080519384526020840192909252908201526060016103a7565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b61039b610742366004613a69565b6113aa565b6103dc6040518060400160405280600581526020016447562d563160d81b81525081565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6105046107a0366004613ef3565b611454565b6107b86107b336600461402c565b6118a2565b6040805160ff90931683526020830191909152016103a7565b61040f611bfc565b61039b6107e7366004613a3d565b611c3f565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6105046108213660046140b3565b611c4c565b61082e611d42565b604080519283526020830191909152016103a7565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b610504610878366004613b5b565b611df8565b600a546001600160a01b0316610425565b61082e611eb9565b6009546001600160a01b0316610425565b6108ce7f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff90911681526020016103a7565b61040f6108ef3660046140fe565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b610504610928366004614137565b611f4e565b61040f61093b366004613a69565b612034565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b61040f612070565b600854600160e01b900461ffff166108ce565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6108ce7f000000000000000000000000000000000000000000000000000000000000000081565b6109ff612270565b6040516103a79190614154565b60006301ffc9a760e01b6001600160e01b031983161480610a4657506001600160e01b0319821660009081526011602052604090205460ff165b92915050565b6000610a59338484612608565b50600192915050565b600080610a6d612669565b5050600e5492945091925050506000819003610a8d575060009392505050565b80610a988386614403565b610aa29190614430565b949350505050565b600654600090600160601b900460ff16610ace5750600d546001600160a01b031690565b600c546001600160a01b03165b905090565b6000806000806000610af0612669565b939a9299509097509550909350915050565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631914ab658b8b8b8b8b6040518663ffffffff1660e01b8152600401610b5e959493929190614452565b60a060405180830381865afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f91906144b2565b939e929d50909b50995090975095505050505050565b610bbd61275e565b610be67f000000000000000000000000000000000000000000000000000000000000000061279a565b6000548015801590610bf85750600082115b15610c9257600254600854604051633f9a10cd60e21b81526004810184905260248101859052600060448201526001600160a01b039091169063fe684334906064016020604051808303816000875af1158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d9190614519565b50610c8881846127c3565b9081900360025591505b50610c9b6127d9565b50565b600080826001600160a01b0316633035aa9c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190614532565b90506000836001600160a01b031663da1f12ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061455a565b9050610d7582826127ee565b6001600160a01b0316846001600160a01b031614610d97575060009392505050565b6001610aa2565b6001600160a01b03831660009081526010602090815260408083203384529091528120546000198114610e155782811015610dec5760405163503e709160e11b815260040160405180910390fd5b6001600160a01b0385166000908152601060209081526040808320338452909152902083820390555b610e20858585612854565b60019150505b9392505050565b600654600090600160601b900460ff1615610e535750600654600160701b900460ff1690565b50600654600160781b900460ff1690565b610e6c61275e565b610e957f000000000000000000000000000000000000000000000000000000000000000061279a565b600854600080546002546040805163ad451a9d60e01b815281516001600160a01b039096169593949293869263ad451a9d92600480820193918290030181865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190614577565b915050610f727f000000000000000000000000000000000000000000000000000000000000000086604051602401610f43919061459b565b60408051601f198184030181529190526020810180516001600160e01b03166331c8b88560e01b179052612921565b506000806000610f8260006129a4565b9050600081121592508215610f95578091505b50600080876001600160a01b031663ad451a9d6040518163ffffffff1660e01b81526004016040805180830381865afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190614577565b9150508085111561101957808503915061101486836127c3565b860395505b611024868486612b92565b9450915083156110cb57600080896001600160a01b03166352375bb16040518163ffffffff1660e01b8152600401600060405180830381865afa15801561106f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261109791908101906146e6565b50505092509250506110c1828285876000600601600d9054906101000a900460ff1660ff16612bc9565b9350838801945050505b811561119257604051633f9a10cd60e21b8152600481018890526024810183905284151560448201526001600160a01b0389169063fe684334906064016020604051808303816000875af1158015611127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114b9190614519565b506040805183815285151560208201526001600160a01b038a16917ff1937930de0bea82fa06c488e5a815a36a726f7fcbeb2c3e5db6c42bda0ed91d910160405180910390a25b60028390556111a16003612c29565b5050505050505050610c9b6127d9565b6000806111be86866127ee565b9050336001600160a01b038216146111e957604051631dd2188d60e31b815260040160405180910390fd5b6111f38185612d16565b915060008380602001905181019061120b919061476d565b90505050949350505050565b6000610a46826129a4565b60008061122d612669565b50505050915050600080600601600c9054906101000a900460ff1661126457600454600160c01b90046001600160401b0316611278565b600454600160801b90046001600160401b03165b6001600160401b03169050816000036112915792915050565b600e5482906112a09083614403565b6112aa9190614430565b9250505090565b6000610e268383612d16565b600854600080549091610adb916001600160a01b0390911690612d16565b6000806112e887876127ee565b9050336001600160a01b0382161461131357604051631dd2188d60e31b815260040160405180910390fd5b6000979650505050505050565b60008060008060090160009054906101000a90046001600160a01b03166001600160a01b0316638d227fc06040518163ffffffff1660e01b8152600401606060405180830381865afa15801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e919061482d565b91959094509092509050565b6008546006546040516327c11dfb60e21b81526001600160a01b03928316600482015260248101849052600160681b90910460ff1660448201526000917f00000000000000000000000000000000000000000000000000000000000000001690639f0477ec90606401602060405180830381865afa158015611430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a46919061486b565b61147d7f000000000000000000000000000000000000000000000000000000000000000061279a565b825160208401516101408501516101608601516114a09360009390929091612e91565b6114b063ab90b69160e01b612f32565b6114c0633b3e7aab60e01b612f32565b60608301516001600160a01b03166114eb57604051639a5165b160e01b815260040160405180910390fd5b60808301516001600160a01b031661151657604051638af357a360e01b815260040160405180910390fd5b60608301516007805461010086015162ffffff908116600160e01b027fff000000ffffffffffffffff00000000000000000000000000000000000000009092166001600160a01b0394851617919091179091556101208501516006805491909216600160401b026affffff0000000000000000199091161790556080840151600880549183166001600160a01b031992831617905560a0850151600b805491841691831691909117905560c0850151600c805482851690841617905560e0860151600d8054828616941693909317909255604051633f2d710f60e21b81527f00000000000000000000000000000000000000000000000000000000000000009093169263fcb5c43c9261164192916004016001600160a01b0392831681529116602082015260400190565b60c060405180830381865afa15801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190614891565b600480546001600160801b03908116600160c01b6001600160401b03948516810267ffffffffffffffff60801b1990811692909217600160801b96861687021790935560068054909216958416909202909116939093179316029190911761ffff60701b1916600160781b60ff9384160260ff60701b191617600160701b9390921692909202179055604083015160c08401516001600160a01b039182169116148080611748575083604001516001600160a01b03168460e001516001600160a01b0316145b61175157600080fd5b6006805461ffff60601b1916600160601b8315150260ff60681b191617603560681b179055602084015160405163541e5c0160e11b815261ffff9091166004820152600090339063a83cb80290602401606060405180830381865afa1580156117be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e29190614918565b6101808601518151602083015160405160248101939093526001600160401b0391821660448401521660648201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016608482015290915061189a907f00000000000000000000000000000000000000000000000000000000000000009060a40160408051601f198184030181529190526020810180516001600160e01b03166311b519cd60e21b179052612921565b505050505050565b6000806118ad61275e565b6118d67f000000000000000000000000000000000000000000000000000000000000000061279a565b600080546008546040805160048152602481019091526020810180516001600160e01b0316631bbb941d60e11b1790526001600160a01b039091169061193d907f000000000000000000000000000000000000000000000000000000000000000090612921565b8060200190518101906119509190614987565b945060ff8516156119d05760405163622fe39f60e01b8152600481018390526001600160a01b0382169063622fe39f90602401600060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119c89190810190614b27565b610100015192505b60008560ff16600103611a615760019050611a477f00000000000000000000000000000000000000000000000000000000000000008989604051602401611a18929190614d9a565b60408051601f198184030181529190526020810180516001600160e01b03166354850b4560e11b179052612921565b806020019051810190611a5a9190614519565b9450611b44565b8560ff16600203611ad65760029050611a477f00000000000000000000000000000000000000000000000000000000000000008989604051602401611aa7929190614d9a565b60408051601f198184030181529190526020810180516001600160e01b0316638c4a650760e01b179052612921565b506040805160048152602481019091526020810180516001600160e01b0316632dc67c3560e21b179052600690611b2e907f000000000000000000000000000000000000000000000000000000000000000090612921565b806020019051810190611b419190614577565b50505b600083118015611b57575060008660ff16115b15611bdb57600254604051633f9a10cd60e21b8152600481018590526024810191909152600060448201526001600160a01b0383169063fe684334906064016020604051808303816000875af1158015611bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd99190614519565b505b6000600255611be981612c29565b50505050611bf56127d9565b9250929050565b600654600090600160601b900460ff1615611c285750600454600160801b90046001600160401b031690565b50600454600160c01b90046001600160401b031690565b6000610a59338484612854565b611cd67f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd19190614532565b61279a565b611ce48360ff1660556127c3565b6006805460ff60681b1916600160681b60ff9390931692909202919091179055600480546001600160801b0316600160801b6001600160401b03948516026001600160c01b031617600160c01b929093169190910291909117905550565b600080611d4d61275e565b611d767f000000000000000000000000000000000000000000000000000000000000000061279a565b6040805160048152602481019091526020810180516001600160e01b0316632dc67c3560e21b179052611dca907f000000000000000000000000000000000000000000000000000000000000000090612921565b806020019051810190611ddd9190614577565b9092509050611dec6006612c29565b611df46127d9565b9091565b611e0183612f82565b80611e105750611e1083612fd3565b15611e2e576040516326d4326b60e11b815260040160405180910390fd5b6040516370a0823160e01b8152306004820152611ea19082906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9c9190614519565b6127c3565b90508015611eb457611eb4838383613011565b505050565b604051633cf5106b60e21b815230600482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f3d441ac906024016040805180830381865afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190614577565b90939092509050565b611faf7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cad573d6000803e3d6000fd5b670de0b6b3a7640000816001600160401b031611156120075760405162461bcd60e51b815260206004820152601060248201526f506f6f6c5368617265203e203130302560801b604482015260640160405180910390fd5b600880546001600160401b03909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b60008061203f612669565b5050600e54929450919250508115905080612058575081155b1561206557509192915050565b81610a988286614403565b600061207a61275e565b6009546001600160a01b031633148015906120a05750600a546001600160a01b03163314155b156120be57604051631dd2188d60e31b815260040160405180910390fd5b600854604080516374aa5fad60e01b815290516000926001600160a01b0316916374aa5fad9160048083019260209291908290030181865afa158015612108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212c9190614519565b9050600061216061213b6130fb565b6006546001600160a01b039190911690600160801b90046001600160401b0316613175565b60405163350b24b760e01b815230600482015260248101849052604481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063350b24b790606401602060405180830381865afa1580156121d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f9919061486b565b506040805160048152602481019091526020810180516001600160e01b03166379c3342b60e11b17905261224e907f000000000000000000000000000000000000000000000000000000000000000090612921565b8060200190518101906122619190614519565b9250505061226d6127d9565b90565b6040805161054081018252600061036082018190526103e0820181905261040082018190526104c082018190526104e082018190526105008201819052610520820181905230825261ffff7f00000000000000000000000000000000000000000000000000000000000000008116602084015260065480821684860152600854600160e01b8082049093166060860152925460808501526002805460c086015260015460a08601527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081166102c08701527f000000000000000000000000000000000000000000000000000000000000000081166103008701527f000000000000000000000000000000000000000000000000000000000000000081166102e0870152600480546001600160801b0380821660e08a01526007546001600160401b03600160a01b80830482166101008d01526003548085166101208e0152600160801b9081900485166101408e015280860483166101608e0152600160c01b9586900483166101808e01526005548086166101a08f01528190049094166101c08d01527f000000000000000000000000000000000000000000000000000000000000000087166101e08d018190527f000000000000000000000000000000000000000000000000000000000000000088166102008e015260095488166102208e0152600a5488166102408e01528388166102608e01528b88166102808e0152600b5488166102a08e0152600c5488166103208e0152600d549097166103408d015260ff600160601b8a041615156103808d015292880481166103a08c015292870483166103c08b015262ffffff600160401b8804166104208b015296909604840b610440890152620100008504840b6104608901526501000000000090940490920b61048087015292909304166104a08401528351634cadad5760e11b815284519394919363995b5aae9382810193928290030181865afa158015612562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125869190614dc8565b6001600160a01b03166104e083015261ffff166104c082015260065460ff600160681b82048116610500840152600160701b820481166103e0840152600160781b90910416610400820152600e546105208201526103808101516125ef578061034001516125f6565b8061032001515b6001600160a01b031661036082015290565b6001600160a01b0383811660008181526010602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008060008060008061267a6130fb565b6006549096506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163b4c2c9239130916126d1918b16906001600160401b03600160801b90910416613175565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152600060448201526001606482015260840160a060405180830381865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190614df7565b999a9399929850909650945092509050565b600654600160581b900460ff1660011461278b576040516303cb96db60e21b815260040160405180910390fd5b6006805460ff60581b19169055565b336001600160a01b03821614610c9b57604051631dd2188d60e31b815260040160405180910390fd5b60008183106127d25781610e26565b5090919050565b6006805460ff60581b1916600160581b179055565b604080516001600160a01b03841660208083019190915261ffff84168284015282518083038401815260609092019092528051910120600090610e26907f000000000000000000000000000000000000000000000000000000000000000090849061318e565b6001600160a01b0383166000908152600f60205260409020548181101561288e57604051631e19b7a560e21b815260040160405180910390fd5b6001600160a01b038085166000908152600f60205260408082208585039055918516815220546128bf908390614e40565b6001600160a01b038085166000818152600f602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129139086815260200190565b60405180910390a350505050565b60606000836001600160a01b03168360405161293d9190614e6f565b600060405180830381855af49150503d8060008114612978576040519150601f19603f3d011682016040523d82523d6000602084013e61297d565b606091505b50925090508061299d57815160000361299557600080fd5b815182602001fd5b5092915050565b6000806129af6130fb565b60408051610100810182526009546001600160a01b039081168252600a548116602080840191909152600e54838501526000606084018190526080840189905260065460ff600160601b820416151560a0860152600854841660c0860152905460e0850152845161018081018652600b54841681528387169281019290925294955091937f00000000000000000000000000000000000000000000000000000000000000009091169263bbc0b019929190820190612a759062010000900460020b6132ea565b6001600160a01b03168152600654602090910190612a9e9065010000000000900460020b6132ea565b6001600160a01b031681526003546001600160801b038082166020840152600160801b9182900416604080840191909152600754600160a01b90046001600160401b03908116606085015260065492830481166080850152600160c01b83041660a0840152600160601b820460ff908116151560c0850152600160681b90920490911660e080840191909152610100909201869052519083901b6001600160e01b0319168152612b519190600401614e8b565b602060405180830381865afa158015612b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa29190614519565b60008060008315612bbb5785851115612bae5750848403612bbe565b5060009250838503612bbe565b50845b959294509192505050565b600080606483612bd9888a614e40565b612be39190614403565b612bed9190614430565b90506000612bfb8688614e40565b905080821115612c1857612c11858284036127c3565b9450612c1d565b600094505b50929695505050505050565b6000612c33612669565b50505050915050816006811115612c4c57612c4c614fca565b7ff2f15cda525b3c9ee1691d8fc9446df4c8e64047e3eccba780471e01b637e697826000600e0154600060090160009054906101000a90046001600160a01b03166001600160a01b031663ef78d4fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cee9190614519565b6040805193845260208401929092529082015242606082015260800160405180910390a25050565b604051634b82529b60e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634b82529b90602401602060405180830381865afa158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da1919061486b565b15612e8257600b5460075460065460048054604051635e8affd360e01b81526001600160a01b03958616928101929092529284166024820152620100008204600290810b60448301526501000000000090920490910b60648201526001600160801b0390911660848201527f000000000000000000000000000000000000000000000000000000000000000090911690635e8affd39060a401602060405180830381865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190614519565b9050610a46565b506001600160801b0392915050565b600685015461ffff1615612eb8576040516302ed543d60e51b815260040160405180910390fd5b60068501805460088701805461ffff60e01b1916600160e01b61ffff98891602179055600160581b6bff000000000000000000ffff199091169490951693909317939093179091556009830180546001600160a01b03199081166001600160a01b0393841617909155600a90930180549093169116179055565b6001600160e01b03198082169003612f5d5760405163117ea9a160e31b815260040160405180910390fd5b6001600160e01b0319166000908152601160205260409020805460ff19166001179055565b6000612f8c613616565b158015610a4657506001600160a01b038216301480612fb857506008546001600160a01b038381169116145b80610a46575050600b546001600160a01b0390811691161490565b6000612fdd613616565b158015610a465750600c546001600160a01b0383811691161480610a46575050600d546001600160a01b0390811691161490565b6040516001600160a01b03838116602483015260448201839052600091829186169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161306b9190614e6f565b6000604051808303816000865af19150503d80600081146130a8576040519150601f19603f3d011682016040523d82523d6000602084013e6130ad565b606091505b50915091508180156130d75750805115806130d75750808060200190518101906130d7919061486b565b6130f45760405163847ea61d60e01b815260040160405180910390fd5b5050505050565b60075460408051633850c7bd60e01b815290516000926001600160a01b031691633850c7bd9160048083019260e09291908290030181865afa158015613145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131699190614fe0565b50949695505050505050565b60008061318284846136b3565b9050610aa28180614403565b60006127108361ffff16101561321d57604051638c83803560e01b815261ffff84166004820152613216906001600160a01b03861690638c83803590602401602060405180830381865afa1580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320e9190614532565b8484876136d7565b9050610e26565b6040516334b1f0a960e21b815261ffff84166004820152613216906001600160a01b0386169063d2c7c2a490602401602060405180830381865afa158015613269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328d9190614532565b604051603881018790526f5af43d82803e903d91602b57fd5bf3ff60248201526014810191909152733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018490526037600c8201206078820152605560439091012090565b60008060008360020b12613301578260020b61330e565b8260020b61330e90615077565b905061331d620d89e719615093565b62ffffff168111156133425760405163d63f4fb360e01b815260040160405180910390fd5b60008160011660000361335957600160801b61336b565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615613395576ffff97272373d413259a46990580e213a0260801c5b60048216156133b4576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156133d3576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156133f2576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613411576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613430576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561344f576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561346f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561348f576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156134af576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156134cf576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156134ef576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561350f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561352f576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561354f576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613570576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613590576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156135af576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156135cc576b048a170391f7dc42444e8fa20260801c5b60008460020b13156135ed5780600019816135e9576135e961441a565b0490505b640100000000810615613601576001613604565b60005b60ff16602082901c0192505050919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369a9190614532565b6001600160a01b0316336001600160a01b031614905090565b6000600160601b6136c383613743565b6136cd9085614403565b610e269190614430565b6000806136e58686856137d8565b8051602091820120604080516001600160f81b03198185015260609690961b6001600160601b031916602187015260358601969096526055808601919091528551808603909101815260759094019094525050805191012092915050565b60008160000361375557506000919050565b506001600160881b03811160071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b6060836101008461ffff161061380757604051806040016040528060018152602001606d60f81b815250613822565b604051806040016040528060018152602001601b60fa1b8152505b6101008561ffff161061384e57604051806040016040528060018152602001606160f81b815250613869565b604051806040016040528060018152602001600360fd1b8152505b6101008661ffff16106138a4576040516001600160f01b031960f088901b1660208201526022016040516020818303038152906040526138ce565b6040516001600160f81b031960f888901b1660208201526021016040516020818303038152906040525b856101008861ffff16106138fb57604051806040016040528060018152602001603b60f81b815250613916565b604051806040016040528060018152602001601d60f91b8152505b6101008961ffff161061394257604051806040016040528060018152602001601760fa1b81525061395d565b604051806040016040528060018152602001605b60f81b8152505b60405160200161397397969594939291906150b5565b60405160208183030381529060405290509392505050565b60006020828403121561399d57600080fd5b81356001600160e01b031981168114610e2657600080fd5b60005b838110156139d05781810151838201526020016139b8565b50506000910152565b600081518084526139f18160208601602086016139b5565b601f01601f19169290920160200192915050565b602081526000610e2660208301846139d9565b6001600160a01b0381168114610c9b57600080fd5b8035613a3881613a18565b919050565b60008060408385031215613a5057600080fd5b8235613a5b81613a18565b946020939093013593505050565b600060208284031215613a7b57600080fd5b5035919050565b60008083601f840112613a9457600080fd5b5081356001600160401b03811115613aab57600080fd5b602083019150836020828501011115611bf557600080fd5b600080600080600060808688031215613adb57600080fd5b8535613ae681613a18565b94506020860135613af681613a18565b93506040860135613b0681613a18565b925060608601356001600160401b03811115613b2157600080fd5b613b2d88828901613a82565b969995985093965092949392505050565b600060208284031215613b5057600080fd5b8135610e2681613a18565b600080600060608486031215613b7057600080fd5b8335613b7b81613a18565b92506020840135613b8b81613a18565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613bd557613bd5613b9c565b60405290565b6040516101a081016001600160401b0381118282101715613bd557613bd5613b9c565b60405160e081016001600160401b0381118282101715613bd557613bd5613b9c565b6040516103e081016001600160401b0381118282101715613bd557613bd5613b9c565b604051601f8201601f191681016001600160401b0381118282101715613c6b57613c6b613b9c565b604052919050565b8060020b8114610c9b57600080fd5b8035613a3881613c73565b60006001600160401b03821115613ca657613ca6613b9c565b50601f01601f191660200190565b600082601f830112613cc557600080fd5b8135613cd8613cd382613c8d565b613c43565b818152846020838601011115613ced57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d1c57600080fd5b81356001600160401b0380821115613d3357600080fd5b908301906101208286031215613d4857600080fd5b613d50613bb2565b8235815260208301356020820152613d6a60408401613c82565b6040820152613d7b60608401613c82565b60608201526080830135608082015260a083013582811115613d9c57600080fd5b613da887828601613cb4565b60a08301525060c083013582811115613dc057600080fd5b613dcc87828601613cb4565b60c08301525060e083810135908201526101009283013592810192909252509392505050565b61ffff81168114610c9b57600080fd5b8035613a3881613df2565b60008060008060808587031215613e2357600080fd5b8435613e2e81613a18565b93506020850135613e3e81613df2565b92506040850135915060608501356001600160401b03811115613e6057600080fd5b613e6c87828801613cb4565b91505092959194509250565b600080600080600060a08688031215613e9057600080fd5b8535613e9b81613a18565b94506020860135613eab81613df2565b935060408601359250606086013591506080860135613ec981613a18565b809150509295509295909350565b62ffffff81168114610c9b57600080fd5b8035613a3881613ed7565b60008060008385036101c0811215613f0a57600080fd5b6101a080821215613f1a57600080fd5b613f22613bdb565b9150613f2d86613e02565b8252613f3b60208701613e02565b6020830152613f4c60408701613a2d565b6040830152613f5d60608701613a2d565b6060830152613f6e60808701613a2d565b6080830152613f7f60a08701613a2d565b60a0830152613f9060c08701613a2d565b60c0830152613fa160e08701613a2d565b60e0830152610100613fb4818801613c82565b90830152610120613fc6878201613ee8565b90830152610140613fd8878201613a2d565b90830152610160613fea878201613a2d565b9083015261018086810135908301529093508401356001600160401b0381111561401357600080fd5b61401f86828701613a82565b9497909650939450505050565b6000806040838503121561403f57600080fd5b82356001600160401b038082111561405657600080fd5b61406286838701613cb4565b9350602085013591508082111561407857600080fd5b5061408585828601613cb4565b9150509250929050565b60ff81168114610c9b57600080fd5b6001600160401b0381168114610c9b57600080fd5b6000806000606084860312156140c857600080fd5b83356140d38161408f565b925060208401356140e38161409e565b915060408401356140f38161409e565b809150509250925092565b6000806040838503121561411157600080fd5b823561411c81613a18565b9150602083013561412c81613a18565b809150509250929050565b60006020828403121561414957600080fd5b8135610e268161409e565b81516001600160a01b031681526105408101602083015161417b602084018261ffff169052565b506040830151614191604084018261ffff169052565b5060608301516141a7606084018261ffff169052565b506080830151608083015260a083015160a083015260c083015160c083015260e083015160e08301526101008084015181840152506101208084015181840152506101408084015181840152506101608084015161420f828501826001600160801b03169052565b5050610180838101516001600160801b0316908301526101a080840151908301526101c080840151908301526101e0808401516001600160a01b039081169184019190915261020080850151821690840152610220808501518216908401526102408085015182169084015261026080850151821690840152610280808501518216908401526102a0808501518216908401526102c0808501518216908401526102e0808501518216908401526103008085015182169084015261032080850151821690840152610340808501518216908401526103608085015190911690830152610380808401511515908301526103a0808401516001600160401b03908116918401919091526103c080850151909116908301526103e08084015160ff9081169184019190915261040080850151909116908301526104208084015162ffffff169083015261044080840151600281900b8285015250506104608084015161437d8285018260020b9052565b5050610480808401516143948285018260020b9052565b50506104a0838101516001600160401b0316908301526104c08084015161ffff16908301526104e0808401516001600160a01b0316908301526105008084015160ff169083015261052092830151929091019190915290565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a4657610a466143ed565b634e487b7160e01b600052601260045260246000fd5b60008261444d57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03868116825285811660208301528416604082015260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b8051613a3881613a18565b600080600080600060a086880312156144ca57600080fd5b85516144d581613a18565b60208701519095506144e681613a18565b60408701519094506144f781613a18565b606087015190935061450881613c73565b6080870151909250613ec981613ed7565b60006020828403121561452b57600080fd5b5051919050565b60006020828403121561454457600080fd5b8151610e2681613a18565b8051613a3881613df2565b60006020828403121561456c57600080fd5b8151610e2681613df2565b6000806040838503121561458a57600080fd5b505080516020909101519092909150565b602081528151602082015260208201516040820152600060408301516145c6606084018260020b9052565b5060608301516145db608084018260020b9052565b50608083015160a083015260a08301516101208060c08501526146026101408501836139d9565b915060c0850151601f198584030160e086015261461f83826139d9565b60e087015161010087810191909152909601519190940152509192915050565b60006001600160401b0382111561465857614658613b9c565b5060051b60200190565b80516001600160801b0381168114613a3857600080fd5b600082601f83011261468a57600080fd5b8151602061469a613cd38361463f565b82815260059290921b840181019181810190868411156146b957600080fd5b8286015b848110156146db576146ce81614662565b83529183019183016146bd565b509695505050505050565b60008060008060008060c087890312156146ff57600080fd5b86516001600160401b0381111561471557600080fd5b61472189828a01614679565b9650506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b80516bffffffffffffffffffffffff81168114613a3857600080fd5b60006020828403121561477f57600080fd5b81516001600160401b038082111561479657600080fd5b9083019060e082860312156147aa57600080fd5b6147b2613bfe565b825181526147c260208401614751565b60208201526147d360408401614662565b60408201526147e460608401614662565b60608201526080830151608082015260a08301518281111561480557600080fd5b61481187828601614679565b60a08301525060c083015160c082015280935050505092915050565b60008060006060848603121561484257600080fd5b8351925060208401519150604084015190509250925092565b80518015158114613a3857600080fd5b60006020828403121561487d57600080fd5b610e268261485b565b8051613a388161408f565b60008060008060008060c087890312156148aa57600080fd5b86516148b58161408f565b60208801519096506148c68161408f565b60408801519095506148d78161409e565b60608801519094506148e88161409e565b60808801519093506148f98161409e565b60a088015190925061490a8161409e565b809150509295509295509295565b60006060828403121561492a57600080fd5b604051606081018181106001600160401b038211171561494c5761494c613b9c565b604052825161495a8161409e565b8152602083015161496a8161409e565b602082015261497b6040840161485b565b60408201529392505050565b60006020828403121561499957600080fd5b8151610e268161408f565b600082601f8301126149b557600080fd5b815160206149c5613cd38361463f565b82815260059290921b840181019181810190868411156149e457600080fd5b8286015b848110156146db5780516149fb81613a18565b83529183019183016149e8565b600082601f830112614a1957600080fd5b81516020614a29613cd38361463f565b82815260059290921b84018101918181019086841115614a4857600080fd5b8286015b848110156146db578051614a5f8161408f565b8352918301918301614a4c565b600082601f830112614a7d57600080fd5b81516020614a8d613cd38361463f565b82815260059290921b84018101918181019086841115614aac57600080fd5b8286015b848110156146db5780516001600160401b03811115614acf5760008081fd5b8701603f81018913614ae15760008081fd5b848101516040614af3613cd383613c8d565b8281528b82848601011115614b085760008081fd5b614b17838983018487016139b5565b8652505050918301918301614ab0565b600060208284031215614b3957600080fd5b81516001600160401b0380821115614b5057600080fd5b908301906103e08286031215614b6557600080fd5b614b6d613c20565b8251815260208301516020820152614b87604084016144a7565b6040820152614b9860608401614751565b6060820152614ba960808401614662565b6080820152614bba60a08401614662565b60a0820152614bcb60c08401614662565b60c082015260e083015160e08201526101008084015181830152506101208084015183811115614bfa57600080fd5b614c0688828701614679565b828401525050610140614c1a8185016144a7565b90820152610160614c2c84820161454f565b90820152610180614c3e848201614886565b908201526101a083810151908201526101c0614c5b81850161485b565b908201526101e08381015190820152610200808401519082015261022080840151908201526102408084015183811115614c9457600080fd5b614ca0888287016149a4565b8284015250506102608084015183811115614cba57600080fd5b614cc688828701614a08565b8284015250506102808084015183811115614ce057600080fd5b614cec88828701614a6c565b8284015250506102a08084015183811115614d0657600080fd5b614d1288828701614a6c565b8284015250506102c09150614d288284016144a7565b828201526102e09150614d3c8284016144a7565b91810191909152610300828101519082015261032080830151908201526103408083015190820152610360808301519082015261038080830151908201526103a080830151908201526103c091820151918101919091529392505050565b604081526000614dad60408301856139d9565b8281036020840152614dbf81856139d9565b95945050505050565b60008060408385031215614ddb57600080fd5b8251614de681613df2565b602084015190925061412c81613a18565b600080600080600060a08688031215614e0f57600080fd5b85519450602086015193506040860151925060608601519150614e346080870161485b565b90509295509295909350565b80820180821115610a4657610a466143ed565b60008151614e658185602086016139b5565b9290920192915050565b60008251614e818184602087016139b5565b9190910192915050565b81516001600160a01b0316815261026081016020830151614eb760208401826001600160a01b03169052565b506040830151614ed260408401826001600160a01b03169052565b506060830151614eed60608401826001600160a01b03169052565b506080830151608083015260a083015160a083015260c083015160c083015260e0830151614f2660e08401826001600160401b03169052565b50610100838101516001600160401b031690830152610120808401511515908301526101408084015160ff16908301526101609283015180516001600160a01b03908116948401949094526020810151841661018084015260408101516101a084015260608101516101c084015260808101516101e084015260a0810151151561020084015260c081015190931661022083015260e0909201516102409091015290565b634e487b7160e01b600052602160045260246000fd5b600080600080600080600060e0888a031215614ffb57600080fd5b875161500681613a18565b602089015190975061501781613c73565b604089015190965061502881613df2565b606089015190955061503981613df2565b608089015190945061504a81613df2565b60a089015190935061505b8161408f565b915061506960c0890161485b565b905092959891949750929550565b6000600160ff1b820161508c5761508c6143ed565b5060000390565b60008160020b627fffff1981036150ac576150ac6143ed565b60000392915050565b72608060405234801561001057600080fd5b507360681b8152606088901b6001600160601b0319166013820152607f60f81b60278201527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060288201526102ab60f51b6048820152865160009061513381604a850160208c016139b5565b6a4030802b30001cb00079ff60a91b604a91840191820152703040302040c829319a58f854b0710dc0a960791b605582015261519461517e615178606684018b614e53565b89614e53565b696084526020816024817360b01b8152600a0190565b90506151ac818760601b6001600160601b0319169052565b6202d7d360ed1b60148201526152276152066152006151cd60178501615178565b7f573d6000fd5b5060805160003681823780813683855af491503d81823e8180158152600360fd1b602082015260210190565b86614e53565b742b9ec179ad9ec17eff50b239b7b631a180040a800560591b815260150190565b9a995050505050505050505056fea2646970667358221220a88bb828ea4fbdcf539b8dbb00f292da1f0aa1f5cf9853979e251382d6f489a164736f6c63430008150033000000000000000000000000000000000000000000000000000000000000178e000000000000000000000000920d8a6c930e80ed1a11d53972a2fb5c8afe6393000000000000000000000000ce57fd80255a1ed6608bf4493fee83f962da62160000000000000000000000004dfbd084a4db494a616114b2cdba225cc4d25f690000000000000000000000003347056fd3b4d8d1597e39e8e220baae7e269278000000000000000000000000f55192dcd29bd26a9d65456b8324ab68f21aace4000000000000000000000000fd513630f697a9c1731f196185fb9eba6eaac20b00000000000000000000000003a520b32c04bf3beef7beb72e919cf822ed34f1000000000000000000000000ee7cc8524f945d2f0a42b0c776a157c03cf9844a00000000000000000000000006e16fe039d0bc284da1a6973d3ed627a8f792ba00000000000000000000000060bb12f233e7dc7f801e0728bd7818d301a0a6d7000000000000000000000000d19fe45a9ea02bba25ec03fa7b19b33e7b6a03910000000000000000000000003416bdda0a6eaed02b5e9c5583081641901dbf2a000000000000000000000000eacfb41752384945f8d5289a044ac1431ccb4dce0000000000000000000000001f76a152cd4f84a18ee6296f2a04794b756ec332