1.1k txs
1.1k calls
constructor
constructor((address triviToken, address treasuryAddress, address leaderboardAddress, address backendService, address singlePlayerWallet) params)
functions
averageHumanScore
viewfunction averageHumanScore() view returns (uint256)
backendService
viewfunction backendService() view returns (address)
calculateCBBTCRequired
viewfunction calculateCBBTCRequired(uint256 triviAmount) view returns (uint256)
calculateETHRequired
viewfunction calculateETHRequired(uint256 triviAmount) view returns (uint256)
calculatePrizeDistribution
purefunction calculatePrizeDistribution(uint256 playerCount) pure returns (uint256 winnerBps, uint256 leaderboardBps, uint256 treasuryBps)
calculateUSDCRequired
viewfunction calculateUSDCRequired(uint256 triviAmount) view returns (uint256)
CBBTC
viewfunction CBBTC() view returns (address)
cbbtcPayments
viewfunction cbbtcPayments(string, address) view returns (uint256)
CONVENIENCE_FEE
viewfunction CONVENIENCE_FEE() view returns (uint256)
ethPayments
viewfunction ethPayments(string, address) view returns (uint256)
getPaymentQuotes
viewfunction getPaymentQuotes(string tournamentId) view returns (uint256 entryFeeTrivi, uint256 ethRequired, uint256 usdcRequired, uint256 cbbtcRequired)
getTournamentDetails
viewfunction getTournamentDetails(string tournamentId) view returns (uint256 entryFee, uint256 totalPrizePool, uint256 playerCount, uint256 maxPlayers, bool isActive, bool isCompleted, address winner, bool isSinglePlayer, uint256 playerScore, uint256 scoreThreshold)
getTournamentPlayerCount
viewfunction getTournamentPlayerCount(string tournamentId) view returns (uint256)
getTournamentPlayers
viewfunction getTournamentPlayers(string tournamentId) view returns (address[])
hasPlayerEntered
viewfunction hasPlayerEntered(string tournamentId, address player) view returns (bool)
leaderboardAddress
viewfunction leaderboardAddress() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
playerIndex
viewfunction playerIndex(string, address) view returns (uint256)
PRECISION
viewfunction PRECISION() view returns (uint256)
refunds
viewfunction refunds(string, address) view returns (uint256)
singlePlayerWallet
viewfunction singlePlayerWallet() view returns (address)
singlePlayerWinMultiplier
viewfunction singlePlayerWinMultiplier() view returns (uint256)
SLIPPAGE_TOLERANCE
viewfunction SLIPPAGE_TOLERANCE() view returns (uint256)
totalRefundsDispersed
viewfunction totalRefundsDispersed(string) view returns (uint256)
totalRefundsRequired
viewfunction totalRefundsRequired(string) view returns (uint256)
tournamentCancelled
viewfunction tournamentCancelled(string) view returns (bool)
tournamentExists
viewfunction tournamentExists(string) view returns (bool)
tournamentParticipants
viewfunction tournamentParticipants(string, address) view returns (bool)
tournamentPlayers
viewfunction tournamentPlayers(string, uint256) view returns (address)
tournaments
viewfunction tournaments(string) view returns (uint256 entryFee, uint256 totalPrizePool, uint256 playerCount, uint256 maxPlayers, uint256 winnerPayout, uint256 treasuryPayout, uint256 leaderboardPayout, uint256 playerScore, uint256 scoreThreshold, address winner, bool isActive, bool isCompleted, bool isSinglePlayer)
treasuryAddress
viewfunction treasuryAddress() view returns (address)
triviToken
viewfunction triviToken() view returns (address)
UNISWAP_ROUTER
viewfunction UNISWAP_ROUTER() view returns (address)
USDC
viewfunction USDC() view returns (address)
usdcPayments
viewfunction usdcPayments(string, address) view returns (uint256)
VIRTUAL
viewfunction VIRTUAL() view returns (address)
WETH
viewfunction WETH() view returns (address)
cancelTournament
nonpayablefunction cancelTournament(string tournamentId)
cleanupTournament
nonpayablefunction cleanupTournament(string tournamentId)
completeSinglePlayerTournament
nonpayablefunction completeSinglePlayerTournament(string tournamentId, address player, uint256 playerScore)
completeTournament
nonpayablefunction completeTournament(string tournamentId, address winnerAddress)
createTournament
nonpayablefunction createTournament(string tournamentId, uint256 entryFee, uint256 maxPlayers, bool isSinglePlayer)
disperseRefunds
nonpayablefunction disperseRefunds(string tournamentId, uint256 startIndex, uint256 batchSize)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
emergencyWithdrawETH
nonpayablefunction emergencyWithdrawETH()
enterTournament
nonpayablefunction enterTournament(string tournamentId)
enterTournamentWithCBBTC
nonpayablefunction enterTournamentWithCBBTC(string tournamentId, uint256 cbbtcAmount)
enterTournamentWithETH
payablefunction enterTournamentWithETH(string tournamentId) payable
enterTournamentWithUSDC
nonpayablefunction enterTournamentWithUSDC(string tournamentId, uint256 usdcAmount)
leaveTournament
nonpayablefunction leaveTournament(string tournamentId)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateAverageScore
nonpayablefunction updateAverageScore(uint256 newAverage)
updateBackendService
nonpayablefunction updateBackendService(address newService)
updateLeaderboardAddress
nonpayablefunction updateLeaderboardAddress(address newLeaderboard)
updateSinglePlayerMultiplier
nonpayablefunction updateSinglePlayerMultiplier(uint256 newMultiplier)
updateSinglePlayerWallet
nonpayablefunction updateSinglePlayerWallet(address newWallet)
updateTreasuryAddress
nonpayablefunction updateTreasuryAddress(address newTreasury)
events
AverageScoreUpdated
event AverageScoreUpdated(uint256 newAverage)
BackendServiceUpdated
event BackendServiceUpdated(address indexed newService)
CBBTCRefunded
event CBBTCRefunded(address indexed player, uint256 amount)
ETHRefunded
event ETHRefunded(address indexed player, uint256 amount)
LeaderboardAddressUpdated
event LeaderboardAddressUpdated(address indexed newLeaderboard)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PlayerEntered
event PlayerEntered(string indexed tournamentId, address indexed player, uint256 entryFee)
PlayerEnteredWithCBBTC
event PlayerEnteredWithCBBTC(string indexed tournamentId, address indexed player, uint256 cbbtcPaid, uint256 triviReceived)
PlayerEnteredWithETH
event PlayerEnteredWithETH(string indexed tournamentId, address indexed player, uint256 ethPaid, uint256 triviReceived)
PlayerEnteredWithUSDC
event PlayerEnteredWithUSDC(string indexed tournamentId, address indexed player, uint256 usdcPaid, uint256 triviReceived)
PlayerLeft
event PlayerLeft(string indexed tournamentId, address indexed player, uint256 refundAmount)
RefundsDispersed
event RefundsDispersed(string indexed tournamentId, uint256 startIndex, uint256 endIndex)
SinglePlayerCompleted
event SinglePlayerCompleted(string indexed tournamentId, address indexed player, uint256 score, uint256 threshold, bool won, uint256 payout)
SinglePlayerMultiplierUpdated
event SinglePlayerMultiplierUpdated(uint256 newMultiplier)
SinglePlayerWalletUpdated
event SinglePlayerWalletUpdated(address indexed newWallet)
TournamentCancelled
event TournamentCancelled(string indexed tournamentId)
TournamentCompleted
event TournamentCompleted(string indexed tournamentId, address indexed winner, uint256 winnerPayout, uint256 treasuryPayout, uint256 leaderboardPayout)
TournamentCreated
event TournamentCreated(string indexed tournamentId, uint256 entryFee, uint256 maxPlayers)
TreasuryAddressUpdated
event TreasuryAddressUpdated(address indexed newTreasury)
Unpaused
event Unpaused(address account)
USDCRefunded
event USDCRefunded(address indexed player, uint256 amount)
errors
No errors.
creation bytecode
0x60a06040526101f4600655614e206007553480156200001d57600080fd5b5060405162005f8f38038062005f8f8339810160408190526200004091620002d6565b6200004b3362000269565b600180556002805460ff1916905580516001600160a01b0316620000a65760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064015b60405180910390fd5b60208101516001600160a01b0316620000f55760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420747265617375727960801b60448201526064016200009d565b60408101516001600160a01b0316620001515760405162461bcd60e51b815260206004820152601360248201527f496e76616c6964206c6561646572626f6172640000000000000000000000000060448201526064016200009d565b60608101516001600160a01b03166200019f5760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a5908189858dad95b99608a1b60448201526064016200009d565b60808101516001600160a01b0316620001ec5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081dd85b1b195d60921b60448201526064016200009d565b80516001600160a01b039081166080908152602083015160028054610100600160a81b031916610100928516929092029190911790556040830151600380546001600160a01b031990811692851692909217905560608401516004805483169185169190911790559201516005805490931691161790556200037d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620002d157600080fd5b919050565b600060a08284031215620002e957600080fd5b60405160a081016001600160401b03811182821017156200031a57634e487b7160e01b600052604160045260246000fd5b6040526200032883620002b9565b81526200033860208401620002b9565b60208201526200034b60408401620002b9565b60408201526200035e60608401620002b9565b60608201526200037160808401620002b9565b60808201529392505050565b608051615b3962000456600039600081816104fa01528181611076015281816115d301528181611acb01528181611b0b01528181611b5001528181611b9b01528181611ce501528181611d2401528181611d5e01528181611d9b01528181611de10152818161288201528181612aff01528181612ede01528181612f1f015281816133c9015281816135e401528181613961015281816139a9015281816139f8015281816140e30152818161412401528181614488015281816144c90152818161489e01528181614c870152614e800152615b396000f3fe6080604052600436106103a65760003560e01c806380921325116101e7578063aceb53d51161010d578063c5f956af116100a0578063dbce8aa61161006f578063dbce8aa614610db9578063dc72179014610dd9578063e7db5d0414610df9578063f2fde38b14610e1957600080fd5b8063c5f956af14610cf9578063d292982914610d1e578063d826492014610d69578063d99a329114610d9157600080fd5b8063b268853e116100dc578063b268853e14610c65578063bc6ea9ee14610c85578063c248b3ac14610c9b578063c3d1403714610ce357600080fd5b8063aceb53d514610b93578063ad5c464814610bb3578063b1b491af14610bce578063b2113ef714610bee57600080fd5b80638cf552c6116101855780639cdbbd76116101545780639cdbbd7614610b02578063a604082a14610b3d578063a7a1e7d914610b5d578063aaf5eb6814610b7d57600080fd5b80638cf552c614610a865780638da5cb5b14610aae5780639565e68f14610acc57806395ccea6714610ae257600080fd5b8063841e4561116101c1578063841e456114610a145780638453601714610a345780638456cb5914610a4957806389a3027114610a5e57600080fd5b806380921325146109c15780638182e639146109e157806382881797146109f457600080fd5b806351b5c81a116102cc5780636ab5bddc1161026a578063770d836711610239578063770d8367146108fe578063772215ae1461091e57806378668af6146109595780637a9e93c9146109a157600080fd5b80636ab5bddc14610796578063715018a6146108a957806374dc0399146108be5780637705054c146108de57600080fd5b80635c975abb116102a65780635c975abb146107065780636025c7b11461071e578063615ac4351461075657806367e2bb301461077657600080fd5b806351b5c81a1461069957806352eedf75146106b9578063560f5966146106d957600080fd5b80632402d170116103445780633f4ba83a116103135780633f4ba83a1461060e5780634994c0b41461062357806349ec25f2146106435780634c2037861461068357600080fd5b80632402d1701461053c57806328e88e171461055e5780633966bd241461057e5780633bae8b40146105c657600080fd5b8063150742f611610380578063150742f6146104755780631e550573146104b05780631f680672146104e85780631fe3c00b1461051c57600080fd5b806302923dbc146103b2578063145bc2e2146103e75780631505842d1461042d57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103d26103cd366004615442565b610e39565b60405190151581526020015b60405180910390f35b3480156103f357600080fd5b5061041f610402366004615490565b805160208183018101805160108252928201919093012091525481565b6040519081526020016103de565b34801561043957600080fd5b5061041f610448366004615442565b81516020818401810180516009825292820194820194909420919093529091526000908152604090205481565b34801561048157600080fd5b506103d2610490366004615490565b8051602081830181018051600e8252928201919093012091525460ff1681565b3480156104bc57600080fd5b506005546104d0906001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b3480156104f457600080fd5b506104d07f000000000000000000000000000000000000000000000000000000000000000081565b34801561052857600080fd5b506104d06105373660046154c5565b610ec4565b34801561054857600080fd5b5061055c61055736600461550a565b610f0b565b005b34801561056a57600080fd5b5061041f61057936600461552c565b610f83565b34801561058a57600080fd5b5061041f610599366004615442565b81516020818401810180516011825292820194820194909420919093529091526000908152604090205481565b3480156105d257600080fd5b5061041f6105e1366004615442565b81516020818401810180516008825292820194820194909420919093529091526000908152604090205481565b34801561061a57600080fd5b5061055c6111a8565b34801561062f57600080fd5b5061055c61063e36600461550a565b6111ba565b34801561064f57600080fd5b5061066361065e366004615490565b611232565b6040805194855260208501939093529183015260608201526080016103de565b34801561068f57600080fd5b5061041f6103b681565b3480156106a557600080fd5b5061055c6106b436600461552c565b6112ef565b3480156106c557600080fd5b5061041f6106d4366004615490565b611383565b3480156106e557600080fd5b506106f96106f4366004615490565b6113ea565b6040516103de9190615589565b34801561071257600080fd5b5060025460ff166103d2565b34801561072a57600080fd5b5061041f610739366004615490565b8051602081830181018051600f8252928201919093012091525481565b34801561076257600080fd5b5061055c61077136600461550a565b6114a3565b34801561078257600080fd5b5061041f61079136600461552c565b61151b565b3480156107a257600080fd5b506108386107b1366004615490565b805180820160209081018051600b825292820191909301209152805460018201546002830154600384015460048501546005860154600687015460078801546008890154600990990154979896979596949593949293919290916001600160a01b0381169060ff600160a01b8204811691600160a81b8104821691600160b01b909104168d565b604080519d8e5260208e019c909c529a8c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e08701526101008601526001600160a01b03166101208501521515610140840152151561016083015215156101808201526101a0016103de565b3480156108b557600080fd5b5061055c6116ba565b3480156108ca57600080fd5b5061055c6108d9366004615490565b6116cc565b3480156108ea57600080fd5b5061055c6108f936600461559c565b611858565b34801561090a57600080fd5b5061055c610919366004615490565b611f06565b34801561092a57600080fd5b506103d2610939366004615490565b805160208183018101805160138252928201919093012091525460ff1681565b34801561096557600080fd5b5061041f610974366004615442565b81516020818401810180516012825292820194820194909420919093529091526000908152604090205481565b3480156109ad57600080fd5b5061055c6109bc366004615490565b61219b565b3480156109cd57600080fd5b5061055c6109dc3660046155f3565b612906565b61055c6109ef366004615490565b612c24565b348015610a0057600080fd5b506003546104d0906001600160a01b031681565b348015610a2057600080fd5b5061055c610a2f36600461550a565b612fa7565b348015610a4057600080fd5b5061055c613027565b348015610a5557600080fd5b5061055c613111565b348015610a6a57600080fd5b506104d073833589fcd6edb6e08f4c7c32d4f71b54bda0291381565b348015610a9257600080fd5b506104d0730b3e328455c4059eeb9e3f84b5543f74e24e7e1b81565b348015610aba57600080fd5b506000546001600160a01b03166104d0565b348015610ad857600080fd5b5061041f6101f481565b348015610aee57600080fd5b5061055c610afd366004615641565b613121565b348015610b0e57600080fd5b50610b22610b1d36600461552c565b61314f565b604080519384526020840192909252908201526060016103de565b348015610b4957600080fd5b5061055c610b58366004615490565b6131b3565b348015610b6957600080fd5b5061041f610b7836600461552c565b613539565b348015610b8957600080fd5b5061041f61271081565b348015610b9f57600080fd5b5061055c610bae366004615442565b613674565b348015610bbf57600080fd5b506104d06006602160991b0181565b348015610bda57600080fd5b5061055c610be9366004615679565b613a9e565b348015610bfa57600080fd5b50610c0e610c09366004615490565b613c96565b604080519a8b5260208b01999099529789019690965260608801949094529115156080870152151560a08601526001600160a01b031660c0850152151560e0840152610100830152610120820152610140016103de565b348015610c7157600080fd5b5061055c610c8036600461552c565b613d94565b348015610c9157600080fd5b5061041f60075481565b348015610ca757600080fd5b5061041f610cb6366004615442565b8151602081840181018051600a825292820194820194909420919093529091526000908152604090205481565b348015610cef57600080fd5b5061041f60065481565b348015610d0557600080fd5b506002546104d09061010090046001600160a01b031681565b348015610d2a57600080fd5b506103d2610d39366004615442565b8151602081840181018051600c825292820194820194909420919093529091526000908152604090205460ff1681565b348015610d7557600080fd5b506104d0734752ba5dbc23f44d87826276bf6fd6b1c372ad2481565b348015610d9d57600080fd5b506104d073cbb7c0000ab88b473b1f5afd9ef808440eed33bf81565b348015610dc557600080fd5b5061055c610dd43660046154c5565b613e01565b348015610de557600080fd5b506004546104d0906001600160a01b031681565b348015610e0557600080fd5b5061055c610e143660046154c5565b6141ad565b348015610e2557600080fd5b5061055c610e3436600461550a565b614541565b6000600e83604051610e4b9190615700565b9081526040519081900360200190205460ff16610e835760405162461bcd60e51b8152600401610e7a9061571c565b60405180910390fd5b600c83604051610e939190615700565b90815260408051602092819003830190206001600160a01b0385166000908152925290205460ff1690505b92915050565b8151602081840181018051600d825292820191850191909120919052805482908110610eef57600080fd5b6000918252602090912001546001600160a01b03169150829050565b610f136145b7565b6001600160a01b038116610f395760405162461bcd60e51b8152600401610e7a9061573f565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fb2c4650837bfec26e0f00b6c44744cc8668ac16a1742b3f1198f5b9a6165176990600090a250565b60408051600480825260a082019092526000918291906020820160808036833701905050905073cbb7c0000ab88b473b1f5afd9ef808440eed33bf81600081518110610fd157610fd1615760565b60200260200101906001600160a01b031690816001600160a01b0316815250506006602160991b018160018151811061100c5761100c615760565b60200260200101906001600160a01b031690816001600160a01b031681525050730b3e328455c4059eeb9e3f84b5543f74e24e7e1b8160028151811061105457611054615760565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816003815181106110a8576110a8615760565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b81526305f5e10090600090734752ba5dbc23f44d87826276bf6fd6b1c372ad249063d06ca61f906111029085908790600401615776565b600060405180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611147919081019061578f565b905060008160038151811061115e5761115e615760565b602002602001015190506000818488611177919061583f565b6111819190615856565b90506000606461119283606961583f565b61119c9190615856565b98975050505050505050565b6111b06145b7565b6111b8614611565b565b6111c26145b7565b6001600160a01b0381166111e85760405162461bcd60e51b8152600401610e7a9061573f565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f9f99ccbf9dfb68ba99dd44d1015d639e6d3fbe55f3faa3fa6f58e3d0bd908bdd90600090a250565b600080600080600e856040516112489190615700565b9081526040519081900360200190205460ff166112775760405162461bcd60e51b8152600401610e7a90615878565b6000600b866040516112899190615700565b90815260405190819003602001902080549550905060006127106112af6101f4826158af565b6112b9908861583f565b6112c39190615856565b90506112ce81613539565b94506112d98161151b565b93506112e481610f83565b925050509193509193565b6004546001600160a01b031633146113195760405162461bcd60e51b8152600401610e7a906158c2565b60008111801561132b57506103e88111155b6113475760405162461bcd60e51b8152600401610e7a9061573f565b60068190556040518181527ffd9be61ada42e82672ba808be89b7d83f320e426a0d908189dde9f86c75b577c906020015b60405180910390a150565b6000600e826040516113959190615700565b9081526040519081900360200190205460ff166113c45760405162461bcd60e51b8152600401610e7a9061571c565b600d826040516113d49190615700565b9081526040519081900360200190205492915050565b6060600e826040516113fc9190615700565b9081526040519081900360200190205460ff1661142b5760405162461bcd60e51b8152600401610e7a9061571c565b600d8260405161143b9190615700565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561149757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611479575b50505050509050919050565b6114ab6145b7565b6001600160a01b0381166114d15760405162461bcd60e51b8152600401610e7a9061573f565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f46e34f52f66f7f7f3eba852f03fb19b384b9330ba5ba72e761dc7898a8415b2890600090a250565b604080516003808252608082019092526000918291906020820160608036833701905050905073833589fcd6edb6e08f4c7c32d4f71b54bda029138160008151811061156957611569615760565b60200260200101906001600160a01b031690816001600160a01b031681525050730b3e328455c4059eeb9e3f84b5543f74e24e7e1b816001815181106115b1576115b1615760565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160028151811061160557611605615760565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152620f424090600090734752ba5dbc23f44d87826276bf6fd6b1c372ad249063d06ca61f9061165e9085908790600401615776565b600060405180830381865afa15801561167b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116a3919081019061578f565b905060008160028151811061115e5761115e615760565b6116c26145b7565b6111b86000614663565b6004546001600160a01b031633146116f65760405162461bcd60e51b8152600401610e7a906158c2565b6116fe6146b3565b600e8160405161170e9190615700565b9081526040519081900360200190205460ff1661173d5760405162461bcd60e51b8152600401610e7a9061571c565b6000600b8260405161174f9190615700565b908152604051908190036020019020600981015490915060ff600160a01b90910416801561178957506009810154600160a81b900460ff16155b6117a55760405162461bcd60e51b8152600401610e7a9061573f565b60098101805460ff60a01b191690556040516001906013906117c8908590615700565b908152604051908190036020018120805492151560ff19909316929092179091556002820154906010906117fd908590615700565b9081526040519081900360200181209190915561181b908390615700565b604051908190038120907f935d3096261985eb92dedfb3007cd531ce90645a224723b463d33b5d1cfde3a290600090a25061185560018055565b50565b6004546001600160a01b031633146118825760405162461bcd60e51b8152600401610e7a906158c2565b61188a6146b3565b600e8360405161189a9190615700565b9081526040519081900360200190205460ff166118c95760405162461bcd60e51b8152600401610e7a9061571c565b6000600b846040516118db9190615700565b908152604051908190036020019020600981015490915060ff600160a01b90910416801561191557506009810154600160a81b900460ff16155b8015611941575060138460405161192c9190615700565b9081526040519081900360200190205460ff16155b801561195857506009810154600160b01b900460ff165b6119745760405162461bcd60e51b8152600401610e7a9061573f565b600c846040516119849190615700565b90815260408051602092819003830190206001600160a01b0386166000908152925290205460ff1680156119ba57506103e88211155b6119f55760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b6044820152606401610e7a565b60098101805461ffff60a01b1916600160a81b17905560078101829055600881015482118015611c3b576009820180546001600160a01b0319166001600160a01b038616179055600754825460009161271091611a52919061583f565b611a5c9190615856565b9050612710611a6d8261232861583f565b611a779190615856565b6004840155612710611a8b826101f461583f565b611a959190615856565b6005840155612710611aa9826101f461583f565b611ab39190615856565b60068401556005548354611af5916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169291169061470c565b6005546004840154611b37916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692911690889061476f565b6005805460025491850154611b82926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693811692610100909204169061476f565b6005546003546006850154611bc9926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116939181169291169061476f565b846001600160a01b031686604051611be19190615700565b60408051918290038220600487015460058801546006890154918552602085015283830152905190917f9615ba1b18e9f02c92f7b275f6e4960f08fcc17722d14c4bf4aa54a41498ed7e919081900360600190a350611e77565b8154600090611c4b90600261583f565b9050612710611c5c826101f461583f565b611c669190615856565b6005840155612710611c7a826101f461583f565b611c849190615856565b60068401556005830154600090611c9d90600290615856565b9050600060028560060154611cb29190615856565b9050600081838760000154611cc791906158f0565b611cd191906158f0565b600254909150611d13906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916101009004168561470c565b600354611d4d906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168461470c565b600554611d87906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168361470c565b600554600254611dcd916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692918116916101009004168661476f565b600554600354611e0e916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169291811691168561476f565b604051600090611e1f908b90615700565b6040805191829003822060058a015460068b015460008552602085019190915283830152905190917f9615ba1b18e9f02c92f7b275f6e4960f08fcc17722d14c4bf4aa54a41498ed7e919081900360600190a3505050505b836001600160a01b031685604051611e8f9190615700565b60405180910390207f126b12a183fddff68c77d52534ecb93a519c675c6a53ad3601d41c2727e7fbe08585600801548586611ecb576000611ed1565b87600401545b604080519485526020850193909352901515838301526060830152519081900360800190a35050611f0160018055565b505050565b611f0e6145b7565b600e81604051611f1e9190615700565b9081526040519081900360200190205460ff16611f4d5760405162461bcd60e51b8152600401610e7a9061571c565b6000600b82604051611f5f9190615700565b908152604051908190036020019020600981015490915060ff600160a81b9091041680611fab5750601382604051611f979190615700565b9081526040519081900360200190205460ff165b611fe65760405162461bcd60e51b815260206004820152600c60248201526b139bdd08199a5b9a5cda195960a21b6044820152606401610e7a565b601382604051611ff69190615700565b9081526040519081900360200190205460ff161561208e5760108260405161201e9190615700565b908152602001604051809103902054600f8360405161203d9190615700565b9081526020016040518091039020541461208e5760405162461bcd60e51b8152602060048201526012602482015271526566756e647320696e636f6d706c65746560701b6044820152606401610e7a565b600b8260405161209e9190615700565b908152604051908190036020018120600080825560018201819055600282018190556003820181905560048201819055600582018190556006820181905560078201819055600882015560090180546001600160b81b0319169055600d90612107908490615700565b90815260200160405180910390206000612121919061533d565b600f826040516121319190615700565b9081526020016040518091039020600090556010826040516121539190615700565b9081526020016040518091039020600090556000600e836040516121779190615700565b908152604051908190036020019020805491151560ff199092169190911790555050565b6121a36146b3565b6121ab6147ad565b600e816040516121bb9190615700565b9081526040519081900360200190205460ff166121ea5760405162461bcd60e51b8152600401610e7a9061571c565b6000600b826040516121fc9190615700565b908152604051908190036020019020600981015490915060ff600160a01b90910416801561223657506009810154600160a81b900460ff16155b8015612262575060138260405161224d9190615700565b9081526040519081900360200190205460ff16155b61227e5760405162461bcd60e51b8152600401610e7a9061573f565b600c8260405161228e9190615700565b9081526040805160209281900383019020336000908152925290205460ff166122e75760405162461bcd60e51b815260206004820152600b60248201526a139bdd08195b9d195c995960aa1b6044820152606401610e7a565b6000600c836040516122f99190615700565b908152604080516020928190038301902033600090815292529020805460ff19169115159190911790556002810154612334906001906158f0565b60028201558054600182015461234a91906158f0565b8160010181905550600060016011846040516123669190615700565b9081526040805160209281900383019020336000908152925290205461238c91906158f0565b90506000600d846040516123a09190615700565b908152602001604051809103902090506000600182805490506123c391906158f0565b905080831461249a578181815481106123de576123de615760565b9060005260206000200160009054906101000a90046001600160a01b031682848154811061240e5761240e615760565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556124428360016158af565b6011866040516124529190615700565b9081526020016040518091039020600084868154811061247457612474615760565b60009182526020808320909101546001600160a01b031683528201929092526040019020555b818054806124aa576124aa615903565b600082815260209020810160001990810180546001600160a01b03191690550190556040516011906124dd908790615700565b9081526040805160209281900383018120336000908152935290822082905560089061250a908890615700565b90815260408051602092819003830181203360009081529352908220549250600990612537908990615700565b90815260408051602092819003830181203360009081529352908220549250600a90612564908a90615700565b90815260408051602092819003830190203360009081529252902054905082156126e2576008886040516125989190615700565b90815260408051602092819003830190203360009081529252812081905560646125c385605f61583f565b6125cd9190615856565b604051909150600090339083908381818185875af1925050503d8060008114612612576040519150601f19603f3d011682016040523d82523d6000602084013e612617565b606091505b505090508061265c5760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b6044820152606401610e7a565b60405182815233907fb593fb7f0ed454d644104a0e41134bbe1f73b78eb6c1c6dc7f82a46ef25ea7859060200160405180910390a260405133906126a1908c90615700565b604051908190038120848252907f14322c7dc39e69d5ce1b40050ee228f8a3f34b23983b460c593fdfeada4d7fe69060200160405180910390a350506128f6565b81156127d4576009886040516126f89190615700565b908152604080516020928190038301902033600090815292528120819055606461272384605f61583f565b61272d9190615856565b905061274e73833589fcd6edb6e08f4c7c32d4f71b54bda02913338361470c565b60405181815233907f369030aea947e62482bf29fc9b011510d94103c55ce08c386bcc9bac2ad67658906020015b60405180910390a26040513390612794908b90615700565b604051908190038120838252907f14322c7dc39e69d5ce1b40050ee228f8a3f34b23983b460c593fdfeada4d7fe69060200160405180910390a3506128f6565b801561287257600a886040516127ea9190615700565b908152604080516020928190038301902033600090815292528120819055606461281583605f61583f565b61281f9190615856565b905061284073cbb7c0000ab88b473b1f5afd9ef808440eed33bf338361470c565b60405181815233907fc3a7467fb849f1d1804025dd0afb9f8232546786633840566000d38582db809b9060200161277c565b86546128aa906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690339061470c565b60405133906128ba908a90615700565b60405190819003812089548252907f14322c7dc39e69d5ce1b40050ee228f8a3f34b23983b460c593fdfeada4d7fe69060200160405180910390a35b5050505050505061185560018055565b6004546001600160a01b031633146129305760405162461bcd60e51b8152600401610e7a906158c2565b6129386146b3565b600e836040516129489190615700565b9081526040519081900360200190205460ff166129775760405162461bcd60e51b8152600401610e7a9061571c565b6013836040516129879190615700565b9081526040519081900360200190205460ff166129d65760405162461bcd60e51b815260206004820152600d60248201526c139bdd0818d85b98d95b1b1959609a1b6044820152606401610e7a565b6000600b846040516129e89190615700565b908152602001604051809103902090506000600d85604051612a0a9190615700565b9081526040805191829003602090810183208054808302850183019093528284529190830182828015612a6657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612a48575b5050505050905060008385612a7b91906158af565b90508151811115612a8a575080515b8254600090865b83811015612b7d576000858281518110612aad57612aad615760565b6020026020010151905060128a604051612ac79190615700565b90815260408051602092819003830190206001600160a01b038416600090815292528120549003612b6a57612b266001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016828561470c565b8260128b604051612b379190615700565b90815260408051602092819003830190206001600160a01b0385166000908152925290205583612b6681615919565b9450505b5080612b7581615919565b915050612a91565b5081600f89604051612b8f9190615700565b908152602001604051809103902054612ba891906158af565b600f89604051612bb89190615700565b90815260405190819003602001812091909155612bd6908990615700565b6040805191829003822089835260208301869052917faa96ad77373a5abf903285d8582fbc8c0a0bd9c687fdd0165a0b9b08238472ed910160405180910390a25050505050611f0160018055565b612c2c6146b3565b612c346147ad565b600e81604051612c449190615700565b9081526040519081900360200190205460ff16612c735760405162461bcd60e51b8152600401610e7a90615878565b6000600b82604051612c859190615700565b908152604051908190036020019020600981015490915060ff600160a01b909104168015612cbf57506009810154600160a81b900460ff16155b8015612ceb5750601382604051612cd69190615700565b9081526040519081900360200190205460ff16155b612d075760405162461bcd60e51b8152600401610e7a90615932565b600c82604051612d179190615700565b9081526040805160209281900383019020336000908152925290205460ff1615612d535760405162461bcd60e51b8152600401610e7a90615969565b8060030154816002015410612d7a5760405162461bcd60e51b8152600401610e7a90615992565b8054612d985760405162461bcd60e51b8152600401610e7a906159bb565b6000612710612da96101f4826158af565b8354612db5919061583f565b612dbf9190615856565b90506000612dcc82613539565b905080341015612e165760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b6044820152606401610e7a565b34600885604051612e279190615700565b908152604080516020928190038301902033600090815292528120919091558354612e539034906147f3565b8454909150811015612e775760405162461bcd60e51b8152600401610e7a906159e4565b612e828533866149bf565b8354811115612f4a578354600090612e9a90836158f0565b90506000612710612ead6101f48461583f565b612eb79190615856565b90506000612ec582846158f0565b90508115612f0c57600254612f0c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916101009004168461470c565b8015612f4657612f466001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361470c565b5050505b6040513390612f5a908790615700565b6040805191829003822034835260208301859052917f26c294fbdb8095cf26311b90c0c6cae8640c97d4eafe95b3cc79c82d722342b2910160405180910390a35050505061185560018055565b612faf6145b7565b6001600160a01b038116612fd55760405162461bcd60e51b8152600401610e7a9061573f565b60028054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517fb6a5e89655cf506139085f051af608195ed056f8dc550b180a1c38d401e2b6c490600090a250565b61302f6145b7565b47806130725760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b6044820152606401610e7a565b600080546040516001600160a01b039091169083908381818185875af1925050503d80600081146130bf576040519150601f19603f3d011682016040523d82523d6000602084013e6130c4565b606091505b505090508061310d5760405162461bcd60e51b8152602060048201526015602482015274115512081dda5d1a191c985dd85b0819985a5b1959605a1b6044820152606401610e7a565b5050565b6131196145b7565b6111b8614b25565b6131296145b7565b61310d61313e6000546001600160a01b031690565b6001600160a01b038416908361470c565b60008060006002841161316d575061232891506101f49050806131ac565b600a84116131865750611f4091506103e89050806131ac565b6019841161319f5750611b5891506105dc9050806131ac565b5061138891506109c49050805b9193909250565b6131bb6146b3565b6131c36147ad565b600e816040516131d39190615700565b9081526040519081900360200190205460ff166132025760405162461bcd60e51b8152600401610e7a9061571c565b6000600b826040516132149190615700565b908152604051908190036020019020600981015490915060ff600160a01b9091041661326f5760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b6044820152606401610e7a565b6009810154600160a81b900460ff16156132b75760405162461bcd60e51b815260206004820152600960248201526810dbdb5c1b195d195960ba1b6044820152606401610e7a565b6013826040516132c79190615700565b9081526040519081900360200190205460ff16156133135760405162461bcd60e51b815260206004820152600960248201526810d85b98d95b1b195960ba1b6044820152606401610e7a565b600c826040516133239190615700565b9081526040805160209281900383019020336000908152925290205460ff16156133795760405162461bcd60e51b8152602060048201526007602482015266115b9d195c995960ca1b6044820152606401610e7a565b80600301548160020154106133b95760405162461bcd60e51b8152600401610e7a90602080825260049082015263119d5b1b60e21b604082015260600190565b80546133f3906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016903390309061476f565b6001600c836040516134059190615700565b908152604080516020928190038301812033600090815293529120805460ff191692151592909217909155600d9061343e908490615700565b9081526040519081900360209081018220805460018101825560009182529190200180546001600160a01b03191633179055600d9061347e908490615700565b908152604051908190036020018120549060119061349d908590615700565b9081526040805160209281900383019020336000908152925290205560028101546134c99060016158af565b6002820155805460018201546134df91906158af565b600182015560405133906134f4908490615700565b60405190819003812083548252907f3e1dae124874d6922b51f6aaf8b153a2ec9c841a8af5c725015558d54c8974869060200160405180910390a35061185560018055565b60408051600380825260808201909252600091829190602082016060803683370190505090506006602160991b018160008151811061357a5761357a615760565b60200260200101906001600160a01b031690816001600160a01b031681525050730b3e328455c4059eeb9e3f84b5543f74e24e7e1b816001815181106135c2576135c2615760565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160028151811061361657613616615760565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152670de0b6b3a764000090600090734752ba5dbc23f44d87826276bf6fd6b1c372ad249063d06ca61f9061165e9085908790600401615776565b6004546001600160a01b0316331461369e5760405162461bcd60e51b8152600401610e7a906158c2565b6136a66146b3565b600e826040516136b69190615700565b9081526040519081900360200190205460ff166136e55760405162461bcd60e51b8152600401610e7a9061571c565b6000600b836040516136f79190615700565b908152604051908190036020019020600981015490915060ff600160a01b90910416801561373157506009810154600160a81b900460ff16155b801561375d57506013836040516137489190615700565b9081526040519081900360200190205460ff16155b801561377557506009810154600160b01b900460ff16155b6137915760405162461bcd60e51b8152600401610e7a9061573f565b600c836040516137a19190615700565b90815260408051602092819003830190206001600160a01b0385166000908152925290205460ff1680156137d9575060008160020154115b6138165760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103bb4b73732b960911b6044820152606401610e7a565b6009810180546001600160a01b0384166001600160b01b031990911617600160a81b179055600181015460028083015490600090819081908411613865575061232891506101f49050806138a4565b600a841161387e5750611f4091506103e89050806138a4565b601984116138975750611b5891506105dc9050806138a4565b5061138891506109c49050805b6127106138b1848761583f565b6138bb9190615856565b60048701556127106138cd838761583f565b6138d79190615856565b60068701556127106138e9828761583f565b6138f39190615856565b600587018190556006870154600488015460009291613911916158af565b61391b91906158af565b9050858110156139445761392f81876158f0565b876004015461393e91906158af565b60048801555b600487015415613989576004870154613989906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908a9061470c565b6005870154156139d85760025460058801546139d8916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692610100909204169061470c565b600687015415613a22576003546006880154613a22916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169291169061470c565b876001600160a01b031689604051613a3a9190615700565b6040805191829003822060048b015460058c015460068d0154918552602085015283830152905190917f9615ba1b18e9f02c92f7b275f6e4960f08fcc17722d14c4bf4aa54a41498ed7e919081900360600190a35050505050505061310d60018055565b6004546001600160a01b03163314613ac85760405162461bcd60e51b8152600401610e7a906158c2565b613ad06147ad565b6000845111613b0c5760405162461bcd60e51b8152602060048201526008602482015267115b5c1d1e48125160c21b6044820152606401610e7a565b60008311613b4a5760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b6044820152606401610e7a565b600e84604051613b5a9190615700565b9081526040519081900360200190205460ff1615613ba35760405162461bcd60e51b815260206004820152600660248201526545786973747360d01b6044820152606401610e7a565b6000600b85604051613bb59190615700565b908152604051908190036020019020848155905081613bd45782613bd7565b60015b600382015560098101805483158015600160b01b0262ff00ff60a01b1990921691909117600160a01b17909155613c115760065460088201555b6001600e86604051613c239190615700565b908152604051908190036020018120805492151560ff1990931692909217909155613c4f908690615700565b6040805191829003822086835260208301869052917fbefb3a7d9beef6946aedb65d17d2eb59fbef1689cfb32d0906f7678b06449807910160405180910390a25050505050565b600080600080600080600080600080600e8b604051613cb59190615700565b9081526040519081900360200190205460ff16613ce45760405162461bcd60e51b8152600401610e7a9061571c565b6000600b8c604051613cf69190615700565b9081526020016040518091039020905080600001548160010154826002015483600301548460090160149054906101000a900460ff168560090160159054906101000a900460ff168660090160009054906101000a90046001600160a01b03168760090160169054906101000a900460ff16886007015489600801549a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b613d9c6145b7565b6127108110158015613db057506175308111155b613dcc5760405162461bcd60e51b8152600401610e7a9061573f565b60078190556040518181527f89c2b9f2cdeb09561dd88f3e6c40532234fb1276732f56b157ae95cb1d63b7fe90602001611378565b613e096146b3565b613e116147ad565b600e82604051613e219190615700565b9081526040519081900360200190205460ff16613e505760405162461bcd60e51b8152600401610e7a90615878565b6000600b83604051613e629190615700565b908152604051908190036020019020600981015490915060ff600160a01b909104168015613e9c57506009810154600160a81b900460ff16155b8015613ec85750601383604051613eb39190615700565b9081526040519081900360200190205460ff16155b613ee45760405162461bcd60e51b8152600401610e7a90615932565b600c83604051613ef49190615700565b9081526040805160209281900383019020336000908152925290205460ff1615613f305760405162461bcd60e51b8152600401610e7a90615969565b8060030154816002015410613f575760405162461bcd60e51b8152600401610e7a90615992565b8054613f755760405162461bcd60e51b8152600401610e7a906159bb565b6000612710613f866101f4826158af565b8354613f92919061583f565b613f9c9190615856565b90506000613fa982610f83565b905080841015613ffb5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742063624254432073656e740000000000000000006044820152606401610e7a565b61401b73cbb7c0000ab88b473b1f5afd9ef808440eed33bf33308761476f565b83600a8660405161402c9190615700565b908152604080516020928190038301902033600090815292528120919091558354614058908690614b62565b845490915081101561407c5760405162461bcd60e51b8152600401610e7a906159e4565b6140878633866149bf565b835481111561414f57835460009061409f90836158f0565b905060006127106140b26101f48461583f565b6140bc9190615856565b905060006140ca82846158f0565b9050811561411157600254614111906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916101009004168461470c565b801561414b5761414b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361470c565b5050505b604051339061415f908890615700565b6040805191829003822088835260208301859052917f618e5b4fe307fd95c2f18e668ec24474a8a802c423101d2231a24ff85893d53291015b60405180910390a35050505061310d60018055565b6141b56146b3565b6141bd6147ad565b600e826040516141cd9190615700565b9081526040519081900360200190205460ff166141fc5760405162461bcd60e51b8152600401610e7a90615878565b6000600b8360405161420e9190615700565b908152604051908190036020019020600981015490915060ff600160a01b90910416801561424857506009810154600160a81b900460ff16155b8015614274575060138360405161425f9190615700565b9081526040519081900360200190205460ff16155b6142905760405162461bcd60e51b8152600401610e7a90615932565b600c836040516142a09190615700565b9081526040805160209281900383019020336000908152925290205460ff16156142dc5760405162461bcd60e51b8152600401610e7a90615969565b80600301548160020154106143035760405162461bcd60e51b8152600401610e7a90615992565b80546143215760405162461bcd60e51b8152600401610e7a906159bb565b60006127106143326101f4826158af565b835461433e919061583f565b6143489190615856565b905060006143558261151b565b9050808410156143a05760405162461bcd60e51b8152602060048201526016602482015275125b9cdd59999a58da595b9d081554d110c81cd95b9d60521b6044820152606401610e7a565b6143c073833589fcd6edb6e08f4c7c32d4f71b54bda0291333308761476f565b836009866040516143d19190615700565b9081526040805160209281900383019020336000908152925281209190915583546143fd908690614d96565b84549091508110156144215760405162461bcd60e51b8152600401610e7a906159e4565b61442c8633866149bf565b83548111156144f457835460009061444490836158f0565b905060006127106144576101f48461583f565b6144619190615856565b9050600061446f82846158f0565b905081156144b6576002546144b6906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916101009004168461470c565b80156144f0576144f06001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361470c565b5050505b6040513390614504908890615700565b6040805191829003822088835260208301859052917fe20feabdb6cadc1efd52f35d8e8dc6a41861929d0091cd7967c9957f0ec9826c9101614198565b6145496145b7565b6001600160a01b0381166145ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e7a565b61185581614663565b6000546001600160a01b031633146111b85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e7a565b614619614f7a565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036147055760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e7a565b6002600155565b6040516001600160a01b038316602482015260448101829052611f0190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614fc3565b6040516001600160a01b03808516602483015283166044820152606481018290526147a79085906323b872dd60e01b90608401614738565b50505050565b60025460ff16156111b85760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610e7a565b60408051600380825260808201909252600091829190602082016060803683370190505090506006602160991b018160008151811061483457614834615760565b60200260200101906001600160a01b031690816001600160a01b031681525050730b3e328455c4059eeb9e3f84b5543f74e24e7e1b8160018151811061487c5761487c615760565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106148d0576148d0615760565b6001600160a01b039092166020928302919091019091015260006127106148f96103b68661583f565b6149039190615856565b90506000734752ba5dbc23f44d87826276bf6fd6b1c372ad24637ff36ab5878486306149314261012c6158af565b6040518663ffffffff1660e01b81526004016149509493929190615a29565b60006040518083038185885af115801561496e573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052614997919081019061578f565b9050806002815181106149ac576149ac615760565b6020026020010151935050505092915050565b6001600c846040516149d19190615700565b90815260408051602092819003830181206001600160a01b038716600090815293529120805460ff191692151592909217909155600d90614a13908590615700565b908152604051602091819003820181208054600181018255600091825292902090910180546001600160a01b0319166001600160a01b038516179055600d90614a5d908590615700565b9081526040519081900360200181205490601190614a7c908690615700565b90815260408051602092819003830190206001600160a01b038616600090815292529020556002810154614ab19060016158af565b600282015580546001820154614ac791906158af565b60018201556040516001600160a01b03831690614ae5908590615700565b60405190819003812083548252907f3e1dae124874d6922b51f6aaf8b153a2ec9c841a8af5c725015558d54c8974869060200160405180910390a3505050565b614b2d6147ad565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146463390565b6000614b9773cbb7c0000ab88b473b1f5afd9ef808440eed33bf734752ba5dbc23f44d87826276bf6fd6b1c372ad2485615098565b60408051600480825260a082019092526000916020820160808036833701905050905073cbb7c0000ab88b473b1f5afd9ef808440eed33bf81600081518110614be257614be2615760565b60200260200101906001600160a01b031690816001600160a01b0316815250506006602160991b0181600181518110614c1d57614c1d615760565b60200260200101906001600160a01b031690816001600160a01b031681525050730b3e328455c4059eeb9e3f84b5543f74e24e7e1b81600281518110614c6557614c65615760565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600381518110614cb957614cb9615760565b6001600160a01b03909216602092830291909101909101526000612710614ce26103b68661583f565b614cec9190615856565b90506000734752ba5dbc23f44d87826276bf6fd6b1c372ad246338ed173987848630614d1a4261012c6158af565b6040518663ffffffff1660e01b8152600401614d3a959493929190615a5e565b6000604051808303816000875af1158015614d59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d81919081019061578f565b9050806003815181106149ac576149ac615760565b6000614dcb73833589fcd6edb6e08f4c7c32d4f71b54bda02913734752ba5dbc23f44d87826276bf6fd6b1c372ad2485615098565b604080516003808252608082019092526000916020820160608036833701905050905073833589fcd6edb6e08f4c7c32d4f71b54bda0291381600081518110614e1657614e16615760565b60200260200101906001600160a01b031690816001600160a01b031681525050730b3e328455c4059eeb9e3f84b5543f74e24e7e1b81600181518110614e5e57614e5e615760565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600281518110614eb257614eb2615760565b6001600160a01b03909216602092830291909101909101526000612710614edb6103b68661583f565b614ee59190615856565b90506000734752ba5dbc23f44d87826276bf6fd6b1c372ad246338ed173987848630614f134261012c6158af565b6040518663ffffffff1660e01b8152600401614f33959493929190615a5e565b6000604051808303816000875af1158015614f52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614997919081019061578f565b60025460ff166111b85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610e7a565b6000615018826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166151ad9092919063ffffffff16565b90508051600014806150395750808060200190518101906150399190615a9a565b611f015760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e7a565b8015806151125750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156150ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151109190615ab7565b155b61517d5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610e7a565b6040516001600160a01b038316602482015260448101829052611f0190849063095ea7b360e01b90606401614738565b60606151bc84846000856151c4565b949350505050565b6060824710156152255760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e7a565b600080866001600160a01b031685876040516152419190615700565b60006040518083038185875af1925050503d806000811461527e576040519150601f19603f3d011682016040523d82523d6000602084013e615283565b606091505b50915091506152948783838761529f565b979650505050505050565b6060831561530e578251600003615307576001600160a01b0385163b6153075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e7a565b50816151bc565b6151bc83838151156153235781518083602001fd5b8060405162461bcd60e51b8152600401610e7a9190615ad0565b508054600082559060005260206000209081019061185591905b8082111561536b5760008155600101615357565b5090565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156153ae576153ae61536f565b604052919050565b600082601f8301126153c757600080fd5b813567ffffffffffffffff8111156153e1576153e161536f565b6153f4601f8201601f1916602001615385565b81815284602083860101111561540957600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b038116811461543d57600080fd5b919050565b6000806040838503121561545557600080fd5b823567ffffffffffffffff81111561546c57600080fd5b615478858286016153b6565b92505061548760208401615426565b90509250929050565b6000602082840312156154a257600080fd5b813567ffffffffffffffff8111156154b957600080fd5b6151bc848285016153b6565b600080604083850312156154d857600080fd5b823567ffffffffffffffff8111156154ef57600080fd5b6154fb858286016153b6565b95602094909401359450505050565b60006020828403121561551c57600080fd5b61552582615426565b9392505050565b60006020828403121561553e57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561557e5781516001600160a01b031687529582019590820190600101615559565b509495945050505050565b6020815260006155256020830184615545565b6000806000606084860312156155b157600080fd5b833567ffffffffffffffff8111156155c857600080fd5b6155d4868287016153b6565b9350506155e360208501615426565b9150604084013590509250925092565b60008060006060848603121561560857600080fd5b833567ffffffffffffffff81111561561f57600080fd5b61562b868287016153b6565b9660208601359650604090950135949350505050565b6000806040838503121561565457600080fd5b61565d83615426565b946020939093013593505050565b801515811461185557600080fd5b6000806000806080858703121561568f57600080fd5b843567ffffffffffffffff8111156156a657600080fd5b6156b2878288016153b6565b945050602085013592506040850135915060608501356156d18161566b565b939692955090935050565b60005b838110156156f75781810151838201526020016156df565b50506000910152565b600082516157128184602087016156dc565b9190910192915050565b602080825260099082015268139bdd08195e1a5cdd60ba1b604082015260600190565b602080825260079082015266125b9d985b1a5960ca1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006151bc6040830184615545565b600060208083850312156157a257600080fd5b825167ffffffffffffffff808211156157ba57600080fd5b818501915085601f8301126157ce57600080fd5b8151818111156157e0576157e061536f565b8060051b91506157f1848301615385565b818152918301840191848101908884111561580b57600080fd5b938501935b8385101561119c57845182529385019390850190615810565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ebe57610ebe615829565b60008261587357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526019908201527f546f75726e616d656e7420646f6573206e6f7420657869737400000000000000604082015260600190565b80820180821115610ebe57610ebe615829565b6020808252601490820152734f6e6c79206261636b656e64207365727669636560601b604082015260600190565b81810381811115610ebe57610ebe615829565b634e487b7160e01b600052603160045260246000fd5b60006001820161592b5761592b615829565b5060010190565b60208082526018908201527f496e76616c696420746f75726e616d656e742073746174650000000000000000604082015260600190565b6020808252600f908201526e105b1c9958591e48195b9d195c9959608a1b604082015260600190565b6020808252600f908201526e151bdd5c9b985b595b9d08199d5b1b608a1b604082015260600190565b6020808252600f908201526e119c9959481d1bdd5c9b985b595b9d608a1b604082015260600190565b60208082526025908201527f496e73756666696369656e742054524956492072656365697665642066726f6d604082015264020737761760dc1b606082015260800190565b848152608060208201526000615a426080830186615545565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201526000615a7d60a0830186615545565b6001600160a01b0394909416606083015250608001529392505050565b600060208284031215615aac57600080fd5b81516155258161566b565b600060208284031215615ac957600080fd5b5051919050565b6020815260008251806020840152615aef8160408501602087016156dc565b601f01601f1916919091016040019291505056fea2646970667358221220f18b19484b7668b8e358b29a6cb9315e2aeb6b279dffd969204c67d715115bec64736f6c634300081300330000000000000000000000000e6214f42992683a9177ce65d022f163d7bbd1d2000000000000000000000000ee0b91a41eb1faef101cc4ce3722499a7276f6bd000000000000000000000000a96efd6149346a25415a591545183358160d08e500000000000000000000000078e1f895d3bb63f497526cb0e769f0a12c400bba000000000000000000000000b38334360c7596b838fbd79d7caf3f0a645517f1