2 txs
3 calls
constructor
constructor((address payableERC20, address paymentERC20, address fundAccount, address swapContract, address aiTradeHubContractV4, address aiTradeHubContractV5, uint256 withdrawal_fee, uint256 contribution_fee, uint256 monthly_fee, uint256 amount_each_target, uint256 payment_token_exchange_rate) cfg)
functions
allowance
viewfunction allowance(address tokenAddress, address owner, address spender) view returns (uint256)
checkAutomation
viewfunction checkAutomation(uint256 startIndex, uint256 maxResult) view returns (uint256[], uint256)
getConfig
viewfunction getConfig() view returns (address owner, address paymentERC20, address payableERC20, uint256 amount_each_target, uint256 contribution_fee, uint256 withdrawal_fee, uint256 monthly_fee)
getStats
viewfunction getStats(address wallet) view returns (uint256 num_contributors, uint256 total_pending_amount, uint256 total_locked_amount, uint256 last_distribute_profit, uint256 user_locked_amount, uint256 user_pending_amount, uint256 user_paid_amount, uint256 user_balance, uint256 user_claimable_profit, uint256 user_current_service_fee, uint8 user_payout_type)
getV4Stats
viewfunction getV4Stats(address wallet) view returns (uint256 num_contributors, uint256 total_pending_amount, uint256 total_locked_amount, uint256 last_distribute_profit, uint256 user_locked_amount, uint256 user_pending_amount, uint256 user_paid_amount, uint256 user_balance, uint256 user_claimable_profit, uint256 user_current_service_fee, uint8 user_payout_type)
getV5Stats
viewfunction getV5Stats(address wallet) view returns (uint256 num_contributors, uint256 total_pending_amount, uint256 total_locked_amount, uint256 last_distribute_profit, uint256 user_locked_amount, uint256 user_pending_amount, uint256 user_paid_amount, uint256 user_balance, uint256 user_claimable_profit, uint256 user_current_service_fee, uint8 user_payout_type)
getVersion
viewfunction getVersion() view returns (uint256)
shouldMigrate
viewfunction shouldMigrate(address wallet) view returns (bool)
approve
nonpayablefunction approve(address[] tokenAddresses, address spender, uint256 amount)
chargeMonthlyFee
nonpayablefunction chargeMonthlyFee(address wallet)
claimServiceResults
nonpayablefunction claimServiceResults()
distributeServiceResults
nonpayablefunction distributeServiceResults(uint256 amount)
migrate
nonpayablefunction migrate()
migrateWallet
nonpayablefunction migrateWallet(address newWallet)
performAutomation
nonpayablefunction performAutomation(uint256[] indexesToProcess)
purchaseServiceCredits
nonpayablefunction purchaseServiceCredits(uint256 amount)
recompound
nonpayablefunction recompound()
setAddressFeeExempt
nonpayablefunction setAddressFeeExempt(address wallet, bool exempt)
setAutomationForwarder
nonpayablefunction setAutomationForwarder(address forwarder)
setPayoutPreference
nonpayablefunction setPayoutPreference(uint8 payoutPreference)
setSwapContract
nonpayablefunction setSwapContract(address swapContract)
transfer
nonpayablefunction transfer(address tokenAddress, address to, uint256 amount)
transferFrom
nonpayablefunction transferFrom(address tokenAddress, address from, address to, uint256 amount)
transferFunds
nonpayablefunction transferFunds(address to, uint256 amount)
withdrawFunds
nonpayablefunction withdrawFunds(uint256 amount)
events
ClaimServiceResults
event ClaimServiceResults(address indexed contributor, address paymentToken, uint256 lockedAmt, uint256 amount, uint256 withdrawalFee)
Contribute
event Contribute(address indexed contributor, uint256 amount, uint256 fee, uint256 lockedAmt, uint8 contributionType)
Indexed
event Indexed(address wallet, uint256 amountLocked, uint256 amountPending)
Migrated
event Migrated(address indexed wallet, uint256 balance, uint256 lockedAmt, uint256 pendingAmt, uint256 paidAmt)
MigrateWallet
event MigrateWallet(address indexed oldWallet, address indexed newWallet, uint256 balance, uint256 lockedAmt, uint256 pendingAmt, uint256 paidAmt, uint256 fee)
MonthlyFeeCharged
event MonthlyFeeCharged(address indexed contributor, uint256 lockedAmt, address token, uint256 fee, uint256 debtAdded)
NextTarget
event NextTarget()
ServiceResultsDistributed
event ServiceResultsDistributed(uint256 amount)
TransferFunds
event TransferFunds(address indexed from, address indexed to, uint256 amount, uint256 fee)
WithdrawFunds
event WithdrawFunds(address indexed contributor, address to, uint256 amount, uint256 fee, address token)
errors
AITradeHubAddressInvalidError
error AITradeHubAddressInvalidError()
AITradeHubAlreadyMigratedError
error AITradeHubAlreadyMigratedError()
AITradeHubAmountInvalidError
error AITradeHubAmountInvalidError()
AITradeHubApprovalInvalidAddressError
error AITradeHubApprovalInvalidAddressError()
AITradeHubDataInvalidError
error AITradeHubDataInvalidError()
AITradeHubInsufficientAllowanceError
error AITradeHubInsufficientAllowanceError(address tokenAddress, address spender, uint256 allowance, uint256 needed)
AITradeHubInsufficientFundsError
error AITradeHubInsufficientFundsError()
AITradeHubNoProfitToClaimError
error AITradeHubNoProfitToClaimError()
AITradeHubNotVerifyError
error AITradeHubNotVerifyError()
AITradeHubPermissionDeniedError
error AITradeHubPermissionDeniedError()
AITradeHubPoolNotReadyError
error AITradeHubPoolNotReadyError()
AITradeHubTokenAddressInvalidError
error AITradeHubTokenAddressInvalidError()
AITradeHubTransferFundAccountNotActiveError
error AITradeHubTransferFundAccountNotActiveError()
AITradeHubTransferLockedError
error AITradeHubTransferLockedError()
AITradeHubWalletMigrateExceedNumberOfTimesError
error AITradeHubWalletMigrateExceedNumberOfTimesError(uint256 nextTime)
AITradeHubWalletMigrateNotEmptyError
error AITradeHubWalletMigrateNotEmptyError()
creation bytecode
0x608060405260066019553480156200001657600080fd5b50604051620033f0380380620033f0833981016040819052620000399162000157565b60008054336001600160a01b0319918216811790925560028054821690921790915581516006805483166001600160a01b03928316179055602083015160078054841691831691909117905560408301516001805484169183169190911790556060830151600380548416918316919091179055608083015160048054841691831691909117905560a083015160058054909316911617905560c081015160085560e0810151600955610100810151600a55610120810151600b556101400151600c556200021f565b60405161016081016001600160401b03811182821017156200013457634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200015257600080fd5b919050565b600061016082840312156200016b57600080fd5b6200017562000102565b62000180836200013a565b815262000190602084016200013a565b6020820152620001a3604084016200013a565b6040820152620001b6606084016200013a565b6060820152620001c9608084016200013a565b6080820152620001dc60a084016200013a565b60a082015260c0838101519082015260e0808401519082015261010080840151908201526101208084015190820152610140928301519281019290925250919050565b6131c1806200022f6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063927da105116100de578063cf83244311610097578063d40d17bc11610071578063d40d17bc14610383578063e1eaf05a14610396578063e20ed8bf146103a9578063f653ff11146103bc57600080fd5b8063cf83244314610333578063d1421dc814610346578063d259ab421461037057600080fd5b8063927da10514610266578063990dc9db14610279578063aa1b16871461028c578063beabacc8146102af578063c23f85d6146102c2578063c3f909d4146102d557600080fd5b80634816342a116101305780634816342a146101f35780634aab810c1461021d5780634ece5dc6146102255780635bd3b44414610238578063719d7ea41461024b5780638fd3ab801461025e57600080fd5b80630d8e6e2c14610178578063155dd5ee1461018f57806315dacbea146101a4578063228d8907146101b7578063394c8964146101d85780633df954af146101eb575b600080fd5b6019545b6040519081526020015b60405180910390f35b6101a261019d366004612b29565b6103cf565b005b6101a26101b2366004612b5e565b610402565b6101ca6101c5366004612ba9565b610448565b604051610186929190612bcb565b6101a26101e6366004612c58565b610631565b6101a2610766565b610206610201366004612c9a565b610797565b6040516101869b9a99989796959493929190612cdb565b6101a2610841565b6101a2610233366004612b29565b610870565b6101a2610246366004612d3f565b6108a4565b6101a2610259366004612c9a565b610919565b6101a261094d565b61017c610274366004612d9b565b61097b565b6101a2610287366004612dde565b6109d9565b61029f61029a366004612c9a565b610a0d565b6040519015158152602001610186565b6101a26102bd366004612e08565b610a1e565b6102066102d0366004612c9a565b610a55565b600054600754600654600b54600954600854600a54604080516001600160a01b039889168152968816602088015296909416958501959095526060840191909152608083015260a082019290925260c081019190915260e001610186565b6101a2610341366004612e52565b610b91565b610359610354366004612c9a565b610be7565b6040516101869b9a99989796959493929190612e99565b6101a261037e366004612c9a565b610c6e565b6101a2610391366004612c9a565b610cbb565b6101a26103a4366004612c9a565b610d08565b6101a26103b7366004612b29565b610d37565b6101a26103ca366004612ef3565b610d6b565b6103d833610d75565b6103f557604051632d04c8c360e11b815260040160405180910390fd5b6103ff3382610de4565b50565b61040b33610d75565b61042857604051632d04c8c360e11b815260040160405180910390fd5b3361043585858385610e1d565b61044185858585610eab565b5050505050565b600e54606090600090818467ffffffffffffffff81111561046b5761046b612f10565b604051908082528060200260200182016040528015610494578160200160208202803683370190505b5090508115806104a2575084155b806104ad5750818610155b156104bb579250905061062a565b6000865b83811015610585576000600e60000182815481106104df576104df612f26565b60009182526020808320909101546001600160a01b03168083526013909152604082209092509061050f83611137565b82549091506000906105219083612f52565b9050806000036105345750505050610573565b84878761054081612f65565b98508151811061055257610552612f26565b6020026020010181815250508a860361056e5750505050610585565b505050505b8061057d81612f65565b9150506104bf565b5060008167ffffffffffffffff8111156105a1576105a1612f10565b6040519080825280602002602001820160405280156105ca578160200160208202803683370190505b50905060005b82811015610621578381815181106105ea576105ea612f26565b602002602001015182828151811061060457610604612f26565b60209081029190910101528061061981612f65565b9150506105d0565b50945091925050505b9250929050565b6002546001600160a01b0316331461065c5760405163e682221f60e01b815260040160405180910390fd5b600e548181158061066b575080155b156106765750505050565b60005b8181101561075757600085858381811061069557610695612f26565b9050602002013590508381106106ab5750610745565b6000600e60000182815481106106c3576106c3612f26565b60009182526020808320909101546001600160a01b0316808352601390915260409091209091506001600582015460ff16600181111561070557610705612cb5565b0361071857610713826111b1565b610741565b6000600582015460ff16600181111561073357610733612cb5565b036107415761074182611280565b5050505b8061074f81612f65565b915050610679565b506107606113ad565b50505050565b61076f33610d75565b61078c57604051632d04c8c360e11b815260040160405180910390fd5b610795336111b1565b565b60055460405163611fc2eb60e11b81526001600160a01b038381166004830152600092839283928392839283928392839283928392839291169063c23f85d69060240161016060405180830381865afa1580156107f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c9190612f7e565b9a509a509a509a509a509a509a509a509a509a509a5091939597999b90929496989a50565b61084a33610d75565b61086757604051632d04c8c360e11b815260040160405180910390fd5b61079533611280565b6000546001600160a01b0316331461089b5760405163e682221f60e01b815260040160405180910390fd5b6103ff8161153e565b6108ad33610d75565b6108ca57604051632d04c8c360e11b815260040160405180910390fd5b60005b83811015610441576109078585838181106108ea576108ea612f26565b90506020020160208101906108ff9190612c9a565b33858561160f565b8061091181612f65565b9150506108cd565b6000546001600160a01b031633146109445760405163e682221f60e01b815260040160405180910390fd5b6103ff8161167f565b61095633610d75565b61097357604051632d04c8c360e11b815260040160405180910390fd5b610795611856565b600061098633610d75565b6109a357604051632d04c8c360e11b815260040160405180910390fd5b506001600160a01b0392831660009081526018602090815260408083209486168352938152838220929094168152925290205490565b6109e233610d75565b6109ff57604051632d04c8c360e11b815260040160405180910390fd5b610a098282611c23565b5050565b6000610a1882611d7a565b92915050565b610a2733610d75565b610a4457604051632d04c8c360e11b815260040160405180910390fd5b610a5083338484610eab565b505050565b600e546011546014546012546001600160a01b038516600090815260136020908152604080832081516101008101835281548152600180830154948201949094526002820154928101929092526003810154606083015260048101546080830152600581015495969584938493849384938493849384939092909160a084019160ff1690811115610ae857610ae8612cb5565b6001811115610af957610af9612cb5565b8152602001600682015481526020016007820160009054906101000a900460ff161515151581525050905080602001519750601460010160008e6001600160a01b03166001600160a01b031681526020019081526020016000205496508060400151955080600001519450610b6d8d611137565b9350610b788d611f38565b92508060a0015191505091939597999b90929496989a50565b6000546001600160a01b03163314610bbc5760405163e682221f60e01b815260040160405180910390fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6004805460405163611fc2eb60e11b81526001600160a01b03848116938201939093526000928392839283928392839283928392839283928392169063c23f85d69060240161016060405180830381865afa158015610c4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c9190613008565b6000546001600160a01b03163314610c995760405163e682221f60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ce65760405163e682221f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610d1133610d75565b610d2e57604051632d04c8c360e11b815260040160405180910390fd5b6103ff8161203c565b610d4033610d75565b610d5d57604051632d04c8c360e11b815260040160405180910390fd5b6103ff338260006001612298565b6103ff33826123fa565b6003546040516396bfc22960e01b81526001600160a01b03838116600483015260009216906396bfc22990602401602060405180830381865afa158015610dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a189190613082565b80600003610e0557604051634caaf3df60e01b815260040160405180910390fd5b600654610a09906001600160a01b0316838084610eab565b6001600160a01b038085166000908152601860209081526040808320878516845282528083209386168352929052205460001981146104415781811015610e9d57604051638d129a4560e01b81526001600160a01b0380871660048301528416602482015260448101829052606481018390526084015b60405180910390fd5b61044185858585850361160f565b6001600160a01b0383161580610ec857506001600160a01b038216155b15610ee657604051638a65f90160e01b815260040160405180910390fd5b6006546001600160a01b03858116911614801590610f1257506007546001600160a01b03858116911614155b15610f305760405163c7d51dd160e01b815260040160405180910390fd5b6001600160a01b038084166000908152601360205260409020600654909190811690861603610fba5760018101546001600160a01b0385166000908152601560205260408120549091610f8291612f52565b905082811015610fa55760405163376500a960e01b815260040160405180910390fd5b610faf8584612485565b50610fb86113ad565b505b6007546001600160a01b039081169086160361101557610fd9846124ae565b8054821115610ffb5760405163376500a960e01b815260040160405180910390fd5b8181600001600082825461100f919061309f565b90915550505b6001600160a01b0383166000908152600d602052604081205486919060ff1661104d57611041846124ec565b905061104d828261250a565b6001600160a01b03821663a9059cbb86611067848861309f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d69190613082565b50604080516001600160a01b038781168252602082018790529181018390528882166060820152908716907f8b267306e225b16f74e5e3314efa6828eb10e0be29b121a41cf61a2b88bea95a9060800160405180910390a250505050505050565b6001600160a01b0381166000908152601360205260408120601054600182015483916402540be4009161116a91906130b2565b61117491906130df565b905060006402540be4008360030154846001015461119291906130b2565b61119c91906130df565b90506111a8818361309f565b95945050505050565b6001600160a01b03818116600090815260136020526040902060025490911633146111db836124ae565b6111e48361167f565b8154600081900361120d5781610760576040516335f8a8ab60e11b815260040160405180910390fd5b600c5460009061121d90836130b2565b600754909150611236906001600160a01b03168361250a565b60065461124d906001600160a01b03163083612524565b818460020160008282546112619190612f52565b909155506112759050858260018615612298565b505060009091555050565b6001600160a01b03818116600090815260136020526040902060025490911633146112aa836124ae565b6112b38361167f565b815460008190036112dc5781610760576040516335f8a8ab60e11b815260040160405180910390fd5b60006112e7826124ec565b905060006112f5828461309f565b9050801561134357600754611314906001600160a01b0316878361253f565b808560020160008282546113289190612f52565b9091555050600754611343906001600160a01b03168361250a565b600085556007546001860154604080516001600160a01b0393841681526020810192909252810183905260608101849052908716907f8cf70264ccd448a98daa1591017007dd50e3fae263322a10e2f6780f0368c9469060800160405180910390a2505050505050565b600b5460115460006113bf83836130f3565b9050801561147857600e545b6000811180156113db5750600082115b15611476576000600e6113ef60018461309f565b815481106113ff576113ff612f26565b60009182526020808320909101546001600160a01b03168083526013909152604082206001810154919350919061143690866125bb565b90508060000361144857505050611464565b61145283826125d1565b5061145d8382612636565b9093039250505b8061146e81613107565b9150506113cb565b505b6014548311610a50576000805b6017548110801561149557508482105b15611537576000601460030182815481106114b2576114b2612f26565b60009182526020808320909101546001600160a01b031680835260159091526040822054909250906114ed826114e8878b61309f565b6125bb565b9050806000036114ff57505050611485565b61150983826126da565b50611514838261287d565b61151e8186612f52565b94508082111561152f578360010193505b505050611485565b5050611478565b8060000361155f57604051634caaf3df60e01b815260040160405180910390fd5b6011546000036115825760405163561fcaa560e01b815260040160405180910390fd5b6011546000906115976402540be400846130b2565b6115a191906130df565b905080600e60020160008282546115b89190612f52565b9091555050426012556007546115d8906001600160a01b03163084612524565b6040518281527f913b9c8079c863b971af48acfdba4daf1f76d3b7cbad90231fe9a8597c2c44bb9060200160405180910390a15050565b6001600160a01b038316158061162c57506001600160a01b038216155b1561164a576040516312045ddb60e01b815260040160405180910390fd5b6001600160a01b0393841660009081526018602090815260408083209587168352948152848220939095168152919093522055565b6001600160a01b0381166000908152601360205260408120906116a183611f38565b905081600401546000036116b6574260048301555b806000036116c357505050565b6001600160a01b0383166000908152601560205260408120548291901561176f576116ee85846126da565b91506116fa828461309f565b600654909150611713906001600160a01b03168261250a565b6001840154600654604080519283526001600160a01b0391821660208401528201839052606082018490528616907f7aea1f971c87ffe5a9f4607a1255b6b1bd057acbfad49e32a23388b58e4f4f6b9060800160405180910390a25b8115611846578354600c5460009061178790836130b2565b905080156118435761179984826125bb565b92506117a5838561309f565b93506117b1838261309f565b600c549091506117c190826130df565b8087556117ce908361309f565b6007549093506117e7906001600160a01b03168461250a565b6001860154600754604080519283526001600160a01b0391821660208401528201859052606082018690528816907f7aea1f971c87ffe5a9f4607a1255b6b1bd057acbfad49e32a23388b58e4f4f6b9060800160405180910390a25b50505b4284600401819055505050505050565b33600081815260136020526040812090808080808061187488610be7565b959f50939d50919b50995097509095506000945061189a93508992508a9150612f529050565b9050801561195c57600060040160009054906101000a90046001600160a01b03166001600160a01b03166315dacbea600060060160009054906101000a90046001600160a01b03168b600060010160009054906101000a90046001600160a01b0316856040518563ffffffff1660e01b815260040161191c949392919061311e565b600060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b5050505061195c898260026001612298565b60006119688486612f52565b905080156119f45760048054600754604051630aed65f560e11b81526001600160a01b03928316936315dacbea936119a89316918f91309188910161311e565b600060405180830381600087803b1580156119c257600080fd5b505af11580156119d6573d6000803e3d6000fd5b50505050808960000160008282546119ee9190612f52565b90915550505b8589600201541015611a1a5785896002016000828254611a149190612f52565b90915550505b6001836002811115611a2e57611a2e612cb5565b03611a475760058901805460ff19166001179055611a54565b60058901805460ff191690555b600789015460009060ff16611bc357611a6c8b610797565b90919293949596979899509091929394959697985090919293949596975090919293949596509050809650819a50829b50839c50849d50859e505050505050508789611ab89190612f52565b92508215611ade57611ace8b8460026001612298565b60078a01805460ff191660011790555b611ae88587612f52565b91508115611b7257600554600754604051630aed65f560e11b81526001600160a01b03928316926315dacbea92611b2a929116908f903090889060040161311e565b600060405180830381600087803b158015611b4457600080fd5b505af1158015611b58573d6000803e3d6000fd5b50508b5484018c55505060078a01805460ff191660011790555b868a600201541015611b895760028a018054880190555b6000816001811115611b9d57611b9d612cb5565b03611bb65760058a01805460ff19166001179055611bc3565b60058a01805460ff191690555b60408051838152602081018b9052908101899052606081018890526001600160a01b038c16907fc8102fa5c0a66c20caa3ebb502aecfcc6e0ea963896d5a14c1bd8c10c456c5539060800160405180910390a25050505050505050505050565b336001600160a01b0383161580611c4b5750806001600160a01b0316836001600160a01b0316145b15611c6957604051638a65f90160e01b815260040160405180910390fd5b611c7233610d75565b1580611c845750611c8283610d75565b155b15611ca25760405163245576bd60e01b815260040160405180910390fd5b6001600160a01b038116600090815260136020908152604080832060159092528220546001820154919291611cd79190612f52565b9050831580611ce557508084115b15611d0357604051634caaf3df60e01b815260040160405180910390fd5b611d0c856128b3565b611d168385612485565b50611d218585612636565b611d296113ad565b60408051858152600060208201526001600160a01b0380881692908616917f0efb2754289a5bd9215ae68acd4f4ae527ad5ae20f6de58c7448df1c7df37d8191015b60405180910390a35050505050565b6004805460405163611fc2eb60e11b81526001600160a01b03848116938201939093526000928392839283928392169063c23f85d69060240161016060405180830381865afa158015611dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df59190613008565b50949c50929a5098509096506000955050508715159250829150611e1b90505750600084115b80611e265750600083115b80611e315750600082115b90508015611e46575060019695505050505050565b60055460405163611fc2eb60e11b81526001600160a01b0389811660048301529091169063c23f85d69060240161016060405180830381865afa158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb59190612f7e565b50949d50929b50995090975050508815159350839250611ed89150505750600084115b80611ee35750600083115b80611eee5750600082115b9050808015611f1957506001600160a01b03871660009081526013602052604090206007015460ff16155b15611f2b575060019695505050505050565b5060009695505050505050565b6001600160a01b0381166000908152601360209081526040808320815161010081018352815481526001808301549482019490945260028201549281019290925260038101546060830152600481015460808301526005810154849360a084019160ff1690811115611fac57611fac612cb5565b6001811115611fbd57611fbd612cb5565b81526006820154602082015260079091015460ff1615156040909101526080810151909150426000829003611ff757506000949350505050565b6000612003838361309f565b905060006120148560200151612940565b9050600062278d0061202684846130b2565b61203091906130df565b98975050505050505050565b336000818152601360205260408082206001600160a01b0385168084529190922090158061207b5750826001600160a01b0316846001600160a01b0316145b1561209957604051638a65f90160e01b815260040160405180910390fd5b6000816001015411806120c357506001600160a01b03841660009081526015602052604090205415155b806120ce5750805415155b806120dd575060008160030154115b156120fb5760405163f8f3f0d160e01b815260040160405180910390fd5b62093a8082600601544261210f919061309f565b10156121435760068201546121279062093a80612f52565b604051634f4cccf960e11b8152600401610e9491815260200190565b60018201546001600160a01b038416600090815260156020526040812054909161216c91612f52565b9050612177856128b3565b6121818482612485565b5061218c8582612636565b612195856128b3565b61219d6113ad565b82548255600280840154908301556004808401549083015560038084015490830155600580840154908301805460ff9092169160ff1916600183818111156121e7576121e7612cb5565b02179055504260068301556000808455600284018190556004840155601054600384015560058301805460ff1916905561222084612954565b815460018301546001600160a01b0386811660008181526015602090815260408083205460028a0154825198895292880196909652860194909452606085019390935260808401929092528716917f64b77114a6fda7f6c8d44d5ff3fb7bf917be8198f1786d8ff3585eb9d40fa4ec9060a001611d6b565b600083818460028111156122ae576122ae612cb5565b0361232157846000036122d457604051634caaf3df60e01b815260040160405180910390fd5b6122dd85612a91565b6001546006549193509183900391612304916001600160a01b039081169189911685612aa5565b60065461231c906001600160a01b0316873084612aa5565b61236d565b600184600281111561233557612335612cb5565b0361236d57600261234586612a91565b61234f91906130df565b600654909250908290039061236d906001600160a01b03168361250a565b612376866128b3565b6001600160a01b03861660009081526013602052604090206123988783612636565b866001600160a01b03167f2330e8bf6a15ac1c76a00e9843cbd9e0137cc4c49b2e23d16730a1fed57f154a83858460010154896040516123db9493929190613148565b60405180910390a283156123f1576123f16113ad565b50505050505050565b80600181111561240c5761240c612cb5565b6001600160a01b03831660009081526013602052604090206005015460ff16600181111561243c5761243c612cb5565b03612445575050565b6001600160a01b0382166000908152601360205260409020600501805482919060ff19166001838181111561247c5761247c612cb5565b02179055505050565b60008061249284846126da565b905080156124a7576124a484826125d1565b90505b9392505050565b6001600160a01b0381166000908152601360205260408120906124d083611137565b905080156124df578154810182555b5060105460039091015550565b6008546000906103e89061250090846130b2565b610a1891906130df565b600154610a09906001600160a01b0384811691168361253f565b600154610a50906001600160a01b0385811691168484612aa5565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af115801561258e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b29190613082565b610a5057600080fd5b60008183106125ca57816124a7565b5090919050565b6001600160a01b0382166000908152601360205260408120600181015482906125fb9085906125bb565b90508060000361260f578392505050610a18565b612618856124ae565b60018201805482900390556011805482900390556111a8818561309f565b6001600160a01b03821660009081526015602052604081205490036126b057601780546001810182557fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b0319166001600160a01b0385169081179091559054600091825260166020526040909120555b60148054820190556001600160a01b03909116600090815260156020526040902080549091019055565b6001600160a01b03821660009081526015602052604081205481906127009084906125bb565b9050806000036127135782915050610a18565b6014805482900390556001600160a01b0384166000908152601560205260408120805483900390819055900361286b576001600160a01b0384166000908152601660205260408120546127689060019061309f565b60175490915060009061277d9060019061309f565b905080821461281c5760006014600301828154811061279e5761279e612f26565b600091825260209091200154601780546001600160a01b0390921692508291859081106127cd576127cd612f26565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055612801836001612f52565b6001600160a01b039091166000908152601660205260409020555b601780548061282d5761282d613175565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038816825260169052604081205550505b612875818461309f565b949350505050565b612886826124ae565b6001600160a01b039091166000908152601360205260409020600101805482019055601180549091019055565b6001600160a01b0381166000908152600f602052604081205490036103ff57600e546128e0906001612f52565b6001600160a01b0382166000818152600f6020526040812092909255600e805460018101825592527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd90910180546001600160a01b031916909117905550565b600a546000906103e89061250090846130b2565b6001600160a01b0381166000908152600f602052604081205490819003612979575050565b600061298660018361309f565b600e5490915060009061299b9060019061309f565b9050808214612a3a576000600e60000182815481106129bc576129bc612f26565b600091825260209091200154600e80546001600160a01b0390921692508291859081106129eb576129eb612f26565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055612a1f836001612f52565b6001600160a01b039091166000908152600f60205260409020555b600e805480612a4b57612a4b613175565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03959095168152600f9094525050604082209190915550565b6009546000906103e89061250090846130b2565b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528516906323b872dd906064016020604051808303816000875af1158015612afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b209190613082565b61076057600080fd5b600060208284031215612b3b57600080fd5b5035919050565b80356001600160a01b0381168114612b5957600080fd5b919050565b60008060008060808587031215612b7457600080fd5b612b7d85612b42565b9350612b8b60208601612b42565b9250612b9960408601612b42565b9396929550929360600135925050565b60008060408385031215612bbc57600080fd5b50508035926020909101359150565b604080825283519082018190526000906020906060840190828701845b82811015612c0457815184529284019290840190600101612be8565b50505092019290925292915050565b60008083601f840112612c2557600080fd5b50813567ffffffffffffffff811115612c3d57600080fd5b6020830191508360208260051b850101111561062a57600080fd5b60008060208385031215612c6b57600080fd5b823567ffffffffffffffff811115612c8257600080fd5b612c8e85828601612c13565b90969095509350505050565b600060208284031215612cac57600080fd5b6124a782612b42565b634e487b7160e01b600052602160045260246000fd5b600281106103ff576103ff612cb5565b6000610160820190508c82528b60208301528a60408301528960608301528860808301528760a08301528660c08301528560e08301528461010083015283610120830152612d2883612ccb565b826101408301529c9b505050505050505050505050565b60008060008060608587031215612d5557600080fd5b843567ffffffffffffffff811115612d6c57600080fd5b612d7887828801612c13565b9095509350612d8b905060208601612b42565b9396929550929360400135925050565b600080600060608486031215612db057600080fd5b612db984612b42565b9250612dc760208501612b42565b9150612dd560408501612b42565b90509250925092565b60008060408385031215612df157600080fd5b612dfa83612b42565b946020939093013593505050565b600080600060608486031215612e1d57600080fd5b612e2684612b42565b9250612e3460208501612b42565b9150604084013590509250925092565b80151581146103ff57600080fd5b60008060408385031215612e6557600080fd5b612e6e83612b42565b91506020830135612e7e81612e44565b809150509250929050565b600381106103ff576103ff612cb5565b6000610160820190508c82528b60208301528a60408301528960608301528860808301528760a08301528660c08301528560e08301528461010083015283610120830152612d2883612e89565b600281106103ff57600080fd5b600060208284031215612f0557600080fd5b81356124a781612ee6565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a1857610a18612f3c565b600060018201612f7757612f77612f3c565b5060010190565b60008060008060008060008060008060006101608c8e031215612fa057600080fd5b8b519a5060208c0151995060408c0151985060608c0151975060808c0151965060a08c0151955060c08c0151945060e08c015193506101008c015192506101208c015191506101408c0151612ff481612ee6565b809150509295989b509295989b9093969950565b60008060008060008060008060008060006101608c8e03121561302a57600080fd5b8b519a5060208c0151995060408c0151985060608c0151975060808c0151965060a08c0151955060c08c0151945060e08c015193506101008c015192506101208c015191506101408c015160038110612ff457600080fd5b60006020828403121561309457600080fd5b81516124a781612e44565b81810381811115610a1857610a18612f3c565b8082028115828204841417610a1857610a18612f3c565b634e487b7160e01b600052601260045260246000fd5b6000826130ee576130ee6130c9565b500490565b600082613102576131026130c9565b500690565b60008161311657613116612f3c565b506000190190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b84815260208101849052604081018390526080810161316683612e89565b82606083015295945050505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202a741c637b1160ab89a0f2d9dee3ae50428a6f96af21c489ce4f91305aeb0aad64736f6c6343000813003300000000000000000000000088e373de11b49c03be77ad93a2caf7cf7dc3102c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d0000000000000000000000003e3899adb50acd77bb010262803bb240dcc5122300000000000000000000000029307e91dbc5ed7a8843eebd48ff9eddd206852b000000000000000000000000eecfcf2ff8200f642ed7bb7fe259e258869572b7000000000000000000000000466762aae51a862c05dfa937e3da295627b0916100000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000152d02c7e14af6800000000000000000000000000000000000000000000000000000000000000000000a