1.1k txs
1.1k calls
constructor
constructor((uint256 fundraisingGoal, string name, string symbol, uint256 fundraisingDeadline, uint256 fundExpiry, address kosherManager, uint256 maxWhitelistAmount, address protocolAdmin, uint256 maxPublicContributionAmount, bool isCbBTCFund, uint256 stakeRequiredPerContribution) params)
functions
CBBTC
viewfunction CBBTC() view returns (address)
contributions
viewfunction contributions(address) view returns (uint256)
contributionToken
viewfunction contributionToken() view returns (address)
contributors
viewfunction contributors(uint256) view returns (address)
FUND_TOKEN_MIN_STAKE
viewfunction FUND_TOKEN_MIN_STAKE() view returns (uint256)
FUND_TOKEN_UNBONDING_TIME
viewfunction FUND_TOKEN_UNBONDING_TIME() view returns (uint256)
fundExpiry
viewfunction fundExpiry() view returns (uint256)
fundraisingDeadline
viewfunction fundraisingDeadline() view returns (uint256)
fundraisingFinalized
viewfunction fundraisingFinalized() view returns (bool)
fundraisingGoal
viewfunction fundraisingGoal() view returns (uint256)
fundTokenStakingContract
viewfunction fundTokenStakingContract() view returns (address)
getContributionBalance
viewfunction getContributionBalance(address contributor) view returns (uint256)
getDistributionProgress
viewfunction getDistributionProgress() view returns (uint256 distributed, uint256 total)
getUserContributionLimit
viewfunction getUserContributionLimit(address user) view returns (uint256)
getWhitelistLength
viewfunction getWhitelistLength() view returns (uint256)
goalReached
viewfunction goalReached() view returns (bool)
hasDistributed
viewfunction hasDistributed(address) view returns (bool)
isCbBTCFund
viewfunction isCbBTCFund() view returns (bool)
kosherToken
viewfunction kosherToken() view returns (address)
liquidityLocker
viewfunction liquidityLocker() view returns (address)
liquidityLockerFactory
viewfunction liquidityLockerFactory() view returns (address)
lpFeesCut
viewfunction lpFeesCut() view returns (uint8)
MAX_ADDRESSES_PER_TX
viewfunction MAX_ADDRESSES_PER_TX() view returns (uint256)
maxPublicContributionAmount
viewfunction maxPublicContributionAmount() view returns (uint256)
maxWhitelistAmount
viewfunction maxWhitelistAmount() view returns (uint256)
name
viewfunction name() view returns (string)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
owner
viewfunction owner() view returns (address)
POSITION_MANAGER
viewfunction POSITION_MANAGER() view returns (address)
protocolAdmin
viewfunction protocolAdmin() view returns (address)
SHEKEL
viewfunction SHEKEL() view returns (address)
shekelStakingContract
viewfunction shekelStakingContract() view returns (address)
stakeRequiredPerContribution
viewfunction stakeRequiredPerContribution() view returns (uint256)
SUPPLY_TO_FUNDRAISERS
viewfunction SUPPLY_TO_FUNDRAISERS() view returns (uint256)
SUPPLY_TO_LP
viewfunction SUPPLY_TO_LP() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
tokensPerContributionUnit
viewfunction tokensPerContributionUnit() view returns (uint256)
totalRaised
viewfunction totalRaised() view returns (uint256)
UNI_V3_FEE
viewfunction UNI_V3_FEE() view returns (uint24)
UNISWAP_V3_FACTORY
viewfunction UNISWAP_V3_FACTORY() view returns (address)
whitelist
viewfunction whitelist(address) view returns (bool)
whitelistArray
viewfunction whitelistArray(uint256) view returns (address)
addToWhitelist
nonpayablefunction addToWhitelist(address[] addresses)
contribute
payablefunction contribute(uint256 amount) payable
distributeTokens
nonpayablefunction distributeTokens(uint256 startIndex, uint256 endIndex)
emergencyEscape
nonpayablefunction emergencyEscape()
execute
nonpayablefunction execute(address[] contracts, bytes[] data, uint256[] msgValues)
extendFundExpiry
nonpayablefunction extendFundExpiry(uint256 newFundExpiry)
extendFundraisingDeadline
nonpayablefunction extendFundraisingDeadline(uint256 newFundraisingDeadline)
finalizeFundraising
nonpayablefunction finalizeFundraising(int24 initialTick, int24 upperTick, bytes32 salt)
refund
nonpayablefunction refund()
removeFromWhitelist
nonpayablefunction removeFromWhitelist(address removedAddress)
renounceOwnership
nonpayablefunction renounceOwnership()
setFundraisingGoal
nonpayablefunction setFundraisingGoal(uint256 newGoal)
setMaxPublicContributionAmount
nonpayablefunction setMaxPublicContributionAmount(uint256 _maxPublicContributionAmount)
setMaxWhitelistAmount
nonpayablefunction setMaxWhitelistAmount(uint256 _maxWhitelistAmount)
setStakeRequiredPerContribution
nonpayablefunction setStakeRequiredPerContribution(uint256 newValue)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AddWhitelist
event AddWhitelist(address)
Contribution
event Contribution(address indexed contributor, uint256 amount)
FundExpiryExtended
event FundExpiryExtended(uint256 oldExpiry, uint256 newExpiry)
FundraisingDeadlineExtended
event FundraisingDeadlineExtended(uint256 oldDeadline, uint256 newDeadline)
FundraisingFinalized
event FundraisingFinalized(bool success)
FundraisingGoalUpdated
event FundraisingGoalUpdated(uint256 oldGoal, uint256 newGoal)
FundTokenStakingDeployed
event FundTokenStakingDeployed(address stakingContract)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Refund
event Refund(address indexed contributor, uint256 amount)
RemoveWhitelist
event RemoveWhitelist(address)
StakeRequiredPerContributionUpdated
event StakeRequiredPerContributionUpdated(uint256 oldValue, uint256 newValue)
errors
AlreadyFinalized
error AlreadyFinalized()
CBBTCAmountRequired
error CBBTCAmountRequired()
DistributionRatioNotSet
error DistributionRatioNotSet()
ETHNotAccepted
error ETHNotAccepted()
ExceedsPublicLimit
error ExceedsPublicLimit()
ExceedsStakedBasedLimit
error ExceedsStakedBasedLimit()
ExceedsWhitelistLimit
error ExceedsWhitelistLimit()
ExecutionFailed
error ExecutionFailed()
FailedCall
error FailedCall()
FundraisingAlreadyFinalized
error FundraisingAlreadyFinalized()
FundraisingDeadlinePassed
error FundraisingDeadlinePassed()
FundraisingGoalReached
error FundraisingGoalReached()
FundraisingNotFinalized
error FundraisingNotFinalized()
GoalNotReached
error GoalNotReached()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidAddress
error InvalidAddress()
InvalidContribution
error InvalidContribution()
InvalidDeadline
error InvalidDeadline()
InvalidExecuteParams
error InvalidExecuteParams()
InvalidFundExpiry
error InvalidFundExpiry()
InvalidFundExpiryTime
error InvalidFundExpiryTime()
InvalidFundraisingDeadline
error InvalidFundraisingDeadline()
InvalidFundraisingGoal
error InvalidFundraisingGoal()
InvalidIndexRange
error InvalidIndexRange()
InvalidStakeRequirement
error InvalidStakeRequirement()
InvalidStartIndex
error InvalidStartIndex()
InvalidTokenDeployment
error InvalidTokenDeployment()
NewGoalBelowRaised
error NewGoalBelowRaised()
NoContributionsToRefund
error NoContributionsToRefund()
NotAuthorized
error NotAuthorized()
NotWhitelisted
error NotWhitelisted()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RefundNotAvailable
error RefundNotAvailable()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StakingDeploymentFailed
error StakingDeploymentFailed()
T
error T()
WhitelistBatchSizeExceeded
error WhitelistBatchSizeExceeded(uint256 providedSize, uint256 maxSize)
creation bytecode
0x6101406040527333128a8fc17869897dce68ed026d694621f6fdfd6080527303a520b32c04bf3beef7beb72e919cf822ed34f160a052735f6a682a58854c7fbe228712aeeffccde0008ac060c05273cbb7c0000ab88b473b1f5afd9ef808440eed33bf60e05273ad5b6c09a4edabb2c1be1ff4ab98ea59c4071fff6101005273255fb6c2854a48f6ddedf508d57450b143e2c601610120526007805460ff1916604b1790553480156100b057600080fd5b506040516162243803806162248339810160408190526100cf916103e1565b60a08101516001600160a01b03811661010257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61010b81610271565b5060018055805160000361013257604051632d47cb8f60e11b815260040160405180910390fd5b4281606001511161015657604051631da7447960e21b815260040160405180910390fd5b806060015181608001511161017e576040516302a0464f60e51b815260040160405180910390fd5b8061014001516000036101a45760405163c195a09760e01b815260040160405180910390fd5b60208101516008906101b6908261057a565b5060408101516009906101c9908261057a565b5080516003556060810151600555608081015160065560c0810151600b5560e081015160078054610100600160a81b0319166101006001600160a01b039093168302179055810151600c55610120810151600e805460ff60a01b1916600160a01b92151583021790819055610140830151600d5560ff919004161561026b5760e051600f80546001600160a01b0319166001600160a01b039092169190911790555b50610638565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156102fa576102fa6102c1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610328576103286102c1565b604052919050565b600082601f83011261034157600080fd5b81516001600160401b0381111561035a5761035a6102c1565b61036d601f8201601f1916602001610300565b81815284602083860101111561038257600080fd5b60005b828110156103a157602081860181015183830182015201610385565b506000918101602001919091529392505050565b80516001600160a01b03811681146103cc57600080fd5b919050565b805180151581146103cc57600080fd5b6000602082840312156103f357600080fd5b81516001600160401b0381111561040957600080fd5b8201610160818503121561041c57600080fd5b6104246102d7565b8151815260208201516001600160401b0381111561044157600080fd5b61044d86828501610330565b60208301525060408201516001600160401b0381111561046c57600080fd5b61047886828501610330565b604083015250606082810151908201526080808301519082015261049e60a083016103b5565b60a082015260c082810151908201526104b960e083016103b5565b60e082015261010082810151908201526104d661012083016103d1565b61012082015261014091820151918101919091529392505050565b600181811c9082168061050557607f821691505b60208210810361052557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561057557806000526020600020601f840160051c810160208510156105525750805b601f840160051c820191505b81811015610572576000815560010161055e565b50505b505050565b81516001600160401b03811115610593576105936102c1565b6105a7816105a184546104f1565b8461052b565b6020601f8211600181146105db57600083156105c35750848201515b600019600385901b1c1916600184901b178455610572565b600084815260208120601f198516915b8281101561060b57878501518255602094850194600190920191016105eb565b50848210156106295786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60805160a05160c05160e0516101005161012051615b506106d46000396000818161076f0152612b940152600081816109b901526112f0015260008181610a9401526123e90152600081816107d80152818161222c0152818161253b01526126560152600081816104c6015281816126da0152818161277601528181612bc30152612cc0015260008181610b7b01526125710152615b506000f3fe6080604052600436106103855760003560e01c80637d3d6522116101d1578063a843f52011610102578063d99a3291116100a0578063e8c5e8e21161006f578063e8c5e8e214610af9578063e96a6bda14610b19578063f2fde38b14610b49578063f73e5aab14610b6957600080fd5b8063d99a329114610a82578063e2d9682714610ab6578063e3d9aedb14610acc578063e8251f7714610ae357600080fd5b8063c5c4744c116100dc578063c5c4744c14610a0b578063c6e5546c14610a21578063d251fefc14610a41578063d7f74bbb14610a6157600080fd5b8063a843f520146109a7578063b5c6b521146109db578063c1cbbca7146109f857600080fd5b8063947fe8121161016f5780639b19251a116101495780639b19251a146109225780639e7b08d514610952578063a13202e914610968578063a49ab8c71461097d57600080fd5b8063947fe812146108cd57806395d89b41146108ed5780639759164a1461090257600080fd5b806384d4875e116101ab57806384d4875e146108595780638ab1d681146108795780638da5cb5b146108995780638f8c6451146108b757600080fd5b80637d3d6522146107fa5780637f649783146108195780638153f8f81461083957600080fd5b80633d9c8043116102b657806356e1b2cf116102545780636f96953c116102235780636f96953c1461075d578063715018a61461079157806372e041a0146107a65780637d1ba33a146107c657600080fd5b806356e1b2cf146106d157806357aa0201146106e657806357fbcda514610712578063590e1ae31461074857600080fd5b806342e94c901161029057806342e94c90146106455780634afcccfe146106725780634bedf9a81461069c5780634f2582ed146106bc57600080fd5b80633d9c8043146105d6578063420f686114610600578063421aef371461062557600080fd5b80632109db59116103235780633226dd3b116102fd5780633226dd3b14610560578063343365f6146105805780633cb5d100146105965780633d7ef147146105b657600080fd5b80632109db591461050057806329d645d6146105205780632ea446811461054057600080fd5b8063166d0c4c1161035f578063166d0c4c1461045f5780631a8d949a1461047e5780631af1a502146104945780631bea83fe146104b457600080fd5b806306a9d1a9146103cf57806306fdde03146103f8578063150b7a021461041a57600080fd5b366103ca57600454610100900460ff161580156103a3575060055442105b80156103b95750600e54600160a01b900460ff16155b156103c8576103c86000610b9d565b005b600080fd5b3480156103db57600080fd5b506103e560055481565b6040519081526020015b60405180910390f35b34801561040457600080fd5b5061040d610efe565b6040516103ef9190612e09565b34801561042657600080fd5b50610446610435366004612e31565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016103ef565b34801561046b57600080fd5b506103e56a52b7d2dcc80cd2e400000081565b34801561048a57600080fd5b506103e560065481565b3480156104a057600080fd5b506103c86104af366004612ed2565b610f8c565b3480156104c057600080fd5b506104e87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ef565b34801561050c57600080fd5b506103c861051b366004612ed2565b61105b565b34801561052c57600080fd5b506103c861053b366004612ed2565b61112d565b34801561054c57600080fd5b506103c861055b366004612ed2565b61117f565b34801561056c57600080fd5b506010546104e8906001600160a01b031681565b34801561058c57600080fd5b506103e5600b5481565b3480156105a257600080fd5b506104e86105b1366004612ed2565b611246565b3480156105c257600080fd5b50600a546104e8906001600160a01b031681565b3480156105e257600080fd5b506105ec61271081565b60405162ffffff90911681526020016103ef565b34801561060c57600080fd5b506007546104e89061010090046001600160a01b031681565b34801561063157600080fd5b506103e5610640366004612eeb565b611270565b34801561065157600080fd5b506103e5610660366004612eeb565b60116020526000908152604090205481565b34801561067e57600080fd5b5060045461068c9060ff1681565b60405190151581526020016103ef565b3480156106a857600080fd5b50600f546104e8906001600160a01b031681565b3480156106c857600080fd5b506103e560c881565b3480156106dd57600080fd5b506103c8611385565b3480156106f257600080fd5b506007546107009060ff1681565b60405160ff90911681526020016103ef565b34801561071e57600080fd5b506103e561072d366004612eeb565b6001600160a01b031660009081526011602052604090205490565b34801561075457600080fd5b506103c861151f565b34801561076957600080fd5b506104e87f000000000000000000000000000000000000000000000000000000000000000081565b34801561079d57600080fd5b506103c861162c565b3480156107b257600080fd5b506103c86107c1366004612f1f565b61163e565b3480156107d257600080fd5b506104e87f000000000000000000000000000000000000000000000000000000000000000081565b34801561080657600080fd5b5060045461068c90610100900460ff1681565b34801561082557600080fd5b506103c8610834366004612fa7565b61171d565b34801561084557600080fd5b506103c8610854366004612ed2565b611984565b34801561086557600080fd5b506103c8610874366004612ed2565b6119eb565b34801561088557600080fd5b506103c8610894366004612eeb565b611a34565b3480156108a557600080fd5b506000546001600160a01b03166104e8565b3480156108c357600080fd5b506103e5600d5481565b3480156108d957600080fd5b506103c86108e8366004612fe9565b611bd4565b3480156108f957600080fd5b5061040d611d7a565b34801561090e57600080fd5b50600e546104e8906001600160a01b031681565b34801561092e57600080fd5b5061068c61093d366004612eeb565b60126020526000908152604090205460ff1681565b34801561095e57600080fd5b506103e560035481565b34801561097457600080fd5b506013546103e5565b34801561098957600080fd5b50610992611d87565b604080519283526020830191909152016103ef565b3480156109b357600080fd5b506104e87f000000000000000000000000000000000000000000000000000000000000000081565b3480156109e757600080fd5b506103e5683635c9adc5dea0000081565b6103c8610a06366004612ed2565b610b9d565b348015610a1757600080fd5b506103e560025481565b348015610a2d57600080fd5b506103c8610a3c36600461308f565b611dff565b348015610a4d57600080fd5b506104e8610a5c366004612ed2565b611f87565b348015610a6d57600080fd5b50600e5461068c90600160a01b900460ff1681565b348015610a8e57600080fd5b506104e87f000000000000000000000000000000000000000000000000000000000000000081565b348015610ac257600080fd5b506103e5600c5481565b348015610ad857600080fd5b506103e56212750081565b348015610aef57600080fd5b506103e560165481565b348015610b0557600080fd5b506103e56b033b2e3c9fd0803ce800000081565b348015610b2557600080fd5b5061068c610b34366004612eeb565b60156020526000908152604090205460ff1681565b348015610b5557600080fd5b506103c8610b64366004612eeb565b611f97565b348015610b7557600080fd5b506104e87f000000000000000000000000000000000000000000000000000000000000000081565b610ba5611fd2565b600454610100900460ff1615610bce57604051631df969b760e01b815260040160405180910390fd5b6005544210610bf05760405163e478792360e01b815260040160405180910390fd5b600e54600090600160a01b900460ff1615610c64573415610c23576040516248c6b960e61b815260040160405180910390fd5b81600003610c445760405163244d19c360e21b815260040160405180910390fd5b50600f548190610c5f906001600160a01b0316333084611ffc565b610ca7565b34600003610c855760405163652122d960e01b815260040160405180910390fd5b8115610ca45760405163652122d960e01b815260040160405180910390fd5b50345b600b5415610d21573360009081526012602052604090205460ff16610cdf57604051630b094f2760e31b815260040160405180910390fd5b600b5433600090815260116020526040902054610cfd9083906130c7565b1115610d1c5760405163a6bd512160e01b815260040160405180910390fd5b610d6d565b6000610d2c33611270565b336000908152601160205260409020549091508190610d4c9084906130c7565b1115610d6b5760405163613abeb360e11b815260040160405180910390fd5b505b600354600254829190610d819083906130c7565b1115610e0a57600254600354610d9791906130da565b600e54909150600160a01b900460ff1615610dd257610dcd33610dba83856130da565b600f546001600160a01b03169190612069565b610e0a565b336108fc610de083856130da565b6040518115909202916000818181858888f19350505050158015610e08573d6000803e3d6000fd5b505b336000908152601160205260408120549003610e6357601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b031916331790555b3360009081526011602052604081208054839290610e829084906130c7565b925050819055508060026000828254610e9b91906130c7565b909155505060405181815233907f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b9060200160405180910390a260035460025403610ef0576004805461ff0019166101001790555b5050610efb60018055565b50565b60088054610f0b906130ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610f37906130ed565b8015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b505050505081565b610f9461209a565b6006548111610fb657604051639ae7e6a760e01b815260040160405180910390fd5b6006805490829055600e54604051630d78d28160e11b8152600481018490526001600160a01b0390911690631af1a50290602401600060405180830381600087803b15801561100457600080fd5b505af1158015611018573d6000803e3d6000fd5b505060408051848152602081018690527f17a9815848870091eb2ded52bcdb06f3351631b0a24f0de6da4d5740cda7640593500190505b60405180910390a15050565b6000546001600160a01b03163314801590611086575060075461010090046001600160a01b03163314155b156110a45760405163ea8e4eb560e01b815260040160405180910390fd5b600454610100900460ff16156110cd57604051631df969b760e01b815260040160405180910390fd5b60055481116110ef5760405163d71c2da560e01b815260040160405180910390fd5b600580549082905560408051828152602081018490527fcf8355056cd2d0cfbb80a34af77420d1e6eceacc85186e561d75a1a210179a91910161104f565b6000546001600160a01b0316331480611155575060075461010090046001600160a01b031633145b61117a5760405162461bcd60e51b815260040161117190613127565b60405180910390fd5b600b55565b61118761209a565b60045460ff16156111ab57604051631c6cb8d360e21b815260040160405180910390fd5b806000036111cc57604051632d47cb8f60e11b815260040160405180910390fd5b6002548110156111ef5760405163447f926160e01b815260040160405180910390fd5b60038054908290556002546004805461ff0019169184146101000291909117905560408051828152602081018490527f961c8b414cced5fba2600265359474975f844fcadb7ee9d50f7f9d19ff1711ea910161104f565b6014818154811061125657600080fd5b6000918252602090912001546001600160a01b0316905081565b600b54600090156112ce576001600160a01b03821660009081526012602052604090205460ff166112a25760006112c8565b6001600160a01b038216600090815260116020526040902054600b546112c891906130da565b92915050565b6040516326d352ab60e11b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690634da6a55690602401602060405180830381865afa158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d919061315e565b90506000600d548261136f919061318d565b905061137d81600c546120c7565b949350505050565b60075461010090046001600160a01b031633146113b55760405163ea8e4eb560e01b815260040160405180910390fd5b60045460ff16156113d95760405163475a253560e01b815260040160405180910390fd5b600e54600160a01b900460ff161561148357600f546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611434573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611458919061315e565b90508015610efb57600754600f54610efb916001600160a01b03918216916101009091041683612069565b60075460405160009161010090046001600160a01b03169047908381818185875af1925050503d80600081146114d5576040519150601f19603f3d011682016040523d82523d6000602084013e6114da565b606091505b5050905080610efb5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611171565b565b611527611fd2565b600454610100900460ff161561155057604051630b4d698160e01b815260040160405180910390fd5b600554421161157257604051630b4d698160e01b815260040160405180910390fd5b3360009081526011602052604081205490036115a1576040516307e3a5c760e01b815260040160405180910390fd5b3360009081526011602052604081208054919055600e54600160a01b900460ff16156115e357600f546115de906001600160a01b03163383612069565b6115ed565b6115ed33826120da565b60405181815233907fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d9060200160405180910390a25061151d60018055565b61163461209a565b61151d6000612178565b61164661209a565b600454610100900460ff1661166e576040516378c754c960e01b815260040160405180910390fd5b60045460ff16156116925760405163475a253560e01b815260040160405180910390fd5b600061169d826121c8565b6002549091506116c16b033b2e3c9fd0803ce8000000670de0b6b3a76400006131af565b6116cb919061318d565b6016556116d7816123a8565b6116e281858561250e565b604051600181527fe64f408051437053caebc2ec8b10a45148f5acee3a6922908871b997f80d335d906020015b60405180910390a150505050565b6000546001600160a01b0316331480611745575060075461010090046001600160a01b031633145b6117615760405162461bcd60e51b815260040161117190613127565b60c881111561178d57604051632948bf5b60e21b81526004810182905260c86024820152604401611171565b60005b8181101561197f5760008383838181106117ac576117ac6131c6565b90506020020160208101906117c19190612eeb565b6001600160a01b0316036118175760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742077686974656c697374207a65726f20616464726573730000006044820152606401611171565b6012600084848481811061182d5761182d6131c6565b90506020020160208101906118429190612eeb565b6001600160a01b0316815260208101919091526040016000205460ff166119775760016012600085858581811061187b5761187b6131c6565b90506020020160208101906118909190612eeb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560138383838181106118cc576118cc6131c6565b90506020020160208101906118e19190612eeb565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790557fe463fa6bdecb16f96f58191d902152633214e760ea443684105a7eef1ad16b9d838383818110611946576119466131c6565b905060200201602081019061195b9190612eeb565b6040516001600160a01b03909116815260200160405180910390a15b600101611790565b505050565b61198c61209a565b806000036119ad5760405163c195a09760e01b815260040160405180910390fd5b600d80549082905560408051828152602081018490527f290cd4e7df75ba05266ada6bd18ad0cf12aa3ff31e30c6af92166d26c27e267e910161104f565b6000546001600160a01b0316331480611a13575060075461010090046001600160a01b031633145b611a2f5760405162461bcd60e51b815260040161117190613127565b600c55565b6000546001600160a01b0316331480611a5c575060075461010090046001600160a01b031633145b611a785760405162461bcd60e51b815260040161117190613127565b6001600160a01b0381166000908152601260205260408120805460ff191690555b601354811015611b9457816001600160a01b031660138281548110611ac057611ac06131c6565b6000918252602090912001546001600160a01b031603611b8c5760138054611aea906001906130da565b81548110611afa57611afa6131c6565b600091825260209091200154601380546001600160a01b039092169183908110611b2657611b266131c6565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506013805480611b6557611b656131dc565b600082815260209020810160001990810180546001600160a01b0319169055019055611b94565b600101611a99565b506040516001600160a01b03821681527fa6667e187c57c5b0fa4e1122a695ed0754287513bcb4901fa6c1f44ba22c01879060200160405180910390a150565b611bdc61209a565b60045460ff16611bff57604051633e79acbd60e11b815260040160405180910390fd5b8483141580611c0e5750828114155b15611c2c57604051636ed7379360e11b815260040160405180910390fd5b60005b85811015611d71576000878783818110611c4b57611c4b6131c6565b9050602002016020810190611c609190612eeb565b6001600160a01b031603611c875760405163e6c4247b60e01b815260040160405180910390fd5b6000878783818110611c9b57611c9b6131c6565b9050602002016020810190611cb09190612eeb565b6001600160a01b0316848484818110611ccb57611ccb6131c6565b90506020020135878785818110611ce457611ce46131c6565b9050602002810190611cf691906131f2565b604051611d04929190613239565b60006040518083038185875af1925050503d8060008114611d41576040519150601f19603f3d011682016040523d82523d6000602084013e611d46565b606091505b5050905080611d6857604051632b3f6d1160e21b815260040160405180910390fd5b50600101611c2f565b50505050505050565b60098054610f0b906130ed565b6000806000805b601454811015611df2576015600060148381548110611daf57611daf6131c6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615611dea5781611de681613249565b9250505b600101611d8e565b5060145490939092509050565b611e07611fd2565b60045460ff16611e2a57604051633e79acbd60e11b815260040160405180910390fd5b601654600003611e4d5760405163438fb48f60e11b815260040160405180910390fd5b6014548210611e6f576040516392c4425960e01b815260040160405180910390fd5b601454811115611e7e57506014545b808210611e9e576040516392f1b43560e01b815260040160405180910390fd5b600a546001600160a01b0316825b82811015611f7857600060148281548110611ec957611ec96131c6565b60009182526020808320909101546001600160a01b0316808352601590915260409091205490915060ff16611f6f576016546001600160a01b0382166000908152601160205260408120549091670de0b6b3a764000091611f2a91906131af565b611f34919061318d565b9050611f4a6001600160a01b0385168383612069565b506001600160a01b0381166000908152601560205260409020805460ff191660011790555b50600101611eac565b5050611f8360018055565b5050565b6013818154811061125657600080fd5b611f9f61209a565b6001600160a01b038116611fc957604051631e4fbdf760e01b815260006004820152602401611171565b610efb81612178565b600260015403611ff557604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6040516001600160a01b0384811660248301528381166044830152606482018390526120639186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506127fc565b50505050565b6040516001600160a01b0383811660248301526044820183905261197f91859182169063a9059cbb90606401612031565b6000546001600160a01b0316331461151d5760405163118cdaa760e01b8152336004820152602401611171565b60008282188284100282185b9392505050565b804710156121045760405163cf47918160e01b815247600482015260248101829052604401611171565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612151576040519150601f19603f3d011682016040523d82523d6000602084013e612156565b606091505b505090508061197f5760405163d6bda27560e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082600860096040516121dc90612d9c565b6121e7929190613305565b8190604051809103906000f5905080158015612207573d6000803e3d6000fd5b50600a80546001600160a01b0319166001600160a01b038381169182179092559192507f0000000000000000000000000000000000000000000000000000000000000000161161226a57604051631b97c67d60e21b815260040160405180910390fd5b6040516340c10f1960e01b81523060048201526a52b7d2dcc80cd2e400000060248201526001600160a01b038216906340c10f1990604401600060405180830381600087803b1580156122bc57600080fd5b505af11580156122d0573d6000803e3d6000fd5b50506040516340c10f1960e01b81523060048201526b033b2e3c9fd0803ce800000060248201526001600160a01b03841692506340c10f199150604401600060405180830381600087803b15801561232757600080fd5b505af115801561233b573d6000803e3d6000fd5b50506004805460ff19166001178155604080516338a80c5360e11b815290516001600160a01b038616945063715018a693508183019260009282900301818387803b15801561238957600080fd5b505af115801561239d573d6000803e3d6000fd5b509295945050505050565b60006040516123b690612da9565b604051809103906000f0801580156123d2573d6000803e3d6000fd5b50604080516001600160a01b0385811660248301527f0000000000000000000000000000000000000000000000000000000000000000166044820152621275006064820152683635c9adc5dea000006084808301919091528251808303909101815260a490910182526020810180516001600160e01b031663eb990c5960e01b1790529051919250906000908390839061246b90612db6565b612476929190613333565b604051809103906000f080158015612492573d6000803e3d6000fd5b50601080546001600160a01b0319166001600160a01b0383169081179091559091506124d15760405163a534981f60e01b815260040160405180910390fd5b6010546040516001600160a01b0390911681527faf264c47e57edc70c48b9909cc631216bca721afc6cc9b5a3c1489731b1523b49060200161170f565b600061251c8360020b61286d565b60405163a167129560e01b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000008116602483015261271060448301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063a1671295906064016020604051808303816000875af11580156125ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125de9190613357565b60405163f637731d60e01b81526001600160a01b0384811660048301529192509082169063f637731d90602401600060405180830381600087803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b505060408051610160810182526001600160a01b038981168083527f0000000000000000000000000000000000000000000000000000000000000000821660208401526127108385015260028a810b606085015289900b60808401526a52b7d2dcc80cd2e400000060a08401819052600060c0850181905260e085018190526101008501523061012085015242610140850152935163095ea7b360e01b81527f00000000000000000000000000000000000000000000000000000000000000009092166004830152602482019390935290935090915063095ea7b3906044016020604051808303816000875af1158015612737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275b9190613374565b50604051634418b22b60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906388316456906127ab908590600401613396565b6080604051808303816000875af11580156127ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ee919061345a565b5050509050611d7181612b90565b600080602060008451602086016000885af18061281f576040513d6000823e3d81fd5b50506000513d91508115612837578060011415612844565b6001600160a01b0384163b155b1561206357604051635274afe760e01b81526001600160a01b0385166004820152602401611171565b60008060008360020b12612884578260020b61288c565b8260020b6000035b9050620d89e88111156128b2576040516315e4079d60e11b815260040160405180910390fd5b6000816001166000036128c957600160801b6128db565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561290f576ffff97272373d413259a46990580e213a0260801c5b600482161561292e576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561294d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561296c576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561298b576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156129aa576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156129c9576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156129e9576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612a09576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612a29576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612a49576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612a69576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612a89576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612aa9576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612ac9576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612aea576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612b0a576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612b29576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612b46576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612b67578060001981612b6357612b63613177565b0490505b640100000000810615612b7b576001612b7e565b60005b60ff16602082901c0192505050919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166376b5c47d7f0000000000000000000000000000000000000000000000000000000000000000612bf46000546001600160a01b031690565b60065460075460405160e086901b6001600160e01b03191681526001600160a01b03948516600482015293909216602484015267ffffffffffffffff1660448301526064820186905260ff1660848201523060a482015260c4016020604051808303816000875af1158015612c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c919190613357565b604051632142170760e11b81523060048201526001600160a01b038083166024830152604482018590529192507f0000000000000000000000000000000000000000000000000000000000000000909116906342842e0e90606401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b50506040516367a4d1c360e01b8152600481018590526001600160a01b03841692506367a4d1c39150602401600060405180830381600087803b158015612d6057600080fd5b505af1158015612d74573d6000803e3d6000fd5b5050600e80546001600160a01b0319166001600160a01b039490941693909317909255505050565b610c1c806134af83390190565b611640806140cb83390190565b6104108061570b83390190565b6000815180845260005b81811015612de957602081850181015186830182015201612dcd565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006120d36020830184612dc3565b6001600160a01b0381168114610efb57600080fd5b600080600080600060808688031215612e4957600080fd5b8535612e5481612e1c565b94506020860135612e6481612e1c565b935060408601359250606086013567ffffffffffffffff811115612e8757600080fd5b8601601f81018813612e9857600080fd5b803567ffffffffffffffff811115612eaf57600080fd5b886020828401011115612ec157600080fd5b959894975092955050506020019190565b600060208284031215612ee457600080fd5b5035919050565b600060208284031215612efd57600080fd5b81356120d381612e1c565b8035600281900b8114612f1a57600080fd5b919050565b600080600060608486031215612f3457600080fd5b612f3d84612f08565b9250612f4b60208501612f08565b9150604084013590509250925092565b60008083601f840112612f6d57600080fd5b50813567ffffffffffffffff811115612f8557600080fd5b6020830191508360208260051b8501011115612fa057600080fd5b9250929050565b60008060208385031215612fba57600080fd5b823567ffffffffffffffff811115612fd157600080fd5b612fdd85828601612f5b565b90969095509350505050565b6000806000806000806060878903121561300257600080fd5b863567ffffffffffffffff81111561301957600080fd5b61302589828a01612f5b565b909750955050602087013567ffffffffffffffff81111561304557600080fd5b61305189828a01612f5b565b909550935050604087013567ffffffffffffffff81111561307157600080fd5b61307d89828a01612f5b565b979a9699509497509295939492505050565b600080604083850312156130a257600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b808201808211156112c8576112c86130b1565b818103818111156112c8576112c86130b1565b600181811c9082168061310157607f821691505b60208210810361312157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601e908201527f4d757374206265206f776e6572206f722070726f746f636f6c41646d696e0000604082015260600190565b60006020828403121561317057600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826131aa57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176112c8576112c86130b1565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000808335601e1984360301811261320957600080fd5b83018035915067ffffffffffffffff82111561322457600080fd5b602001915036819003821315612fa057600080fd5b8183823760009101908152919050565b60006001820161325b5761325b6130b1565b5060010190565b8054600090600181811c9082168061327b57607f821691505b60208210810361329b57634e487b7160e01b600052602260045260246000fd5b818652602086018180156132b657600181146132cc576132fa565b60ff198516825283151560051b820195506132fa565b60008781526020902060005b858110156132f4578154848201526001909101906020016132d8565b83019650505b505050505092915050565b6040815260006133186040830185613262565b828103602084015261332a8185613262565b95945050505050565b6001600160a01b038316815260406020820181905260009061137d90830184612dc3565b60006020828403121561336957600080fd5b81516120d381612e1c565b60006020828403121561338657600080fd5b815180151581146120d357600080fd5b81516001600160a01b03168152610160810160208301516133c260208401826001600160a01b03169052565b5060408301516133d9604084018262ffffff169052565b5060608301516133ee606084018260020b9052565b506080830151613403608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161344a6101208401826001600160a01b03169052565b5061014092830151919092015290565b6000806000806080858703121561347057600080fd5b845160208601519094506fffffffffffffffffffffffffffffffff8116811461349857600080fd5b604086015160609096015194979096509250505056fe608060405234801561001057600080fd5b50604051610c1c380380610c1c83398101604081905261002f91610198565b338282600361003e838261028a565b50600461004b828261028a565b5050506001600160a01b03811661007c57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100858161008d565b505050610348565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261010657600080fd5b81516001600160401b0381111561011f5761011f6100df565b604051601f8201601f19908116603f011681016001600160401b038111828210171561014d5761014d6100df565b60405281815283820160200185101561016557600080fd5b60005b8281101561018457602081860181015183830182015201610168565b506000918101602001919091529392505050565b600080604083850312156101ab57600080fd5b82516001600160401b038111156101c157600080fd5b6101cd858286016100f5565b602085015190935090506001600160401b038111156101eb57600080fd5b6101f7858286016100f5565b9150509250929050565b600181811c9082168061021557607f821691505b60208210810361023557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561028557806000526020600020601f840160051c810160208510156102625750805b601f840160051c820191505b81811015610282576000815560010161026e565b50505b505050565b81516001600160401b038111156102a3576102a36100df565b6102b7816102b18454610201565b8461023b565b6020601f8211600181146102eb57600083156102d35750848201515b600019600385901b1c1916600184901b178455610282565b600084815260208120601f198516915b8281101561031b57878501518255602094850194600190920191016102fb565b50848210156103395786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6108c5806103576000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806370a082311161008c57806395d89b411161006657806395d89b41146101aa578063a9059cbb146101b2578063dd62ed3e146101c5578063f2fde38b146101fe57600080fd5b806370a082311461015e578063715018a6146101875780638da5cb5b1461018f57600080fd5b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461011557806323b872dd14610127578063313ce5671461013a57806340c10f1914610149575b600080fd5b6100dc610211565b6040516100e9919061070e565b60405180910390f35b610105610100366004610778565b6102a3565b60405190151581526020016100e9565b6002545b6040519081526020016100e9565b6101056101353660046107a2565b6102bd565b604051601281526020016100e9565b61015c610157366004610778565b6102e1565b005b61011961016c3660046107df565b6001600160a01b031660009081526020819052604090205490565b61015c6102f7565b6005546040516001600160a01b0390911681526020016100e9565b6100dc61030b565b6101056101c0366004610778565b61031a565b6101196101d3366004610801565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61015c61020c3660046107df565b610328565b60606003805461022090610834565b80601f016020809104026020016040519081016040528092919081815260200182805461024c90610834565b80156102995780601f1061026e57610100808354040283529160200191610299565b820191906000526020600020905b81548152906001019060200180831161027c57829003601f168201915b5050505050905090565b6000336102b181858561036b565b60019150505b92915050565b6000336102cb85828561037d565b6102d68585856103fb565b506001949350505050565b6102e961045a565b6102f38282610487565b5050565b6102ff61045a565b61030960006104bd565b565b60606004805461022090610834565b6000336102b18185856103fb565b61033061045a565b6001600160a01b03811661035f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610368816104bd565b50565b610378838383600161050f565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146103f557818110156103e657604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610356565b6103f58484848403600061050f565b50505050565b6001600160a01b03831661042557604051634b637e8f60e11b815260006004820152602401610356565b6001600160a01b03821661044f5760405163ec442f0560e01b815260006004820152602401610356565b6103788383836105e4565b6005546001600160a01b031633146103095760405163118cdaa760e01b8152336004820152602401610356565b6001600160a01b0382166104b15760405163ec442f0560e01b815260006004820152602401610356565b6102f3600083836105e4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166105395760405163e602df0560e01b815260006004820152602401610356565b6001600160a01b03831661056357604051634a1406b160e11b815260006004820152602401610356565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105d691815260200190565b60405180910390a350505050565b6001600160a01b03831661060f578060026000828254610604919061086e565b909155506106819050565b6001600160a01b038316600090815260208190526040902054818110156106625760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610356565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661069d576002805482900390556106bc565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161070191815260200190565b60405180910390a3505050565b602081526000825180602084015260005b8181101561073c576020818601810151604086840101520161071f565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461077357600080fd5b919050565b6000806040838503121561078b57600080fd5b6107948361075c565b946020939093013593505050565b6000806000606084860312156107b757600080fd5b6107c08461075c565b92506107ce6020850161075c565b929592945050506040919091013590565b6000602082840312156107f157600080fd5b6107fa8261075c565b9392505050565b6000806040838503121561081457600080fd5b61081d8361075c565b915061082b6020840161075c565b90509250929050565b600181811c9082168061084857607f821691505b60208210810361086857634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102b757634e487b7160e01b600052601160045260246000fdfea26469706673582212201d19fcd607d8d97110c16335bb73019d92a8703d77196f3a4906fd12397c459d64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60d7565b600054610100900460ff161560855760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161460d5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61155a806100e66000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de5780638da5cb5b11610097578063eb990c5911610071578063eb990c591461039e578063ed4906c0146103b1578063f2fde38b146103dd578063f7c618c1146103f057600080fd5b80638da5cb5b14610372578063a694fc3a14610383578063db2e21bc1461039657600080fd5b8063715018a6146102c957806372f702f3146102d1578063817b1cd2146102fc57806386cdb33d146103055780638b0b30ce146103145780638d23fc611461031d57600080fd5b80634da6a556116101305780634da6a556146101e157806356311bda1461020a5780635c2235861461021d57806365edf56a14610277578063668038e0146102ae5780636a3d9251146102b657600080fd5b80630f91922b146101785780632113342d1461019e5780633243c791146101a7578063375b3c0a146101bc5780633cb802b9146101c55780633d28ab8e146101ce575b600080fd5b61018b6101863660046112fe565b610403565b6040519081526020015b60405180910390f35b61018b609c5481565b6101ba6101b5366004611320565b610486565b005b61018b609a5481565b61018b609d5481565b6101ba6101dc366004611339565b6105d2565b61018b6101ef3660046112fe565b6001600160a01b03166000908152609e602052604090205490565b6101ba610218366004611320565b610715565b61025a61022b3660046113b0565b609f60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610195565b61028a6102853660046113b0565b61088d565b60408051825181526020808401519082015291810151151590820152606001610195565b6101ba610907565b6101ba6102c4366004611320565b6109c9565b6101ba610a5c565b6097546102e4906001600160a01b031681565b6040516001600160a01b039091168152602001610195565b61018b609b5481565b61018b670de0b6b3a764000081565b61018b60995481565b61035261032b3660046112fe565b609e6020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610195565b6033546001600160a01b03166102e4565b6101ba610391366004611320565b610a6e565b6101ba610b68565b6101ba6103ac3660046113da565b610c4f565b61018b6103bf3660046112fe565b6001600160a01b03166000908152609e602052604090206001015490565b6101ba6103eb3660046112fe565b610ece565b6098546102e4906001600160a01b031681565b6001600160a01b0381166000908152609e60205260408120609c546002820154839061042f9083611432565b90506000670de0b6b3a764000082856000015461044c9190611445565b610456919061145c565b905060006104696402540be4008361145c565b905080856003015461047b919061147e565b979650505050505050565b61048e610f44565b6000609b54116104d85760405162461bcd60e51b815260206004820152601060248201526f4e6f207374616b656420746f6b656e7360801b60448201526064015b60405180910390fd5b600081116105195760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064016104cf565b600061052a6402540be40083611445565b90506000609b54670de0b6b3a7640000836105459190611445565b61054f919061145c565b60985490915061056a906001600160a01b0316333086610f9e565b80609c600082825461057c919061147e565b9250508190555082609d6000828254610595919061147e565b90915550506040518381527f051019b59d3b24249903e46fd05b6def7f293fc3de54eca64b3d32743f27fc8e9060200160405180910390a1505050565b6105da61100b565b6000805b8281101561066957336000908152609f602052604081208186868581811061060857610608611491565b60209081029290920135835250810191909152604001600020600281015490915060ff1615801561063d575080600101544210155b1561066057805461064e908461147e565b60028201805460ff1916600117905592505b506001016105de565b50600081116106ba5760405162461bcd60e51b815260206004820152601e60248201527f4e6f20746f6b656e7320726561647920666f72207769746864726177616c000060448201526064016104cf565b6097546106d1906001600160a01b03163383611064565b60405181815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a2506107116001606555565b5050565b61071d61100b565b336000908152609e60205260409020805482111561077d5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74207374616b656420616d6f756e7400000000000060448201526064016104cf565b610786336110a1565b8181600001600082825461079a9190611432565b9250508190555081609b60008282546107b39190611432565b9091555050609c546002820155600181018054600091826107d3836114a7565b9190505590506000609954426107e9919061147e565b60408051606080820183528782526020808301858152600084860181815233808352609f85528783208b8452855291879020955186559151600186015590516002909401805460ff1916941515949094179093558351898152908101859052928301869052929350917ff265d6065ef1332d7a6da1a66115a5f51a6ffd1b5da52bcfff6510598b94ffb8910160405180910390a250505061088a6001606555565b50565b6108b3604051806060016040528060008152602001600081526020016000151581525090565b506001600160a01b0382166000908152609f602090815260408083208484528252918290208251606081018452815481526001820154928101929092526002015460ff161515918101919091525b92915050565b61090f61100b565b610918336110a1565b336000908152609e602052604090206003810154806109685760405162461bcd60e51b815260206004820152600c60248201526b4e6f206469766964656e647360a01b60448201526064016104cf565b60006003830155609854610986906001600160a01b03163383611064565b60405181815233907f16b8533c95f66ab8c192c98ddcf5031bcb3ee6f4022988bdadd57d3422da30739060200160405180910390a250506109c76001606555565b565b6109d1610f44565b60008111610a215760405162461bcd60e51b815260206004820152601a60248201527f556e626f6e64696e672074696d65206d757374206265203e203000000000000060448201526064016104cf565b60998190556040518181527fd8a43159bd7089803e737cde3c04fc38091766e96f67fb8f43df39416fde14fb9060200160405180910390a150565b610a64610f44565b6109c7600061116a565b610a7661100b565b609a54811015610abd5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e74207374616b6560701b60448201526064016104cf565b336000818152609e6020526040902090610ad6906110a1565b81816000016000828254610aea919061147e565b9250508190555081609b6000828254610b03919061147e565b9091555050609c546002820155609754610b28906001600160a01b0316333085610f9e565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9060200160405180910390a25061088a6001606555565b610b70610f44565b6097546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdd91906114c0565b905060008111610c275760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b60448201526064016104cf565b61088a610c3c6033546001600160a01b031690565b6097546001600160a01b03169083611064565b600054610100900460ff1615808015610c6f5750600054600160ff909116105b80610c895750303b158015610c89575060005460ff166001145b610cec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104cf565b6000805460ff191660011790558015610d0f576000805461ff0019166101001790555b6001600160a01b038516610d5d5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21039ba30b5b4b733903a37b5b2b760591b60448201526064016104cf565b6001600160a01b038416610daa5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b2103932bbb0b932103a37b5b2b760611b60448201526064016104cf565b60008311610df35760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420756e626f6e64696e672074696d6560501b60448201526064016104cf565b60008211610e375760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d696e207374616b6560781b60448201526064016104cf565b610e3f6111bc565b610e476111eb565b609780546001600160a01b038088166001600160a01b03199283161790925560988054928716929091169190911790556099839055609a8290558015610ec7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610ed6610f44565b6001600160a01b038116610f3b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104cf565b61088a8161116a565b6033546001600160a01b031633146109c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104cf565b6040516001600160a01b0384811660248301528381166044830152606482018390526110059186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061121a565b50505050565b60026065540361105d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104cf565b6002606555565b6040516001600160a01b0383811660248301526044820183905261109591859182169063a9059cbb90606401610fd3565b505050565b6001606555565b6001600160a01b0381166000908152609e6020526040812080549091036110c6575050565b609c5460028201546000906110db9083611432565b9050806000036110eb5750505050565b6000670de0b6b3a76400008285600001546111069190611445565b611110919061145c565b905060006111236402540be4008361145c565b9050801561115e578085600301600082825461113f919061147e565b9250508190555080609d60008282546111589190611432565b90915550505b50505060029091015550565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166111e35760405162461bcd60e51b81526004016104cf906114d9565b6109c761128b565b600054610100900460ff166112125760405162461bcd60e51b81526004016104cf906114d9565b6109c76112bb565b600080602060008451602086016000885af18061123d576040513d6000823e3d81fd5b50506000513d91508115611255578060011415611262565b6001600160a01b0384163b155b1561100557604051635274afe760e01b81526001600160a01b03851660048201526024016104cf565b600054610100900460ff166112b25760405162461bcd60e51b81526004016104cf906114d9565b6109c73361116a565b600054610100900460ff1661109a5760405162461bcd60e51b81526004016104cf906114d9565b80356001600160a01b03811681146112f957600080fd5b919050565b60006020828403121561131057600080fd5b611319826112e2565b9392505050565b60006020828403121561133257600080fd5b5035919050565b6000806020838503121561134c57600080fd5b823567ffffffffffffffff81111561136357600080fd5b8301601f8101851361137457600080fd5b803567ffffffffffffffff81111561138b57600080fd5b8560208260051b84010111156113a057600080fd5b6020919091019590945092505050565b600080604083850312156113c357600080fd5b6113cc836112e2565b946020939093013593505050565b600080600080608085870312156113f057600080fd5b6113f9856112e2565b9350611407602086016112e2565b93969395505050506040820135916060013590565b634e487b7160e01b600052601160045260246000fd5b818103818111156109015761090161141c565b80820281158282048414176109015761090161141c565b60008261147957634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109015761090161141c565b634e487b7160e01b600052603260045260246000fd5b6000600182016114b9576114b961141c565b5060010190565b6000602082840312156114d257600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220cd1612068f59471dd84db1026226f0c6d82e1f4545e7b2c001da0dafef618e6864736f6c634300081c0033608060405260405161041038038061041083398101604081905261002291610268565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b919061033c565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b038111156102ae57600080fd5b8301601f810185136102bf57600080fd5b80516001600160401b038111156102d8576102d861022e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103065761030661022e565b60405281815282820160200187101561031e57600080fd5b61032f826020830160208601610244565b8093505050509250929050565b6000825161034e818460208701610244565b9190910192915050565b60aa806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea2646970667358221220dcf811aa6969b84151fc8fb95167c9328f925487fb78313d2b6e80b8eeadd42a64736f6c634300081c0033a264697066735822122057dcfcb85d57b5c14cbda81cc0ac5a7a6080b173fdcea073e7522fe0a6b1ab3b64736f6c634300081c003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000067a60a5700000000000000000000000000000000000000000000000000000000697cb1d70000000000000000000000006a23183b824c3ab8d454d9777d4eec3ea2d45f6b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058230e0c6918a018a28bf97185eff02c2edeb860000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000000000000000000114469676974616c20476f6c642046756e6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066169474f4c440000000000000000000000000000000000000000000000000000