889 txs
1.1k calls
constructor
constructor(address _gaugeController, address _feeCollector, address _owner)
functions
activePeriod
viewfunction activePeriod(uint256) view returns (uint8 id, uint256 timestamp, uint256 rewardPerPeriod)
amountClaimed
viewfunction amountClaimed(uint256) view returns (uint256)
bounties
viewfunction bounties(uint256) view returns (address gauge, uint256 chainId, address manager, address rewardToken, uint8 numberOfEpochs, uint256 endTimestamp, uint256 maxRewardPerVote, uint256 totalRewardAmount)
claimable
viewfunction claimable(address user, uint256 bountyId) view returns (uint256 amount)
escrow
viewfunction escrow() view returns (address)
fee
viewfunction fee() view returns (uint256)
feeAccrued
viewfunction feeAccrued(address) view returns (uint256)
feeCollector
viewfunction feeCollector() view returns (address)
gaugeController
viewfunction gaugeController() view returns (address)
getActivePeriod
viewfunction getActivePeriod(uint256 bountyId) view returns (tuple)
getActivePeriodPerBounty
viewfunction getActivePeriodPerBounty(uint256 bountyId) view returns (uint8)
getBlacklistedAddressesPerBounty
viewfunction getBlacklistedAddressesPerBounty(uint256 bountyId) view returns (address[])
getBounty
viewfunction getBounty(uint256 bountyId) view returns (tuple)
getCurrentEpoch
viewfunction getCurrentEpoch() view returns (uint256)
getPeriodsLeft
viewfunction getPeriodsLeft(uint256 bountyId) view returns (uint256 periodsLeft)
getUpgradedBountyQueued
viewfunction getUpgradedBountyQueued(uint256 bountyId) view returns (tuple)
getVersion
purefunction getVersion() pure returns (string)
isBlacklisted
viewfunction isBlacklisted(uint256, address) view returns (bool)
isKilled
viewfunction isKilled() view returns (bool)
isUpgradeable
viewfunction isUpgradeable(uint256) view returns (bool)
lastUserClaim
viewfunction lastUserClaim(address, uint256) view returns (uint256)
MINIMUM_EPOCH
viewfunction MINIMUM_EPOCH() view returns (uint8)
nextID
viewfunction nextID() view returns (uint256)
owner
viewfunction owner() view returns (address)
recipient
viewfunction recipient(address) view returns (address)
rewardPerVote
viewfunction rewardPerVote(uint256) view returns (uint256)
upgradeBountyQueue
viewfunction upgradeBountyQueue(uint256) view returns (uint8 numberOfEpochs, uint256 totalRewardAmount, uint256 maxRewardPerVote, uint256 endTimestamp)
claim
nonpayablefunction claim(uint256 bountyId, address _recipient) returns (uint256)
claim
nonpayablefunction claim(uint256 bountyId) returns (uint256)
claimAll
nonpayablefunction claimAll(uint256[] ids, address _recipient)
claimAll
nonpayablefunction claimAll(uint256[] ids)
claimAllFor
nonpayablefunction claimAllFor(address _user, uint256[] ids)
claimFees
nonpayablefunction claimFees(address[] rewardTokens)
claimFor
nonpayablefunction claimFor(address user, uint256 bountyId) returns (uint256)
closeBounty
nonpayablefunction closeBounty(uint256 bountyId)
createBounty
nonpayablefunction createBounty(address gauge, uint256 chainId, address manager, address rewardToken, uint8 numberOfEpochs, uint256 maxRewardPerVote, uint256 totalRewardAmount, address[] blacklist, bool upgradeable) returns (uint256 newBountyId)
increaseBountyDuration
nonpayablefunction increaseBountyDuration(uint256 _bountyId, uint8 _additionnalEpochs, uint256 _increasedAmount, uint256 _newMaxPricePerVote)
kill
nonpayablefunction kill()
setFeeCollector
nonpayablefunction setFeeCollector(address _feeCollector)
setPlatformFee
nonpayablefunction setPlatformFee(uint256 _platformFee)
setRecipient
nonpayablefunction setRecipient(address _recipient)
setRecipientFor
nonpayablefunction setRecipientFor(address _for, address _recipient)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateBountyPeriod
nonpayablefunction updateBountyPeriod(uint256 bountyId)
updateBountyPeriods
nonpayablefunction updateBountyPeriods(uint256[] ids)
updateManager
nonpayablefunction updateManager(uint256 bountyId, address newManager)
events
BountyClosed
event BountyClosed(uint256 id, uint256 remainingReward)
BountyCreated
event BountyCreated(uint256 indexed id, address indexed gauge, uint256 chainId, address manager, address rewardToken, uint8 numberOfPeriods, uint256 maxRewardPerVote, uint256 rewardPerPeriod, uint256 totalRewardAmount, bool isUpgradeable)
BountyDurationIncrease
event BountyDurationIncrease(uint256 id, uint8 numberOfPeriods, uint256 totalRewardAmount, uint256 maxRewardPerVote)
BountyDurationIncreaseQueued
event BountyDurationIncreaseQueued(uint256 id, uint8 numberOfPeriods, uint256 totalRewardAmount, uint256 maxRewardPerVote)
Claimed
event Claimed(address indexed user, address rewardToken, uint256 indexed bountyId, uint256 amount, uint256 protocolFees, uint256 period)
FeeCollectorUpdated
event FeeCollectorUpdated(address feeCollector)
FeesCollected
event FeesCollected(address indexed rewardToken, uint256 amount)
FeeUpdated
event FeeUpdated(uint256 fee)
ManagerUpdated
event ManagerUpdated(uint256 id, address indexed manager)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
PeriodRolledOver
event PeriodRolledOver(uint256 id, uint256 periodId, uint256 timestamp, uint256 rewardPerPeriod)
RecipientSet
event RecipientSet(address indexed sender, address indexed recipient)
errors
ALREADY_CLOSED
error ALREADY_CLOSED()
AUTH_MANAGER_ONLY
error AUTH_MANAGER_ONLY()
INVALID_NUMBER_OF_EPOCHS
error INVALID_NUMBER_OF_EPOCHS()
INVALID_TOKEN
error INVALID_TOKEN()
KILLED
error KILLED()
NO_PERIODS_LEFT
error NO_PERIODS_LEFT()
NOT_UPGRADEABLE
error NOT_UPGRADEABLE()
WRONG_INPUT
error WRONG_INPUT()
ZERO_ADDRESS
error ZERO_ADDRESS()
creation bytecode
0x60c08060405234620001c157606081620036d18038038091620000238285620001c5565b833981010312620001c1578060406020620000426200006894620001fd565b92600462000052838301620001fd565b6001600160a01b039687959193869201620001fd565b168460018060a01b0319965f9783818a541617895560405197889687958b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36001805566470de4df820000600355169060055416176005551680608052634f2bfe5b60e01b82525afa918215620001b55780926200016e575b50501660a0526040516134be9081620002138239608051818181610a710152818161157e015281816122430152818161251b015281816127ad01528181612ad001528181612b6901528181612bf001528181612ce401528181612d5101526130d6015260a05181818161043601528181610f1f015281816118fa01528181611fc20152612c630152f35b9091506020823d8211620001ac575b816200018c60209383620001c5565b81010312620001a95750620001a190620001fd565b5f80620000e4565b80fd5b3d91506200017d565b604051903d90823e3d90fd5b5f80fd5b601f909101601f19168101906001600160401b03821190821017620001e957604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620001c15756fe60806040526004361015610011575f80fd5b5f3560e01c806306aa14011461148c578063091cc5581461143d5780630d8e6e2c146113bf5780630de056591461137157806312e8e2c3146113095780631e96917d146112ec57806321bf936a146112a8578063228c076c1461126b57806327ff18b01461125057806328c77820146111f4578063379607f5146111d45780633ad86d72146111aa5780633bbed4a01461114157806341c0e1b51461110e57806343cd235a146110b45780634ae001d81461106b5780634fcf04f9146110275780635749a07a146110095780635d34625d14610fc857806360efe33414610ed45780636b5646aa14610eb6578063725acc6b14610de95780638c8f623b14610b125780638da5cb5b14610aeb5780638fac393714610ac25780638fe8a10114610aa057806399eecb3b14610a5c578063a42dce80146109e9578063aca47b7d146109ba578063b3651eea14610981578063b6b6e3c8146108ff578063b97dd9e2146108e5578063b988997f14610746578063c415b95c1461071e578063c7da3328146106e6578063d1d1bb4f146106bc578063d3c16e3014610628578063dc2f8744146105a2578063dd47a77f1461053d578063ddca3f4314610520578063ddd5e1b2146104f1578063de4aaaf414610465578063e2fdcc1714610421578063ee8c4bbf1461033a578063ef2c4082146102825763f2fde38b14610213575f80fd5b3461027e57602036600319011261027e5761022c611b16565b5f54906001600160a01b03906102453383851614611bae565b1680916001600160601b0360a01b16175f55337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b5f80fd5b3461027e57604036600319011261027e5760043561029e611b2c565b5f828152600660205260409020600201546001600160a01b039190821633036103285716908115610316576020817f5baaf19ee8739d1720c1401554ff4abe5682505ec43d3f2eb61b9dfc0abd9745925f5260068252600260405f2001846001600160601b0360a01b825416179055604051908152a2005b60405163538ba4f960e01b8152600490fd5b60405163fabbbc6760e01b8152600490fd5b3461027e5760208060031936011261027e576040519061035982611c22565b5f82525f818301525f60408301525f60608301525f60808301525f60a08301525f60c08301525f60e08301526060610100809301526004355f526006815261041d6103a660405f20611e9c565b9260405193838594855260018060a01b039081835116818701528201516040860152806040830151166060860152606082015116608085015260ff60808201511660a085015260a081015160c085015260c081015160e085015260e081015182850152015161012080840152610140830190611b72565b0390f35b3461027e575f36600319011261027e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461027e57604036600319011261027e5761047e611b16565b6024356001600160401b03811161027e5761049d903690600401611b42565b919060018060a01b038083165f52600760205260405f2054169182156104e9575b5f5b8481106104c957005b806104e26104da6001938887611cf2565b358685611e30565b50016104c0565b9150816104be565b3461027e57604036600319011261027e576020610518600435610512611b2c565b33611e30565b604051908152f35b3461027e575f36600319011261027e576020600354604051908152f35b3461027e57604036600319011261027e576004356001600160401b03811161027e5761056d903690600401611b42565b90610576611b2c565b905f5b83811061058257005b8061059b6105936001938786611cf2565b358533611e30565b5001610579565b3461027e57602036600319011261027e576004355f52600660205261010060405f2060018060a01b03808254169160018101549160ff81600284015416916003840154906004850154936006600587015496015496604051988952602089015260408801528116606087015260a01c16608085015260a084015260c083015260e0820152f35b3461027e57602036600319011261027e575f606060405161064881611c74565b82815282602082015282604082015201526004355f52600d602052608060405f2060405161067581611c74565b60ff82541691828252600181015460208301908152606060036002840154936040860194855201549301928352604051938452516020840152516040830152516060820152f35b3461027e57602036600319011261027e576004355f52600b602052602060405f2054604051908152f35b3461027e57602036600319011261027e576001600160a01b03610707611b16565b165f526008602052602060405f2054604051908152f35b3461027e575f36600319011261027e576005546040516001600160a01b039091168152602090f35b3461027e5760208060031936011261027e576004359060019161076b83805414611be9565b60028355805f526006825260405f20906002820160018060a01b039384825416156108d35761079983612909565b6107a1612fd1565b6004850154118015906108c7575b6107b857858055005b61086e6040946003937fe44903a04328507d74e4709cbebc6c819f9f1cd0b7cb171ba22814fcc18ecf3897865f52600d855280885f2089516107f981611c74565b60ff82541681528c8201549060608a8a83019484865260028101548f850152015491015215155f1461089d5761083b9051895f52600b88528a5f205490611f17565b968794895f52600d88526108628b5f2060035f918281558260018201558260028201550155565b0154169154169061218c565b5f8381526006825284902060020180546001600160a01b03191690558351928352820152a18180808080858055005b5050865f5260068552806108bf60068a5f200154600b88528a5f205490611f17565b968794610862565b5060ff600254166107af565b6040516329606baf60e01b8152600490fd5b3461027e575f36600319011261027e576020610518612fd1565b3461027e57604036600319011261027e57610918611b16565b610920611b2c565b9060018060a01b038091610938825f54163314611bae565b1690815f52600760205260405f20921691826001600160601b0360a01b8254161790557fc1416b5cdab50a9fbc872236e1aa54566c6deb40024e63a4b1737ecacf09d6f95f80a3005b3461027e57602036600319011261027e5760206001600160a01b03806109a5611b16565b165f526007825260405f205416604051908152f35b3461027e57602036600319011261027e576004355f526009602052602060ff60405f2054166040519015158152f35b3461027e57602036600319011261027e577fe5693914d19c789bdee50a362998c0bc8d035a835f9871da5d51152f0582c34f6020610a25611b16565b5f546001600160a01b039190610a3e9083163314611bae565b16806001600160601b0360a01b6005541617600555604051908152a1005b3461027e575f36600319011261027e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461027e575f36600319011261027e57602060ff600254166040519015158152f35b3461027e57602036600319011261027e576020610ae0600435612f6a565b60ff60405191168152f35b3461027e575f36600319011261027e575f546040516001600160a01b039091168152602090f35b3461027e57608036600319011261027e5760ff60243581811660043581830361027e5760443591606435600195610b4b87805414611be9565b600287558060025416610dd757835f526020946006865260018060a01b039687600260405f20015416330361032857855f52600987528260405f20541615610dc55788610b9787612ef2565b10610db35781158015610dab575b610d9957855f526006875260405f20600d885260405f2098604051610bc981611c74565b858b5416815260038c8c01549b8b83019c8d52600281015460408401520154606082015299610c0385600385019384541630903390611dd2565b5115610d08575050610c27610c1d606092858b5116611cd1565b92888a0151611ce5565b970151966212750094858102958187041490151715610cf457610c6e610ced957fbc253f6a158b7f3743255b0764f4408f10f66d26d277929a6bbe1bdf4fd7663899611ce5565b908360405193610c7d85611c74565b168352878301528360408301526060820152905b845f52600d86526003606060405f2092845116978860ff1985541617845584015193848b850155604081015160028501550151910155604051948594859094939260ff6060936080840197845216602083015260408201520152565b0390a18055005b634e487b7160e01b5f52601160045260245ffd5b610d2b91995060049285610d20925460a01c16611cd1565b9260068a0154611ce5565b970154966212750094858102958187041490151715610cf457610d72610ced957fbc253f6a158b7f3743255b0764f4408f10f66d26d277929a6bbe1bdf4fd7663899611ce5565b908360405193610d8185611c74565b16835287830152836040830152606082015290610c91565b6040516356e43e7f60e01b8152600490fd5b508315610ba5565b604051633bad1a5760e01b8152600490fd5b60405163dc370e0160e01b8152600490fd5b6040516363d8143160e01b8152600490fd5b3461027e5760208060031936011261027e576004356001600160401b03811161027e57610e1a903690600401611b42565b600192610e2984805414611be9565b60028455600580546001600160a01b039081161561031657855f5b858110610e5057508055005b610eae610e66610e6183898b611cf2565b611d16565b84811690815f526008885260405f20915f835493557f9dc46f23cfb5ddcad0ae7ea2be38d47fec07bb9382ec7e564efc69e036dd66ce89604051858152a2858754169061218c565b018690610e44565b3461027e57602036600319011261027e576020610518600435612ef2565b3461027e57604036600319011261027e57610eed611b16565b604051636386c1c760e01b81526001600160a01b0380831660048301529091610100915f9060248035919085908790817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610fbd57602096610518965f93610f86575b50508116610f71575b50610f6b9192613018565b90611ce5565b610f6b925081610f8091613018565b91610f60565b610fa6929350803d10610fb6575b610f9e8183611ca2565b810190611d4c565b5050505050915050908780610f57565b503d610f94565b6040513d5f823e3d90fd5b3461027e57602036600319011261027e576004355f52600660205261041d610ff5600760405f2001611e45565b604051918291602083526020830190611b72565b3461027e57602036600319011261027e576110256004356124ac565b005b3461027e57604036600319011261027e576001600160a01b03611048611b16565b165f52600f60205260405f206024355f52602052602060405f2054604051908152f35b3461027e57604036600319011261027e57611084611b2c565b6004355f52600e60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461027e57602036600319011261027e576004356001600160401b03811161027e576110e4903690600401611b42565b905f5b8281106110f057005b806111076111016001938686611cf2565b356124ac565b50016110e7565b3461027e575f36600319011261027e5761113260018060a01b035f54163314611bae565b6002805460ff19166001179055005b3461027e57602036600319011261027e5761115a611b16565b335f81815260076020526040812080546001600160a01b0319166001600160a01b0390941693841790557fc1416b5cdab50a9fbc872236e1aa54566c6deb40024e63a4b1737ecacf09d6f99080a3005b3461027e57602036600319011261027e576004355f52600c602052602060405f2054604051908152f35b3461027e57602036600319011261027e5760206105186004353333611e30565b3461027e57602036600319011261027e576004356001600160401b03811161027e57611224903690600401611b42565b905f5b82811061123057005b806112496112416001938686611cf2565b353333611e30565b5001611227565b3461027e575f36600319011261027e57602060405160018152f35b3461027e57602036600319011261027e576060611289600435612f2c565b604080519160ff81511683526020810151602084015201516040820152f35b3461027e57602036600319011261027e576004355f52600a602052606060405f2060ff81541690600260018201549101549060405192835260208301526040820152f35b3461027e575f36600319011261027e576020600454604051908152f35b3461027e57602036600319011261027e5760043561133160018060a01b035f54163314611bae565b670de0b6b3a76400008111610d99576020817f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c7692600355604051908152a1005b3461027e57604036600319011261027e57602061051861138f611b16565b6001600160a01b038181165f9081526007855260409020541680156113b8575b60243591611e30565b50806113af565b3461027e575f36600319011261027e576040516113db81611c59565b6005815260209064191719171960d91b82820152604051828193825282519081818401525f935b828510611424575050604092505f838284010152601f80199101168101030190f35b8481018201518686016040015293810193859350611402565b3461027e57602036600319011261027e576004355f52600d602052608060405f2060ff815416906001810154906003600282015491015491604051938452602084015260408301526060820152f35b3461027e5761012036600319011261027e576114a6611b16565b6044356001600160a01b038116810361027e576064356001600160a01b038116900361027e5760843560ff8116810361027e5760e4356001600160401b03811161027e576114f8903690600401611b42565b91909361010435801515810361027e576115156001805414611be9565b600260015560ff60025416610dd757604051606083901b6001600160601b0319166020820152602435603482015261155a81605481015b03601f198101835282611ca2565b8051602091820120604051631af6581360e01b8152600481019190915290816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fbd575f91611adc575b50600f0b15610d9957600160ff841610611aca5760c4351594858015611ac0575b610d99576064356001600160a01b0316158015611aaf575b610316576064353b15611a9d5761160c60c4353033606435611dd2565b600454956001870160045560ff851690600160c43560c4350414170215611a9057611635612fd1565b93600160ff82160160ff8111610cf45760ff168062127500810204621275001481151715610cf4576212750061166c910286611ce5565b6040519061167982611c22565b6001600160a01b0386811683526024356020840152848116604084015260643516606083015260ff8316608083015260a082015260a43560c082015260c43560e08201526001600160401b038711611a5a578660051b604051906116e06020820183611ca2565b888252602082019036818d011161027e578b915b818d018310611a6e5750505061010082019081525f89815260066020818152604092839020855181546001600160a01b03199081166001600160a01b039283161783559287015160018301559386015160028201805490931690851617909155606085015160038201805460808801516001600160a81b0319909116929095169190911760a094851b60ff60a01b1617905591840151600483015560c0840151600583015560e0909301519281019290925551805191906001600160401b038311611a5a57680100000000000000008311611a5a576007820154836007840155808410611a30575b5090600760208b9594930191015f5260205f205f5b838110611a10575050505061010060ff7f90a1b1e6c7795bb568f401da8f254944ba1a6a0b2f831cb84d144bb234c640e19260405195602435875260018060a01b0316602087015260018060a01b03606435166040870152818116606087015260a43560808701521660c43504958660a086015260c43560c086015285151560e086015260018060a01b031693a3845f52600960205260405f209060ff801983541691151516179055621275008201809211610cf457600290604095939551926118ba84611c3e565b5f84526020840190815260408401918252855f52600a60205260ff60405f2094511660ff19855416178455516001840155519101555f9260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016935b8181106119325760208460018055604051908152f35b611940610e61828486611cf2565b604051636386c1c760e01b81526001600160a01b0390911660048201529061010082602481895afa8015610fbd576001925f916119e7575b50828060a01b0316806119c1575b50845f52600e60205260405f20828060a01b036119a7610e61848789611cf2565b165f5260205260405f208260ff198254161790550161191c565b855f52600e60205260405f20905f5260205260405f208260ff1982541617905586611986565b611a0291506101003d61010011610fb657610f9e8183611ca2565b505050505091505087611978565b82516001600160a01b0316818301558b95506020909201916001016117f1565b600783015f5260205f20908482015b8183018110611a4f5750506117dc565b5f8155600101611a3f565b634e487b7160e01b5f52604160045260245ffd5b82356001600160a01b038116900361027e5782358152602092830192016116f4565b63ad251c275f526004601cfd5b60405163684cae7960e11b8152600490fd5b506001600160a01b038116156115ef565b5060a435156115d7565b604051636729eb5560e11b8152600490fd5b90506020813d602011611b0e575b81611af760209383611ca2565b8101031261027e57611b0890611cc3565b876115b6565b3d9150611aea565b600435906001600160a01b038216820361027e57565b602435906001600160a01b038216820361027e57565b9181601f8401121561027e578235916001600160401b03831161027e576020808501948460051b01011161027e57565b9081518082526020808093019301915f5b828110611b91575050505090565b83516001600160a01b031685529381019392810192600101611b83565b15611bb557565b60405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606490fd5b15611bf057565b60405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b6044820152606490fd5b61012081019081106001600160401b03821117611a5a57604052565b606081019081106001600160401b03821117611a5a57604052565b604081019081106001600160401b03821117611a5a57604052565b608081019081106001600160401b03821117611a5a57604052565b6001600160401b038111611a5a57604052565b90601f801991011681019081106001600160401b03821117611a5a57604052565b519081600f0b820361027e57565b9060ff8091169116019060ff8211610cf457565b91908201809211610cf457565b9190811015611d025760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a01b038116810361027e5790565b519065ffffffffffff8216820361027e57565b519061ffff8216820361027e57565b91908261010091031261027e57611d6282611cc3565b91602081015191604082015160018060a01b038116810361027e579160608101516fffffffffffffffffffffffffffffffff8116810361027e5791611da960808301611d2a565b91611db660a08201611d2a565b91611dcf60e0611dc860c08501611d3d565b9301611d3d565b90565b916040519360605260405260601b602c526323b872dd60601b600c5260205f6064601c82855af1908160015f51141615611e12575b50505f606052604052565b3b153d171015611e23575f80611e07565b637939f4245f526004601cfd5b919060ff60025416610dd757611dcf92611f24565b906040519182815491828252602092838301915f52835f20935f905b828210611e7957505050611e7792500383611ca2565b565b85546001600160a01b031684526001958601958895509381019390910190611e61565b90604051611ea981611c22565b610100611f126007839560ff60018060a01b03808354168752600183015460208801528060028401541660408801526003830154908116606088015260a01c166080860152600481015460a0860152600581015460c0860152600681015460e086015201611e45565b910152565b91908203918211610cf457565b929190611f30826124ac565b5f83815260066020908152604080832080546001820154835160609290921b6001600160601b03191682860190815260348301919091529196939594936001600160a01b03929091611f85816054810161154c565b51902096611f9f868c8b8b611f9986611e9c565b9261220f565b9a83855191636386c1c760e01b83521698896004830152610100918281602481897f0000000000000000000000000000000000000000000000000000000000000000165afa92831561215457889361212d575b5050848216612110575b50508a1561210357888552600b875283852054612019818d611ce5565b60068301548091116120f0575b5050888552600b875283852061203d8c8254611ce5565b9055846003548061209d575b50507f6f9c9826be5976f3f82a3490c52a83328ce2ec7be9e62dcb39c26da5148d7c7696949260809694926120878d6003819501928484541661218c565b54169482519586528501528301526060820152a3565b859896506120b2908d9592939896949d61215e565b9b8c94859d6120c091611f17565b9c8d998a948460038c015416815260088a5220908154906120e091611ce5565b9055929496918194969850612049565b6120fb929c50611f17565b995f80612026565b5092985050505050505050565b87839d928c610f6b93611f9961212597611e9c565b995f80611ffc565b612144929350803d10610fb657610f9e8183611ca2565b5050505050915050905f80611ff2565b87513d8a823e3d90fd5b90805f19048211612179575b670de0b6b3a764000091020490565b801561216a5763bac65e5b5f526004601cfd5b91906014526034525f9063a9059cbb60601b82526020826044601082855af19081600184511416156121c0575b5050603452565b3b153d1710156121d1575f806121b9565b6390b8ec1890526004601cfd5b9081606091031261027e5760408051916121f783611c3e565b80518352602081015160208401520151604082015290565b604080516385556a9560e01b81526001600160a01b03838116600483015260248201859052909796949391929091602091907f00000000000000000000000000000000000000000000000000000000000000008416838b604481845afa9a8b156123cb575f9b612397575b50855163609c6b8760e01b81526001600160a01b0384166004820152602481019290925290949392919060609086908180604481015b03915afa94851561238d579588999a819899975f97612357575b50906122f5916122d8612fd1565b825f52600b8652875f2054908c8a51938a8c019c8d5196896123d5565b1561234a5761233f9760c09661233696600c9561232994165f52600f8552865f208a5f52855282875f205551905190612feb565b955f52525f20548361215e565b9301519061215e565b818110908218021890565b5050505050505050505f90565b6122f59291975061237e9060603d8111612386575b6123768183611ca2565b8101906121de565b9690916122ca565b503d61236c565b84513d5f823e3d90fd5b909a8482813d83116123c4575b6123ae8183611ca2565b810103126123c1575051996122b061227a565b80fd5b503d6123a4565b86513d5f823e3d90fd5b979094939291945f98818a52600e60205260408a209060018060a01b03168a5260205260ff60408a2054169788156124a3575b508715612482575b508615612477575b50851561246c575b50841561245d575b8415612452575b50508215612444575b5050611dcf5750600190565b60e001511490505f80612438565b141592505f8061242f565b60a08301518110159450612428565b81111594505f612420565b82101595505f612418565b909650600f602052604088209088526020528160408820541015955f612410565b1597505f612408565b5f818152602091600a8352604091828120926124c6612fd1565b9360ff81541615806128fc575b806128ea575b612784575b60018091019586549362127500948581018091116127705742101561250857505050505050505490565b909192939495965060018060a01b0390817f0000000000000000000000000000000000000000000000000000000000000000168782526006845285822090858483541692015491813b1561276c57875163471cc92760e01b81526001600160a01b03919091166004820152602481019290925282908290604490829084905af180156127625790829161274e575b50506125a187612909565b6125aa87612f6a565b91878252600684528582209081541661154c6125eb878401548951928391898301958690916034926001600160601b03199060601b16825260148201520190565b519020906125f889612ef2565b61261160068301548b8652600b88528986205490611f17565b986004830154908c0190818d1161273a57908c949392911180612731575b612703575b5090612646600761264c949301611e45565b90612a9c565b670de0b6b3a764000081818902918983041489151702156126f657926002838b96938b99967fb77c22cd311809931524bcc8d4a33a61a392e2304c8a7d476b64018e11ed6cb19c60809c9a9752600c8652048682205560ff8651936126b085611c3e565b169485845284840188815260ff88808701948c86528d8152600a89522095511660ff1986541617855551908401555191015582519586528501528301526060820152a190565b63ad251c2783526004601cfd5b80929350878a80939b04148215170215612724570496899190612646612634565b63ad251c2784526004601cfd5b5087811161262f565b634e487b7160e01b86526011600452602486fd5b61275790611c8f565b6123c157805f612596565b86513d84823e3d90fd5b8380fd5b634e487b7160e01b82526011600452602482fd5b61278d84612909565b83835260068652818320805460018201805490916001600160a01b0391907f00000000000000000000000000000000000000000000000000000000000000008316908316813b156128e657875163471cc92760e01b81526001600160a01b03919091166004820152602481019290925287908290604490829084905af180156128dc579089949392916128ba575b508254915486519290911660601b6001600160601b031916828b0190815260148101919091526128659392916126469160079161285b816034840161154c565b5190209201611e45565b80612871575b506124de565b848452600a87526002838520015481670de0b6b3a764000091828102928184041490151702156128ad57858552600c885204828420555f61286b565b63ad251c2785526004601cfd5b61286594939261264692986128d0600793611c8f565b9892509293945061281b565b86513d89823e3d90fd5b8880fd5b50838352600c865281832054156124d9565b50600181015485146124d3565b905f828152600d6020526040908181209360018501805461292d575b505050509050565b600386810154600660205285852060048101919091558754918101805460ff60a01b191660a09390931b60ff60a01b169290921790915595600660028201978854600582015583549182910155600a60205260ff868620541615612a12575b50957f2e363750a1295e75baeb02bb4277be5bbd051627ff6fa2edae8a99c91ddf5ef1916129e660ff612a089899541691549254875193849387859094939260ff6060936080840197845216602083015260408201520152565b0390a18152600d6020522060035f918281558260018201558260028201550155565b805f808080612925565b60ff82541690816001828004148215170215612a5d578486528686209190046002909101557f2e363750a1295e75baeb02bb4277be5bbd051627ff6fa2edae8a99c91ddf5ef161298c565b63ad251c2786526004601cfd5b60405190612a7782611c3e565b5f6040838281528260208201520152565b8051821015611d025760209160051b010190565b909291612aa7612a6a565b50835160408051633634e97160e11b8152600481018590526024810184905291929190816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fbd575f91612ea7575b5051945f5b838110612b1b575050505050565b612b656060866001600160a01b03612b338587612a88565b5160405163609c6b8760e01b815291166001600160a01b03166004820152602481019190915291829081906044820190565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fbd575f91612e88575b50612bec6020876001600160a01b03612bba8688612a88565b516040516385556a9560e01b815291166001600160a01b03166004820152602481019190915291829081906044820190565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fbd575f91612e56575b508411612e38575b506001600160a01b03612c438284612a88565b51604051636386c1c760e01b8152911660048201526101009081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610fbd575f92612e13575b50506001600160a01b038116612cb5575b50600101612b0d565b60405163609c6b8760e01b81526001600160a01b038216600482015260248101879052606081806044810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610fbd5787915f93612de9575b506040516385556a9560e01b81526001600160a01b039091166004820152602481019190915260208180604481015b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fbd575f91612db7575b50841115612cac5760019197612daa85836040612db0955191015190612feb565b90611f17565b9690612cac565b906020823d602011612de1575b81612dd160209383611ca2565b810103126123c15750515f612d89565b3d9150612dc4565b602091935091612e0a612d4d9360603d606011612386576123768183611ca2565b93915091612d1e565b612e299250803d10610fb657610f9e8183611ca2565b50505050509150505f80612c9b565b96612daa84896040612e4f959b5191015190612feb565b955f612c30565b906020823d602011612e80575b81612e7060209383611ca2565b810103126123c15750515f612c28565b3d9150612e63565b612ea1915060603d606011612386576123768183611ca2565b5f612ba1565b906040823d604011612eea575b81612ec160409383611ca2565b810103126123c15750602060405191612ed983611c59565b80518352015160208201525f612b08565b3d9150612eb4565b5f52600660205260405f206004612f07612fd1565b9101545f82821115612f2657506212750091612f2291611f17565b0490565b91505090565b612f34612a6a565b505f52600a60205260405f20600260405191612f4f83611c3e565b60ff8154168352600181015460208401520154604082015290565b60ff905f908152600660205260408120612f82612fd1565b600482015481811115612fc55762127500612fa08693600393611f17565b04925b015460a01c1680821115612fb75750501690565b612fc19250611f17565b1690565b50508260038392612fa3565b62127500804204818102918183041490151715610cf45790565b918181101561301157612ffd91611f17565b90818102918183041490151715610cf45790565b5050505f90565b9190915f908382526020600e815260409081842060018060a01b03908185168652825260ff838620541661347f5786855260068252613058838620611e9c565b93878652600d8352838620918086511661154c61309a868901518851928391898301958690916034926001600160601b03199060601b16825260148201520190565b519020916130a6612fd1565b60a0880151600386015488516385556a9560e01b81526001600160a01b03851660048201526024810187905292957f000000000000000000000000000000000000000000000000000000000000000086169582841092841892909202909218939192908882604481895afa918215613442578c9261344c575b50895163609c6b8760e01b81526001600160a01b03841660048201526024810185905295606090879060449082905afa958615613442578c96613422575b50855115928315613403575b505081156133f5575b81156133ea575b5080156133e0575b80156133cc575b80156133b4575b6133a7578a8952600c865286892054948515801586898f83613378575b50505050613262575b5050506131da6131d3600b95949383886131e6955191015190612feb565b928361215e565b9160c08701519061215e565b8181109082180218968552528220549060e06132028387611ce5565b91015180911161324f575b50506003548061321b575050565b9092670de0b6b3a764000091820391821161323b57611dcf92935061215e565b634e487b7160e01b84526011600452602484fd5b61325a929450611f17565b915f8061320d565b909192945060ff81541661335f575b508282111561335957621275006132888484611f17565b045b6132a360e08901518c8b52600b8852888b205490611f17565b9262127500850190818611613345579085939291118061333b575b61330e575b506101008801516132d49291612a9c565b9081670de0b6b3a764000091828102928184041490151702156133015704916131da6131d36131e66131b5565b63ad251c2788526004601cfd5b8092506001848093950414821517021561332e57049082906132d46132c3565b63ad251c2789526004601cfd5b50600181116132be565b634e487b7160e01b8b52601160045260248bfd5b8761328a565b600281015460c08901526001015460e08801525f613271565b92935090918361338f575b5050505f86898f6131ac565b61339b91929350612f2c565b0151141585888e613383565b5096985050505050505050565b508a8952600b86528689205460e0890151111561318f565b50856133d78c612f2c565b01518410613188565b5081841015613181565b90508411155f613179565b848901518610159150613172565b168b52600f8852888b208d8c528852888b205486111591505f80613169565b61343b91965060603d8111612386576123768183611ca2565b945f61315d565b8a513d8e823e3d90fd5b9091508881813d8311613478575b6134648183611ca2565b810103126134745751905f61311f565b8b80fd5b503d61345a565b5092945050505056fea2646970667358221220c895bed9943d0f5cd2bc0c856f6635a32cb6e038859e10eb8a3c115a81eae11c64736f6c63430008140033000000000000000000000000bcfbf7ed1756fe478b071687cb430c7b3eb682f1000000000000000000000000b0552b6860ce5c0202976db056b5e3cc4f9cc7650000000000000000000000008898502ba35ab64b3562abc509befb7eb178d4df