0 txs
2.5m calls
constructor
constructor()
functions
getAddresses
viewfunction getAddresses() view returns (tuple)
getAllBorrowingPairs
viewfunction getAllBorrowingPairs(uint8 _collateralIndex) view returns (tuple[], tuple[], tuple[][])
getBorrowingFeePerBlockCap
viewfunction getBorrowingFeePerBlockCap() view returns (tuple)
getBorrowingGroup
viewfunction getBorrowingGroup(uint8 _collateralIndex, uint16 _groupIndex) view returns (tuple)
getBorrowingGroupOi
viewfunction getBorrowingGroupOi(uint8 _collateralIndex, uint16 _groupIndex) view returns (tuple)
getBorrowingGroupPendingAccFees
viewfunction getBorrowingGroupPendingAccFees(uint8 _collateralIndex, uint16 _groupIndex, uint256 _currentBlock) view returns (uint64 accFeeLong, uint64 accFeeShort, uint64 groupAccFeeLongDelta, uint64 groupAccFeeShortDelta)
getBorrowingGroups
viewfunction getBorrowingGroups(uint8 _collateralIndex, uint16[] _indices) view returns (tuple[], tuple[])
getBorrowingInitialAccFees
viewfunction getBorrowingInitialAccFees(uint8 _collateralIndex, address _trader, uint32 _index) view returns (tuple)
getBorrowingPair
viewfunction getBorrowingPair(uint8 _collateralIndex, uint16 _pairIndex) view returns (tuple)
getBorrowingPairFeePerBlockCap
viewfunction getBorrowingPairFeePerBlockCap(uint8 _collateralIndex, uint16 _pairIndex) view returns (tuple)
getBorrowingPairFeePerBlockCaps
viewfunction getBorrowingPairFeePerBlockCaps(uint8 _collateralIndex, uint16[] _indices) view returns (tuple[])
getBorrowingPairGroupIndex
viewfunction getBorrowingPairGroupIndex(uint8 _collateralIndex, uint16 _pairIndex) view returns (uint16 groupIndex)
getBorrowingPairGroups
viewfunction getBorrowingPairGroups(uint8 _collateralIndex, uint16 _pairIndex) view returns (tuple[])
getBorrowingPairOi
viewfunction getBorrowingPairOi(uint8 _collateralIndex, uint16 _pairIndex) view returns (tuple)
getBorrowingPairPendingAccFees
viewfunction getBorrowingPairPendingAccFees(uint8 _collateralIndex, uint16 _pairIndex, uint256 _currentBlock) view returns (uint64 accFeeLong, uint64 accFeeShort, uint64 pairAccFeeLongDelta, uint64 pairAccFeeShortDelta)
getPairMaxOi
viewfunction getPairMaxOi(uint8 _collateralIndex, uint16 _pairIndex) view returns (uint256)
getPairMaxOiCollateral
viewfunction getPairMaxOiCollateral(uint8 _collateralIndex, uint16 _pairIndex) view returns (uint256)
getPairOiCollateral
viewfunction getPairOiCollateral(uint8 _collateralIndex, uint16 _pairIndex, bool _long) view returns (uint256)
getPairOisCollateral
viewfunction getPairOisCollateral(uint8 _collateralIndex, uint16 _pairIndex) view returns (uint256 longOi, uint256 shortOi)
getTradeBorrowingFee
viewfunction getTradeBorrowingFee(tuple _input) view returns (uint256 feeAmountCollateral)
getTradeLiquidationPrice
viewfunction getTradeLiquidationPrice(tuple _input) view returns (uint256)
hasRole
viewfunction hasRole(address _account, uint8 _role) view returns (bool)
hasRoles
viewfunction hasRoles(address _account, uint8 _roleA, uint8 _roleB) view returns (bool)
withinMaxBorrowingGroupOi
viewfunction withinMaxBorrowingGroupOi(uint8 _collateralIndex, uint16 _pairIndex, bool _long, uint256 _positionSizeCollateral) view returns (bool)
handleTradeBorrowingCallback
nonpayablefunction handleTradeBorrowingCallback(uint8 _collateralIndex, address _trader, uint16 _pairIndex, uint32 _index, uint256 _positionSizeCollateral, bool _open, bool _long)
initialize
nonpayablefunction initialize(address _govTimelock)
initializeBorrowingFeePerBlockCap
nonpayablefunction initializeBorrowingFeePerBlockCap(tuple _feePerBlockCap)
resetTradeBorrowingFees
nonpayablefunction resetTradeBorrowingFees(uint8 _collateralIndex, address _trader, uint16 _pairIndex, uint32 _index, bool _long)
setBorrowingFeePerBlockCap
nonpayablefunction setBorrowingFeePerBlockCap(tuple _feePerBlockCap)
setBorrowingGroupParams
nonpayablefunction setBorrowingGroupParams(uint8 _collateralIndex, uint16 _groupIndex, tuple _value)
setBorrowingGroupParamsArray
nonpayablefunction setBorrowingGroupParamsArray(uint8 _collateralIndex, uint16[] _indices, tuple[] _values)
setBorrowingPairFeePerBlockCapArray
nonpayablefunction setBorrowingPairFeePerBlockCapArray(uint8 _collateralIndex, uint16[] _indices, tuple[] _values)
setBorrowingPairParams
nonpayablefunction setBorrowingPairParams(uint8 _collateralIndex, uint16 _pairIndex, tuple _value)
setBorrowingPairParamsArray
nonpayablefunction setBorrowingPairParamsArray(uint8 _collateralIndex, uint16[] _indices, tuple[] _values)
setRoles
nonpayablefunction setRoles(address[] _accounts, uint8[] _roles, bool[] _values)
events
AccessControlUpdated
event AccessControlUpdated(address target, uint8 role, bool access)
AddressesUpdated
event AddressesUpdated((address gns, address gnsStaking, address treasury) addresses)
BorrowingFeePerBlockCapUpdated
event BorrowingFeePerBlockCapUpdated(uint32 minP, uint32 maxP)
BorrowingGroupAccFeesUpdated
event BorrowingGroupAccFeesUpdated(uint8 indexed collateralIndex, uint16 indexed groupIndex, uint256 currentBlock, uint64 accFeeLong, uint64 accFeeShort)
BorrowingGroupOiUpdated
event BorrowingGroupOiUpdated(uint8 indexed collateralIndex, uint16 indexed groupIndex, bool long, bool increase, uint72 delta, uint72 newOiLong, uint72 newOiShort)
BorrowingGroupUpdated
event BorrowingGroupUpdated(uint8 indexed collateralIndex, uint16 indexed groupIndex, uint32 feePerBlock, uint72 maxOi, uint48 feeExponent)
BorrowingInitialAccFeesStored
event BorrowingInitialAccFeesStored(uint8 indexed collateralIndex, address indexed trader, uint16 indexed pairIndex, uint32 index, bool long, uint64 initialPairAccFee, uint64 initialGroupAccFee)
BorrowingPairAccFeesUpdated
event BorrowingPairAccFeesUpdated(uint8 indexed collateralIndex, uint16 indexed pairIndex, uint256 currentBlock, uint64 accFeeLong, uint64 accFeeShort)
BorrowingPairFeePerBlockCapUpdated
event BorrowingPairFeePerBlockCapUpdated(uint8 indexed collateralIndex, uint16 indexed pairIndex, uint32 minP, uint32 maxP)
BorrowingPairGroupUpdated
event BorrowingPairGroupUpdated(uint8 indexed collateralIndex, uint16 indexed pairIndex, uint16 prevGroupIndex, uint16 newGroupIndex)
BorrowingPairOiUpdated
event BorrowingPairOiUpdated(uint8 indexed collateralIndex, uint16 indexed pairIndex, bool long, bool increase, uint72 delta, uint72 newOiLong, uint72 newOiShort)
BorrowingPairParamsUpdated
event BorrowingPairParamsUpdated(uint8 indexed collateralIndex, uint16 indexed pairIndex, uint16 indexed groupIndex, uint32 feePerBlock, uint48 feeExponent, uint72 maxOi)
Initialized
event Initialized(uint8 version)
TradeBorrowingCallbackHandled
event TradeBorrowingCallbackHandled(uint8 indexed collateralIndex, address indexed trader, uint16 indexed pairIndex, uint32 index, bool open, bool long, uint256 positionSizeCollateral)
errors
AboveMax
error AboveMax()
AlreadyExists
error AlreadyExists()
BelowMin
error BelowMin()
BlockOrder
error BlockOrder()
BorrowingWrongExponent
error BorrowingWrongExponent()
BorrowingZeroGroup
error BorrowingZeroGroup()
DoesntExist
error DoesntExist()
InitError
error InitError()
InsufficientBalance
error InsufficientBalance()
InvalidAddress
error InvalidAddress()
InvalidAddresses
error InvalidAddresses()
InvalidCollateralIndex
error InvalidCollateralIndex()
InvalidInputLength
error InvalidInputLength()
NotAllowed
error NotAllowed()
NotAuthorized
error NotAuthorized()
Overflow
error Overflow()
Overflow
error Overflow()
Paused
error Paused()
UnsupportedChain
error UnsupportedChain()
WrongAccess
error WrongAccess()
WrongIndex
error WrongIndex()
WrongLength
error WrongLength()
WrongOrder
error WrongOrder()
WrongOrderType
error WrongOrderType()
WrongParams
error WrongParams()
WrongTradeType
error WrongTradeType()
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61588680620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102405760003560e01c80637bdbfe5a11610145578063d2b9099a116100bd578063f6f7c9481161008c578063fc79e92911610071578063fc79e9291461063a578063fd03e0481461064d578063fff247401461066d57600080fd5b8063f6f7c948146105f1578063fbbf97401461061957600080fd5b8063d2b9099a14610592578063e6a6633f146105a5578063eb1802f8146105cb578063eb2ea3a2146105de57600080fd5b80639fed948111610114578063ab6192ed116100f9578063ab6192ed14610500578063b9c972291461056c578063c4d66de81461057f57600080fd5b80639fed948114610468578063a39fac121461047b57600080fd5b80637bdbfe5a1461040c578063801c79611461041f57806392748a7d1461044257806395a8c58d1461045557600080fd5b8063197b65a5116101d857806348da5b38116101a75780635667b5c01161018c5780635667b5c0146103c65780635d5bf24d146103d957806361ddacb0146103f957600080fd5b806348da5b38146103915780634fa72788146103b357600080fd5b8063197b65a5146103455780631a733ea014610358578063274d12781461036b57806333b516cf1461037e57600080fd5b80630a67b9a3116102145780630a67b9a3146102b95780630c7be6ca146102d9578063101e65031461031f57806313a9baae1461033257600080fd5b806277b57e1461024557806302c4e7c11461026e57806306c01bef146102835780630804db9314610298575b600080fd5b6102586102533660046142f3565b610680565b604051610265919061432c565b60405180910390f35b61028161027c3660046143b5565b6106b7565b005b61028b610739565b6040516102659190614464565b6102ab6102a6366004614547565b61075a565b604051908152602001610265565b6102cc6102c7366004614601565b610765565b6040516102659190614655565b6102ec6102e73660046146b5565b61077a565b604080516001600160401b0395861681529385166020850152918416918301919091529091166060820152608001610265565b61028161032d3660046146f6565b61079c565b6102586103403660046142f3565b610901565b61028161035336600461478f565b61092f565b61028161036636600461478f565b6109a9565b6102ab6103793660046142f3565b610af4565b61028161038c3660046147fb565b610b00565b6103a461039f36600461484e565b610b72565b60405161026593929190614a22565b6102816103c1366004614aa9565b610b8d565b6102ab6103d43660046142f3565b610bc1565b6103ec6103e73660046142f3565b610bcd565b6040516102659190614b1a565b6102ab610407366004614b76565b610c02565b61028b61041a3660046142f3565b610c0d565b61043261042d366004614b8f565b610c2b565b6040519015158152602001610265565b610281610450366004614be0565b610c42565b610432610463366004614c8b565b610c8c565b610281610476366004614cc0565b610ce3565b6104ce604080516060810182526000808252602082018190529181019190915250604080516060810182526003546001600160a01b03908116825260045481166020830152600554169181019190915290565b6040805182516001600160a01b0390811682526020808501518216908301529282015190921690820152606001610265565b61051361050e366004614d05565b610d29565b604051610265919060006080820190506001600160401b038084511683528060208501511660208401525065ffffffffffff604084015116604083015269ffffffffffffffffffff606084015116606083015292915050565b61043261057a366004614d50565b610d58565b61028161058d366004614d95565b610e06565b6102ec6105a03660046146b5565b610f40565b6105b86105b33660046142f3565b610f51565b60405161ffff9091168152602001610265565b6102816105d9366004614db2565b610f5d565b6102ab6105ec366004614e4e565b610fa7565b6106046105ff3660046142f3565b610fb4565b60408051928352602083019190915201610265565b61062c610627366004614601565b610fcd565b604051610265929190614e8e565b610281610648366004614eb3565b610fe7565b61066061065b3660046142f3565b611016565b6040516102659190614f40565b6103ec61067b3660046142f3565b611022565b6040805160808101825260008082526020820181905291810182905260608101919091526106ae8383611057565b90505b92915050565b60026106c2816110fd565b60405163f5b5384560e01b8152739ab74bf9e3d75e5a27f1de5d045b48064f7445759063f5b53845906107019089908990899089908990600401615005565b60006040518083038186803b15801561071957600080fd5b505af415801561072d573d6000803e3d6000fd5b50505050505050505050565b6040805180820190915260008082526020820152610755611127565b905090565b60006106b182611172565b6060610772848484611503565b949350505050565b60008060008061078b87878761166b565b935093509350935093509350935093565b60006107a7816110fd565b85841415806107b65750858214155b156107d457604051637db491eb60e01b815260040160405180910390fd5b60005b868110156108f75760008686838181106107f3576107f361507d565b90506020020160208101906108089190615093565b600381111561081957610819615067565b1480156108545750338888838181106108345761083461507d565b90506020020160208101906108499190614d95565b6001600160a01b0316145b1561087257604051631eb49d6d60e11b815260040160405180910390fd5b6108ef8888838181106108875761088761507d565b905060200201602081019061089c9190614d95565b8787848181106108ae576108ae61507d565b90506020020160208101906108c39190615093565b8686858181106108d5576108d561507d565b90506020020160208101906108ea91906150ae565b611896565b6001016107d7565b5050505050505050565b6040805160808101825260008082526020820181905291810182905260608101919091526106ae8383611938565b6001600361093d82826119de565b604051638d37111360e01b8152739ab74bf9e3d75e5a27f1de5d045b48064f74457590638d37111390610974908690600401614464565b60006040518083038186803b15801561098c57600080fd5b505af41580156109a0573d6000803e3d6000fd5b50505050505050565b600054601490610100900460ff161580156109cb575060005460ff8083169116105b610a335760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100179055604051638d37111360e01b8152739ab74bf9e3d75e5a27f1de5d045b48064f74457590638d37111390610a7e908590600401614464565b60006040518083038186803b158015610a9657600080fd5b505af4158015610aaa573d6000803e3d6000fd5b50506000805461ff0019169055505060405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60006106ae8383611a06565b6002610b0b816110fd565b60405163debdc6bf60e01b8152739ab74bf9e3d75e5a27f1de5d045b48064f7445759063debdc6bf90610b469087908790879060040161512e565b60006040518083038186803b158015610b5e57600080fd5b505af41580156108f7573d6000803e3d6000fd5b6060806060610b8084611adb565b9250925092509193909250565b333014610bad57604051631b17ff5560e21b815260040160405180910390fd5b610bba8585858585611f05565b5050505050565b60006106ae83836121dc565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526106ae8383612224565b60006106b1826122e1565b60408051808201909152600080825260208201526106ae83836126b4565b6000610c398585858561274e565b95945050505050565b6002610c4d816110fd565b604051633c605d2d60e11b8152739ab74bf9e3d75e5a27f1de5d045b48064f744575906378c0ba5a90610701908990899089908990899060040161514f565b6001600160a01b038216600090815260026020526040812081836003811115610cb757610cb7615067565b6003811115610cc857610cc8615067565b815260208101919091526040016000205460ff169392505050565b6002610cee816110fd565b604051633cf1356b60e01b8152739ab74bf9e3d75e5a27f1de5d045b48064f74457590633cf1356b90610b46908790879087906004016151d4565b6040805160808101825260008082526020820181905291810182905260608101919091526107728484846128b9565b6001600160a01b038316600090815260026020526040812081846003811115610d8357610d83615067565b6003811115610d9457610d94615067565b815260208101919091526040016000205460ff168061077257506001600160a01b038416600090815260026020526040812090836003811115610dd957610dd9615067565b6003811115610dea57610dea615067565b815260208101919091526040016000205460ff16949350505050565b600054610100900460ff1615808015610e265750600054600160ff909116105b80610e405750303b158015610e40575060005460ff166001145b610ea35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a2a565b6000805460ff191660011790558015610ec6576000805461ff0019166101001790555b6001600160a01b038216610eed57604051632c1c702960e21b815260040160405180910390fd5b610efa8260006001611896565b8015610f3c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610ae8565b5050565b60008060008061078b87878761297c565b60006106ae8383612c15565b6002610f68816110fd565b604051631334601f60e01b8152739ab74bf9e3d75e5a27f1de5d045b48064f74457590631334601f9061070190899089908990899089906004016151f5565b6000610772848484612d57565b600080610fc18484612d7e565b915091505b9250929050565b606080610fdb858585612e9e565b91509150935093915050565b33301461100757604051631b17ff5560e21b815260040160405180910390fd5b6109a08787878787878761314f565b60606106ae83836132ae565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526106ae83836133b2565b604080516080810182526000808252602082018190529181018290526060810191909152611083613473565b60ff841660009081526002919091016020908152604080832061ffff86168452825291829020825160808101845290546001600160481b038082168352600160481b8204811693830193909352600160901b81049092169281019290925264ffffffffff600160d81b909104166060820152905092915050565b6111073382610c8c565b61112457604051631b17ff5560e21b815260040160405180910390fd5b50565b6040805180820190915260008082526020820152611143613473565b604080518082019091526007919091015463ffffffff8082168352640100000000909104166020820152919050565b60008061117d613473565b835160ff16600090815260059190910160209081526040808320828701516001600160a01b03168452825280832060608088015163ffffffff168552908352818420825160808101845290546001600160401b038082168352600160401b82041694820194909452600160801b840465ffffffffffff1692810192909252600160b01b90920469ffffffffffffffffffff16918101919091529150611220613473565b845160ff166000908152600191909101602090815260408083208188015161ffff168452825280832080548251818502810185019093528083529193909284015b82821015611312576000848152602090819020604080516101208101825260028602909201805461ffff8116845265ffffffffffff62010000820416848601526001600160401b03600160401b808304821694860194909452600160801b80830482166060870152600160c01b928390048216608087015260019384015480831660a0880152948504821660c08701528404811660e086015292049091166101008301529083529092019101611261565b50506040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152929350611368915050565b81511561138d57816000815181106113825761138261507d565b602002602001015190505b60008251600014806113b65750836040015165ffffffffffff16826020015165ffffffffffff16115b156114165783518351156113e15786608001516113d7578260e00151611400565b8260c00151611400565b611400876000015188604001516113f661347e565b8a60800151613554565b61140a919061526d565b6001600160401b031690505b82515b80156114b05760008060006114528a600001516001866114399190615294565b898b8e604001518f6080015161144d61347e565b613582565b925092509250816001600160401b0316836001600160401b0316116114775781611479565b825b61148c906001600160401b0316866152a7565b9450801561149c575050506114b0565b505050806114a9906152ba565b9050611419565b5060646402540be4006103e8838960c001518a60a001516114d191906152d1565b6114db91906152d1565b6114e591906152fe565b6114ef91906152fe565b6114f991906152fe565b9695505050505050565b6060600061150f613473565b9050600061151b613473565b604080518082019091526007919091015463ffffffff80821683526401000000009091041660208201529050836000816001600160401b0381111561156257611562614485565b6040519080825280602002602001820160405280156115a757816020015b60408051808201909152600080825260208201528152602001906001900390816115805790505b50905060005b8281101561165f5760ff891660009081526006860160205260408120818a8a858181106115dc576115dc61507d565b90506020020160208101906115f19190615312565b61ffff168152602080820192909252604090810160002081518083019092525463ffffffff80821683526401000000009091041691810182905291506116375784611639565b805b83838151811061164b5761164b61507d565b6020908102919091010152506001016115ad565b50979650505050505050565b600080600080600061167b613473565b60ff891660009081526020828152604080832061ffff8c1684528252808320815160a081018352905463ffffffff811682526001600160401b036401000000008204811694830194909452600160601b81049093169181019190915265ffffffffffff600160a01b830481166060830152600160d01b90920490911660808201529192508061170a8b8b612d7e565b9150915061188160405180610160016040528085602001516001600160401b0316815260200185604001516001600160401b03168152602001848152602001838152602001856000015163ffffffff1681526020018b8152602001856060015165ffffffffffff1681526020018660020160008f60ff1660ff16815260200190815260200160002060008e61ffff1661ffff16815260200190815260200160002060000160129054906101000a90046001600160481b03166001600160481b03168152602001856080015165ffffffffffff1681526020016117e93090565b6001600160a01b031663bb33a55b8f6040518263ffffffff1660e01b815260040161181d919060ff91909116815260200190565b60a060405180830381865afa15801561183a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185e9190615346565b606001516001600160801b0316815260200161187a8e8e6126b4565b9052613707565b929e919d509b50909950975050505050505050565b6001600160a01b038316600090815260026020526040812082918460038111156118c2576118c2615067565b60038111156118d3576118d3615067565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8d7fdec37f50c07219a6a0859420936836eb9254bf412035e3acede18b8b093d83838360405161192b939291906153cc565b60405180910390a1505050565b604080516080810182526000808252602082018190529181018290526060810191909152611964613473565b60ff841660009081526004919091016020908152604080832061ffff86168452825291829020825160808101845290546001600160481b038082168352600160481b8204811693830193909352600160901b81049092169281019290925264ffffffffff600160d81b909104166060820152905092915050565b6119e9338383610d58565b610f3c57604051631b17ff5560e21b815260040160405180910390fd5b60006402540be400611a16613473565b60ff851660009081526002919091016020908152604080832061ffff87168452909152902054600160901b90046001600160481b03163060405163bb33a55b60e01b815260ff871660048201526001600160a01b03919091169063bb33a55b9060240160a060405180830381865afa158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba9190615346565b606001516001600160801b0316611ad191906152d1565b6106ae91906152fe565b60608060606000611aea613473565b90506000306001600160a01b031663b81b2b716040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b509190615410565b905060008161ffff166001600160401b03811115611b7057611b70614485565b604051908082528060200260200182016040528015611bc957816020015b6040805160a081018252600080825260208083018290529282018190526060820181905260808201528252600019909201910181611b8e5790505b50905060008261ffff166001600160401b03811115611bea57611bea614485565b604051908082528060200260200182016040528015611c3c57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181611c085790505b50905060008361ffff166001600160401b03811115611c5d57611c5d614485565b604051908082528060200260200182016040528015611c9057816020015b6060815260200190600190039081611c7b5790505b50905060005b8461ffff168161ffff161015611ef55760ff8a1660009081526020878152604080832061ffff851680855290835292819020815160a081018352905463ffffffff811682526001600160401b036401000000008204811694830194909452600160601b81049093169181019190915265ffffffffffff600160a01b830481166060830152600160d01b90920490911660808201528551909186918110611d3e57611d3e61507d565b60209081029190910181019190915260ff8b166000908152600288018252604080822061ffff851680845290845291819020815160808101835290546001600160481b038082168352600160481b8204811695830195909552600160901b810490941691810191909152600160d81b90920464ffffffffff16606083015284518591908110611dcf57611dcf61507d565b60209081029190910181019190915260ff8b166000908152600188018252604080822061ffff8516835283528082208054825181860281018601909352808352919390929084015b82821015611ec8576000848152602090819020604080516101208101825260028602909201805461ffff8116845265ffffffffffff62010000820416848601526001600160401b03600160401b808304821694860194909452600160801b80830482166060870152600160c01b928390048216608087015260019384015480831660a0880152948504821660c08701528404811660e086015292049091166101008301529083529092019101611e17565b50505050828261ffff1681518110611ee257611ee261507d565b6020908102919091010152600101611c96565b5091989097509095509350505050565b8430604051630e97fda160e11b815260ff831660048201526001600160a01b039190911690631d2ffb4290602401602060405180830381865afa158015611f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f749190615429565b611f91576040516301f7dc7360e51b815260040160405180910390fd5b6000611f9b61347e565b9050600080611fab89888561166b565b505091509150600080611fc88b611fc28d8c612c15565b8761297c565b5050915091506000604051806080016040528089611fe65785611fe8565b865b6001600160401b03168152602001896120015783612003565b845b6001600160401b0316815260200161201a886139d9565b65ffffffffffff1681526000602090910152905080612037613473565b60050160008e60ff1660ff16815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008b63ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160000160106101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160000160166101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055509050508961ffff168b6001600160a01b03168d60ff167f49a2b4d58db9411e83e598fad88462d2474d8f9aae8a9ba41acdfde33f4f37518c8c866000015187602001516040516121c6949392919063ffffffff94909416845291151560208401526001600160401b03908116604084015216606082015260800190565b60405180910390a4505050505050505050505050565b60006121e6613473565b60ff9390931660009081526002939093016020908152604080852061ffff94909416855292905250902054600160901b90046001600160481b031690565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152612257613473565b60ff841660009081526020918252604080822061ffff86168352835290819020815160a081018352905463ffffffff811682526001600160401b036401000000008204811694830194909452600160601b81049093169181019190915265ffffffffffff600160a01b830481166060830152600160d01b9092049091166080820152905092915050565b60008073a3be4e1d4677b08e95f540f685249f2034561a22633a5d2e6761230b602086018661484e565b600061231d6060880160408901615312565b6103e861233260e08a013560c08b01356152d1565b61233c91906152fe565b6040516001600160e01b031960e087901b16815260ff90941660048501526001600160a01b03909216602484015261ffff1660448301526064820152608401602060405180830381865af4158015612398573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bc9190615410565b905060006123d2610120850161010086016150ae565b6123dd576000612485565b6040805160e0810190915261248590806123fa602088018861484e565b60ff1681526020018660200160208101906124159190614d95565b6001600160a01b031681526020016124336060880160408901615312565b61ffff16815260200161244c6080880160608901615446565b63ffffffff16815260200161246760c0880160a089016150ae565b151581526020018660c0013581526020018660e00135815250611172565b905061077261249a60a0860160808701615463565b6001600160401b03166124b360c0870160a088016150ae565b60c087013560e08801356124c787876152a7565b3063bb33a55b6124da60208d018d61484e565b6040516001600160e01b031960e084901b16815260ff909116600482015260240160a060405180830381865afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190615346565b608001516001600160801b031661255c368c90038c016101208d016154b4565b306001600160a01b03166375cd812d8d602001602081019061257e9190614d95565b8e60600160208101906125919190615446565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff16602482015260440161012060405180830381865afa1580156125e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126059190615553565b60c00151306001600160a01b031663d6bfb0558e602001602081019061262b9190614d95565b8f604001602081019061263e9190615312565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615410565b613a06565b604080518082019091526000808252602082015260006126d2613473565b60ff85166000908152600682016020908152604080832061ffff8816845282529182902082518084019093525463ffffffff808216845264010000000090910416908201819052919250906107725760408051808201909152600783015463ffffffff8082168352640100000000909104166020820152610c39565b600080612759613473565b60ff87166000908152600491909101602052604081209061277a8888612c15565b61ffff1681526020808201929092526040908101600020815160808101835290546001600160481b038082168352600160481b8204811694830194909452600160901b8104909316918101829052600160d81b90920464ffffffffff16606083015290915015806114f9575060408101516001600160481b03163060405163bb33a55b60e01b815260ff891660048201526001600160a01b03919091169063bb33a55b9060240160a060405180830381865afa15801561283e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128629190615346565b606001516001600160801b031661287e6402540be400866152d1565b61288891906152fe565b8561289757826020015161289a565b82515b6001600160481b03166128ad91906152a7565b11159695505050505050565b6040805160808101825260008082526020820181905291810182905260608101919091526128e5613473565b60ff85166000908152600591909101602090815260408083206001600160a01b0387168452825280832063ffffffff86168452825291829020825160808101845290546001600160401b038082168352600160401b8204169282019290925265ffffffffffff600160801b8304169281019290925269ffffffffffffffffffff600160b01b90910416606082015290509392505050565b600080600080600061298c613473565b60ff89166000818152600383016020908152604080832061ffff8d16808552908352818420825160a081018452905463ffffffff8116825264010000000081046001600160401b0390811683870152600160601b82041682850152600160a01b810465ffffffffffff908116606080850191909152600160d01b9092041660808084019190915296865260048801855283862092865291845282852083519687018452546001600160481b038082168852600160481b8204811695880195909552600160901b810490941692860192909252600160d81b90920464ffffffffff16918401919091529293503060405163bb33a55b60e01b815260ff8d1660048201526001600160a01b03919091169063bb33a55b9060240160a060405180830381865afa158015612ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae59190615346565b60600151905061188160405180610160016040528085602001516001600160401b0316815260200185604001516001600160401b031681526020016402540be400846001600160801b031686600001516001600160481b0316612b4891906152d1565b612b5291906152fe565b81526020016402540be400846001600160801b031686602001516001600160481b0316612b7f91906152d1565b612b8991906152fe565b8152602001856000015163ffffffff1681526020018b8152602001856060015165ffffffffffff16815260200184604001516001600160481b03168152602001856080015165ffffffffffff168152602001836001600160801b031681526020016040518060400160405280600063ffffffff168152602001600063ffffffff16815250815250613707565b600080612c20613473565b60ff851660009081526001919091016020908152604080832061ffff87168452825280832080548251818502810185019093528083529193909284015b82821015612d0e576000848152602090819020604080516101208101825260028602909201805461ffff8116845265ffffffffffff62010000820416848601526001600160401b03600160401b808304821694860194909452600160801b80830482166060870152600160c01b928390048216608087015260019384015480831660a0880152948504821660c08701528404811660e086015292049091166101008301529083529092019101612c5d565b5050505090508051600014612d4d578060018251612d2c9190615294565b81518110612d3c57612d3c61507d565b602002602001015160000151610772565b6000949350505050565b6000806000612d668686612d7e565b9150915083612d7557806114f9565b50949350505050565b6000806000612d8b613473565b60ff861660009081526002919091016020908152604080832061ffff88168452909152812091503060405163bb33a55b60e01b815260ff881660048201526001600160a01b03919091169063bb33a55b9060240160a060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190615346565b606081015183549192506402540be40091612e4491906001600160481b0316615609565b6001600160801b0316612e5791906152fe565b606082015183546402540be40091612e7e91600160481b90046001600160481b0316615609565b6001600160801b0316612e9191906152fe565b9350935050509250929050565b6060806000612eab613473565b9050836000816001600160401b03811115612ec857612ec8614485565b604051908082528060200260200182016040528015612f2157816020015b6040805160a081018252600080825260208083018290529282018190526060820181905260808201528252600019909201910181612ee65790505b5090506000826001600160401b03811115612f3e57612f3e614485565b604051908082528060200260200182016040528015612f9057816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181612f5c5790505b50905060005b838110156131405760ff8a1660009081526003860160205260408120908a8a84818110612fc557612fc561507d565b9050602002016020810190612fda9190615312565b61ffff1681526020808201929092526040908101600020815160a081018352905463ffffffff811682526001600160401b036401000000008204811694830194909452600160601b81049093169181019190915265ffffffffffff600160a01b830481166060830152600160d01b909204909116608082015283518490839081106130675761306761507d565b60200260200101819052508460040160008b60ff1660ff16815260200190815260200160002060008a8a848181106130a1576130a161507d565b90506020020160208101906130b69190615312565b61ffff1681526020808201929092526040908101600020815160808101835290546001600160481b038082168352600160481b8204811694830194909452600160901b810490931691810191909152600160d81b90910464ffffffffff166060820152825183908390811061312d5761312d61507d565b6020908102919091010152600101612f96565b50909890975095505050505050565b8630604051630e97fda160e11b815260ff831660048201526001600160a01b039190911690631d2ffb4290602401602060405180830381865afa15801561319a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131be9190615429565b6131db576040516301f7dc7360e51b815260040160405180910390fd5b60006131e561347e565b905060006131f38a89612c15565b90506132008a8984613c21565b505061320d8a8284613d4d565b505061321c8a8986888a613e73565b6132298a8286888a613fa6565b841561323c5761323c8a8a8a8a88611f05565b6040805163ffffffff8916815286151560208201528515158183015260608101889052905161ffff8a16916001600160a01b038c169160ff8e16917f1d4556af371eac83495a853ba4f1af8a2d4e0c76ab08719dbd24b372cfc0acc3919081900360800190a450505050505050505050565b60606132b8613473565b60ff841660009081526001919091016020908152604080832061ffff86168452825280832080548251818502810185019093528083529193909284015b828210156133a6576000848152602090819020604080516101208101825260028602909201805461ffff8116845265ffffffffffff62010000820416848601526001600160401b03600160401b808304821694860194909452600160801b80830482166060870152600160c01b928390048216608087015260019384015480831660a0880152948504821660c08701528404811660e0860152920490911661010083015290835290920191016132f5565b50505050905092915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526133e5613473565b60ff841660009081526003919091016020908152604080832061ffff86168452825291829020825160a081018452905463ffffffff811682526001600160401b036401000000008204811693830193909352600160601b81049092169281019290925265ffffffffffff600160a01b820481166060840152600160d01b909104166080820152905092915050565b6000806101f56106b1565b600061a4b1461480613491575061817346145b8061349e575062066eee46145b156135065760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190615410565b617a69460361354f576101a46001600160a01b03166342cbb15c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134e2573d6000803e3d6000fd5b504390565b600080600061356487878761166b565b505091509150836135755780613577565b815b979650505050505050565b600080600080888a8151811061359a5761359a61507d565b60200260200101519050876040015165ffffffffffff16816020015165ffffffffffff16109150600189516135cf9190615294565b8a036135fa576135e58b8260000151878961405f565b93506135f38b888789613554565b925061368a565b6000896136088c60016152a7565b815181106136185761361861507d565b602002602001015190508280156136475750886040015165ffffffffffff16816020015165ffffffffffff1611155b1561365a576000809450945050506136fa565b86613669578060a0015161366f565b80608001515b945086613680578060e00151613686565b8060c001515b9350505b81156136b557602088015161369f908561526d565b88519094506136ae908461526d565b92506136f8565b856136c45780606001516136ca565b80604001515b6136d4908561526d565b9350856136e5578060e001516136eb565b8060c001515b6136f5908461526d565b92505b505b9750975097945050505050565b6000806000808460c001518560a001511015613736576040516334c97e1d60e21b815260040160405180910390fd5b606085015115801561374a57506040850151155b156137655750508251602084015190925090506000806139d2565b6137a76040518060e001604052806000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8560c001518660a001516137bb9190615294565b602082015260608601516040870151108082526137eb57856060015186604001516137e69190615294565b6137ff565b856040015186606001516137ff9190615294565b606082015261012086015160e08701516402540be40091613828916001600160481b0316615609565b6138329190615634565b6001600160801b031660408201819052610140870151516064916103e8916138629163ffffffff909116906152d1565b61386c91906152fe565b61387691906152fe565b60808201526101408601516020015163ffffffff166138995780604001516138d1565b60646103e88761014001516020015163ffffffff1683604001516138bd91906152d1565b6138c791906152fe565b6138d191906152fe565b60a082018190526060820151116138ec5780606001516138f2565b8060a001515b60c0820152608081015160009061390a576000613932565b6139328260200151886080015184608001518a60e001518b61010001518c610120015161406f565b90506000826080015183606001511161394b5781613973565b613973836020015189608001518560c001518b60e001518c61010001518d610120015161406f565b8351909150613983578082613986565b81815b60408a0151919650945060000361399c57600094505b87606001516000036139ad57600093505b87516139ba90869061565a565b96508388602001516139cc919061565a565b95505050505b9193509193565b600065ffffffffffff821115613a0257604051631a93c68960e11b815260040160405180910390fd5b5090565b604080516374adb90b60e01b8152845164ffffffffff9081166004830152602086015181166024830152918501519091166044820152606084015162ffffff9081166064830152608085015116608482015260a48101879052600090819073a3be4e1d4677b08e95f540f685249f2034561a22906374adb90b9060c401602060405180830381865af4158015613aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac49190615410565b90508a60006402540be400606489613adc868f6152d1565b613ae691906152d1565b613af2906103e86152d1565b613afc91906152fe565b613b0691906152fe565b90506000613b14898b6152d1565b613b20906103e86152d1565b90506000898c8e613b31858761567a565b613b3b908861569a565b613b4591906156ca565b613b4f91906156ca565b613b5991906156ca565b90506001886001811115613b6f57613b6f615067565b10613bd9576000613b816002896152fe565b8a5190915064ffffffffff168111613b995780613ba3565b895164ffffffffff165b905060646402540be400613bb7838861569a565b613bc191906156ca565b613bcb91906156ca565b613bd5908361567a565b9150505b60008e613bef57613bea82866156f8565b613bf9565b613bf9828661567a565b905060008113613c0a576000613c0c565b805b96505050505050509998505050505050505050565b600080613c2f85858561166b565b50919350915060009050613c41613473565b60ff871660009081526020918252604080822061ffff891683529092522080546001600160401b03808616640100000000026bffffffffffffffff0000000019918616600160601b029190911673ffffffffffffffffffffffffffffffff0000000019909216919091171781559050613cb9846139d9565b815465ffffffffffff91909116600160a01b0265ffffffffffff60a01b1990911617808255604080518681526001600160401b03640100000000840481166020830152600160601b9093049092169082015261ffff86169060ff8816907f12515cf8712ede0f0e48dd7513c14f22f116a6b3f95bd493da7511cf7dcbadd7906060015b60405180910390a350935093915050565b600080613d5b85858561297c565b50919350915060009050613d6d613473565b60ff871660009081526003919091016020908152604080832061ffff89168452909152902080546001600160401b03808616640100000000026bffffffffffffffff0000000019918616600160601b029190911673ffffffffffffffffffffffffffffffff0000000019909216919091171781559050613dec846139d9565b815465ffffffffffff91909116600160a01b0265ffffffffffff60a01b1990911617808255604080518681526001600160401b03640100000000840481166020830152600160601b9093049092169082015261ffff86169060ff8816907fb4297e7afacc3feba1f03e1a444e70031a62f3ae4d6372c2b0cb3e0e62e8568e90606001613d3c565b6000806000613f23613e83613473565b60ff8a1660009081526002919091016020908152604080832061ffff8c1684529091529020878787305b60405163bb33a55b60e01b815260ff8f1660048201526001600160a01b03919091169063bb33a55b9060240160a060405180830381865afa158015613ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1a9190615346565b6060015161412d565b9250925092508661ffff168860ff167f012adc2457c8405bb9a0f2f3be4cc4bff84f095e6a16535b080facddec7804d38888858888604051613f94959493929190941515855292151560208501526001600160481b0391821660408501528116606084015216608082015260a00190565b60405180910390a35050505050505050565b61ffff841615610bba576000806000613fee613fc0613473565b60ff8a1660009081526004919091016020908152604080832061ffff8c168452909152902087878730613ead565b9250925092508661ffff168860ff167fb36af604fa0e5c3505abb63091d204895a517928138498bb965622d2258bdeb58888858888604051613f94959493929190941515855292151560208501526001600160481b0391821660408501528116606084015216608082015260a00190565b600080600061356487878761297c565b6000806000856001600160481b0316118015614093575060008465ffffffffffff16115b61409e576000614103565b6140b1846001600160801b0385166157fc565b846001600160481b0387166140cb896402540be4006152d1565b6140d591906152fe565b6140df91906157fc565b6140ef63ffffffff8a168b6152d1565b6140f991906152d1565b61410391906152fe565b90506001600160401b0381111561357757604051631a93c68960e11b815260040160405180910390fd5b600080806001600160801b03841661414a6402540be400876152d1565b61415491906152fe565b94506001600160481b0385111561417e57604051631a93c68960e11b815260040160405180910390fd5b506040805160808101825288546001600160481b038082168352600160481b820481166020840152600160901b82041692820192909252600160d81b90910464ffffffffff1660608201528490871561423b578661420c5780600001516001600160481b0316826001600160481b031611614205578051614200908390615810565b614219565b6000614219565b8051614219908390615830565b6001600160481b0316808252895468ffffffffffffffffff19161789556142bc565b866142795780602001516001600160481b0316826001600160481b0316116142725781816020015161426d9190615810565b614289565b6000614289565b8181602001516142899190615830565b6001600160481b031660208201819052895471ffffffffffffffffff0000000000000000001916600160481b9091021789555b80516020909101519093509150955095509592505050565b60ff8116811461112457600080fd5b61ffff8116811461112457600080fd5b6000806040838503121561430657600080fd5b8235614311816142d4565b91506020830135614321816142e3565b809150509250929050565b608081016106b182846001600160481b038082511683528060208301511660208401528060408301511660408401525064ffffffffff60608201511660608301525050565b60008083601f84011261438357600080fd5b5081356001600160401b0381111561439a57600080fd5b6020830191508360208260051b8501011115610fc657600080fd5b6000806000806000606086880312156143cd57600080fd5b85356143d8816142d4565b945060208601356001600160401b03808211156143f457600080fd5b61440089838a01614371565b9096509450604088013591508082111561441957600080fd5b818801915088601f83011261442d57600080fd5b81358181111561443c57600080fd5b89602060608302850101111561445157600080fd5b9699959850939650602001949392505050565b604081016106b18284805163ffffffff908116835260209182015116910152565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156144cb57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b03811182821017156144cb57634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461112457600080fd5b63ffffffff8116811461112457600080fd5b801515811461112457600080fd5b803561454281614529565b919050565b600060e0828403121561455957600080fd5b60405160e081018181106001600160401b038211171561458957634e487b7160e01b600052604160045260246000fd5b6040528235614597816142d4565b815260208301356145a781614502565b602082015260408301356145ba816142e3565b604082015260608301356145cd81614517565b60608201526145de60808401614537565b608082015260a083013560a082015260c083013560c08201528091505092915050565b60008060006040848603121561461657600080fd5b8335614621816142d4565b925060208401356001600160401b0381111561463c57600080fd5b61464886828701614371565b9497909650939450505050565b602080825282518282018190526000919060409081850190868401855b828110156146a857614698848351805163ffffffff908116835260209182015116910152565b9284019290850190600101614672565b5091979650505050505050565b6000806000606084860312156146ca57600080fd5b83356146d5816142d4565b925060208401356146e5816142e3565b929592945050506040919091013590565b6000806000806000806060878903121561470f57600080fd5b86356001600160401b038082111561472657600080fd5b6147328a838b01614371565b9098509650602089013591508082111561474b57600080fd5b6147578a838b01614371565b9096509450604089013591508082111561477057600080fd5b5061477d89828a01614371565b979a9699509497509295939492505050565b6000604082840312156147a157600080fd5b604051604081018181106001600160401b03821117156147d157634e487b7160e01b600052604160045260246000fd5b60405282356147df81614517565b815260208301356147ef81614517565b60208201529392505050565b600080600083850360c081121561481157600080fd5b843561481c816142d4565b9350602085013561482c816142e3565b92506080603f198201121561484057600080fd5b506040840190509250925092565b60006020828403121561486057600080fd5b813561486b816142d4565b9392505050565b60008151808452602080850194506020840160005b838110156148fb576148e887835163ffffffff815116825260208101516001600160401b0380821660208501528060408401511660408501525050606081015165ffffffffffff808216606085015280608084015116608085015250505050565b60a0969096019590820190600101614887565b509495945050505050565b60008151808452602080850194506020840160005b838110156148fb576149658783516001600160481b038082511683528060208301511660208401528060408301511660408401525064ffffffffff60608201511660608301525050565b608096909601959082019060010161491b565b60008151808452602080850194506020840160005b838110156148fb578151805161ffff1688528381015165ffffffffffff16848901526040808201516001600160401b03908116918a01919091526060808301518216908a01526080808301518216908a015260a0808301518216908a015260c0808301518216908a015260e0808301518216908a0152610100918201511690880152610120909601959082019060010161498d565b606081526000614a356060830186614872565b602083820381850152614a488287614906565b915083820360408501528185518084528284019150828160051b85010183880160005b83811015614a9957601f19878403018552614a87838351614978565b94860194925090850190600101614a6b565b50909a9950505050505050505050565b600080600080600060a08688031215614ac157600080fd5b8535614acc816142d4565b94506020860135614adc81614502565b93506040860135614aec816142e3565b92506060860135614afc81614517565b91506080860135614b0c81614529565b809150509295509295909350565b60a081016106b1828463ffffffff815116825260208101516001600160401b0380821660208501528060408401511660408501525050606081015165ffffffffffff808216606085015280608084015116608085015250505050565b60006101c08284031215614b8957600080fd5b50919050565b60008060008060808587031215614ba557600080fd5b8435614bb0816142d4565b93506020850135614bc0816142e3565b92506040850135614bd081614529565b9396929550929360600135925050565b600080600080600060608688031215614bf857600080fd5b8535614c03816142d4565b945060208601356001600160401b0380821115614c1f57600080fd5b614c2b89838a01614371565b90965094506040880135915080821115614c4457600080fd5b818801915088601f830112614c5857600080fd5b813581811115614c6757600080fd5b8960208260061b850101111561445157600080fd5b80356004811061454257600080fd5b60008060408385031215614c9e57600080fd5b8235614ca981614502565b9150614cb760208401614c7c565b90509250929050565b600080600083850360a0811215614cd657600080fd5b8435614ce1816142d4565b93506020850135614cf1816142e3565b92506060603f198201121561484057600080fd5b600080600060608486031215614d1a57600080fd5b8335614d25816142d4565b92506020840135614d3581614502565b91506040840135614d4581614517565b809150509250925092565b600080600060608486031215614d6557600080fd5b8335614d7081614502565b9250614d7e60208501614c7c565b9150614d8c60408501614c7c565b90509250925092565b600060208284031215614da757600080fd5b813561486b81614502565b600080600080600060608688031215614dca57600080fd5b8535614dd5816142d4565b945060208601356001600160401b0380821115614df157600080fd5b614dfd89838a01614371565b90965094506040880135915080821115614e1657600080fd5b818801915088601f830112614e2a57600080fd5b813581811115614e3957600080fd5b8960208260071b850101111561445157600080fd5b600080600060608486031215614e6357600080fd5b8335614e6e816142d4565b92506020840135614e7e816142e3565b91506040840135614d4581614529565b604081526000614ea16040830185614872565b8281036020840152610c398185614906565b600080600080600080600060e0888a031215614ece57600080fd5b8735614ed9816142d4565b96506020880135614ee981614502565b95506040880135614ef9816142e3565b94506060880135614f0981614517565b93506080880135925060a0880135614f2081614529565b915060c0880135614f3081614529565b8091505092959891949750929550565b6020815260006106ae6020830184614978565b8183526000602080850194508260005b858110156148fb578135614f76816142e3565b61ffff1687529582019590820190600101614f63565b80356001600160481b038116811461454257600080fd5b65ffffffffffff8116811461112457600080fd5b8035614fc281614517565b63ffffffff1682526001600160481b03614fde60208301614f8c565b1660208301526040810135614ff281614fa3565b65ffffffffffff81166040840152505050565b6000606060ff8816835260606020840152615024606084018789614f53565b8381036040850152848152859060200160005b86811015615059576150498284614fb7565b9183019190830190600101615037565b509998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156150a557600080fd5b6106ae82614c7c565b6000602082840312156150c057600080fd5b813561486b81614529565b80356150d6816142e3565b61ffff16825260208101356150ea81614517565b63ffffffff166020830152604081013561510381614fa3565b65ffffffffffff1660408301526001600160481b0361512460608301614f8c565b1660608301525050565b60ff8416815261ffff8316602082015260c0810161077260408301846150cb565b60ff86168152600060206060602084015261516e606084018789614f53565b838103604085810191909152858252869160200160005b878110156151c557833561519881614517565b63ffffffff908116835284860135906151b082614517565b16828601529282019290820190600101615185565b509a9950505050505050505050565b60ff8416815261ffff8316602082015260a081016107726040830184614fb7565b60ff86168152606060208201526000615212606083018688614f53565b8281036040840152838152849060200160005b8581101561524a5761523782846150cb565b6080928301929190910190600101615225565b5098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0382811682821603908082111561528d5761528d615257565b5092915050565b818103818111156106b1576106b1615257565b808201808211156106b1576106b1615257565b6000816152c9576152c9615257565b506000190190565b80820281158282048414176106b1576106b1615257565b634e487b7160e01b600052601260045260246000fd5b60008261530d5761530d6152e8565b500490565b60006020828403121561532457600080fd5b813561486b816142e3565b80516001600160801b038116811461454257600080fd5b600060a0828403121561535857600080fd5b61536061449b565b825161536b81614502565b8152602083015161537b81614529565b602082015260408301516affffffffffffffffffffff8116811461539e57600080fd5b60408201526153af6060840161532f565b60608201526153c06080840161532f565b60808201529392505050565b6001600160a01b038416815260608101600484106153fa57634e487b7160e01b600052602160045260246000fd5b8360208301528215156040830152949350505050565b60006020828403121561542257600080fd5b5051919050565b60006020828403121561543b57600080fd5b815161486b81614529565b60006020828403121561545857600080fd5b813561486b81614517565b60006020828403121561547557600080fd5b81356001600160401b038116811461486b57600080fd5b803564ffffffffff8116811461454257600080fd5b803562ffffff8116811461454257600080fd5b600060a082840312156154c657600080fd5b6154ce61449b565b6154d78361548c565b81526154e56020840161548c565b60208201526154f66040840161548c565b6040820152615507606084016154a1565b60608201526153c0608084016154a1565b805161454281614517565b8051614542816142e3565b805161454281614fa3565b80516002811061454257600080fd5b8051614542816142d4565b6000610120828403121561556657600080fd5b61556e6144d1565b61557783615518565b815261558560208401615518565b602082015261559660408401615518565b60408201526155a760608401615523565b60608201526155b86080840161552e565b60808201526155c960a0840161552e565b60a08201526155da60c08401615539565b60c08201526155eb60e08401615518565b60e08201526101006155fe818501615548565b908201529392505050565b6001600160801b0381811683821602808216919082811461562c5761562c615257565b505092915050565b60006001600160801b038084168061564e5761564e6152e8565b92169190910492915050565b6001600160401b0381811683821601908082111561528d5761528d615257565b818103600083128015838313168383128216171561528d5761528d615257565b80820260008212600160ff1b841416156156b6576156b6615257565b81810583148215176106b1576106b1615257565b6000826156d9576156d96152e8565b600160ff1b8214600019841416156156f3576156f3615257565b500590565b808201828112600083128015821682158216171561562c5761562c615257565b600181815b8085111561575357816000190482111561573957615739615257565b8085161561574657918102915b93841c939080029061571d565b509250929050565b60008261576a575060016106b1565b81615777575060006106b1565b816001811461578d5760028114615797576157b3565b60019150506106b1565b60ff8411156157a8576157a8615257565b50506001821b6106b1565b5060208310610133831016604e8410600b84101617156157d6575081810a6106b1565b6157e08383615718565b80600019048211156157f4576157f4615257565b029392505050565b60006106ae65ffffffffffff84168361575b565b6001600160481b0382811682821603908082111561528d5761528d615257565b6001600160481b0381811683821601908082111561528d5761528d61525756fea264697066735822122065b9f0b22917c1838c495e2fda24f4f0ca4f2e7cbf567a7ee6b38788a649f7b364736f6c63430008170033