90 txs
92 calls
constructor
constructor(address leox, uint256 increment)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
calculatePoints
viewfunction calculatePoints(address collectionAddress, uint256 citizen, uint256 stakedLeox, uint256 timelockEndTime) view returns (uint256)
calculateRewards
viewfunction calculateRewards(address recipient, address collectionAddress, uint256 tokenId) view returns (uint256)
calculateRewardsAllRewards
viewfunction calculateRewardsAllRewards(address recipient, address collectionAddress) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getAccumulatedTax
viewfunction getAccumulatedTax(address collectionAddress) view returns (uint256)
getCollectionEmergencyStatus
viewfunction getCollectionEmergencyStatus(address collectionAddress) view returns (bool)
getMultipliers
viewfunction getMultipliers(address collectionAddress) view returns (tuple[])
getPoolConfiguration
viewfunction getPoolConfiguration(address collectionAddress) view returns (uint256 totalPoints, uint256 rewardCount, uint256 tax, tuple[] rewardWindows)
getRewardPoolBalance
viewfunction getRewardPoolBalance(address collectionAddress) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStakedInfoPagination
viewfunction getStakedInfoPagination(address recipient, address collectionAddress, uint256 pageNumber, uint256 pageSize) view returns (tuple[], uint256, uint256)
getStakedPercentage
viewfunction getStakedPercentage(address collectionAddress) view returns (uint256)
getStakersPosition
viewfunction getStakersPosition(address stakerAddress, address collectionAddress, uint256 tokenId) view returns (tuple)
getYieldTraitPoints
viewfunction getYieldTraitPoints(address collectionAddress, uint256 citizen) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
LEOX
viewfunction LEOX() view returns (address)
paused
viewfunction paused() view returns (bool)
rewardPerToken
viewfunction rewardPerToken(address collectionAddress) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
VALIDATOR_ROLE
viewfunction VALIDATOR_ROLE() view returns (bytes32)
configureNewCollection
nonpayablefunction configureNewCollection(address collectionAddress, address soulboundToken, uint256 tokenIdsCount, tuple[] stakeInfo)
configurePool
nonpayablefunction configurePool(tuple[] poolConfigurationsInput)
declareEmergency
nonpayablefunction declareEmergency(address collectionAddress)
depositRewards
nonpayablefunction depositRewards(address collectionAddress, uint256 leoxAmount)
emergencyUnstake
nonpayablefunction emergencyUnstake(address collectionAddress, uint256 tokenId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
liftEmergency
nonpayablefunction liftEmergency(address collectionAddress, uint256 rewardRate)
onERC721Received
nonpayablefunction onERC721Received(address operator, address from, uint256 tokenId, bytes data) returns (bytes4)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setMultipliers
nonpayablefunction setMultipliers(address collectionAddress, tuple[] multipliers)
stake
nonpayablefunction stake(tuple stakeTokens)
stakeLeoxTokens
nonpayablefunction stakeLeoxTokens(address collectionAddress, uint256 tokenId, uint256 stakeMoreLeox)
unpause
nonpayablefunction unpause()
unstake
nonpayablefunction unstake(address collectionAddress, uint256 tokenId)
updateEmissionRate
nonpayablefunction updateEmissionRate(address collectionAddress, uint256 rewardRate, uint256 endTime)
updateTax
nonpayablefunction updateTax(address collectionAddress, uint256 newTaxPercent)
withdrawAllRewards
nonpayablefunction withdrawAllRewards(address collectionAddress)
withdrawTax
nonpayablefunction withdrawTax(address collectionAddress)
events
ConfigureCollection
event ConfigureCollection(address indexed collectionAddress, (uint256 maxLeox, uint256 yieldTraitPoints)[] _stakeInfo)
ConfigurePool
event ConfigurePool(address indexed collectionAddress, uint256 indexed tax, (uint256 rewardRate, uint256 startTime, uint256 endTime)[] rewardWindows)
DeclareEmergency
event DeclareEmergency(address collectionAddress, bool isEmergencyDeclared)
DepositRewards
event DepositRewards(address indexed collectionAddress, uint256 leoxAmount)
EIP712DomainChanged
event EIP712DomainChanged()
EmergencyUnstakeToken
event EmergencyUnstakeToken(address indexed collectionAddress, address indexed recipient, uint256 indexed tokenId, uint256 points, uint256 totalLeox)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetMultipliers
event SetMultipliers(address indexed collectionAddress, (uint256 stakingTime, uint256 stakingBoost)[] multipliers)
StakeLeoxTokens
event StakeLeoxTokens(address indexed collectionAddress, address indexed recipient, uint256 indexed tokenId, uint256 citizen, uint256 newPoints, uint256 totalLeox)
StakeTokens
event StakeTokens(address indexed collectionAddress, address indexed recipient, uint256 indexed tokenId, uint256 citizen, uint256 timelockEndTime, uint256 points, uint256 stakedLEOX)
Unpaused
event Unpaused(address account)
UnstakeToken
event UnstakeToken(address indexed collectionAddress, address indexed recipient, uint256 indexed tokenId, uint256 points, uint256 totalLeox)
UpdateEmissionRate
event UpdateEmissionRate(address indexed collectionAddress, uint256 indexed rewardRate, uint256 endTimePreviousRewardWindow)
UpdateTax
event UpdateTax(address indexed collectionAddress, uint256 indexed newTaxPercent)
WithdrawAllRewards
event WithdrawAllRewards(address indexed collectionAddress, address indexed recipient, uint256 indexed rewardAmount, uint256 currentTime)
WithdrawRewards
event WithdrawRewards(address indexed recipient, address indexed collectionAddress, uint256 indexed tokenId, uint256 rewardAmount, uint256 currentTime)
WithdrawTax
event WithdrawTax(address indexed collectionAddress, address indexed recipient, uint256 taxAmount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
CollectionUninitialized
error CollectionUninitialized()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EmergencyDeclared
error EmergencyDeclared()
EmergencyNotDeclared
error EmergencyNotDeclared()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InvalidAddress
error InvalidAddress()
InvalidAmount
error InvalidAmount(uint256 amount)
InvalidAmountRewardPoolBalance
error InvalidAmountRewardPoolBalance()
InvalidCitizenIndex
error InvalidCitizenIndex()
InvalidEndTime
error InvalidEndTime()
InvalidIncrement
error InvalidIncrement()
InvalidInput
error InvalidInput()
InvalidLeoxHierarchy
error InvalidLeoxHierarchy()
InvalidRewardRate
error InvalidRewardRate()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
InvalidTaxRate
error InvalidTaxRate()
InvalidTime
error InvalidTime()
InvalidTokenId
error InvalidTokenId()
InvalidTokensCount
error InvalidTokensCount(uint256 maxLeox)
InvalidTraitPointsHierarchy
error InvalidTraitPointsHierarchy()
MultipleRewardWindowsNotAllowed
error MultipleRewardWindowsNotAllowed()
PoolAlreadyInitialized
error PoolAlreadyInitialized()
PoolUninitialized
error PoolUninitialized(address collectionAddress)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StateAlreadyDeclared
error StateAlreadyDeclared()
StringTooLong
error StringTooLong(string str)
TokenAlreadyStaked
error TokenAlreadyStaked()
TokenNotStaked
error TokenNotStaked()
UnstakeBeforeLockPeriod
error UnstakeBeforeLockPeriod(uint256 lockPeriodEnd)
creation bytecode
0x6101a060405234801562000011575f80fd5b50604051620059d0380380620059d0833981016040819052620000349162000303565b604080518082018252600f81526e47616c696c656f2d5374616b696e6760881b602080830191909152825180840190935260018352603160f81b90830152906200007f825f620001d1565b6101205262000090816001620001d1565b61014052815160208084019190912060e052815190820120610100524660a0526200011d60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526002805460ff1916905560016004556001600160a01b0382166200015d5760405163e6c4247b60e01b815260040160405180910390fd5b805f036200017e57604051635899c0df60e11b815260040160405180910390fd5b6200018a5f3362000209565b50620001b77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753362000209565b506001600160a01b03909116610160526101805262000518565b5f602083511015620001f057620001e883620002b8565b905062000203565b81620001fd8482620003da565b5060ff90505b92915050565b5f8281526003602090815260408083206001600160a01b038516845290915281205460ff16620002b0575f8381526003602090815260408083206001600160a01b03861684529091529020805460ff19166001179055620002673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000203565b505f62000203565b5f80829050601f81511115620002ee578260405163305a27a960e01b8152600401620002e59190620004a6565b60405180910390fd5b8051620002fb82620004f4565b179392505050565b5f806040838503121562000315575f80fd5b82516001600160a01b03811681146200032c575f80fd5b6020939093015192949293505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200036557607f821691505b6020821081036200038457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003d557805f5260205f20601f840160051c81016020851015620003b15750805b601f840160051c820191505b81811015620003d2575f8155600101620003bd565b50505b505050565b81516001600160401b03811115620003f657620003f66200033c565b6200040e8162000407845462000350565b846200038a565b602080601f83116001811462000444575f84156200042c5750858301515b5f19600386901b1c1916600185901b1785556200049e565b5f85815260208120601f198616915b82811015620004745788860151825594840194600190910190840162000453565b50858210156200049257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602080835283518060208501525f5b81811015620004d457858101830151858201604001528201620004b6565b505f604082860101526040601f19601f8301168501019250505092915050565b8051602080830151919081101562000384575f1960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051610160516101805161541a620005b65f395f612b9001525f81816103ea01528181610b7d01528181610e4d0152818161160d01528181612ac60152818161358501528181613b0d01528181613eda015261437901525f612c5d01525f612c2c01525f61456d01525f61454501525f6144a001525f6144ca01525f6144f4015261541a5ff3fe608060405234801561000f575f80fd5b5060043610610255575f3560e01c806384b0196e11610140578063bc758a95116100bf578063cd217f7f11610084578063cd217f7f146105ed578063d547741f14610600578063d755c47914610613578063e5111da714610626578063f122977714610651578063f12a623b14610664575f80fd5b8063bc758a951461056d578063c2a672e014610580578063c49baebe14610593578063c50daecc146105ba578063c55897bf146105da575f80fd5b806394fc06711161010557806394fc06711461051a57806397ad1cce1461052d578063a217fddf14610540578063b6cc524314610547578063bbad64641461055a575f80fd5b806384b0196e1461049e57806385e710b0146104b95780638b4d7577146104e15780638d9a6ed2146104f457806391d1485414610507575f80fd5b80633f4ba83a116101d7578063637212d01161019c578063637212d0146103e557806367cdb47f146104245780636f44bb691461044c57806375b238fc1461046f5780637e989e54146104835780638456cb5914610496575f80fd5b80633f4ba83a1461038a5780634268121e146103925780634c75b707146103a557806359b4c4b4146103b85780635c975abb146103da575f80fd5b8063269149b41161021d578063269149b41461031c5780632f2ff15d1461033c5780632f9904e01461035157806336568abe146103645780633899ff1414610377575f80fd5b806301ffc9a71461025957806304082ff414610281578063150b7a02146102a15780632328c402146102d9578063248a9ca3146102fa575b5f80fd5b61026c61026736600461481f565b610677565b60405190151581526020015b60405180910390f35b61029461028f366004614861565b6106ad565b604051610278919061487a565b6102c06102af3660046148c8565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610278565b6102ec6102e7366004614861565b610775565b604051908152602001610278565b6102ec61030836600461495a565b5f9081526003602052604090206001015490565b61032f61032a366004614971565b6107ce565b60405161027891906149f4565b61034f61034a366004614a02565b6108cc565b005b61034f61035f366004614a2c565b6108f6565b61034f610372366004614a02565b610c12565b61034f610385366004614a5c565b610c45565b61034f610d60565b61034f6103a0366004614a5c565b610d82565b61034f6103b3366004614861565b610da2565b6103cb6103c6366004614a84565b610ece565b60405161027893929190614ac3565b60025460ff1661026c565b61040c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b6102ec610432366004614861565b6001600160a01b03165f9081526006602052604090205490565b61045f61045a366004614861565b611112565b6040516102789493929190614b6b565b6102ec5f805160206153c583398151915281565b6102ec610491366004614b99565b6112c8565b61034f6113bd565b6104a66113dc565b6040516102789796959493929190614c1c565b6102ec6104c7366004614861565b6001600160a01b03165f9081526015602052604090205490565b6102ec6104ef366004614971565b61141e565b61034f610502366004614861565b611518565b61026c610515366004614a02565b61153b565b61034f610528366004614a5c565b611565565b61034f61053b366004614a5c565b6115a7565b6102ec5f81565b61034f610555366004614a2c565b6116ac565b6102ec610568366004614cb3565b6116f6565b61034f61057b366004614cdb565b611815565b61034f61058e366004614a5c565b611861565b6102ec7f21702c8af46127c7fa207f89d0b0a8441bb32959a0ac7df790e9ab1a25c9892681565b6105cd6105c8366004614a5c565b61187b565b6040516102789190614d11565b61034f6105e8366004614861565b611a4b565b61034f6105fb366004614d86565b611a64565b61034f61060e366004614a02565b611dcf565b61034f610621366004614e7d565b611df3565b61026c610634366004614861565b6001600160a01b03165f9081526016602052604090205460ff1690565b6102ec61065f366004614861565b61206a565b61034f610672366004615002565b6121d0565b5f6001600160e01b03198216637965db0b60e01b14806106a757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001600160a01b0382166106d65760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0382165f908152600b6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561074e578382905f5260205f2090600202016040518060400160405290815f82015481526020016001820154815250508152602001906001019061070b565b50505050905080515f036106a7576040516388cde06f60e01b815260040160405180910390fd5b6001600160a01b0381165f908152600d602090815260408083205460139092528220548183036107a857505f9392505050565b816107bc8268056bc75e2d63100000615064565b6107c6919061507b565b949350505050565b6107d66147a9565b6001600160a01b03831615806107f357506001600160a01b038416155b156108115760405163e6c4247b60e01b815260040160405180910390fd5b815f03610831576040516307ed98ed60e31b815260040160405180910390fd5b6001600160a01b038085165f908152600760209081526040808320878516845282528083208684528252808320815160e081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840181905260069091015460c084015290036107c657604051630a49bbc360e21b815260040160405180910390fd5b5f828152600360205260409020600101546108e681612329565b6108f08383612333565b50505050565b6108fe6123c4565b6109066123ea565b6001600160a01b0383165f9081526016602052604090205460ff161561093f5760405163237686b360e01b815260040160405180910390fd5b815f0361095f576040516307ed98ed60e31b815260040160405180910390fd5b3361096b838583612414565b6001600160a01b038416610992576040516388cde06f60e01b815260040160405180910390fd5b815f036109b9576040516324e33dfb60e21b81525f60048201526024015b60405180910390fd5b6001600160a01b038082165f908152600760209081526040808320938816835292815282822086835290522060018101548414610a0957604051630a49bbc360e21b815260040160405180910390fd5b5f610a1886836002015461187b565b90505f848360060154610a2b919061509a565b8251909150811115610a565781516040516324e33dfb60e21b815260048101919091526024016109b0565b5f610a6b8885600201548487600401546112c8565b6001600160a01b0389165f90815260056020819052604090912090860154815492935090918391610a9b916150ad565b610aa5919061509a565b815560058501829055600685018390556001600160a01b038087165f818152600960209081526040808320948e168084529482528083208d84528252808320549383526008825280832094835293905291909120805487919083908110610b0e57610b0e6150c0565b5f9182526020909120825460079092020180546001600160a01b0319166001600160a01b039283161781556001808401549082015560028084015490820155600380840154908201556004808401549082015560058084015490820155600692830154920191909155610ba5907f00000000000000000000000000000000000000000000000000000000000000001688308b6124ab565b60028601546040805191825260208201859052810185905289906001600160a01b03808a1691908d16907fa55bcd1fdd8a4453f4c5481757c1808ebd3c38647bbb340094f6fb1aa060cd149060600160405180910390a450505050505050610c0d6001600455565b505050565b6001600160a01b0381163314610c3b5760405163334bd91960e11b815260040160405180910390fd5b610c0d8282612505565b610c4d6123c4565b5f805160206153c5833981519152610c6481612329565b6001600160a01b038316610c8b5760405163e6c4247b60e01b815260040160405180910390fd5b815f03610cae57604051633728b83d60e01b8152600481018390526024016109b0565b678ac7230489e80000821115610cd7576040516367e3b83560e01b815260040160405180910390fd5b6001600160a01b0383165f9081526005602052604081206002810154909103610d1e57604051631a7e275f60e11b81526001600160a01b03851660048201526024016109b0565b6001810183905560405183906001600160a01b038616907f9b1afbc58afefe24863c46a8f0375d91643c9e13c9e8d7a6ffdafbf9a4dc837e905f90a350505050565b5f805160206153c5833981519152610d7781612329565b610d7f612570565b50565b610d8a6123ea565b610d9482826125c2565b610d9e6001600455565b5050565b610daa6123ea565b610db26123c4565b5f805160206153c5833981519152610dc981612329565b6001600160a01b038216610df05760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526006602052604081205490819003610e2c57604051633728b83d60e01b8152600481018290526024016109b0565b6001600160a01b038381165f908152600660205260408120553390610e74907f0000000000000000000000000000000000000000000000000000000000000000168284612b52565b806001600160a01b0316846001600160a01b03167f6dff6a50991143b581f6ccff8e56f1b6a5bba64f6253b3194b0a3ad14f961daf84604051610eb991815260200190565b60405180910390a3505050610d7f6001600455565b60605f805f8511610f215760405162461bcd60e51b815260206004820152601960248201527f50616765206e756d626572207374617274732066726f6d20310000000000000060448201526064016109b0565b6001600160a01b038088165f908152600860209081526040808320938a168352929052908120549085610f556001896150ad565b610f5f9190615064565b90505f610f6c878361509a565b905082811115610f795750815b5f610f8483836150ad565b90505f816001600160401b03811115610f9f57610f9f614def565b604051908082528060200260200182016040528015610fd857816020015b610fc56147a9565b815260200190600190039081610fbd5790505b5090505f5b828110156110d65760056003015f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f8d6001600160a01b03166001600160a01b031681526020019081526020015f208186611038919061509a565b81548110611048576110486150c0565b5f9182526020918290206040805160e081018252600790930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460c082015282518390839081106110c3576110c36150c0565b6020908102919091010152600101610fdd565b505f8960016110e5828961509a565b6110ef91906150ad565b6110f9919061507b565b9198508a975090955050505050505b9450945094915050565b5f808060606001600160a01b03851661113e5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600560209081526040808320815160808101835281548152600182015481850152600282015481840152600382018054845181870281018701909552808552919492936060860193909290879084015b828210156111e9578382905f5260205f2090600302016040518060600160405290815f8201548152602001600182015481526020016002820154815250508152602001906001019061119c565b50505091525050805160408201516020830151919750955093509050836001600160401b0381111561121d5761121d614def565b60405190808252806020026020018201604052801561126f57816020015b61125c60405180606001604052805f81526020015f81526020015f81525090565b81526020019060019003908161123b5790505b5091505f5b848110156112bf5781606001518181518110611292576112926150c0565b60200260200101518382815181106112ac576112ac6150c0565b6020908102919091010152600101611274565b50509193509193565b5f806112d3866106ad565b90505f6112e0878761187b565b90505f805b8351816001600160801b031610156113635783816001600160801b031681518110611312576113126150c0565b60200260200101515f015186036113515783816001600160801b03168151811061133e5761133e6150c0565b6020026020010151602001519150611363565b8061135b816150d4565b9150506112e5565b50805f03611384576040516337bf561360e11b815260040160405180910390fd5b5f61138e87612b83565b90505f8284602001516113a19190615064565b90505f6113ae838361509a565b9b9a5050505050505050505050565b5f805160206153c58339815191526113d481612329565b610d7f612be8565b5f6060805f805f60606113ed612c25565b6113f5612c56565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6001600160a01b038084165f8181526007602090815260408083208786168085529083528184208785528352818420825160e081018452815490971687526001810154878501526002810154878401526003810154606088015260048101546080880152600581015460a08801526006015460c087015284845260128352818420818552835281842087855283528184205494845260118352818420908452825280832086845290915281205490929190670de0b6b3a7640000906114e28761206a565b6114ec91906150ad565b8360a001516114fb9190615064565b611505919061507b565b61150f919061509a565b95945050505050565b5f805160206153c583398151915261152f81612329565b610d9e8260015f612c83565b5f9182526003602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f805160206153c583398151915261157c81612329565b815f0361159c576040516308af88a160e21b815260040160405180910390fd5b610c0d835f84612c83565b5f805160206153c58339815191526115be81612329565b5f82116115e157604051633728b83d60e01b8152600481018390526024016109b0565b6001600160a01b0383166116085760405163e6c4247b60e01b815260040160405180910390fd5b61163d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163330856124ab565b6001600160a01b0383165f908152601560205260408120805484929061166490849061509a565b90915550506040518281526001600160a01b038416907fb9ad861b752f80117b35bea6dec99933d8a5ae360f2839ee8784b750d56134099060200160405180910390a2505050565b6116b46123c4565b5f805160206153c58339815191526116cb81612329565b825f036116eb576040516308af88a160e21b815260040160405180910390fd5b6108f0848484612d9c565b6001600160a01b038083165f90815260086020908152604080832093851683529281528282208054845181840281018401909552808552929384938493919291849084015b828210156117b5575f8481526020908190206040805160e0810182526007860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c0830152908352909201910161173b565b5050505090505f5b815181101561180b575f8282815181106117d9576117d96150c0565b60200260200101516020015190505f6117f388888461141e565b90506117ff818661509a565b945050506001016117bd565b5090949350505050565b61181d6123c4565b6118256123ea565b61182e81612f1b565b61185761183e6020830183614861565b8260200135836040013584606001358560800135613035565b610d7f6001600455565b6118696123c4565b6118716123ea565b610d948282613629565b61189d60405180606001604052805f81526020015f8152602001606081525090565b6001600160a01b0383166118c45760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0383165f908152600a6020908152604080832080548251818502810185019093528083529192909190849084015b828210156119cc578382905f5260205f2090600302016040518060600160405290815f82015481526020016001820154815260200160028201805461193d906150f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611969906150f9565b80156119b45780601f1061198b576101008083540402835291602001916119b4565b820191905f5260205f20905b81548152906001019060200180831161199757829003601f168201915b505050505081525050815260200190600101906118f9565b50505050905080515f036119f3576040516388cde06f60e01b815260040160405180910390fd5b821580611a005750805183115b15611a1e576040516307f8da6560e01b815260040160405180910390fd5b80611a2a6001856150ad565b81518110611a3a57611a3a6150c0565b602002602001015191505092915050565b611a536123c4565b611a5b6123ea565b61185781613b9a565b611a6c6123c4565b5f805160206153c5833981519152611a8381612329565b6001600160a01b0386161580611aa057506001600160a01b038516155b15611abe5760405163e6c4247b60e01b815260040160405180910390fd5b5f866001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015611afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b219190810190615131565b6001600160a01b038881165f908152600c602052604090205491925016158015611b73576001600160a01b038881165f908152600c6020526040902080546001600160a01b0319169189169190911790555b5f5b84811015611d5a57858582818110611b8f57611b8f6150c0565b9050604002015f01355f1480611bbf5750858582818110611bb257611bb26150c0565b905060400201602001355f145b15611bdd5760405163b4fa3fb360e01b815260040160405180910390fd5b8015611ca2578585611bf06001846150ad565b818110611bff57611bff6150c0565b9050604002015f0135868683818110611c1a57611c1a6150c0565b9050604002015f01351115611c41576040516229bb9160e41b815260040160405180910390fd5b8585611c4e6001846150ad565b818110611c5d57611c5d6150c0565b90506040020160200135868683818110611c7957611c796150c0565b905060400201602001351115611ca257604051633b3c3bfd60e11b815260040160405180910390fd5b5f6040518060600160405280888885818110611cc057611cc06150c0565b9050604002015f01358152602001888885818110611ce057611ce06150c0565b60206040918202939093018301358452928201889052506001600160a01b038d165f908152600a825282812080546001818101835591835291839020855160039093020191825591840151918101919091559082015191925082916002820190611d4a908261520a565b505060019092019150611b759050565b5085611d6e670de0b6b3a764000082615064565b6001600160a01b038a165f818152600d6020526040908190209290925590517f628692fc3a7416c446a8100777d9a12cc83b2719ea5770251656dcb975c33c0190611dbc90899089906152c9565b60405180910390a2505050505050505050565b5f82815260036020526040902060010154611de981612329565b6108f08383612505565b611dfb6123c4565b5f805160206153c5833981519152611e1281612329565b5f5b8251811015610c0d575f838281518110611e3057611e306150c0565b60209081029190910101515190506001600160a01b038116611e655760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090206002015415611e9e57604051637983c05160e01b815260040160405180910390fd5b838281518110611eb057611eb06150c0565b60200260200101516040015151600114611edd576040516365b6e2ff60e01b815260040160405180910390fd5b678ac7230489e80000848381518110611ef857611ef86150c0565b6020026020010151602001511115611f23576040516367e3b83560e01b815260040160405180910390fd5b838281518110611f3557611f356150c0565b6020908102919091018101518101516001600160a01b0383165f9081526005909252604090912060018082019290925560028101919091558451600390910190859084908110611f8757611f876150c0565b6020026020010151604001515f81518110611fa457611fa46150c0565b6020908102919091018101518254600181810185555f94855293839020825160039092020190815591810151928201929092556040909101516002909101558351849083908110611ff757611ff76150c0565b602002602001015160200151816001600160a01b03167f9ee96876e131c231f94f6aea63fae2f04070be2e5f3f412a4c8e34ee8cec58d6868581518110612040576120406150c0565b602002602001015160400151604051612059919061530e565b60405180910390a350600101611e14565b6001600160a01b0381165f908152600560205260408120805482036120a55750506001600160a01b03165f908152600f602052604090205490565b6001600160a01b0383165f908152600f60205260408120546003830180549192916120d2906001906150ad565b815481106120e2576120e26150c0565b5f918252602091829020604080516060810182526003909302909101805483526001810154938301849052600201549082015291504211156121c8575f8082604001511180156121355750816040015142115b61213f5742612145565b81604001515b6001600160a01b0387165f908152600e60205260409020549091508111156121c6576001600160a01b0386165f908152600e602052604081205461218990836150ad565b855484519192509061219c908390615064565b6121ae90670de0b6b3a7640000615064565b6121b8919061507b565b6121c2908561509a565b9350505b505b509392505050565b6121d86123c4565b5f805160206153c58339815191526121ef81612329565b6001600160a01b0384166122165760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0384165f908152600b60205260409020805415612254576001600160a01b0385165f908152600b60205260408120612254916147e8565b5f5b61ffff81168411156122de576001600160a01b0386165f908152600b60205260409020858561ffff841681811061228f5761228f6150c0565b83546001810185555f94855260209094206040909102929092019260020290910190506122c9828281358155602082013560018201555050565b505080806122d690615320565b915050612256565b50846001600160a01b03167fafb975b469c50c753530b2b9cb85ad704d66cfe99be1c351d424893386531392858560405161231a9291906152c9565b60405180910390a25050505050565b610d7f8133613f47565b5f61233e838361153b565b6123bd575f8381526003602090815260408083206001600160a01b03861684529091529020805460ff191660011790556123753390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016106a7565b505f6106a7565b60025460ff16156123e85760405163d93c066560e01b815260040160405180910390fd5b565b60026004540361240d57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b61241d8261206a565b6001600160a01b0383165f908152600f6020908152604080832093909355600e90522042905561244e81838561141e565b6001600160a01b039182165f81815260126020908152604080832096909516808352958152848220878352815284822093909355848152600f83528381205491815260118352838120948152938252828420948452939052902055565b6108f084856001600160a01b03166323b872dd8686866040516024016124d393929190615336565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613f80565b5f612510838361153b565b156123bd575f8381526003602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016106a7565b612578613fec565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166125e95760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526016602052604090205460ff166126205760405162e0699b60e51b815260040160405180910390fd5b805f03612640576040516307ed98ed60e31b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b038781168552908352818420868552835292819020815160e0810183528154909416845260018101549284018390526002810154918401919091526003810154606084015260048101546080840152600581015460a08401526006015460c083015283146126d957604051630a49bbc360e21b815260040160405180910390fd5b6126e4838584612414565b60a08101516001600160a01b0385165f90815260056020526040812080548392906127109084906150ad565b90915550506001600160a01b0385165f9081526013602052604081208054670de0b6b3a764000092906127449084906150ad565b90915550506001600160a01b038084165f818152600760209081526040808320948a16808452948252808320898452825280832080546001600160a01b031916815560018082018590556002820185905560038201859055600482018590556005820185905560069091018490558484526014835281842086855283528184208a855283528184208490558484526009835281842086855283528184208a855283528184205494845260088352818420958452949091528120549192909161280c91906150ad565b6001600160a01b038087165f908152601260209081526040808320938c1683529281528282208a835290529081205590508181146129a0576001600160a01b038086165f908152600860209081526040808320938b16835292905290812080548390811061287c5761287c6150c0565b5f91825260208083206040805160e081018252600790940290910180546001600160a01b0390811685526001820154858501526002820154858401526003820154606086015260048201546080860152600582015460a086015260069091015460c08501528a8116855260088352818520908d168552909152909120805491925082918590811061290f5761290f6150c0565b5f918252602080832084516007939093020180546001600160a01b0319166001600160a01b039384161781558482015160018201556040808601516002830155606086015160038301556080860151600483015560a0860151600583015560c090950151600690910155898216835260098152838320918c1683529081528282209381015182529290925290208290555b6001600160a01b038086165f908152600860209081526040808320938b168352929052208054806129d3576129d361535a565b5f828152602080822060075f199094019384020180546001600160a01b03191681556001810183905560028101839055600381018390556004810183905560058101839055600601829055919092556001600160a01b038781168352600982526040808420918b168452908252808320898452909152812055612a56878761400f565b6040516323b872dd60e01b81526001600160a01b038816906323b872dd90612a8690309089908b90600401615336565b5f604051808303815f87803b158015612a9d575f80fd5b505af1158015612aaf573d5f803e3d5ffd5b50505060c0850151612aee91506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908790612b52565b85856001600160a01b0316886001600160a01b03167f1569b24fee1440a841734fd3f2284d7bd8a0108a991d69f836140266b88d497b868860c00151604051612b41929190918252602082015260400190565b60405180910390a450505050505050565b6040516001600160a01b03838116602483015260448201839052610c0d91859182169063a9059cbb906064016124d3565b5f80670de0b6b3a76400007f0000000000000000000000000000000000000000000000000000000000000000612bb98286615064565b612bc3919061507b565b612bcd9190615064565b9050612be1670de0b6b3a76400008261507b565b9392505050565b612bf06123c4565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586125a53390565b6060612c517f00000000000000000000000000000000000000000000000000000000000000005f61407d565b905090565b6060612c517f0000000000000000000000000000000000000000000000000000000000000000600161407d565b6001600160a01b038316612caa5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0383165f908152600560205260408120600201549003612ce4576040516388cde06f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526016602052604090205482151560ff909116151503612d245760405163e8b2a2cb60e01b815260040160405180910390fd5b6001600160a01b0383165f908152601660205260408120805460ff1916841515179055612d549084908390612d9c565b604080516001600160a01b038516815283151560208201527f8a83e637d585ab195bd567bc9ce1ad02d66a844867f4ea8fdb2e4fea1fffd38c910160405180910390a1505050565b6001600160a01b0383165f9081526005602052604081206002015490819003612dd8576040516388cde06f60e01b815260040160405180910390fd5b612de18461206a565b6001600160a01b0385165f908152600f6020908152604080832093909355600e8152828220429081905560059091529181206003810154909190612e27906001906150ad565b90508415801590612e385750828511155b15612e56576040516338af65f760e01b815260040160405180910390fd5b82826003018281548110612e6c57612e6c6150c0565b5f9182526020808320600392830201600290810194909455604080516060810182528b81528083018981528183018c8152898601805460018082018355828a529887902094519702909301958655905195850195909555935192850192909255915492850192909255905184815287916001600160a01b038a16917f1d75b4af369dd9c67d43994eea5f98a89dcaa2d64156061ae12a4eaaeb43ff08910160405180910390a350505050505050565b5f612f9f7f9d4721e33d89534ce8747d048acf2bc45235b1b32ee2a34351518528db058825612f4d6020850185614861565b604080516020818101949094526001600160a01b03909216828201529185013560608201529084013560808201524660a082015260c00160405160208183030381529060405280519060200120614126565b90505f612fec82612fb360a086018661536e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061415292505050565b90506130187f21702c8af46127c7fa207f89d0b0a8441bb32959a0ac7df790e9ab1a25c989268261153b565b610c0d57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526016602052604090205460ff161561306e5760405163237686b360e01b815260040160405180910390fd5b835f0361308e576040516307ed98ed60e31b815260040160405180910390fd5b3361309a858783612414565b6001600160a01b0386166130c15760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038082165f9081526007602090815260408083208a851684528252808320888452825291829020825160e0810184528154909416845260018101549184018290526002810154928401929092526003820154606084015260048201546080840152600582015460a084015260069091015460c083015286900361315e576040516316e9ad8f60e01b815260040160405180910390fd5b428061316a818761509a565b11613188576040516337bf561360e11b815260040160405180910390fd5b6001600160a01b0388165f90815260056020526040812060028101549091036131cf57604051631a7e275f60e11b81526001600160a01b038a1660048201526024016109b0565b5f6131da8a8961187b565b90508060400151515f03613201576040516388cde06f60e01b815260040160405180910390fd5b80518611156132295780516040516324e33dfb60e21b815260048101919091526024016109b0565b5f6132368b8a898b6112c8565b905080835f015f82825461324a919061509a565b925050819055505f6040518060e001604052808d6001600160a01b031681526020018c81526020018b81526020018681526020018a81526020018381526020018981525090508060056002015f896001600160a01b03166001600160a01b031681526020019081526020015f205f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f8d81526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505060056003015f886001600160a01b03166001600160a01b031681526020019081526020015f205f8d6001600160a01b03166001600160a01b031681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600702015f909190919091505f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601555050600160056003015f896001600160a01b03166001600160a01b031681526020019081526020015f205f8e6001600160a01b03166001600160a01b031681526020019081526020015f208054905061347d91906150ad565b60056004015f896001600160a01b03166001600160a01b031681526020019081526020015f205f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f8d81526020019081526020015f2081905550670de0b6b3a76400006005600e015f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f828254613514919061509a565b925050819055508b6001600160a01b03166323b872dd88308e6040518463ffffffff1660e01b815260040161354b93929190615336565b5f604051808303815f87803b158015613562575f80fd5b505af1158015613574573d5f803e3d5ffd5b506135af9250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905088308b6124ab565b6135ba8c888d614170565b8a6001600160a01b03808916908e167f5a7d4798422b818434e18058d8df205ee02d50ddbd7b2028c1f42c19b23a26268d6135f58e8b61509a565b6040805192835260208301919091528101879052606081018d905260800160405180910390a4505050505050505050505050565b6001600160a01b0382166136505760405163e6c4247b60e01b815260040160405180910390fd5b805f03613670576040516307ed98ed60e31b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b038781168552908352818420868552835292819020815160e0810183528154909416845260018101549284018390526002810154918401919091526003810154606084015260048101546080840152600581015460a08401526006015460c0830152831461370957604051630a49bbc360e21b815260040160405180910390fd5b5f8160800151826060015161371e919061509a565b90508042101561374457604051635c8385b360e01b8152600481018290526024016109b0565b61374f848685612414565b61375a8386866141e7565b60a08201516001600160a01b0386165f90815260056020526040812080548392906137869084906150ad565b90915550506001600160a01b0386165f9081526013602052604081208054670de0b6b3a764000092906137ba9084906150ad565b90915550506001600160a01b038085165f818152600760209081526040808320948b168084529482528083208a8452825280832080546001600160a01b031916815560018082018590556002820185905560038201859055600482018590556005820185905560069091018490558484526014835281842086855283528184208b855283528184208490558484526009835281842086855283528184208b855283528184205494845260088352818420958452949091528120549192909161388291906150ad565b90508082146139e7576001600160a01b038087165f908152600860209081526040808320938c1683529290529081208054839081106138c3576138c36150c0565b5f91825260208083206040805160e081018252600790940290910180546001600160a01b0390811685526001820154858501526002820154858401526003820154606086015260048201546080860152600582015460a086015260069091015460c08501528b8116855260088352818520908e1685529091529091208054919250829185908110613956576139566150c0565b5f918252602080832084516007939093020180546001600160a01b0319166001600160a01b039384161781558482015160018201556040808601516002830155606086015160038301556080860151600483015560a0860151600583015560c0909501516006909101558a8216835260098152838320918d1683529081528282209381015182529290925290208290555b6001600160a01b038087165f908152600860209081526040808320938c16835292905220805480613a1a57613a1a61535a565b5f828152602080822060075f199094019384020180546001600160a01b03191681556001810183905560028101839055600381018390556004810183905560058101839055600601829055919092556001600160a01b038881168352600982526040808420918c1684529082528083208a8452909152812055613a9d888861400f565b6040516323b872dd60e01b81526001600160a01b038916906323b872dd90613acd9030908a908c90600401615336565b5f604051808303815f87803b158015613ae4575f80fd5b505af1158015613af6573d5f803e3d5ffd5b50505060c0860151613b3591506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908890612b52565b86866001600160a01b0316896001600160a01b03167f9e6a005a25cc2e5f4cc8ab7d01c8bc5ceeb3f74aff04147dd2d4b4abd89f0853868960c00151604051613b88929190918252602082015260400190565b60405180910390a45050505050505050565b6001600160a01b038116613bc15760405163e6c4247b60e01b815260040160405180910390fd5b335f8181526008602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b82821015613c78575f8481526020908190206040805160e0810182526007860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101613bfe565b50505050905080515f03613c9f57604051630a49bbc360e21b815260040160405180910390fd5b5f42613caa8561206a565b6001600160a01b0386165f908152600f6020908152604080832093909355600e90529081208290555b8351811015613d7b575f848281518110613cef57613cef6150c0565b60200260200101516020015190505f613d0987898461141e565b6001600160a01b038089165f818152601260209081526040808320948e168084529482528083208884528252808320839055848352600f82528083205493835260118252808320948352938152838220878352905291909120559050613d6f818661509a565b94505050600101613cd3565b50815f03613d9f576040516324e33dfb60e21b8152600481018390526024016109b0565b6001600160a01b0385165f908152600560209081526040808320815160808101835281548152600182015481850152600282015481840152600382018054845181870281018701909552808552919492936060860193909290879084015b82821015613e4a578382905f5260205f2090600302016040518060600160405290815f82015481526020016001820154815260200160028201548152505081526020019060010190613dfd565b505050508152505090505f613e64878584602001516143ef565b6001600160a01b0388165f9081526015602052604090205490915084811015613ea057604051631bc8970f60e31b815260040160405180910390fd5b6001600160a01b0388165f9081526015602052604081208054879290613ec79084906150ad565b90915550613f0190506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168884612b52565b81876001600160a01b0316896001600160a01b03167fc5c78598ad30cffeebab36aea1e0a984cfa6d9df37b0408e589a17a1e4c8ce5087604051613b8891815260200190565b613f51828261153b565b610d9e5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016109b0565b5f8060205f8451602086015f885af180613f9f576040513d5f823e3d81fd5b50505f513d91508115613fb6578060011415613fc3565b6001600160a01b0384163b155b156108f057604051635274afe760e01b81526001600160a01b03851660048201526024016109b0565b60025460ff166123e857604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038281165f908152600c602052604090819020549051630852cd8d60e31b81526004810184905291169081906342966c68906024015f604051808303815f87803b158015614062575f80fd5b505af1158015614074573d5f803e3d5ffd5b50505050505050565b606060ff83146140975761409083614457565b90506106a7565b8180546140a3906150f9565b80601f01602080910402602001604051908101604052809291908181526020018280546140cf906150f9565b801561411a5780601f106140f15761010080835404028352916020019161411a565b820191905f5260205f20905b8154815290600101906020018083116140fd57829003601f168201915b505050505090506106a7565b5f6106a7614132614494565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061416086866145bd565b92509250925061180b8282614606565b6001600160a01b038381165f908152600c60205260409081902054905163219e412d60e21b8152848316600482015260248101849052911690819063867904b4906044015f604051808303815f87803b1580156141cb575f80fd5b505af11580156141dd573d5f803e3d5ffd5b5050505050505050565b5f6141f384848461141e565b6001600160a01b0384165f9081526005602090815260408083208151608081018352815481526001820154818501526002820154818401526003820180548451818702810187019095528085529697509495909491936060860193929190879084015b828210156142a3578382905f5260205f2090600302016040518060600160405290815f82015481526020016001820154815260200160028201548152505081526020019060010190614256565b505050508152505090505f6142bd858484602001516143ef565b9050805f036142e257604051633728b83d60e01b8152600481018290526024016109b0565b6001600160a01b0385165f9081526015602052604090205483811161431a57604051631bc8970f60e31b815260040160405180910390fd5b6001600160a01b038088165f908152601260209081526040808320938a1680845293825280832089845282528083208390559282526015905290812080548692906143669084906150ad565b909155506143a090506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168884612b52565b84866001600160a01b0316886001600160a01b03167fec2dbca33bce849c88f50479a2201a22b1027e27f4ce0682074fb39d285c94d88542604051612b41929190918252602082015260400190565b5f8068056bc75e2d631000006144058486615064565b61440f919061507b565b90505f61441c82866150ad565b6001600160a01b0387165f9081526006602052604081208054929350849290919061444890849061509a565b90915550909695505050505050565b60605f614463836146be565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156144ec57507f000000000000000000000000000000000000000000000000000000000000000046145b1561451657507f000000000000000000000000000000000000000000000000000000000000000090565b612c51604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f805f83516041036145f4576020840151604085015160608601515f1a6145e6888285856146e5565b9550955095505050506145ff565b505081515f91506002905b9250925092565b5f826003811115614619576146196153b0565b03614622575050565b6001826003811115614636576146366153b0565b036146545760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614668576146686153b0565b036146895760405163fce698f760e01b8152600481018290526024016109b0565b600382600381111561469d5761469d6153b0565b03610d9e576040516335e2f38360e21b8152600481018290526024016109b0565b5f60ff8216601f8111156106a757604051632cd44ac360e21b815260040160405180910390fd5b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561471e57505f91506003905082611108565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561476f573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661479a57505f925060019150829050611108565b975f9750879650945050505050565b6040518060e001604052805f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5080545f8255600202905f5260205f2090810190610d7f91905b8082111561481b575f8082556001820155600201614802565b5090565b5f6020828403121561482f575f80fd5b81356001600160e01b031981168114612be1575f80fd5b80356001600160a01b038116811461485c575f80fd5b919050565b5f60208284031215614871575f80fd5b612be182614846565b602080825282518282018190525f919060409081850190868401855b828110156148bb57815180518552860151868501529284019290850190600101614896565b5091979650505050505050565b5f805f805f608086880312156148dc575f80fd5b6148e586614846565b94506148f360208701614846565b93506040860135925060608601356001600160401b0380821115614915575f80fd5b818801915088601f830112614928575f80fd5b813581811115614936575f80fd5b896020828501011115614947575f80fd5b9699959850939650602001949392505050565b5f6020828403121561496a575f80fd5b5035919050565b5f805f60608486031215614983575f80fd5b61498c84614846565b925061499a60208501614846565b9150604084013590509250925092565b80516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0818101519083015260c090810151910152565b60e081016106a782846149aa565b5f8060408385031215614a13575f80fd5b82359150614a2360208401614846565b90509250929050565b5f805f60608486031215614a3e575f80fd5b614a4784614846565b95602085013595506040909401359392505050565b5f8060408385031215614a6d575f80fd5b614a7683614846565b946020939093013593505050565b5f805f8060808587031215614a97575f80fd5b614aa085614846565b9350614aae60208601614846565b93969395505050506040820135916060013590565b606080825284519082018190525f906020906080840190828801845b82811015614b0557614af28483516149aa565b60e0939093019290840190600101614adf565b5050506020840195909552505060400152919050565b5f815180845260208085019450602084015f5b83811015614b605781518051885283810151848901526040908101519088015260609096019590820190600101614b2e565b509495945050505050565b848152836020820152826040820152608060608201525f614b8f6080830184614b1b565b9695505050505050565b5f805f8060808587031215614bac575f80fd5b614bb585614846565b966020860135965060408601359560600135945092505050565b5f5b83811015614be9578181015183820152602001614bd1565b50505f910152565b5f8151808452614c08816020860160208601614bcf565b601f01601f19169290920160200192915050565b60ff60f81b881681525f602060e06020840152614c3c60e084018a614bf1565b8381036040850152614c4e818a614bf1565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015614ca157835183529284019291840191600101614c85565b50909c9b505050505050505050505050565b5f8060408385031215614cc4575f80fd5b614ccd83614846565b9150614a2360208401614846565b5f60208284031215614ceb575f80fd5b81356001600160401b03811115614d00575f80fd5b820160c08185031215612be1575f80fd5b6020815281516020820152602082015160408201525f60408301516060808401526107c66080840182614bf1565b5f8083601f840112614d4f575f80fd5b5081356001600160401b03811115614d65575f80fd5b6020830191508360208260061b8501011115614d7f575f80fd5b9250929050565b5f805f805f60808688031215614d9a575f80fd5b614da386614846565b9450614db160208701614846565b93506040860135925060608601356001600160401b03811115614dd2575f80fd5b614dde88828901614d3f565b969995985093965092949392505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614e2557614e25614def565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614e5357614e53614def565b604052919050565b5f6001600160401b03821115614e7357614e73614def565b5060051b60200190565b5f60208284031215614e8d575f80fd5b6001600160401b038083351115614ea2575f80fd5b8235830184601f820112614eb4575f80fd5b614ec6614ec18235614e5b565b614e2b565b81358082526020808301929160051b84010187811115614ee4575f80fd5b602084015b81811015614ff5578581351115614efe575f80fd5b803585016060818b03601f19011215614f15575f80fd5b614f1d614e03565b614f2960208301614846565b8152604082013560208201528760608301351115614f45575f80fd5b6060820135820191508a603f830112614f5c575f80fd5b6020820135614f6d614ec182614e5b565b818152606090910283016040019060208101908d831115614f8c575f80fd5b6040850194505b82851015614fdf576060858f031215614faa575f80fd5b614fb2614e03565b85358152602086013560208201526040860135604082015280835250602082019150606085019450614f93565b6040840152505085525060209384019301614ee9565b5090979650505050505050565b5f805f60408486031215615014575f80fd5b61501d84614846565b925060208401356001600160401b03811115615037575f80fd5b61504386828701614d3f565b9497909650939450505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106a7576106a7615050565b5f8261509557634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156106a7576106a7615050565b818103818111156106a7576106a7615050565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160801b038083168181036150ef576150ef615050565b6001019392505050565b600181811c9082168061510d57607f821691505b60208210810361512b57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215615141575f80fd5b81516001600160401b0380821115615157575f80fd5b818401915084601f83011261516a575f80fd5b81518181111561517c5761517c614def565b61518f601f8201601f1916602001614e2b565b91508082528560208285010111156151a5575f80fd5b6151b6816020840160208601614bcf565b50949350505050565b601f821115610c0d57805f5260205f20601f840160051c810160208510156151e45750805b601f840160051c820191505b81811015615203575f81556001016151f0565b5050505050565b81516001600160401b0381111561522357615223614def565b6152378161523184546150f9565b846151bf565b602080601f83116001811461526a575f84156152535750858301515b5f19600386901b1c1916600185901b1785556152c1565b5f85815260208120601f198616915b8281101561529857888601518255948401946001909101908401615279565b50858210156152b557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b602080825281018290525f604080830185835b8681101561530257813583526020808301359084015291830191908301906001016152dc565b50909695505050505050565b602081525f612be16020830184614b1b565b5f61ffff8083168181036150ef576150ef615050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b5f52603160045260245ffd5b5f808335601e19843603018112615383575f80fd5b8301803591506001600160401b0382111561539c575f80fd5b602001915036819003821315614d7f575f80fd5b634e487b7160e01b5f52602160045260245ffdfea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212204786a09fdfe1e6d195bc914a22fe9b184649d466e7255fcf679eb47f834dfcb064736f6c63430008180033000000000000000000000000a444ec96ee01bb219a44b285de47bf33c3447ad50000000000000000000000000000000000000000000000008ac7230489e80000