25 txs
26 calls
constructor
constructor(address _rolesManager, address _usdcContract, address _nftContract, address _paymentSplitterContract, uint96 _directRewardLVPercentage, address _initialOwner, address _pauser)
functions
amountBoostedByPurchase
viewfunction amountBoostedByPurchase(uint96, uint96) view returns (uint256)
binaryAvailableRewards
viewfunction binaryAvailableRewards() view returns (uint256)
blockchainInfrastructureAvailableRewards
viewfunction blockchainInfrastructureAvailableRewards() view returns (uint256)
coreAvailableRewards
viewfunction coreAvailableRewards() view returns (uint256)
directRewardLVPercentage
viewfunction directRewardLVPercentage() view returns (uint96)
EMERGENCY_WITHDRAW
viewfunction EMERGENCY_WITHDRAW() view returns (bool)
getAllDirectBonus
viewfunction getAllDirectBonus(uint96 _nftId) view returns (uint256[])
getAmountAvailableToClaimByPurchase
viewfunction getAmountAvailableToClaimByPurchase(uint96 _nftId, uint96 _purchaseIndex) view returns (uint256)
getAmountBoostedByPurchase
viewfunction getAmountBoostedByPurchase(uint96 _nftId, uint96 _purchaseIndex) view returns (uint256)
getBinaryOrMatchingReward
viewfunction getBinaryOrMatchingReward(uint96 _nftId, uint8 _rewardType) view returns (uint256)
getDirectBonusByProduct
viewfunction getDirectBonusByProduct(uint96 _nftId, uint8 _productType) view returns (tuple)
getRewardByPurchase
viewfunction getRewardByPurchase(uint96 _nftId, uint96 _purchaseIndex) view returns (tuple)
isPaused
viewfunction isPaused() view returns (bool)
isPurchaseAutoBoost
viewfunction isPurchaseAutoBoost(uint96 _nftId, uint96 _purchaseIndex) view returns (bool)
lastAutoBoostToggle
viewfunction lastAutoBoostToggle(uint96, uint96) view returns (uint256)
LP_CONTRACT
viewfunction LP_CONTRACT() view returns (address)
LP_TLV_TOTAL_AMOUNT_OUT
viewfunction LP_TLV_TOTAL_AMOUNT_OUT() view returns (uint256)
matchingAvailableRewards
viewfunction matchingAvailableRewards() view returns (uint256)
NFT_CONTRACT
viewfunction NFT_CONTRACT() view returns (address)
nftBonusPoints
viewfunction nftBonusPoints(uint96) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
PAYMENT_SPLITTER_CONTRACT
viewfunction PAYMENT_SPLITTER_CONTRACT() view returns (address)
purchaseIsAutoBoost
viewfunction purchaseIsAutoBoost(uint96, uint96) view returns (bool)
ROLES_MANAGER
viewfunction ROLES_MANAGER() view returns (address)
TREASURY
viewfunction TREASURY() view returns (address)
USDC
viewfunction USDC() view returns (address)
assingAmountAvailables
nonpayablefunction assingAmountAvailables(uint256 _binaryAmount, uint256 _matchingAmount, uint256 _blockchainInfrastructureAmount, uint256 _coreAmount)
assingAutoBoostToUnClaimed
nonpayablefunction assingAutoBoostToUnClaimed(uint96 _nftId, uint96 _purchaseId)
assingLPRewards
nonpayablefunction assingLPRewards(uint96[] _nftIds, uint96[][] _nftPurchases, uint256[][] _purchasesAmounts, bool _isSys)
AssingProfitClaimed
nonpayablefunction AssingProfitClaimed(uint96[] _nftId, uint96[][] _purchaseId, uint256[][] _amountClaimed)
assingRewards
nonpayablefunction assingRewards(uint96[] _nftId, uint256 _points, uint256[] _amount, uint8 _productType, uint8 _rewardType)
autoBoostLP
nonpayablefunction autoBoostLP(uint96 _nftId, uint96 _purchaseId) returns (bool)
boostLP
nonpayablefunction boostLP(uint96 _nftId, uint96 _purchaseId) returns (uint256)
claimBinary
nonpayablefunction claimBinary(uint96 _nftId)
claimCore
nonpayablefunction claimCore(uint8 _claimType)
claimDirect
nonpayablefunction claimDirect(uint96 _nftId, uint8 _productType)
claimLV
nonpayablefunction claimLV(uint96 _nftId, uint96 _purchaseId)
claimMatching
nonpayablefunction claimMatching(uint96 _nftId)
emergencyPause
nonpayablefunction emergencyPause()
emergencyUnpause
nonpayablefunction emergencyUnpause()
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address _address)
renounceOwnership
nonpayablefunction renounceOwnership()
saveBonusDataFromPaymentSplitter
nonpayablefunction saveBonusDataFromPaymentSplitter(uint256 _amount, uint256 binaryPercentage, uint256 matchingPercentage, uint256 blockchainInfrastructurePercentage, uint256 corePercentage, uint8 _productType)
setContractAddress
nonpayablefunction setContractAddress(address _address, uint8 _option)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
DeprecatedFunctionUsed
event DeprecatedFunctionUsed(string functionName, address caller)
DirectClaimed
event DirectClaimed(uint96 indexed nftId, uint256 amount, uint8 indexed productType)
DirectRewardAssigned
event DirectRewardAssigned(uint96 indexed sponsorNFTId, uint256 sponsorPointsEarned, uint256 sponsorAmountEarned)
LVClaimed
event LVClaimed(uint96 indexed nftId, uint96 indexed purchaseIndex, uint256 amountClaimed, uint256 date)
LVRewardAssigned
event LVRewardAssigned(uint96 indexed nftId, uint96 indexed purchaseIndex, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PointsPrecisionLoss
event PointsPrecisionLoss(uint96 indexed nft, uint256 _points, uint256 pointsToAdd)
RewardAssigned
event RewardAssigned(uint96 indexed nft, uint256 amount, uint8 indexed bonusType)
RewardClaimed
event RewardClaimed(uint96 indexed nftId, uint256 amount, uint8 indexed bonusType)
RewardsAmountsSaved
event RewardsAmountsSaved(uint256 binaryEarn, uint256 matchingEarn, uint256 blockchainInfrastructureEarn, uint256 coreEarn)
TotalRewardAssigned
event TotalRewardAssigned(uint256 totalAmount, uint8 indexed bonusType)
Unpaused
event Unpaused(address account)
errors
AccessDenied
error AccessDenied()
B1
error B1()
B2
error B2()
B3
error B3()
B4
error B4()
B5
error B5()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
T1
error T1()
V1
error V1()
V2
error V2()
V3
error V3()
V4
error V4()
V5
error V5()
creation bytecode
0x608060405234801562000010575f80fd5b506040516200616f3803806200616f8339818101604052810190620000369190620003ae565b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000aa575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000a191906200046d565b60405180910390fd5b620000bb816200024060201b60201c565b506001601581905550865f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e5f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505050505050505062000488565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003328262000307565b9050919050565b620003448162000326565b81146200034f575f80fd5b50565b5f81519050620003628162000339565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6200038a8162000368565b811462000395575f80fd5b50565b5f81519050620003a8816200037f565b92915050565b5f805f805f805f60e0888a031215620003cc57620003cb62000303565b5b5f620003db8a828b0162000352565b9750506020620003ee8a828b0162000352565b9650506040620004018a828b0162000352565b9550506060620004148a828b0162000352565b9450506080620004278a828b0162000398565b93505060a06200043a8a828b0162000352565b92505060c06200044d8a828b0162000352565b91505092959891949750929550565b620004678162000326565b82525050565b5f602082019050620004825f8301846200045c565b92915050565b615cd980620004965f395ff3fe608060405234801561000f575f80fd5b5060043610610288575f3560e01c806375f64ccc1161015a578063afcdcdb6116100cc578063f165921e11610085578063f165921e146107ae578063f2fde38b146107ca578063f3c48d03146107e6578063f4d334d714610816578063f94b918c14610834578063ff8e8ddb1461085257610288565b8063afcdcdb6146106c4578063b187bd26146106f4578063b98657e714610712578063c434641214610730578063d2c75abb1461074e578063d2f8df6b1461077e57610288565b80639ec1b9271161011e5780639ec1b92714610604578063a0c7864314610620578063a43adb6b1461063c578063a57133e714610658578063a99fc55914610676578063aa3b9c73146106a657610288565b806375f64ccc1461055e5780638690e43b1461058e57806389a30271146105ac5780638da5cb5b146105ca5780639aab1ddd146105e857610288565b806341954c84116101fe57806353544aa2116101b757806353544aa21461049c578063544b95de146104cc5780635c975abb146104fc5780635f768a801461051a5780636ff1c9bc14610538578063715018a61461055457610288565b806341954c8414610402578063438e0ce114610420578063455743e11461043c5780634a4e3bd5146104585780634b5b9f381461046257806351858e271461049257610288565b8063378604a411610250578063378604a41461031e57806339479da51461034e5780633a05e9b81461037e5780633a36c902146103ae5780633ba0ad3f146103ca5780633bc40bab146103e657610288565b80630bf7e48c1461028c5780630c8c85ed146102a85780630dabfcab146102c65780631fda9a02146102e25780632d2c556514610300575b5f80fd5b6102a660048036038101906102a191906149d0565b610882565b005b6102b0610dd5565b6040516102bd9190614a4d565b60405180910390f35b6102e060048036038101906102db9190614ab3565b610dfa565b005b6102ea611172565b6040516102f79190614a4d565b60405180910390f35b610308611197565b6040516103159190614a4d565b60405180910390f35b610338600480360381019061033391906149d0565b6111bc565b6040516103459190614b0b565b60405180910390f35b610368600480360381019061036391906149d0565b6111e6565b6040516103759190614b3c565b60405180910390f35b61039860048036038101906103939190614b55565b611206565b6040516103a59190614c37565b60405180910390f35b6103c860048036038101906103c39190614c81565b6112f7565b005b6103e460048036038101906103df9190614d08565b6113d8565b005b61040060048036038101906103fb9190614b55565b6114f9565b005b61040a61163f565b6040516104179190614b3c565b60405180910390f35b61043a600480360381019061043591906149d0565b611645565b005b61045660048036038101906104519190614e3e565b611886565b005b610460611ae3565b005b61047c600480360381019061047791906149d0565b611ba5565b6040516104899190614f41565b60405180910390f35b61049a611c3f565b005b6104b660048036038101906104b19190614f7d565b611d02565b6040516104c39190614b3c565b60405180910390f35b6104e660048036038101906104e191906149d0565b611dbf565b6040516104f39190614b3c565b60405180910390f35b610504611ddf565b6040516105119190614b0b565b60405180910390f35b610522611df3565b60405161052f9190614a4d565b60405180910390f35b610552600480360381019061054d9190614fbb565b611e18565b005b61055c6120e2565b005b610578600480360381019061057391906149d0565b6120f5565b6040516105859190614b3c565b60405180910390f35b61059661210e565b6040516105a39190615041565b60405180910390f35b6105b4612131565b6040516105c19190614a4d565b60405180910390f35b6105d2612156565b6040516105df9190614a4d565b60405180910390f35b61060260048036038101906105fd9190615285565b61217e565b005b61061e60048036038101906106199190615334565b612787565b005b61063a60048036038101906106359190614b55565b6129f7565b005b610656600480360381019061065191906153e7565b612b3d565b005b61066061307e565b60405161066d91906154ba565b60405180910390f35b610690600480360381019061068b91906149d0565b61309b565b60405161069d9190614b3c565b60405180910390f35b6106ae613312565b6040516106bb9190614b3c565b60405180910390f35b6106de60048036038101906106d991906149d0565b613318565b6040516106eb9190614b0b565b60405180910390f35b6106fc6134d5565b6040516107099190614b0b565b60405180910390f35b61071a6134e3565b6040516107279190614b3c565b60405180910390f35b6107386134e9565b6040516107459190614b3c565b60405180910390f35b61076860048036038101906107639190614b55565b6134ef565b6040516107759190614b3c565b60405180910390f35b610798600480360381019061079391906149d0565b613504565b6040516107a59190614b0b565b60405180910390f35b6107c860048036038101906107c391906154d3565b613572565b005b6107e460048036038101906107df9190614fbb565b6137f1565b005b61080060048036038101906107fb91906154d3565b613875565b60405161080d9190614f41565b60405180910390f35b61081e61390b565b60405161082b9190614b3c565b60405180910390f35b61083c613911565b6040516108499190614b0b565b60405180910390f35b61086c600480360381019061086791906149d0565b613924565b6040516108799190614b3c565b60405180910390f35b816bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016109029190614b3c565b602060405180830381865afa15801561091d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109419190615525565b73ffffffffffffffffffffffffffffffffffffffff161461098e576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361099881613986565b6109a0613992565b6109a86139d8565b6109b0613a19565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639e1f22e186866040518363ffffffff1660e01b8152600401610a10929190615550565b5f6040518083038186803b158015610a26575f80fd5b505afa158015610a38573d5f803e3d5ffd5b505050505f8173ffffffffffffffffffffffffffffffffffffffff1663b14feb6287876040518363ffffffff1660e01b8152600401610a78929190615550565b61012060405180830381865afa158015610a94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab891906156cb565b6060015190505f80610aca8888613a23565b915091508015610b3d578373ffffffffffffffffffffffffffffffffffffffff1663dbf80a0389896040518363ffffffff1660e01b8152600401610b0f929190615550565b5f604051808303815f87803b158015610b26575f80fd5b505af1158015610b38573d5f803e3d5ffd5b505050505b5f8203610b76576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8290506064603285610b899190615724565b610b939190615792565b831015610bec575f6064600e5f9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1685610bd09190615724565b610bda9190615792565b90508084610be891906157c2565b9150505b5f60085f8b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905083815f8b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f01541015610c84576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f42905084825f8c6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f828254610cc591906157c2565b9250508190555084825f8c6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f206001015f828254610d0a91906157f5565b9250508190555080825f8c6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2060030181905550610d513033855f613cc5565b8460135f828254610d6291906157f5565b92505081905550896bffffffffffffffffffffffff168b6bffffffffffffffffffffffff167f19126e7cfd31aeab63ee75323f33586daec83b36c646b0ffc32d2b90debbfe6f8784604051610db8929190615828565b60405180910390a350505050505050610dcf614028565b50505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b336040518060400160405280600a81526020017f535550455241444d494e00000000000000000000000000000000000000000000815250610e5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614032565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ec0576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ec8613a19565b5f6005811115610edb57610eda61584f565b5b836005811115610eee57610eed61584f565b5b03610f3757835f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061116c565b60016005811115610f4b57610f4a61584f565b5b836005811115610f5e57610f5d61584f565b5b03610fa8578360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061116b565b60026005811115610fbc57610fbb61584f565b5b836005811115610fcf57610fce61584f565b5b03611019578360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061116a565b6003600581111561102d5761102c61584f565b5b8360058111156110405761103f61584f565b5b0361108a578360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611169565b6004600581111561109e5761109d61584f565b5b8360058111156110b1576110b061584f565b5b036110fb578360045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611168565b60058081111561110e5761110d61584f565b5b8360058111156111215761112061584f565b5b03611167578360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b5b5b5b50505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b6011602052815f5260405f20602052805f5260405f205f91509150505481565b60605f600367ffffffffffffffff8111156112245761122361506a565b5b6040519080825280602002602001820160405280156112525781602001602082028036833780820191505090505b5090505f5b6003816bffffffffffffffffffffffff1610156112ed5760065f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8260ff1660ff1681526020019081526020015f205f015482826bffffffffffffffffffffffff16815181106112d4576112d361587c565b5b6020026020010181815250508080600101915050611257565b5080915050919050565b336040518060400160405280600681526020017f53595354454d00000000000000000000000000000000000000000000000000008152506113585f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614032565b611360613992565b6113686139d8565b85600a5f82825461137991906157f5565b9250508190555084600b5f82825461139191906157f5565b9250508190555083600c5f8282546113a991906157f5565b9250508190555082600d5f8282546113c191906157f5565b925050819055506113d0614028565b505050505050565b336040518060400160405280600481526020017f434f5245000000000000000000000000000000000000000000000000000000008152506114395f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614032565b3361144381613986565b61144b613992565b6114536139d8565b61145b613a19565b5f80600181111561146f5761146e61584f565b5b8560018111156114825761148161584f565b5b0361149857600d5490505f600d819055506114a5565b600c5490505f600c819055505b5f81036114de576040517fdd57a76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ea3033835f613cc5565b506114f3614028565b50505050565b806bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016115799190614b3c565b602060405180830381865afa158015611594573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b89190615525565b73ffffffffffffffffffffffffffffffffffffffff1614611605576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361160f81613986565b611617613992565b61161f6139d8565b611627613a19565b611632836001614042565b61163a614028565b505050565b600d5481565b3360015f808260ff161461167a5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661169d565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611704576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61170c613992565b6117146139d8565b5f60105f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f866bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205490505f81036117a9576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060085f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f82825461181291906157f5565b925050819055505f60105f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20819055505061187f614028565b5050505050565b336040518060400160405280600a81526020017f535550455241444d494e000000000000000000000000000000000000000000008152506118e75f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614032565b6118ef6139d8565b6118f7613a19565b5f5b88889050816bffffffffffffffffffffffff161015611ad8575f5b8787836bffffffffffffffffffffffff168181106119355761193461587c565b5b905060200281019061194791906158b5565b9050816bffffffffffffffffffffffff161015611ac4578585836bffffffffffffffffffffffff1681811061197f5761197e61587c565b5b90506020028101906119919190615917565b826bffffffffffffffffffffffff168181106119b0576119af61587c565b5b9050602002013560085f8c8c866bffffffffffffffffffffffff168181106119db576119da61587c565b5b90506020020160208101906119f09190614b55565b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8a8a866bffffffffffffffffffffffff16818110611a3b57611a3a61587c565b5b9050602002810190611a4d91906158b5565b856bffffffffffffffffffffffff16818110611a6c57611a6b61587c565b5b9050602002016020810190611a819190614b55565b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20600101819055508080611abc90615979565b915050611914565b508080611ad090615979565b9150506118f9565b505050505050505050565b611aeb613a19565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b71576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b79613992565b5f601260146101000a81548160ff021916908315150217905550611b9b6142a0565b611ba3614028565b565b611bad61495a565b60085f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050905092915050565b611c47613a19565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd5613992565b6001601260146101000a81548160ff021916908315150217905550611cf8614301565b611d00614028565b565b5f806002811115611d1657611d1561584f565b5b826002811115611d2957611d2861584f565b5b03611d60576040517f9c58ee2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836002811115611da157611da061584f565b5b60ff1660ff1681526020019081526020015f205f0154905092915050565b6010602052815f5260405f20602052805f5260405f205f91509150505481565b5f60148054906101000a900460ff16905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b336040518060400160405280600a81526020017f535550455241444d494e00000000000000000000000000000000000000000000815250611e795f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614032565b611e81613992565b611e89613a19565b601260149054906101000a900460ff16611ecf576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611f3457505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611f6b576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120039190614a4d565b602060405180830381865afa15801561201e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204291906159ac565b6040518363ffffffff1660e01b815260040161205f9291906159d7565b6020604051808303815f875af115801561207b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209f91906159fe565b6120d5576040517fa11efef400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120dd614028565b505050565b6120ea614363565b6120f35f6143ea565b565b5f806121018484613a23565b5090508091505092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280600681526020017f53595354454d00000000000000000000000000000000000000000000000000008152508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561223957506122375f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633836144ad565b155b15612270576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612278613992565b6122806139d8565b84518751146122bb576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032875111156122f7576040517f96cd25ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8084600281111561230c5761230b61584f565b5b90505f5b8951816bffffffffffffffffffffffff16101561273c575f8a826bffffffffffffffffffffffff16815181106123495761234861587c565b5b602002602001015190505f89836bffffffffffffffffffffffff16815181106123755761237461587c565b5b602002602001015190506402540be3ff6bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015612727575f60028111156123bb576123ba61584f565b5b8860028111156123ce576123cd61584f565b5b036125be575f60065f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2090505f8a60028111156124175761241661584f565b5b905082825f8360ff1660ff1681526020019081526020015f205f015f82825461244091906157f5565b9250508190555042825f8360ff1660ff1681526020019081526020015f20600201819055505f8d111561256f57670de0b6b3a76400008d10156124af576040517f2fb42d7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f670de0b6b3a76400008e6124c49190615792565b90505f670de0b6b3a76400008f6124db9190615a29565b111561252a57846bffffffffffffffffffffffff167fa40c56a5fd1e8eb4ed66a8bcaa56b10328137b8e1d8b6dd2d2ac30cdf2d9dc658f83604051612521929190615828565b60405180910390a25b8060095f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f82825461256691906157f5565b92505081905550505b836bffffffffffffffffffffffff167ff051b25e39da97a65275eb304ec1b2f03cd7163e382fda5e4a79b61a8e9528fb8e856040516125af929190615828565b60405180910390a25050612718565b600160028111156125d2576125d161584f565b5b8860028111156125e5576125e461584f565b5b148061261457506002808111156125ff576125fe61584f565b5b8860028111156126125761261161584f565b5b145b156126e5575f60075f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905081815f8760ff1660ff1681526020019081526020015f205f015f82825461267091906157f5565b9250508190555042815f8760ff1660ff1681526020019081526020015f20600201819055508460ff16836bffffffffffffffffffffffff167f5ac5177ff34f8f020430e7e23dbc1150f106326e8336d0b2179ce2ca8fa90910846040516126d79190614b3c565b60405180910390a350612717565b6040517f9c58ee2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b808561272491906157f5565b94505b5050808061273490615979565b915050612310565b505f60028111156127505761274f61584f565b5b8560028111156127635761276261584f565b5b14612774576127738282876144f9565b5b505061277e614028565b50505050505050565b335f805f8260ff16146127bb5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166127de565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612845576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61284d613992565b6128556139d8565b600160028111156128695761286861584f565b5b84600281111561287c5761287b61584f565b5b036129e4575f8587898b61289091906157f5565b61289a91906157f5565b6128a491906157f5565b905060648111156128e1576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064898b6128ef9190615724565b6128f99190615792565b600a5f82825461290991906157f5565b925050819055506064888b61291e9190615724565b6129289190615792565b600b5f82825461293891906157f5565b925050819055506064878b61294d9190615724565b6129579190615792565b600c5f82825461296791906157f5565b925050819055506064868b61297c9190615724565b6129869190615792565b600d5f82825461299691906157f5565b925050819055507fd29e2e2256eee4d115eca99db22baba672af7bca24082195a6f99896c864b773600a54600b54600c54600d546040516129da9493929190615a59565b60405180910390a1505b6129ec614028565b505050505050505050565b806bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401612a779190614b3c565b602060405180830381865afa158015612a92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab69190615525565b73ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612b0d81613986565b612b15613992565b612b1d6139d8565b612b25613a19565b612b30836002614042565b612b38614028565b505050565b336040518060400160405280600681526020017f53595354454d0000000000000000000000000000000000000000000000000000815250612b9e5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614032565b612ba6613992565b612bae6139d8565b8686905089899050141580612bc95750848490508989905014155b15612c00576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c08613a19565b5f805b8a8a9050816bffffffffffffffffffffffff161015613056575f8b8b836bffffffffffffffffffffffff16818110612c4657612c4561587c565b5b9050602002016020810190612c5b9190614b55565b90505f8a8a846bffffffffffffffffffffffff16818110612c7f57612c7e61587c565b5b9050602002810190612c9191906158b5565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505090505f8989856bffffffffffffffffffffffff16818110612cf457612cf361587c565b5b9050602002810190612d069190615917565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505090505f5b8251816bffffffffffffffffffffffff16101561303f575f83826bffffffffffffffffffffffff1681518110612d8257612d8161587c565b5b602002602001015190505f83836bffffffffffffffffffffffff1681518110612dae57612dad61587c565b5b602002602001015190508088612dc491906157f5565b97505f60085f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e1f22e188856040518363ffffffff1660e01b8152600401612e52929190615550565b5f6040518083038186803b158015612e68575f80fd5b505afa158015612e7a573d5f803e3d5ffd5b50505050600f5f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612f5b578160105f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f828254612f4f91906157f5565b92505081905550612fd4565b81815f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f828254612f9891906157f5565b9250508190555042815f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20600201819055505b826bffffffffffffffffffffffff16876bffffffffffffffffffffffff167ffdd3b575047dba8e20225ea71ca0d0957cd0c3abb30a21800f57d6d5d9ed5608846040516130219190614b3c565b60405180910390a3505050808061303790615979565b915050612d49565b50505050808061304e90615979565b915050612c0b565b508361306a576130693330836001613cc5565b5b50613073614028565b505050505050505050565b600e5f9054906101000a90046bffffffffffffffffffffffff1681565b5f3360015f808260ff16146130d15760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166130f4565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461315b576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613163613992565b61316b6139d8565b5f6131768787613a23565b5090505f81036131b2576040517fa975d0b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905081815f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f0154101561324a576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160105f8a6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8282546132b191906157f5565b9250508190555081815f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f8282546132f591906157c2565b925050819055508195505050613309614028565b50505092915050565b600b5481565b5f3360015f808260ff161461334e5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613371565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133d8576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133e0613992565b6133e86139d8565b5f600f5f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615905080600f5f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550809450506134cc614028565b50505092915050565b5f6134de611ddf565b905090565b600c5481565b600a5481565b6009602052805f5260405f205f915090505481565b5f600f5f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b816bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016135f29190614b3c565b602060405180830381865afa15801561360d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136319190615525565b73ffffffffffffffffffffffffffffffffffffffff161461367e576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613686613992565b61368e6139d8565b613696613a19565b5f8260028111156136aa576136a961584f565b5b90505f60065f866bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2090505f8061372e835f8660ff1660ff1681526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015481526020016003820154815250506145af565b9150915081835f8660ff1660ff1681526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015590505061377e3033835f613cc5565b8060135f82825461378f91906157f5565b925050819055508360ff16876bffffffffffffffffffffffff167f89a82e076e649643c1cde69833b2f22d3385f598ffcfb4db3a6c766659304572836040516137d89190614b3c565b60405180910390a3505050506137ec614028565b505050565b6137f9614363565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613869575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016138609190614a4d565b60405180910390fd5b613872816143ea565b50565b61387d61495a565b60065f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8360028111156138be576138bd61584f565b5b60ff1660ff1681526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050905092915050565b60135481565b601260149054906101000a900460ff1681565b5f60105f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61398f816145f2565b50565b6002601554036139ce576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002601581905550565b6139e0611ddf565b15613a17576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b613a2161465a565b565b5f805f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60105f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f866bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20548273ffffffffffffffffffffffffffffffffffffffff1663b14feb6288886040518363ffffffff1660e01b8152600401613adf929190615550565b61012060405180830381865afa158015613afb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b1f91906156cb565b60600151613b2d91906157f5565b90505f600282613b3d9190615724565b90505f60085f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f206040518060800160405290815f8201548152602001600182015481526020016002820154815260200160038201548152505090505f8473ffffffffffffffffffffffffffffffffffffffff1663d3b30b756040518163ffffffff1660e01b815260040160a060405180830381865afa158015613c16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c3a9190615b25565b90505f42905082602001518411613c5d575f600197509750505050505050613cbe565b5f613c7583604001518460200151865f0151856146f2565b90505f80613c88878760200151856147ed565b9150915081865f01511015613cae57855f0151819a509a50505050505050505050613cbe565b81819a509a505050505050505050505b9250929050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613d2a57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15613d61576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8203613d9a576040517fdd57a76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401613df59190614a4d565b602060405180830381865afa158015613e10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e3491906159ac565b1015613e6c576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff1603613f4d5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401613ed29291906159d7565b6020604051808303815f875af1158015613eee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f1291906159fe565b613f48576040517fa11efef400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614022565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b8152600401613fab93929190615b50565b6020604051808303815f875af1158015613fc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613feb91906159fe565b614021576040517fa11efef400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6001601581905550565b61403d838383614848565b505050565b5f60028111156140555761405461584f565b5b8160028111156140685761406761584f565b5b0361409f576040517f9c58ee2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160028111156140b3576140b261584f565b5b90505f60075f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2090505f80614137835f8660ff1660ff1681526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015481526020016003820154815250506145af565b915091505f8103614174576040517fdd57a76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600160028111156141895761418861584f565b5b86600281111561419c5761419b61584f565b5b146141a957600b546141ad565b600a545b9050808211156141e9576040517f0c92ca1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82845f8760ff1660ff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301559050508160135f82825461423a91906157f5565b9250508190555061424d3033845f613cc5565b8460ff16876bffffffffffffffffffffffff167f6fecf8ce6dabd40d2ecb7b054268fce01bd7a319c37c0dd673410b7989bcd6ca8460405161428f9190614b3c565b60405180910390a350505050505050565b6142a861488e565b5f6014806101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6142ea6148ce565b6040516142f79190614a4d565b60405180910390a1565b6143096139d8565b60016014806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861434c6148ce565b6040516143599190614a4d565b60405180910390a1565b61436b6148ce565b73ffffffffffffffffffffffffffffffffffffffff16614389612156565b73ffffffffffffffffffffffffffffffffffffffff16146143e8576143ac6148ce565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016143df9190614a4d565b60405180910390fd5b565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f7fa381e04ebab680939155d24deb84d393532b31de755eb4ffc2564a5d5c5adb8d336040516144dd9190615bdf565b60405180910390a16144f08484846148d5565b90509392505050565b5f6001600281111561450e5761450d61584f565b5b8260028111156145215761452061584f565b5b1461452e57600b54614532565b600a545b90508084111561456e576040517f0c92ca1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff167f522bb991e510508243ba35979f10973ec1cf2e6ccb116f519429ed0df65ab3c9856040516145a19190614b3c565b60405180910390a250505050565b6145b761495a565b5f825f015190505f835f01818152505080836020018181516145d991906157f5565b9150818152505042836060018181525050829150915091565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614657576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f80339050803b91505f82111561469d576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff163b11156146ee576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b5f848210614702578290506147e5565b5f828661470f91906157c2565b90505f600a8261471f9190615792565b90505f600a878961473091906157c2565b61473a9190615792565b90505f828261474991906157c2565b90505f8282896147599190615724565b6147639190615792565b90505f6103e890505f8211801561477957508082105b156147ad57605a8461478b9190615724565b6064846147989190615724565b11156147ac578096505050505050506147e5565b5b605f846147ba9190615724565b6064846147c79190615724565b11156147db578896505050505050506147e5565b8196505050505050505b949350505050565b5f80838511614802575f600191509150614840565b5f848461480f91906157f5565b905080861015614836575f858761482691906157c2565b9050806001935093505050614840565b8381871492509250505b935093915050565b6148538383836148d5565b614889576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b614896611ddf565b6148cc576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f8373ffffffffffffffffffffffffffffffffffffffff16637909185184846040518363ffffffff1660e01b8152600401614911929190615c75565b6020604051808303815f875af115801561492d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061495191906159fe565b90509392505050565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f6bffffffffffffffffffffffff82169050919050565b6149af8161498f565b81146149b9575f80fd5b50565b5f813590506149ca816149a6565b92915050565b5f80604083850312156149e6576149e5614987565b5b5f6149f3858286016149bc565b9250506020614a04858286016149bc565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614a3782614a0e565b9050919050565b614a4781614a2d565b82525050565b5f602082019050614a605f830184614a3e565b92915050565b614a6f81614a2d565b8114614a79575f80fd5b50565b5f81359050614a8a81614a66565b92915050565b60068110614a9c575f80fd5b50565b5f81359050614aad81614a90565b92915050565b5f8060408385031215614ac957614ac8614987565b5b5f614ad685828601614a7c565b9250506020614ae785828601614a9f565b9150509250929050565b5f8115159050919050565b614b0581614af1565b82525050565b5f602082019050614b1e5f830184614afc565b92915050565b5f819050919050565b614b3681614b24565b82525050565b5f602082019050614b4f5f830184614b2d565b92915050565b5f60208284031215614b6a57614b69614987565b5b5f614b77848285016149bc565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614bb281614b24565b82525050565b5f614bc38383614ba9565b60208301905092915050565b5f602082019050919050565b5f614be582614b80565b614bef8185614b8a565b9350614bfa83614b9a565b805f5b83811015614c2a578151614c118882614bb8565b9750614c1c83614bcf565b925050600181019050614bfd565b5085935050505092915050565b5f6020820190508181035f830152614c4f8184614bdb565b905092915050565b614c6081614b24565b8114614c6a575f80fd5b50565b5f81359050614c7b81614c57565b92915050565b5f805f8060808587031215614c9957614c98614987565b5b5f614ca687828801614c6d565b9450506020614cb787828801614c6d565b9350506040614cc887828801614c6d565b9250506060614cd987828801614c6d565b91505092959194509250565b60028110614cf1575f80fd5b50565b5f81359050614d0281614ce5565b92915050565b5f60208284031215614d1d57614d1c614987565b5b5f614d2a84828501614cf4565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614d5457614d53614d33565b5b8235905067ffffffffffffffff811115614d7157614d70614d37565b5b602083019150836020820283011115614d8d57614d8c614d3b565b5b9250929050565b5f8083601f840112614da957614da8614d33565b5b8235905067ffffffffffffffff811115614dc657614dc5614d37565b5b602083019150836020820283011115614de257614de1614d3b565b5b9250929050565b5f8083601f840112614dfe57614dfd614d33565b5b8235905067ffffffffffffffff811115614e1b57614e1a614d37565b5b602083019150836020820283011115614e3757614e36614d3b565b5b9250929050565b5f805f805f8060608789031215614e5857614e57614987565b5b5f87013567ffffffffffffffff811115614e7557614e7461498b565b5b614e8189828a01614d3f565b9650965050602087013567ffffffffffffffff811115614ea457614ea361498b565b5b614eb089828a01614d94565b9450945050604087013567ffffffffffffffff811115614ed357614ed261498b565b5b614edf89828a01614de9565b92509250509295509295509295565b608082015f820151614f025f850182614ba9565b506020820151614f156020850182614ba9565b506040820151614f286040850182614ba9565b506060820151614f3b6060850182614ba9565b50505050565b5f608082019050614f545f830184614eee565b92915050565b60038110614f66575f80fd5b50565b5f81359050614f7781614f5a565b92915050565b5f8060408385031215614f9357614f92614987565b5b5f614fa0858286016149bc565b9250506020614fb185828601614f69565b9150509250929050565b5f60208284031215614fd057614fcf614987565b5b5f614fdd84828501614a7c565b91505092915050565b5f819050919050565b5f615009615004614fff84614a0e565b614fe6565b614a0e565b9050919050565b5f61501a82614fef565b9050919050565b5f61502b82615010565b9050919050565b61503b81615021565b82525050565b5f6020820190506150545f830184615032565b92915050565b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6150a08261505a565b810181811067ffffffffffffffff821117156150bf576150be61506a565b5b80604052505050565b5f6150d161497e565b90506150dd8282615097565b919050565b5f67ffffffffffffffff8211156150fc576150fb61506a565b5b602082029050602081019050919050565b5f61511f61511a846150e2565b6150c8565b9050808382526020820190506020840283018581111561514257615141614d3b565b5b835b8181101561516b578061515788826149bc565b845260208401935050602081019050615144565b5050509392505050565b5f82601f83011261518957615188614d33565b5b813561519984826020860161510d565b91505092915050565b5f67ffffffffffffffff8211156151bc576151bb61506a565b5b602082029050602081019050919050565b5f6151df6151da846151a2565b6150c8565b9050808382526020820190506020840283018581111561520257615201614d3b565b5b835b8181101561522b57806152178882614c6d565b845260208401935050602081019050615204565b5050509392505050565b5f82601f83011261524957615248614d33565b5b81356152598482602086016151cd565b91505092915050565b6003811061526e575f80fd5b50565b5f8135905061527f81615262565b92915050565b5f805f805f60a0868803121561529e5761529d614987565b5b5f86013567ffffffffffffffff8111156152bb576152ba61498b565b5b6152c788828901615175565b95505060206152d888828901614c6d565b945050604086013567ffffffffffffffff8111156152f9576152f861498b565b5b61530588828901615235565b935050606061531688828901615271565b925050608061532788828901614f69565b9150509295509295909350565b5f805f805f8060c0878903121561534e5761534d614987565b5b5f61535b89828a01614c6d565b965050602061536c89828a01614c6d565b955050604061537d89828a01614c6d565b945050606061538e89828a01614c6d565b935050608061539f89828a01614c6d565b92505060a06153b089828a01615271565b9150509295509295509295565b6153c681614af1565b81146153d0575f80fd5b50565b5f813590506153e1816153bd565b92915050565b5f805f805f805f6080888a03121561540257615401614987565b5b5f88013567ffffffffffffffff81111561541f5761541e61498b565b5b61542b8a828b01614d3f565b9750975050602088013567ffffffffffffffff81111561544e5761544d61498b565b5b61545a8a828b01614d94565b9550955050604088013567ffffffffffffffff81111561547d5761547c61498b565b5b6154898a828b01614de9565b9350935050606061549c8a828b016153d3565b91505092959891949750929550565b6154b48161498f565b82525050565b5f6020820190506154cd5f8301846154ab565b92915050565b5f80604083850312156154e9576154e8614987565b5b5f6154f6858286016149bc565b925050602061550785828601615271565b9150509250929050565b5f8151905061551f81614a66565b92915050565b5f6020828403121561553a57615539614987565b5b5f61554784828501615511565b91505092915050565b5f6040820190506155635f8301856154ab565b61557060208301846154ab565b9392505050565b5f80fd5b5f81519050615589816149a6565b92915050565b5f61ffff82169050919050565b6155a58161558f565b81146155af575f80fd5b50565b5f815190506155c08161559c565b92915050565b5f815190506155d481614c57565b92915050565b5f815190506155e8816153bd565b92915050565b5f610120828403121561560457615603615577565b5b61560f6101206150c8565b90505f61561e8482850161557b565b5f830152506020615631848285016155b2565b60208301525060406156458482850161557b565b6040830152506060615659848285016155c6565b606083015250608061566d848285016155c6565b60808301525060a0615681848285016155c6565b60a08301525060c0615695848285016155da565b60c08301525060e06156a9848285016155c6565b60e0830152506101006156be848285016155c6565b6101008301525092915050565b5f61012082840312156156e1576156e0614987565b5b5f6156ee848285016155ee565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61572e82614b24565b915061573983614b24565b925082820261574781614b24565b9150828204841483151761575e5761575d6156f7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61579c82614b24565b91506157a783614b24565b9250826157b7576157b6615765565b5b828204905092915050565b5f6157cc82614b24565b91506157d783614b24565b92508282039050818111156157ef576157ee6156f7565b5b92915050565b5f6157ff82614b24565b915061580a83614b24565b9250828201905080821115615822576158216156f7565b5b92915050565b5f60408201905061583b5f830185614b2d565b6158486020830184614b2d565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126158d1576158d06158a9565b5b80840192508235915067ffffffffffffffff8211156158f3576158f26158ad565b5b60208301925060208202360383131561590f5761590e6158b1565b5b509250929050565b5f8083356001602003843603038112615933576159326158a9565b5b80840192508235915067ffffffffffffffff821115615955576159546158ad565b5b602083019250602082023603831315615971576159706158b1565b5b509250929050565b5f6159838261498f565b91506bffffffffffffffffffffffff82036159a1576159a06156f7565b5b600182019050919050565b5f602082840312156159c1576159c0614987565b5b5f6159ce848285016155c6565b91505092915050565b5f6040820190506159ea5f830185614a3e565b6159f76020830184614b2d565b9392505050565b5f60208284031215615a1357615a12614987565b5b5f615a20848285016155da565b91505092915050565b5f615a3382614b24565b9150615a3e83614b24565b925082615a4e57615a4d615765565b5b828206905092915050565b5f608082019050615a6c5f830187614b2d565b615a796020830186614b2d565b615a866040830185614b2d565b615a936060830184614b2d565b95945050505050565b5f60a08284031215615ab157615ab0615577565b5b615abb60a06150c8565b90505f615aca8482850161557b565b5f830152506020615add848285016155c6565b6020830152506040615af1848285016155c6565b6040830152506060615b05848285016155c6565b6060830152506080615b19848285016155da565b60808301525092915050565b5f60a08284031215615b3a57615b39614987565b5b5f615b4784828501615a9c565b91505092915050565b5f606082019050615b635f830186614a3e565b615b706020830185614a3e565b615b7d6040830184614b2d565b949350505050565b5f82825260208201905092915050565b7f76616c6964617465526f6c6557697468436f6f6c646f776e00000000000000005f82015250565b5f615bc9601883615b85565b9150615bd482615b95565b602082019050919050565b5f6040820190508181035f830152615bf681615bbd565b9050615c056020830184614a3e565b92915050565b5f81519050919050565b5f5b83811015615c32578082015181840152602081019050615c17565b5f8484015250505050565b5f615c4782615c0b565b615c518185615b85565b9350615c61818560208601615c15565b615c6a8161505a565b840191505092915050565b5f604082019050615c885f830185614a3e565b8181036020830152615c9a8184615c3d565b9050939250505056fea2646970667358221220d60be2611f2a90f8c24b4e0204b3047a0fa8f9b5b9e55141a14ca1570af33a5464736f6c63430008180033000000000000000000000000f79641d66bf22e777f9cf74bdaf535cb253949090000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000a784aa9d9ca760a1d7973c3ad902c1d0052581dd0000000000000000000000000ac38e7334b0f14053963f4ebe2db463351c96ad000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000001bd41c988fd8807a73e79cfb465df488e73d6c0d0000000000000000000000002ee70f0585d83f523ae876f86b8df2c6c8677a99