184 txs
186 calls
constructor
constructor(address _v2Router, address _v3Router, address _rewardsManager, address _feeRecipient, uint256 _feePercentage)
functions
authorizedContracts
viewfunction authorizedContracts(address) view returns (bool)
getMemberSharePercentage
viewfunction getMemberSharePercentage(uint256 _vaultId, address _memberAddress) view returns (uint256)
getMemberVaults
viewfunction getMemberVaults(address _user) view returns (uint256[])
getPendingJoinRequests
viewfunction getPendingJoinRequests(uint256 _vaultId) view returns (address[])
getTotalVaults
viewfunction getTotalVaults() view returns (uint256)
getVaultDetails
viewfunction getVaultDetails(uint256 _vaultId) view returns (tuple)
getVaultPaymentProposals
viewfunction getVaultPaymentProposals(uint256 _vaultId) view returns (uint256[])
getVaultTokenBalance
viewfunction getVaultTokenBalance(uint256 _vaultId, address _tokenAddress) view returns (uint256)
getVaultTradeProposals
viewfunction getVaultTradeProposals(uint256 _vaultId) view returns (uint256[])
memberOfVaults
viewfunction memberOfVaults(address, uint256) view returns (uint256)
migrationTarget
viewfunction migrationTarget() view returns (address)
owner
viewfunction owner() view returns (address)
paymentProposalCounter
viewfunction paymentProposalCounter() view returns (uint256)
paymentProposals
viewfunction paymentProposals(uint256) view returns (uint256 id, uint256 vaultId, address proposer, address recipient, uint256 amount, string reason, uint256 votesFor, uint256 votesAgainst, bool executed, bool cancelled, uint256 deadline)
platformFeePercentage
viewfunction platformFeePercentage() view returns (uint256)
platformFeeRecipient
viewfunction platformFeeRecipient() view returns (address)
proposalCounter
viewfunction proposalCounter() view returns (uint256)
proposals
viewfunction proposals(uint256) view returns (uint256 id, uint256 vaultId, address proposer, address tokenIn, address tokenOut, uint256 amountIn, uint256 minAmountOut, uint256 votesFor, uint256 votesAgainst, bool executed, bool cancelled, uint256 deadline, uint8 router, uint24 v3fee)
rewardsManager
viewfunction rewardsManager() view returns (address)
totalTrackedBalances
viewfunction totalTrackedBalances(address) view returns (uint256)
uniswapV2Router
viewfunction uniswapV2Router() view returns (address)
uniswapV3Router
viewfunction uniswapV3Router() view returns (address)
vaultCounter
viewfunction vaultCounter() view returns (uint256)
vaults
viewfunction vaults(uint256) view returns (uint256 id, string name, address leader, uint256 totalEthValue, bool exists, uint256 rewardPool)
VOTING_PERIOD
viewfunction VOTING_PERIOD() view returns (uint256)
WETH
viewfunction WETH() view returns (address)
applyToJoin
nonpayablefunction applyToJoin(uint256 _vaultId)
authorizeContract
nonpayablefunction authorizeContract(address _contract)
cancelPaymentProposal
nonpayablefunction cancelPaymentProposal(uint256 _proposalId)
cancelProposal
nonpayablefunction cancelProposal(uint256 _proposalId)
claimLaunchpadProfit
nonpayablefunction claimLaunchpadProfit(uint256 _vaultId)
claimVaultTradingRewards
nonpayablefunction claimVaultTradingRewards(uint256 _vaultId)
createPaymentProposal
nonpayablefunction createPaymentProposal(uint256 _vaultId, address _recipient, uint256 _amount, string _reason)
createTradeProposal
nonpayablefunction createTradeProposal(uint256 _vaultId, uint8 _router, address _tokenIn, address _tokenOut, uint256 _amountIn, uint256 _minAmountOut, uint24 _v3fee)
createVault
nonpayablefunction createVault(string _name)
deauthorizeContract
nonpayablefunction deauthorizeContract(address _contract)
demoteAdmin
nonpayablefunction demoteAdmin(uint256 _vaultId, address _admin)
depositETH
payablefunction depositETH(uint256 _vaultId) payable
depositTokenByAuthorizedContract
nonpayablefunction depositTokenByAuthorizedContract(uint256 _vaultId, address _token, uint256 _amount)
executePaymentProposal
nonpayablefunction executePaymentProposal(uint256 _proposalId)
executeProposal
nonpayablefunction executeProposal(uint256 _proposalId)
migrateVault
nonpayablefunction migrateVault(uint256 _vaultId)
processJoinRequest
nonpayablefunction processJoinRequest(uint256 _vaultId, address _applicant, bool _accept)
promoteToAdmin
nonpayablefunction promoteToAdmin(uint256 _vaultId, address _member)
reviseProposal
nonpayablefunction reviseProposal(uint256 _proposalId, uint8 _router, address _tokenIn, address _tokenOut, uint256 _amountIn, uint256 _minAmountOut, uint24 _v3fee)
setMigrationTarget
nonpayablefunction setMigrationTarget(address _newContract)
vote
nonpayablefunction vote(uint256 _proposalId, bool _inFavor)
voteOnPaymentProposal
nonpayablefunction voteOnPaymentProposal(uint256 _proposalId, bool _inFavor)
withdrawETH
nonpayablefunction withdrawETH(uint256 _vaultId, uint256 _amount)
withdrawMyReward
nonpayablefunction withdrawMyReward(uint256 _vaultId)
events
AdminDemoted
event AdminDemoted(uint256 indexed vaultId, address indexed member, address indexed demotedBy)
AdminPromoted
event AdminPromoted(uint256 indexed vaultId, address indexed member, address indexed promotedBy)
ContractAuthorized
event ContractAuthorized(address indexed contractAddress)
ContractDeauthorized
event ContractDeauthorized(address indexed contractAddress)
Deposit
event Deposit(uint256 indexed vaultId, address indexed member, address indexed token, uint256 amount, uint256 timestamp)
JoinRequest
event JoinRequest(uint256 indexed vaultId, address indexed applicant, uint256 timestamp)
JoinRequestProcessed
event JoinRequestProcessed(uint256 indexed vaultId, address indexed applicant, bool accepted, uint256 timestamp)
MemberRemoved
event MemberRemoved(uint256 indexed vaultId, address indexed member, address indexed removedBy, uint256 timestamp)
MemberRewardWithdrawn
event MemberRewardWithdrawn(uint256 indexed vaultId, address indexed member, uint256 amount, uint256 timestamp)
PaymentProposalCancelled
event PaymentProposalCancelled(uint256 indexed proposalId, address indexed canceller)
PaymentProposalCreated
event PaymentProposalCreated(uint256 indexed proposalId, uint256 indexed vaultId, address indexed proposer, address recipient, uint256 amount, string reason)
PaymentProposalExecuted
event PaymentProposalExecuted(uint256 indexed proposalId, address indexed executor)
ProposalCancelled
event ProposalCancelled(uint256 indexed proposalId, uint256 timestamp)
ProposalCreated
event ProposalCreated(uint256 indexed proposalId, uint256 indexed vaultId, uint8 router, address indexed proposer, uint256 timestamp)
ProposalExecuted
event ProposalExecuted(uint256 indexed proposalId, uint256 timestamp)
ProposalRevised
event ProposalRevised(uint256 indexed proposalId, address indexed proposer, uint256 timestamp)
StuckETHWithdrawn
event StuckETHWithdrawn(address indexed owner, uint256 amount)
StuckTokenWithdrawn
event StuckTokenWithdrawn(address indexed owner, address indexed token, uint256 amount)
VaultCreated
event VaultCreated(uint256 indexed vaultId, address indexed leader, string name, uint256 timestamp)
VaultLaunchpadProfitClaimed
event VaultLaunchpadProfitClaimed(uint256 indexed vaultId, address indexed triggeredBy, uint256 amount, uint256 timestamp)
VaultMigrated
event VaultMigrated(uint256 indexed vaultId, address indexed leader, address indexed newContract)
VaultRewardClaimed
event VaultRewardClaimed(uint256 indexed vaultId, address indexed triggeredBy, uint256 amount, uint256 timestamp)
Voted
event Voted(uint256 indexed proposalId, address indexed voter, bool inFavor, uint256 timestamp)
VotedOnPaymentProposal
event VotedOnPaymentProposal(uint256 indexed proposalId, address indexed voter, bool inFavor)
Withdrawal
event Withdrawal(uint256 indexed vaultId, address indexed member, address indexed token, uint256 amount, uint256 timestamp)
errors
No errors.
creation bytecode
0x60a060405234801561000f575f5ffd5b50604051615f58380380615f5883398101604081905261002e91610113565b5f8054336001600160a01b0319918216179091556001805482166001600160a01b03888116918217909255600280548416888416179055600380548416878416179055600480549093169185169190911782556005839055604080516315ab88c960e31b81529051919263ad5c46489282820192602092908290030181865afa1580156100bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e1919061016d565b6001600160a01b03166080525061018d9350505050565b80516001600160a01b038116811461010e575f5ffd5b919050565b5f5f5f5f5f60a08688031215610127575f5ffd5b610130866100f8565b945061013e602087016100f8565b935061014c604087016100f8565b925061015a606087016100f8565b9150608086015190509295509295909350565b5f6020828403121561017d575f5ffd5b610186826100f8565b9392505050565b608051615d976101c15f395f81816107ce015281816147bf01528181614a5601528181614dc20152614f410152615d975ff3fe6080604052600436106102c2575f3560e01c8063816aea321161016f578063c0b579c0116100d8578063d5b9221b11610092578063e0a8f6f51161006d578063e0a8f6f51461097c578063eb13554f1461099b578063ecf876e4146109ba578063f5117031146109cf575f5ffd5b8063d5b9221b14610900578063d60899aa1461093e578063defe20531461095d575f5ffd5b8063c0b579c014610843578063c231bace1461086f578063c7cdea371461088e578063c9d27afe146108ad578063cdd78cfc146108cc578063ceee675a146108e1575f5ffd5b8063a9a61e2511610129578063a9a61e2514610789578063ac958041146107a8578063ad5c4648146107bd578063ae326f24146107f0578063b1610d7e1461080f578063b38c787d14610824575f5ffd5b8063816aea32146106be57806388df3a01146106dd5780638c64ea4a146106fc5780638da5cb5b1461072d5780639562e6d71461074b57806395c5f2971461076a575f5ffd5b80633129847d1161022b57806356990e65116101e5578063663a63df116101c0578063663a63df1461063657806367561d93146106615780636e861c0e14610680578063757a1f811461069f575f5ffd5b806356990e65146105c257806359ca9ed4146105e15780635b51acff14610617575f5ffd5b80633129847d1461051f5780633fe1da881461053e5780634b537aa61461055d5780634e162fef1461057c5780635358fbda1461059b5780635486f100146105ae575f5ffd5b80630e0cb1d61161027c5780630e0cb1d6146104405780631694505e1461045f57806316edb9be14610496578063250dcd4d146104b55780632bbdda52146104d45780632c76d7a614610500575f5ffd5b8063013cf08b146102cd5780630abb48b2146103925780630aebaca5146103b35780630c0512e9146103df5780630d61b519146104025780630d80b18614610421575f5ffd5b366102c957005b5f5ffd5b3480156102d8575f5ffd5b5061036f6102e736600461508f565b600a60208190525f918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015499890154600b8a0154600c909a0154989a97996001600160a01b03978816999688169897909516969395929491939260ff80831693610100938490048216939092918216910462ffffff168e565b6040516103899e9d9c9b9a999897969594939291906150da565b60405180910390f35b34801561039d575f5ffd5b506103b16103ac366004615188565b6109ee565b005b3480156103be575f5ffd5b506103d26103cd36600461508f565b610ca4565b604051610389919061523e565b3480156103ea575f5ffd5b506103f4600b5481565b604051908152602001610389565b34801561040d575f5ffd5b506103b161041c36600461508f565b610d3b565b34801561042c575f5ffd5b506103b161043b36600461508f565b610e8f565b34801561044b575f5ffd5b506103b161045a36600461508f565b611023565b34801561046a575f5ffd5b5060015461047e906001600160a01b031681565b6040516001600160a01b039091168152602001610389565b3480156104a1575f5ffd5b506103b16104b0366004615188565b611270565b3480156104c0575f5ffd5b506103b16104cf36600461508f565b6114ed565b3480156104df575f5ffd5b506104f36104ee36600461508f565b61172f565b6040516103899190615290565b34801561050b575f5ffd5b5060025461047e906001600160a01b031681565b34801561052a575f5ffd5b506103b161053936600461508f565b6117ce565b348015610549575f5ffd5b506103b161055836600461533f565b611952565b348015610568575f5ffd5b506103d261057736600461508f565b611a90565b348015610587575f5ffd5b506103b1610596366004615380565b611b24565b6103b16105a936600461508f565b611e4f565b3480156105b9575f5ffd5b506009546103f4565b3480156105cd575f5ffd5b506103b16105dc36600461508f565b611ffb565b3480156105ec575f5ffd5b506106006105fb36600461508f565b61220f565b6040516103899b9a999897969594939291906153eb565b348015610622575f5ffd5b5060065461047e906001600160a01b031681565b348015610641575f5ffd5b506103f461065036600461545e565b600e6020525f908152604090205481565b34801561066c575f5ffd5b506103b161067b36600461545e565b6122ff565b34801561068b575f5ffd5b506103b161069a36600461545e565b6123c9565b3480156106aa575f5ffd5b506103b16106b9366004615477565b61243a565b3480156106c9575f5ffd5b506103f46106d83660046154a5565b612617565b3480156106e8575f5ffd5b506103f46106f73660046154cd565b612642565b348015610707575f5ffd5b5061071b61071636600461508f565b6126a3565b604051610389969594939291906154f7565b348015610738575f5ffd5b505f5461047e906001600160a01b031681565b348015610756575f5ffd5b506103b161076536600461508f565b61276e565b348015610775575f5ffd5b506103b161078436600461553d565b61284e565b348015610794575f5ffd5b506103f46107a33660046154cd565b612afb565b3480156107b3575f5ffd5b506103f460095481565b3480156107c8575f5ffd5b5061047e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107fb575f5ffd5b506103b161080a3660046154cd565b612be7565b34801561081a575f5ffd5b506103f461546081565b34801561082f575f5ffd5b506103b161083e366004615570565b612dbf565b34801561084e575f5ffd5b5061086261085d36600461508f565b612fd9565b604051610389919061566f565b34801561087a575f5ffd5b506103b161088936600461545e565b6134ec565b348015610899575f5ffd5b506103b16108a836600461571f565b613537565b3480156108b8575f5ffd5b506103b16108c7366004615477565b6137a2565b3480156108d7575f5ffd5b506103f460055481565b3480156108ec575f5ffd5b506103b16108fb36600461508f565b613984565b34801561090b575f5ffd5b5061092e61091a36600461545e565b60076020525f908152604090205460ff1681565b6040519015158152602001610389565b348015610949575f5ffd5b506103d261095836600461545e565b613afc565b348015610968575f5ffd5b5060035461047e906001600160a01b031681565b348015610987575f5ffd5b506103b161099636600461508f565b613b65565b3480156109a6575f5ffd5b5060045461047e906001600160a01b031681565b3480156109c5575f5ffd5b506103f4600d5481565b3480156109da575f5ffd5b506103b16109e93660046154cd565b613c55565b5f878152600a6020526040902060028101546001600160a01b03163314610a5c5760405162461bcd60e51b815260206004820152601860248201527f4f6e6c792070726f706f7365722063616e20726576697365000000000000000060448201526064015b60405180910390fd5b600a81015460ff16158015610a7b5750600a810154610100900460ff16155b610a975760405162461bcd60e51b8152600401610a539061573f565b6007810154158015610aab57506008810154155b610b065760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742072657669736520616674657220766f74696e672068617320736044820152651d185c9d195960d21b6064820152608401610a53565b6001876002811115610b1a57610b1a6150a6565b03610b6d575f8262ffffff1611610b6d5760405162461bcd60e51b8152602060048201526017602482015276158cc8199959481b5d5cdd081899481c1c9bdd9a591959604a1b6044820152606401610a53565b6002876002811115610b8157610b816150a6565b03610bce5760405162461bcd60e51b815260206004820152601f60248201527f556e6973776170205634206973206e6f742079657420737570706f72746564006044820152606401610a53565b600c8101805488919060ff19166001836002811115610bef57610bef6150a6565b02179055506003810180546001600160a01b038089166001600160a01b031992831617909255600483018054928816929091169190911790556005810184905560068101839055600c8101805462ffffff84166101000263ffffff0019909116179055610c5e6154604261578a565b600b820155604051428152339089907f50231f35b842bcfcacc25e192e4137290c81e7e038228293cf7f3ec812164ec69060200160405180910390a35050505050505050565b5f81815260086020526040902060090154606090829060ff16610cd95760405162461bcd60e51b8152600401610a539061579d565b5f83815260086020908152604091829020600d0180548351818402810184019094528084529091830182828015610d2d57602002820191905f5260205f20905b815481526020019060010190808311610d19575b505050505091505b50919050565b5f818152600a60209081526040808320600181015484526008928390529083206006810154928201546007830154929491939192610d79919061578a565b600b850154911491504210158180610d8e5750805b610daa5760405162461bcd60e51b8152600401610a53906157cb565b600a84015460ff16158015610dc95750600a840154610100900460ff16155b610de55760405162461bcd60e51b8152600401610a539061573f565b8360080154846007015411610e365760405162461bcd60e51b815260206004820152601760248201527650726f706f73616c206661696c656420746f207061737360481b6044820152606401610a53565b600a8401805460ff19166001179055610e4e84613de0565b847ff758fc91e01b00ea6b4a6138756f7f28e021f9bf21db6dbf8c36c88eb737257a42604051610e8091815260200190565b60405180910390a25050505050565b5f81815260086020526040902060090154819060ff16610ec15760405162461bcd60e51b8152600401610a539061579d565b5f828152600860209081526040808320338452600501909152902060020154610100900460ff1615610f285760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b2b6b132b960811b6044820152606401610a53565b5f82815260086020908152604080832033845260070190915290205460ff1615610f945760405162461bcd60e51b815260206004820152601760248201527f5265717565737420616c72656164792070656e64696e670000000000000000006044820152606401610a53565b5f82815260086020818152604080842033808652600782018452828620805460ff1916600190811790915585855291909401805491820181558552919093200180546001600160a01b03191682179055905183907f6f7a8fa167e9ec85f5e5895685288e228205a38b1c2c4c79d635c5d3a1d0bc98906110179042815260200190565b60405180910390a35050565b5f81815260086020526040902060090154819060ff166110555760405162461bcd60e51b8152600401610a539061579d565b5f8281526008602052604090206002015482906001600160a01b0316331461108f5760405162461bcd60e51b8152600401610a5390615812565b6006546001600160a01b03166110e75760405162461bcd60e51b815260206004820152601860248201527f4d6967726174696f6e20746172676574206e6f742073657400000000000000006044820152606401610a53565b5f838152600860205260409020600981015460ff166111485760405162461bcd60e51b815260206004820152601f60248201527f5661756c742068617320616c7265616479206265656e206d69677261746564006044820152606401610a53565b6006546001600160a01b03165f61115e8361412a565b6006549091505f9061117a9085906001600160a01b0316614333565b9050826001600160a01b0316638cee80a7825f01518987600101886002015f9054906101000a90046001600160a01b031689600301548a600a0154895f01518a602001518b604001518b602001518c604001516040518c63ffffffff1660e01b81526004016111f29a999897969594939291906158c3565b5f604051808303818588803b158015611209575f5ffd5b505af115801561121b573d5f5f3e3d5ffd5b50505060098601805460ff1916905550506006546040516001600160a01b0390911690339089907f2caf74fdff5ce6a1146a664c4eb29e73c90780c08412d3dd32195d2fc23b6ebc905f90a450505050505050565b5f87815260086020526040902060090154879060ff166112a25760405162461bcd60e51b8152600401610a539061579d565b5f8881526008602090815260408083203384526005019091529020600201548890610100900460ff166112e75760405162461bcd60e51b8152600401610a53906159de565b60018860028111156112fb576112fb6150a6565b0361134e575f8362ffffff161161134e5760405162461bcd60e51b8152602060048201526017602482015276158cc8199959481b5d5cdd081899481c1c9bdd9a591959604a1b6044820152606401610a53565b6002886002811115611362576113626150a6565b036113af5760405162461bcd60e51b815260206004820152601f60248201527f556e6973776170205634206973206e6f742079657420737570706f72746564006044820152606401610a53565b600b8054905f6113be83615a0a565b9091555050600b545f818152600a60205260409020818155600181018b9055600281018054336001600160a01b03199182161790915560038201805482166001600160a01b038c811691909117909155600483018054909216908a1617905560058101879055600681018690556114376154604261578a565b600b820155600c810180548b919060ff1916600183600281111561145d5761145d6150a6565b0217905550600c8101805463ffffff00191661010062ffffff8816021790555f8b8152600860209081526040808320600d01805460018101825590845291909220018390555133908c9084907f21bc71f185ee70bc00e1284b78f2db7f166b42f6e41f2eed5bf80f5292dfc281906114d8908f904290615a22565b60405180910390a45050505050505050505050565b5f818152600c6020908152604080832060018101548452600890925282206006808201546007840154918401549394929390916115299161578a565b600a85015491149150421015818061153e5750805b61155a5760405162461bcd60e51b8152600401610a53906157cb565b600984015460ff1615801561157957506009840154610100900460ff16155b6115955760405162461bcd60e51b8152600401610a539061573f565b83600701548460060154116115e65760405162461bcd60e51b815260206004820152601760248201527650726f706f73616c206661696c656420746f207061737360481b6044820152606401610a53565b6004808501545f80805291850160205260409091205410156116545760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e74204554482062616c616e636520696e207661756c6044820152601d60fa1b6064820152608401610a53565b60098401805460ff191660011790556004808501545f80805291850160205260408220805491929091611688908490615a3d565b909155505060048401545f808052600e6020525f516020615d425f395f51905f5280549091906116b9908490615a3d565b9091555050600384015460048501546040516001600160a01b039092169181156108fc0291905f818181858888f193505050501580156116fb573d5f5f3e3d5ffd5b50604051339086907f64f91796aa24fdba5abc659c0da1acd9f978b05c324b24e52cd7ae85d62bbe6d905f90a35050505050565b5f81815260086020526040902060090154606090829060ff166117645760405162461bcd60e51b8152600401610a539061579d565b5f8381526008602081815260409283902090910180548351818402810184019094528084529091830182828015610d2d57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116117a4575050505050915050919050565b5f81815260086020526040902060090154819060ff166118005760405162461bcd60e51b8152600401610a539061579d565b5f8281526008602090815260408083203384526005019091529020600201548290610100900460ff166118455760405162461bcd60e51b8152600401610a53906159de565b600354604051632f50b8d960e21b8152600481018590525f602482015247916001600160a01b03169063bd42e364906044015f604051808303815f87803b15801561188e575f5ffd5b505af11580156118a0573d5f5f3e3d5ffd5b504792505f91506118b390508383615a3d565b9050801561190d575f868152600860205260408120600a0180548392906118db90849061578a565b90915550505f808052600e6020525f516020615d425f395f51905f52805483929061190790849061578a565b90915550505b60408051828152426020820152339188917f85c3008f867bf9cf941adf6102b256329a4023f9d49f2a860b8a18d5d3f4c0b891015b60405180910390a3505050505050565b60098054905f61196183615a0a565b90915550506009545f818152600860205260409020818155600181016119878482615a9b565b5060028181018054336001600160a01b0319918216811790925560098401805460ff19166001908117909155604080516080810182525f80825260208083018281528385018681526060850187815289855260058c0184528685209551865591518588015551939098018054985161ffff1990991693151561ff00191693909317610100981515989098029790971790915560068701805480850182559082528682200180549094168517909355838352600f85528083208054928301815583529390912001849055905183907f9376fbc8a3256ef7e3d46fbc814084da897437f53f0ba86ee0089df58497400b90611a839087904290615b55565b60405180910390a3505050565b5f81815260086020526040902060090154606090829060ff16611ac55760405162461bcd60e51b8152600401610a539061579d565b5f83815260086020908152604091829020600e0180548351818402810184019094528084529091830182828015610d2d57602002820191905f5260205f2090815481526020019060010190808311610d19575050505050915050919050565b5f83815260086020526040902060090154839060ff16611b565760405162461bcd60e51b8152600401610a539061579d565b5f848152600860209081526040808320338452600501909152902060020154849060ff16611bba5760405162461bcd60e51b81526020600482015260116024820152702737ba1030903b30bab63a1030b236b4b760791b6044820152606401610a53565b5f8581526008602090815260408083206001600160a01b038816845260070190915290205460ff16611c235760405162461bcd60e51b8152602060048201526012602482015271139bc81c195b991a5b99c81c995c5d595cdd60721b6044820152606401610a53565b5f8581526008602081815260408084206001600160a01b0389168552600781018352908420805460ff191690558884529082905201905b8154811015611d4d57856001600160a01b0316828281548110611c7f57611c7f615b76565b5f918252602090912001546001600160a01b031603611d455781548290611ca890600190615a3d565b81548110611cb857611cb8615b76565b905f5260205f20015f9054906101000a90046001600160a01b0316828281548110611ce557611ce5615b76565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555081805480611d2057611d20615b8a565b5f8281526020902081015f1990810180546001600160a01b0319169055019055611d4d565b600101611c5a565b508315611e0b57604080516080810182525f80825260208083018281528385018381526001606086018181528d8652600885528786206001600160a01b038e1680885260058201875289882098518955945188840155925160029097018054915161ffff1990921697151561ff001916979097176101009115159190910217909555600601805480860182559084528284200180546001600160a01b031916821790558252600f815292812080549283018155815291909120018690555b6040805185151581524260208201526001600160a01b0387169188917f9a5dec7104f72ee053265bc6110d7b46eaddf13404b649500d1fa60bb2e6fe719101611942565b5f81815260086020526040902060090154819060ff16611e815760405162461bcd60e51b8152600401610a539061579d565b5f8281526008602090815260408083203384526005019091529020600201548290610100900460ff16611ec65760405162461bcd60e51b8152600401610a53906159de565b5f3411611f105760405162461bcd60e51b81526020600482015260186024820152774465706f736974206d75737420626520706f73697469766560401b6044820152606401610a53565b5f838152600860209081526040808320838052600481019092528220805491923492611f3d90849061578a565b9250508190555034816003015f828254611f57919061578a565b90915550505f808052600e6020525f516020615d425f395f51905f528054349290611f8390849061578a565b9091555050335f90815260058201602052604081208054349290611fa890849061578a565b90915550611fb79050846145c2565b604080513481524260208201525f91339187917feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a2910160405180910390a450505050565b5f81815260086020526040902060090154819060ff1661202d5760405162461bcd60e51b8152600401610a539061579d565b5f8281526008602090815260408083203384526005019091529020600201548290610100900460ff166120725760405162461bcd60e51b8152600401610a53906159de565b5f8381526008602090815260408083203384526005810190925290912060010154806120ea5760405162461bcd60e51b815260206004820152602160248201527f4d656d62657220686173206e6f20736861726520696e2074686973207661756c6044820152601d60fa1b6064820152608401610a53565b5f6127108284600a01546120fe9190615b9e565b6121089190615bb5565b90505f81116121675760405162461bcd60e51b815260206004820152602560248201527f4e6f2072657761726420746f20776974686472617720666f722074686973206d60448201526432b6b132b960d91b6064820152608401610a53565b8083600a015f82825461217a9190615a3d565b90915550505f808052600e6020525f516020615d425f395f51905f5280548392906121a6908490615a3d565b9091555050604051339082156108fc029083905f818181858888f193505050501580156121d5573d5f5f3e3d5ffd5b5060408051828152426020820152339188917fecc9a94875dd165d87168b13cc4e683640c1f019106d7adb67e8b41aa8fa92eb9101611942565b600c6020525f9081526040902080546001820154600283015460038401546004850154600586018054959694956001600160a01b0394851695949093169391926122589061585f565b80601f01602080910402602001604051908101604052809291908181526020018280546122849061585f565b80156122cf5780601f106122a6576101008083540402835291602001916122cf565b820191905f5260205f20905b8154815290600101906020018083116122b257829003601f168201915b50505050600683015460078401546009850154600a909501549394919390925060ff80831692610100900416908b565b5f546001600160a01b031633146123285760405162461bcd60e51b8152600401610a5390615bd4565b6001600160a01b03811661237e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6e7472616374206164647265737300000000000000006044820152606401610a53565b6001600160a01b0381165f81815260076020526040808220805460ff19166001179055517f8983a1f3c3cb45c24c8226b5b805e3b6eb49686530b808534b2a920129eff6519190a250565b5f546001600160a01b031633146123f25760405162461bcd60e51b8152600401610a5390615bd4565b6001600160a01b0381165f81815260076020526040808220805460ff19169055517f54142b7cb3ceaa9e564243ce4cc2303723c842a1144192de6b3c594f68b16a9a9190a250565b5f828152600c60209081526040808320600181015484526008835281842033855260050190925290912060020154610100900460ff1661248c5760405162461bcd60e51b8152600401610a53906159de565b335f90815260088201602052604090205460ff16156124dd5760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606401610a53565b80600a0154421061252a5760405162461bcd60e51b8152602060048201526017602482015276159bdd1a5b99c81c195c9a5bd9081a185cc8195b991959604a1b6044820152606401610a53565b600981015460ff1615801561254957506009810154610100900460ff16155b61258e5760405162461bcd60e51b815260206004820152601660248201527550726f706f73616c206973206e6f742061637469766560501b6044820152606401610a53565b335f9081526008820160205260409020805460ff1916600117905581156125ca57600681018054905f6125c083615a0a565b91905055506125e1565b600781018054905f6125db83615a0a565b91905055505b6040518215158152339084907fb1ce30082b89fee7d49aecd4581fdd1cca211dd20f85db499cc4899d13f05a9c90602001611a83565b600f602052815f5260405f208181548110612630575f80fd5b905f5260205f20015f91509150505481565b5f82815260086020526040812060090154839060ff166126745760405162461bcd60e51b8152600401610a539061579d565b5f8481526008602090815260408083206001600160a01b038716845260040190915290205491505b5092915050565b60086020525f9081526040902080546001820180549192916126c49061585f565b80601f01602080910402602001604051908101604052809291908181526020018280546126f09061585f565b801561273b5780601f106127125761010080835404028352916020019161273b565b820191905f5260205f20905b81548152906001019060200180831161271e57829003601f168201915b505050600284015460038501546009860154600a9096015494956001600160a01b039092169490935060ff909116915086565b5f818152600c6020526040902060028101546001600160a01b031633146127d25760405162461bcd60e51b815260206004820152601860248201527713db9b1e481c1c9bdc1bdcd95c8818d85b8818d85b98d95b60421b6044820152606401610a53565b600981015460ff161580156127f157506009810154610100900460ff16155b61280d5760405162461bcd60e51b8152600401610a539061573f565b60098101805461ff001916610100179055604051339083907f7639e87a93d42864b7dab2344fcdbe5e0b92b2c77484c59aee4f03233840eb60905f90a35050565b5f83815260086020526040902060090154839060ff166128805760405162461bcd60e51b8152600401610a539061579d565b335f9081526007602052604090205460ff166128ea5760405162461bcd60e51b8152602060048201526024808201527f43616c6c6572206973206e6f7420616e20617574686f72697a656420636f6e746044820152631c9858dd60e21b6064820152608401610a53565b6001600160a01b0383166129395760405162461bcd60e51b81526020600482015260166024820152750aae6ca40c8cae0dee6d2e88aa89040ccdee4408aa8960531b6044820152606401610a53565b5f82116129835760405162461bcd60e51b81526020600482015260186024820152774465706f736974206d75737420626520706f73697469766560401b6044820152606401610a53565b5f8481526008602090815260408083206001600160a01b03871684526004810190925282208054919285926129b990849061578a565b90915550506001600160a01b0384165f908152600e6020526040812080548592906129e590849061578a565b909155506129f5905081856146b1565b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015612a45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a699190615c04565b612aad5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610a53565b604080518481524260208201526001600160a01b03861691339188917feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a2910160405180910390a45050505050565b5f82815260086020526040812060090154839060ff16612b2d5760405162461bcd60e51b8152600401610a539061579d565b5f8481526008602090815260408083206001600160a01b0387168452600501909152902060020154610100900460ff16612bb75760405162461bcd60e51b815260206004820152602560248201527f41646472657373206973206e6f742061206d656d626572206f662074686973206044820152641d985d5b1d60da1b6064820152608401610a53565b50505f9182526008602090815260408084206001600160a01b039390931684526005909201905290206001015490565b5f82815260086020526040902060090154829060ff16612c195760405162461bcd60e51b8152600401610a539061579d565b5f8381526008602052604090206002015483906001600160a01b03163314612c535760405162461bcd60e51b8152600401610a5390615812565b336001600160a01b03841603612cab5760405162461bcd60e51b815260206004820152601f60248201527f4c65616465722063616e6e6f742064656d6f7465207468656d73656c766573006044820152606401610a53565b5f8481526008602090815260408083206001600160a01b038716845260050190915290206002810154610100900460ff16612d285760405162461bcd60e51b815260206004820152601c60248201527f546172676574206973206e6f742061207661756c74206d656d626572000000006044820152606401610a53565b600281015460ff16612d755760405162461bcd60e51b815260206004820152601660248201527526b2b6b132b91034b9903737ba1030b71030b236b4b760511b6044820152606401610a53565b60028101805460ff1916905560405133906001600160a01b0386169087907f14d4079a25ab5d7957ba84d1c3ef18caf82b243c04b83b29508b6eee0b3d8870905f90a45050505050565b5f84815260086020526040902060090154849060ff16612df15760405162461bcd60e51b8152600401610a539061579d565b5f8581526008602090815260408083203384526005019091529020600201548590610100900460ff16612e365760405162461bcd60e51b8152600401610a53906159de565b5f8411612e855760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610a53565b6001600160a01b038516612ee75760405162461bcd60e51b8152602060048201526024808201527f526563697069656e742063616e6e6f7420626520746865207a65726f206164646044820152637265737360e01b6064820152608401610a53565b600d8054905f612ef683615a0a565b9091555050600d545f818152600c6020526040902081815560018101889055600281018054336001600160a01b0319918216179091556003820180549091166001600160a01b0389161790556004810186905560058101612f578682615a9b565b50612f646154604261578a565b600a8201555f888152600860209081526040808320600e0180546001810182559084529190922001839055513390899084907f302a89671bdf7210f6c360ed5923dbfb267b034d58b2f53f6a3da467c306496090612fc7908c908c908c90615c1f565b60405180910390a45050505050505050565b6130266040518061010001604052805f8152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020016060815260200160608152602001606081525090565b5f82815260086020526040902060090154829060ff166130585760405162461bcd60e51b8152600401610a539061579d565b5f8381526008602052604081206006810154600b8201549192909190826001600160401b0381111561308c5761308c6152a2565b6040519080825280602002602001820160405280156130dc57816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f199092019101816130aa5790505b5090505f5b8381101561317f575f8560060182815481106130ff576130ff615b76565b5f9182526020808320909101546001600160a01b03168083526005890182526040928390208351608081018552828152815493810193909352600181015493830193909352600283015460ff1615156060830152855190935085908590811061316a5761316a615b76565b602090810291909101015250506001016130e1565b505f61318c83600161578a565b6001600160401b038111156131a3576131a36152a2565b6040519080825280602002602001820160405280156131e757816020015b604080518082019091525f80825260208201528152602001906001900390816131c15790505b506040805180820182525f808252808052600489016020908152928120549282019290925282519293509183919061322157613221615b76565b60209081029190910101525f5b838110156132b6575f86600b01828154811061324c5761324c615b76565b5f9182526020808320909101546040805180820182526001600160a01b0390921680835280855260048c018452932054918101919091529091508361329284600161578a565b815181106132a2576132a2615b76565b60209081029190910101525060010161322e565b505f805b8581101561332157866005015f8860060183815481106132dc576132dc615b76565b5f9182526020808320909101546001600160a01b0316835282019290925260400190206002015460ff1615613319578161331581615a0a565b9250505b6001016132ba565b505f816001600160401b0381111561333b5761333b6152a2565b604051908082528060200260200182016040528015613364578160200160208202803683370190505b5090505f805b878110156133fe575f89600601828154811061338857613388615b76565b5f9182526020808320909101546001600160a01b031680835260058d0190915260409091206002015490915060ff16156133f557808484815181106133cf576133cf615b76565b6001600160a01b0390921660209283029190910190910152826133f181615a0a565b9350505b5060010161336a565b50604051806101000160405280895f015481526020018960010180546134239061585f565b80601f016020809104026020016040519081016040528092919081815260200182805461344f9061585f565b801561349a5780601f106134715761010080835404028352916020019161349a565b820191905f5260205f20905b81548152906001019060200180831161347d57829003601f168201915b505050918352505060028a01546001600160a01b0316602082015260038a01546040820152600a9099015460608a015260808901949094525060a08701939093525060c0909401525090949350505050565b5f546001600160a01b031633146135155760405162461bcd60e51b8152600401610a5390615bd4565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b5f82815260086020526040902060090154829060ff166135695760405162461bcd60e51b8152600401610a539061579d565b5f8381526008602090815260408083203384526005019091529020600201548390610100900460ff166135ae5760405162461bcd60e51b8152600401610a53906159de565b5f83116135fd5760405162461bcd60e51b815260206004820152601b60248201527f5769746864726177616c206d75737420626520706f73697469766500000000006044820152606401610a53565b5f84815260086020908152604080832033845260058101835281842060018101548580526004830190945291842054909391926127109161363e9190615b9e565b6136489190615bb5565b9050808611156136a65760405162461bcd60e51b8152602060048201526024808201527f5769746864726177616c206578636565647320796f7572207368617265206f666044820152630408aa8960e31b6064820152608401610a53565b85825f015f8282546136b89190615a3d565b9250508190555085836003015f8282546136d29190615a3d565b90915550505f808052600484016020526040812080548892906136f6908490615a3d565b90915550505f808052600e6020525f516020615d425f395f51905f528054889290613722908490615a3d565b9091555050604051339087156108fc029088905f818181858888f19350505050158015613751573d5f5f3e3d5ffd5b5061375b876145c2565b604080518781524260208201525f9133918a917f0c5bfef78f494cb36fb1b384aba1877f423229330262eb3207e301baecc1b39e910160405180910390a450505050505050565b5f828152600a60209081526040808320600181015484526008835281842033855260050190925290912060020154610100900460ff166137f45760405162461bcd60e51b8152600401610a53906159de565b335f90815260098201602052604090205460ff16156138455760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606401610a53565b80600b015442106138925760405162461bcd60e51b8152602060048201526017602482015276159bdd1a5b99c81c195c9a5bd9081a185cc8195b991959604a1b6044820152606401610a53565b600a81015460ff161580156138b15750600a810154610100900460ff16155b6138f65760405162461bcd60e51b815260206004820152601660248201527550726f706f73616c206973206e6f742061637469766560501b6044820152606401610a53565b335f9081526009820160205260409020805460ff19166001179055811561393257600781018054905f61392883615a0a565b9190505550613949565b600881018054905f61394383615a0a565b91905055505b604080518315158152426020820152339185917f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b59101611a83565b5f81815260086020526040902060090154819060ff166139b65760405162461bcd60e51b8152600401610a539061579d565b5f8281526008602090815260408083203384526005019091529020600201548290610100900460ff166139fb5760405162461bcd60e51b8152600401610a53906159de565b60035460405163f8e0538f60e01b8152600481018590525f602482015247916001600160a01b03169063f8e0538f906044015f604051808303815f87803b158015613a44575f5ffd5b505af1158015613a56573d5f5f3e3d5ffd5b504792505f9150613a6990508383615a3d565b90508015613ac3575f868152600860205260408120600a018054839290613a9190849061578a565b90915550505f808052600e6020525f516020615d425f395f51905f528054839290613abd90849061578a565b90915550505b60408051828152426020820152339188917f225cb916fdab779ad0c91be7daa1489b8335b20d07cd5078114d46ed1fdf1d759101611942565b6001600160a01b0381165f908152600f6020908152604091829020805483518184028101840190945280845260609392830182828015613b5957602002820191905f5260205f20905b815481526020019060010190808311613b45575b50505050509050919050565b5f818152600a6020526040902060028101546001600160a01b03163314613bc95760405162461bcd60e51b815260206004820152601860248201527713db9b1e481c1c9bdc1bdcd95c8818d85b8818d85b98d95b60421b6044820152606401610a53565b600a81015460ff16158015613be85750600a810154610100900460ff16155b613c045760405162461bcd60e51b8152600401610a539061573f565b600a8101805461ff00191661010017905560405182907f5be67b1762c29673dceae3c1de04ecbf702ab0755c93f0fcc8aec5252df5a2b490613c499042815260200190565b60405180910390a25050565b5f82815260086020526040902060090154829060ff16613c875760405162461bcd60e51b8152600401610a539061579d565b5f8381526008602052604090206002015483906001600160a01b03163314613cc15760405162461bcd60e51b8152600401610a5390615812565b5f8481526008602090815260408083206001600160a01b038716845260050190915290206002810154610100900460ff16613d3e5760405162461bcd60e51b815260206004820152601c60248201527f546172676574206973206e6f742061207661756c74206d656d626572000000006044820152606401610a53565b600281015460ff1615613d935760405162461bcd60e51b815260206004820152601a60248201527f4d656d62657220697320616c726561647920616e2061646d696e0000000000006044820152606401610a53565b60028101805460ff1916600117905560405133906001600160a01b0386169087907f04aa9139bed4b41b34ed6042938256c1880d5bb0d6efdbe56cbad32670daed44905f90a45050505050565b60018101545f908152600860209081526040808320600585015460038601546001600160a01b03168552600482019093529220541015613e625760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742066756e647320666f72207472616465000000006044820152606401610a53565b600582015460038301546001600160a01b03165f90815260048301602052604081208054909190613e94908490615a3d565b9091555050600582015460038301546001600160a01b03165f908152600e602052604081208054909190613ec9908490615a3d565b909155505060038201546001600160a01b0316613efd578160050154816003015f828254613ef79190615a3d565b90915550505b5f80600c84015460ff166002811115613f1857613f186150a6565b03613f50576003830154600484015460058501546006860154613f49936001600160a01b0390811693169190614721565b9050613fff565b6001600c84015460ff166002811115613f6b57613f6b6150a6565b03613fac576003830154600484015460058501546006860154600c870154613f49946001600160a01b039081169416929190610100900462ffffff16614d36565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420726f757465722076657273696f6e20696e2070726f706f73604482015261185b60f21b6064820152608401610a53565b60048301546001600160a01b031661402a5780826003015f828254614024919061578a565b90915550505b6004838101546001600160a01b03165f90815290830160205260408120805483929061405790849061578a565b909155505060048301546001600160a01b03165f908152600e60205260408120805483929061408790849061578a565b909155505060048301546140a59083906001600160a01b03166146b1565b6003546001600160a01b03161561412557600354600184810154604051634df667d160e11b8152600481019190915260248101919091525f60448201526001600160a01b0390911690639beccfa2906064015f604051808303815f87803b15801561410e575f5ffd5b505af1158015614120573d5f5f3e3d5ffd5b505050505b505050565b61414e60405180606001604052806060815260200160608152602001606081525090565b60068201545f816001600160401b0381111561416c5761416c6152a2565b604051908082528060200260200182016040528015614195578160200160208202803683370190505b5090505f826001600160401b038111156141b1576141b16152a2565b6040519080825280602002602001820160405280156141da578160200160208202803683370190505b5090505f836001600160401b038111156141f6576141f66152a2565b60405190808252806020026020018201604052801561421f578160200160208202803683370190505b5090505f5b84811015614312575f87600601828154811061424257614242615b76565b905f5260205f20015f9054906101000a90046001600160a01b031690508085838151811061427257614272615b76565b6001600160a01b039283166020918202929092018101919091529082165f90815260058a01909152604090205484518590849081106142b3576142b3615b76565b6020908102919091018101919091526001600160a01b0382165f90815260058a019091526040902060020154835160ff909116908490849081106142f9576142f9615b76565b9115156020928302919091019091015250600101614224565b50604080516060810182529384526020840192909252908201529392505050565b61435660405180606001604052805f815260200160608152602001606081525090565b600a8301545f80805260048501602052604081205490916143769161578a565b600b8501549091505f805b828110156143e4575f876004015f89600b0184815481106143a4576143a4615b76565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411156143dc57816143d881615a0a565b9250505b600101614381565b505f816001600160401b038111156143fe576143fe6152a2565b604051908082528060200260200182016040528015614427578160200160208202803683370190505b5090505f826001600160401b03811115614443576144436152a2565b60405190808252806020026020018201604052801561446c578160200160208202803683370190505b5090505f805b8581101561459b575f8a600b01828154811061449057614490615b76565b5f9182526020808320909101546001600160a01b031680835260048e01909152604090912054909150801561459157818685815181106144d2576144d2615b76565b60200260200101906001600160a01b031690816001600160a01b0316815250508085858151811061450557614505615b76565b60209081029190910101528361451a81615a0a565b60405163a9059cbb60e01b81526001600160a01b038e8116600483015260248201859052919650908416915063a9059cbb906044016020604051808303815f875af115801561456b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061458f9190615c04565b505b5050600101614472565b50506040805160608101825295865260208601929092529084015250909150505b92915050565b5f8181526008602052604081206003810154909103614635575f5b6006820154811015614125575f8260060182815481106145ff576145ff615b76565b5f9182526020808320909101546001600160a01b03168252600585019052604081206001908101919091559190910190506145dd565b5f5b6006820154811015614125575f82600601828154811061465957614659615b76565b5f9182526020808320909101546001600160a01b031680835260058601909152604090912060038501548154929350909161469690612710615b9e565b6146a09190615bb5565b600191820155919091019050614637565b6001600160a01b0381165f908152600c8301602052604090205460ff1661471d576001600160a01b0381165f818152600c8401602090815260408220805460ff19166001908117909155600b860180549182018155835291200180546001600160a01b03191690911790555b5050565b5f6001600160a01b03851661497e575f612710600554856147429190615b9e565b61474c9190615bb5565b9050801561478d576004546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561478b573d5f5f3e3d5ffd5b505b5f6147988286615a3d565b6040805160028082526060820183529293505f9290916020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f815181106147f0576147f0615b76565b60200260200101906001600160a01b031690816001600160a01b031681525050868160018151811061482457614824615b76565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201525f918916906370a0823190602401602060405180830381865afa158015614876573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061489a9190615c45565b60015460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de959085906148d3908a90879030904290600401615c5c565b5f604051808303818588803b1580156148ea575f5ffd5b505af11580156148fc573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528493506001600160a01b038c1692506370a082319150602401602060405180830381865afa158015614945573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149699190615c45565b6149739190615a3d565b945050505050614d2e565b60015460405163095ea7b360e01b81526001600160a01b039182166004820152602481018590529086169063095ea7b3906044016020604051808303815f875af11580156149ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149f29190615c04565b506001600160a01b038416614b74576040805160028082526060820183525f9260208301908036833701905050905085815f81518110614a3457614a34615b76565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110614a8857614a88615b76565b6001600160a01b03928316602091820292909201015260015460405163791ac94760e01b81524792919091169063791ac94790614ad19088908890879030904290600401615c90565b5f604051808303815f87803b158015614ae8575f5ffd5b505af1158015614afa573d5f5f3e3d5ffd5b505050505f8147614b0b9190615a3d565b90505f61271060055483614b1f9190615b9e565b614b299190615bb5565b90508015614b6a576004546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015614b68573d5f5f3e3d5ffd5b505b6149738183615a3d565b6040805160028082526060820183525f9260208301908036833701905050905085815f81518110614ba757614ba7615b76565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600181518110614bdb57614bdb615b76565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201525f918716906370a0823190602401602060405180830381865afa158015614c2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c519190615c45565b600154604051635c11d79560e01b81529192506001600160a01b031690635c11d79590614c8a9088908890879030904290600401615c90565b5f604051808303815f87803b158015614ca1575f5ffd5b505af1158015614cb3573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03891691506370a0823190602401602060405180830381865afa158015614cfb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d1f9190615c45565b614d299190615a3d565b925050505b949350505050565b5f6001600160a01b038616614e8f575f61271060055486614d579190615b9e565b614d619190615bb5565b90508015614da2576004546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015614da0573d5f5f3e3d5ffd5b505b5f614dad8287615a3d565b60408051610100810182526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682528a8116602083015262ffffff88168284015230606083015242608083015260a0820184905260c082018990525f60e0830152600254925163414bf38960e01b8152939450909291169063414bf389908490614e44908590600401615ccb565b60206040518083038185885af1158015614e60573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190614e859190615c45565b9350505050615086565b60025460405163095ea7b360e01b81526001600160a01b039182166004820152602481018690529087169063095ea7b3906044016020604051808303815f875af1158015614edf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f039190615c04565b505f604051806101000160405280886001600160a01b031681526020015f6001600160a01b0316886001600160a01b031614614f3f5787614f61565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03908116825262ffffff86166020830152306040808401919091524260608401526080830189905260a083018890525f60c0909301839052600254905163414bf38960e01b8152939450919291169063414bf38990614fcb908590600401615ccb565b6020604051808303815f875af1158015614fe7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061500b9190615c45565b90506001600160a01b038716615082575f6127106005548361502d9190615b9e565b6150379190615bb5565b90508015615078576004546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015615076573d5f5f3e3d5ffd5b505b614e858183615a3d565b9150505b95945050505050565b5f6020828403121561509f575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b600381106150d657634e487b7160e01b5f52602160045260245ffd5b9052565b8e8152602081018e90526001600160a01b038d811660408301528c811660608301528b1660808201526101c081018a60a08301528960c08301528860e08301528761010083015261513061012083018815159052565b8515156101408301528461016083015261514e6101808301856150ba565b62ffffff83166101a08301529f9e505050505050505050505050505050565b80356001600160a01b0381168114615183575f5ffd5b919050565b5f5f5f5f5f5f5f60e0888a03121561519e575f5ffd5b873596506020880135600381106151b3575f5ffd5b95506151c16040890161516d565b94506151cf6060890161516d565b93506080880135925060a0880135915060c088013562ffffff811681146151f4575f5ffd5b8091505092959891949750929550565b5f8151808452602084019350602083015f5b82811015615234578151865260209586019590910190600101615216565b5093949350505050565b602081525f6152506020830184615204565b9392505050565b5f8151808452602084019350602083015f5b828110156152345781516001600160a01b0316865260209586019590910190600101615269565b602081525f6152506020830184615257565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126152c5575f5ffd5b81356001600160401b038111156152de576152de6152a2565b604051601f8201601f19908116603f011681016001600160401b038111828210171561530c5761530c6152a2565b604052818152838201602001851015615323575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6020828403121561534f575f5ffd5b81356001600160401b03811115615364575f5ffd5b614d2e848285016152b6565b801515811461537d575f5ffd5b50565b5f5f5f60608486031215615392575f5ffd5b833592506153a26020850161516d565b915060408401356153b281615370565b809150509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b8b8152602081018b90526001600160a01b038a81166040830152891660608201526080810188905261016060a082018190525f9061542b908301896153bd565b60c08301979097525060e08101949094529115156101008401521515610120830152610140909101529695505050505050565b5f6020828403121561546e575f5ffd5b6152508261516d565b5f5f60408385031215615488575f5ffd5b82359150602083013561549a81615370565b809150509250929050565b5f5f604083850312156154b6575f5ffd5b6154bf8361516d565b946020939093013593505050565b5f5f604083850312156154de575f5ffd5b823591506154ee6020840161516d565b90509250929050565b86815260c060208201525f61550f60c08301886153bd565b6001600160a01b03969096166040830152506060810193909352901515608083015260a09091015292915050565b5f5f5f6060848603121561554f575f5ffd5b8335925061555f6020850161516d565b929592945050506040919091013590565b5f5f5f5f60808587031215615583575f5ffd5b843593506155936020860161516d565b92506040850135915060608501356001600160401b038111156155b4575f5ffd5b6155c0878288016152b6565b91505092959194509250565b5f8151808452602084019350602083015f5b8281101561523457815180516001600160a01b0316875260209081015181880152604090960195909101906001016155de565b5f8151808452602084019350602083015f5b8281101561523457815180516001600160a01b03168752602080820151818901526040808301519089015260609182015115159188019190915260809096019590910190600101615623565b60208152815160208201525f602083015161010060408401526156966101208401826153bd565b905060408401516156b260608501826001600160a01b03169052565b5060608401516080840152608084015160a084015260a0840151601f198483030160c08501526156e282826155cc565b91505060c0840151601f198483030160e08501526157008282615611565b91505060e0840151601f19848303016101008501526150868282615257565b5f5f60408385031215615730575f5ffd5b50508035926020909101359150565b60208082526018908201527f50726f706f73616c20616c72656164792068616e646c65640000000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156145bc576145bc615776565b60208082526014908201527315985d5b1d08191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526027908201527f566f74696e67206e6f7420636f6d706c657465206f7220646561646c696e65206040820152661b9bdd081b595d60ca1b606082015260800190565b6020808252602d908201527f4f6e6c7920746865207661756c74206c65616465722063616e20706572666f7260408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b600181811c9082168061587357607f821691505b602082108103610d3557634e487b7160e01b5f52602260045260245ffd5b5f8151808452602084019350602083015f5b8281101561523457815115158652602095860195909101906001016158a3565b8a815261014060208201525f5f8b546158db8161585f565b80610140860152600182165f81146158fa57600181146159185761594b565b60ff19831661016087015261016082151560051b870101935061594b565b8e5f5260205f205f5b838110156159415781548882016101600152600190910190602001615921565b8701610160019450505b5050506001600160a01b038b16604084015289606084015288608084015282810360a084015261597b8189615257565b905082810360c084015261598f8188615204565b905082810360e08401526159a38187615891565b90508281036101008401526159b88186615257565b90508281036101208401526159cd8185615204565b9d9c50505050505050505050505050565b6020808252601290820152712737ba1030903b30bab63a1036b2b6b132b960711b604082015260600190565b5f60018201615a1b57615a1b615776565b5060010190565b60408101615a3082856150ba565b8260208301529392505050565b818103818111156145bc576145bc615776565b601f82111561412557805f5260205f20601f840160051c81016020851015615a755750805b601f840160051c820191505b81811015615a94575f8155600101615a81565b5050505050565b81516001600160401b03811115615ab457615ab46152a2565b615ac881615ac2845461585f565b84615a50565b6020601f821160018114615afa575f8315615ae35750848201515b5f19600385901b1c1916600184901b178455615a94565b5f84815260208120601f198516915b82811015615b295787850151825560209485019460019092019101615b09565b5084821015615b4657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f615b6760408301856153bd565b90508260208301529392505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b80820281158282048414176145bc576145bc615776565b5f82615bcf57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252601690820152752737ba103a34329031b7b73a3930b1ba1037bbb732b960511b604082015260600190565b5f60208284031215615c14575f5ffd5b815161525081615370565b60018060a01b0384168152826020820152606060408201525f61508660608301846153bd565b5f60208284031215615c55575f5ffd5b5051919050565b848152608060208201525f615c746080830186615257565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f615cae60a0830186615257565b6001600160a01b0394909416606083015250608001529392505050565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015191821690830152610100820190506080830151608083015260a083015160a083015260c083015160c083015260e083015161269c60e08401826001600160a01b0316905256fee710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881ca26469706673582212205d651475e81f3d3d08cc138752b3a673eb5eae9b28ae23f171eb950e3ac711b364736f6c634300081e00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45000000000000000000000000d226ee94a5dea695551d429a75eb5556dd2f0dc40000000000000000000000005608f3dd5bc51a6bd6350078115fc496485d30ab000000000000000000000000000000000000000000000000000000000000000a