Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
IBGV0
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./upgradeability/CustomOwnable.sol"; import "./libraries/TransferHelper.sol"; import "./libraries/UserLibrary.sol"; import "./libraries/IBGLibrary.sol"; import "./libraries/InvestmentLibrary.sol"; import "./interfaces/IIBGEvents.sol"; contract IBGV0 is IIBGEvents, CustomOwnable, ReentrancyGuard { using SafeMath for uint; using UserLibrary for UserLibrary.User; using IBGLibrary for IBGLibrary.IBGPlan; using InvestmentLibrary for InvestmentLibrary.Investment; IERC20 public usdt; IERC20 ibg; IERC20 bgbf; address rootNode; mapping(address => UserLibrary.User) public users; mapping(address => IBGLibrary.IBGPlan) public IBGPlanDetails; mapping(address => mapping(uint => InvestmentLibrary.Investment)) public cycleDetails; bool internal _initialized; uint public constant SERVICE_START_TIME = 1619521871; uint private constant DECIMAL_FACTOR = 10**6; uint private constant DECIMAL_FACTOR_IBG = 10**18; uint private constant SECONDS_IN_DAY = 86400; uint private constant IBG_TO_USDT = 1 * DECIMAL_FACTOR_IBG; uint private constant MAX_PACKS = 6; uint private constant MAX_PLANS = 3; uint private constant IBG_PERCENTAGE = 20; uint private constant BGBF_PERCENTAGE = 10; uint private constant MAX_CURRENT_PLAN = DECIMAL_FACTOR_IBG ** 2; uint private constant MAX_ELIGIBLE_REFERRER_WALKS = 25; uint ibgPercentage; uint bgbfPercentage; uint maxPacks; uint maxPlans; uint public maxWalks; uint public IBGToUsdt; uint public increaseIBGAfterLimit; uint public increaseRateIBG; uint public totalIBGDistributed; address treasuryWallet; address directCommissionWallet; address yieldMatchingWallet; address yieldWallet; uint lastRate; mapping(uint => string) public plans; mapping(uint => bool) public planActiveStatus; mapping(uint => uint) public packPrice; mapping(uint => uint) public stakingTime; mapping(uint => uint) public yieldRate; mapping(uint => uint) public directReferralRate; mapping(uint => uint) public yieldMatchingRate; modifier onlyBeforeLaunch() { require(block.timestamp < SERVICE_START_TIME, "IBGV0: Service Expired"); _; } function initialize(address _governance, address _ibg, address _usdt, address _treasuryWallet) external { require(!_initialized, 'IBGV0: INVALID'); _initialized = true; _setOwner(_governance); usdt = IERC20(_usdt); ibg = IERC20(_ibg); rootNode = _treasuryWallet; treasuryWallet = _treasuryWallet; directCommissionWallet = _treasuryWallet; yieldMatchingWallet = _treasuryWallet; yieldWallet = _treasuryWallet; users[rootNode].investmentCount = 1; ibgPercentage = IBG_PERCENTAGE; bgbfPercentage = BGBF_PERCENTAGE; IBGToUsdt = IBG_TO_USDT; increaseRateIBG = 10 * 10**16; increaseIBGAfterLimit = 100000 * DECIMAL_FACTOR_IBG; maxPacks = MAX_PACKS; maxPlans = MAX_PLANS; maxWalks = MAX_ELIGIBLE_REFERRER_WALKS; directReferralRate[1] = 40; directReferralRate[2] = 30; directReferralRate[3] = 20; plans[1] = "IBG"; plans[2] = "BGBF"; plans[3] = "BLENDED"; planActiveStatus[1] = true; packPrice[1] = 100 * DECIMAL_FACTOR; packPrice[2] = 1000 * DECIMAL_FACTOR; packPrice[3] = 5000 * DECIMAL_FACTOR; packPrice[4] = 10000 * DECIMAL_FACTOR; packPrice[5] = 50000 * DECIMAL_FACTOR; packPrice[6] = 100000 * DECIMAL_FACTOR; stakingTime[1] = 30; stakingTime[2] = 60; stakingTime[3] = 90; yieldRate[stakingTime[1]] = 5; yieldRate[stakingTime[2]] = 6; yieldRate[stakingTime[3]] = 7; yieldMatchingRate[1] = 30; yieldMatchingRate[2] = 20; yieldMatchingRate[3] = 10; yieldMatchingRate[4] = 10; yieldMatchingRate[5] = 10; users[rootNode].currentPlan = MAX_CURRENT_PLAN; emit Registration(rootNode, address(0), block.timestamp); } function setPackagePercentage(uint _value, uint plan) public onlyOwner { require(_value > 0 && _value <= 100, "IBGV0: Invalid percentage"); if(plan == 1) { ibgPercentage = _value; } else if(plan == 2) { bgbfPercentage = _value; } } function registerAdmin(address _user, address _referrer, uint _pack, uint _plan, uint stakingPeriod) external virtual onlyOwner onlyBeforeLaunch nonReentrant { _register(_user, _referrer, _pack, _plan, stakingPeriod, true); } function register(address _referrer, uint _pack, uint _plan, uint stakingPeriod) external virtual nonReentrant { _register(msg.sender, _referrer, _pack, _plan, stakingPeriod, false); } function _register(address _user, address _referrer, uint _pack, uint _plan, uint stakingPeriod, bool isAdmin) private { require(_pack >= 1 && _pack <= maxPacks, 'IBGV0: Invalid Pack'); require(_plan >= 1 && _plan <= maxPlans, 'IBGV0: Invalid Plan'); require(planActiveStatus[_plan], 'IBGV0: Plan is not active yet'); require(stakingPeriod >= 1 && stakingPeriod <= 3, 'IBGV0: Invalid staking period'); require(!users[_user].exists(), 'IBGV0: User_Exists'); require(users[_referrer].exists(), 'IBGV0: Referrer does not exists'); uint value = packPrice[_pack]; if (!isAdmin) { TransferHelper.safeTransferFrom(address(usdt), _user, address(this), value); } users[_user].referrer = _referrer; users[_referrer].referralCount++; emit Registration(_user, _referrer, block.timestamp); _investment(_user, _pack, _plan, value, stakingPeriod, isAdmin); } function investmentAdmin(address _user, uint _pack, uint _plan, uint stakingPeriod) external virtual onlyOwner onlyBeforeLaunch nonReentrant { require(_pack >= 1 && _pack <= maxPacks, 'IBGV0: Invalid Pack'); require(_plan >= 1 && _plan <= maxPlans, 'IBGV0: Invalid Plan'); require(planActiveStatus[_plan], 'IBGV0: Plan is not active yet'); require(stakingPeriod >= 1 && stakingPeriod <= 3, 'IBGV0: Invalid staking period'); require(users[_user].exists(), "IBGV0: User not registered yet"); _investment(_user, _pack, _plan, packPrice[_pack], stakingPeriod, true); } function investment(uint _pack, uint _plan, uint stakingPeriod) external virtual nonReentrant { require(_pack >= 1 && _pack <= maxPacks, 'IBGV0: Invalid Pack'); require(_plan >= 1 && _plan <= maxPlans, 'IBGV0: Invalid Plan'); require(planActiveStatus[_plan], 'IBGV0: Plan is not active yet'); require(stakingPeriod >= 1 && stakingPeriod <= 3, 'IBGV0: Invalid staking period'); require(users[msg.sender].exists(), "IBGV0: User not registered yet"); uint value = packPrice[_pack]; TransferHelper.safeTransferFrom(address(usdt), msg.sender, address(this), value); _investment(msg.sender, _pack, _plan, value, stakingPeriod, false); } function _investment(address _user, uint _pack, uint _plan, uint currentPackAmount, uint stakingPeriod, bool isAdmin) private { users[_user].investmentCount++; users[_user].currentPlan = users[_user].currentPlan.add(currentPackAmount); InvestmentLibrary.Investment storage cycle = cycleDetails[_user][users[_user].investmentCount]; cycle.investmentTime = block.timestamp; cycle.plan = _plan; cycle.stakingPeriod = stakingTime[stakingPeriod]; cycle.yieldRateValue = yieldRate[stakingTime[stakingPeriod]]; if(_plan == 1) { uint iBGAmount = (currentPackAmount.mul(DECIMAL_FACTOR_IBG)).div(DECIMAL_FACTOR); if (!isAdmin) { iBGAmount = ((iBGAmount).mul(DECIMAL_FACTOR_IBG)).div(IBGToUsdt); TransferHelper.safeTransfer(address(usdt), treasuryWallet, currentPackAmount.mul((uint(100)).sub(ibgPercentage)).div(100)); } cycle.investment = iBGAmount; totalIBGDistributed = totalIBGDistributed.add(iBGAmount); IBGPlanDetails[_user].IBGTokens = IBGPlanDetails[_user].IBGTokens.add(iBGAmount); IBGPlanDetails[_user].stakedIBGTokens = IBGPlanDetails[_user].stakedIBGTokens.add(iBGAmount); emit StakedToken(_user, iBGAmount, _plan, block.timestamp, stakingPeriod); calculateIBGTokenPrice(); if (!isAdmin) { commisionTransfer(_user, users[_user].referrer, currentPackAmount, (currentPackAmount.mul(ibgPercentage).div(100)), ibgPercentage); } } emit PackPurchased(_user, _pack, _plan, currentPackAmount, block.timestamp); } function iBGYieldCommission(address user, address reciever, uint currentPlan, uint yieldDistributionAmount) private { uint level = 1; TransferHelper.safeTransfer(address(ibg), yieldMatchingWallet, (yieldDistributionAmount.mul(20)).div(100)); while(level <= 5) { uint amount = (yieldDistributionAmount.mul(yieldMatchingRate[level]).div(100)); if(reciever == address(0)) { TransferHelper.safeTransfer(address(ibg), rootNode, amount); IBGPlanDetails[rootNode].IBGYieldMatchingIncome = IBGPlanDetails[rootNode].IBGYieldMatchingIncome.add(amount); emit YieldMatchingIncome(user, rootNode, amount, level, block.timestamp); } else { if(users[reciever].currentPlan >= currentPlan) { TransferHelper.safeTransfer(address(ibg), reciever, amount); IBGPlanDetails[reciever].IBGYieldMatchingIncome = IBGPlanDetails[reciever].IBGYieldMatchingIncome.add(amount); emit YieldMatchingIncome(user, reciever, amount, level, block.timestamp); } else { uint newAmount = ((amount).mul(users[reciever].currentPlan).div(currentPlan)); TransferHelper.safeTransfer(address(ibg), reciever, newAmount); IBGPlanDetails[reciever].IBGYieldMatchingIncome = IBGPlanDetails[reciever].IBGYieldMatchingIncome.add(newAmount); emit YieldMatchingIncome(user, reciever, newAmount, level, block.timestamp); uint lostIncome = amount.sub(newAmount); IBGPlanDetails[reciever].IBGYieldMatchingLostIncome = IBGPlanDetails[reciever].IBGYieldMatchingLostIncome.add(lostIncome); address eligibleUser = getEligibleReceiver(users[reciever].referrer, users[user].currentPlan); TransferHelper.safeTransfer(address(ibg), eligibleUser, lostIncome); IBGPlanDetails[eligibleUser].IBGYieldMatchingIncome = IBGPlanDetails[eligibleUser].IBGYieldMatchingIncome.add(lostIncome); emit YieldMatchingLostIncome(reciever, eligibleUser, lostIncome, level, block.timestamp); emit YieldMatchingIncome(user, eligibleUser, lostIncome, level, block.timestamp); } } reciever = users[reciever].referrer; level++; } } function commisionTransfer(address _from, address _receiver, uint currentPlan, uint distributeAmount, uint _basePercentage) private { TransferHelper.safeTransfer(address(usdt), directCommissionWallet, (distributeAmount.mul(10)).div(100)); uint level = 1; while(level <= 3) { uint amount; amount = ((distributeAmount).mul(directReferralRate[level])).div(100); if(_receiver == address(0)) { TransferHelper.safeTransfer(address(usdt), rootNode, amount); users[rootNode].directReferrerIncome = users[rootNode].directReferrerIncome.add(amount); emit DirectReferralIncome(_from, rootNode, amount, level, block.timestamp); } else { if(users[_receiver].currentPlan >= currentPlan) { TransferHelper.safeTransfer(address(usdt), _receiver, amount); users[_receiver].directReferrerIncome = users[_receiver].directReferrerIncome.add(amount); emit DirectReferralIncome(_from, _receiver, amount, level, block.timestamp); } else { uint newAmount = (((users[_receiver].currentPlan).mul(_basePercentage)).div(100)); newAmount = ((newAmount).mul(directReferralRate[level])).div(100); TransferHelper.safeTransfer(address(usdt), _receiver, newAmount); users[_receiver].directReferrerIncome = users[_receiver].directReferrerIncome.add(newAmount); emit DirectReferralIncome(_from, _receiver, newAmount, level, block.timestamp); uint lostIncome = amount - newAmount; users[_receiver].lostIncome = users[_receiver].lostIncome.add(lostIncome); address eligibleUser = getEligibleReceiver(users[_receiver].referrer, users[_from].currentPlan); TransferHelper.safeTransfer(address(usdt), eligibleUser, lostIncome); users[eligibleUser].directReferrerIncome = users[eligibleUser].directReferrerIncome.add(lostIncome); emit LostIncome(_receiver, eligibleUser, lostIncome, level, block.timestamp); emit DirectReferralIncome(_from, eligibleUser, lostIncome, level, block.timestamp); } } _receiver = users[_receiver].referrer; level++; } } function getEligibleReceiver(address _receiver, uint currentPlan) private view returns(address) { uint walks; while (_receiver != address(0) && walks++ < maxWalks) { if (users[_receiver].currentPlan >= currentPlan) { return _receiver; } _receiver = users[_receiver].referrer; } return rootNode; } function setMaxWalks(uint walks) external onlyOwner { require(walks > 0, 'IBGV0: Invalid walks'); maxWalks = walks; } function withdrawYield(bool onlyYield) external virtual nonReentrant { _withdrawIBGYield(msg.sender, users[msg.sender].investmentCount, onlyYield); } function _withdrawIBGYield(address user, uint cycles, bool onlyYield) private { uint totalYield; uint totalInvestment; for(uint i = 1; i <= cycles; i++) { InvestmentLibrary.Investment storage cycle = cycleDetails[user][i]; if(!cycle.isUnstaked && cycle.plan == 1) { uint daysDiff = (block.timestamp.sub(cycle.investmentTime)).div(SECONDS_IN_DAY); uint count; if(daysDiff >= (cycle.stakingPeriod)) { count = (cycle.stakingPeriod).div(30); cycleDetails[user][i].isUnstaked = true; IBGPlanDetails[user].stakedIBGTokens = IBGPlanDetails[user].stakedIBGTokens.sub(cycle.investment); totalYield = totalYield.add(((cycle.investment).mul(count.mul(cycle.yieldRateValue))).div(100)); IBGPlanDetails[user].withdrawnYield = IBGPlanDetails[user].withdrawnYield.add(totalYield); totalInvestment = totalInvestment.add(cycle.investment); } } else { totalInvestment = totalInvestment.add(cycle.investment); } } totalInvestment = totalInvestment.sub(IBGPlanDetails[user].withdrawnInvestment); if (!onlyYield) { require(totalInvestment > 0 || totalYield > 0, "IBGV0: Zero Yield and Investment"); } else { require(totalYield > 0, "IBGV0: Zero Yield"); } if(totalInvestment > 0 && !onlyYield) { TransferHelper.safeTransfer(address(ibg), user, totalInvestment); IBGPlanDetails[user].withdrawnInvestment = IBGPlanDetails[user].withdrawnInvestment.add(totalInvestment); demotePack(user, (totalInvestment.mul(IBGToUsdt)).div(DECIMAL_FACTOR_IBG)); } if(totalYield == 0) { return; } uint yieldAmount = (totalYield.mul(95)).div(100); TransferHelper.safeTransfer(address(ibg), yieldWallet, ((totalYield).mul(5)).div(100)); IBGPlanDetails[user].IBGYieldIncome = IBGPlanDetails[user].IBGYieldIncome.add(((yieldAmount).mul(90)).div(100)); TransferHelper.safeTransfer(address(ibg), user, ((yieldAmount).mul(90)).div(100)); emit YieldIncome(msg.sender, ((yieldAmount).mul(90)).div(100), block.timestamp); iBGYieldCommission(user, users[user].referrer, users[user].currentPlan, (yieldAmount.mul(10)).div(100)); } function demotePack(address user, uint amount) private { amount = (amount.mul(DECIMAL_FACTOR)).div(DECIMAL_FACTOR_IBG); if(users[user].currentPlan >= amount) { users[user].currentPlan = users[user].currentPlan.sub(amount); } else { users[user].currentPlan = 0; } } function calculateYieldAndInvestment(address user) public view returns(uint withdrawableYield, uint withdrawableInvestment){ uint totalYield; uint totalInvestment; for(uint i = 1; i <= users[user].investmentCount; i++) { InvestmentLibrary.Investment storage cycle = cycleDetails[user][i]; if(!cycle.isUnstaked && cycle.plan == 1) { uint daysDiff = (block.timestamp.sub(cycle.investmentTime)).div(SECONDS_IN_DAY); uint count; if(daysDiff >= (cycle.stakingPeriod)) { count = (cycle.stakingPeriod).div(30); totalYield = totalYield.add(((cycle.investment).mul(count.mul(cycle.yieldRateValue))).div(100)); totalInvestment = totalInvestment.add(cycle.investment); } } else { totalInvestment = totalInvestment.add(cycle.investment); } } totalInvestment = totalInvestment.sub(IBGPlanDetails[user].withdrawnInvestment); return ((totalYield.mul(95)).div(100), totalInvestment); } function calculateIBGTokenPrice() private { uint newValue = totalIBGDistributed.div(increaseIBGAfterLimit); if(newValue > lastRate) { lastRate = newValue; newValue = newValue.mul(increaseRateIBG); IBGToUsdt = (1 * DECIMAL_FACTOR_IBG).add(newValue); } } function getInvestmentDetails(address _user, uint _id) external view returns (uint plan, uint investmentAmount, uint investmentTime, uint stakingPeriod, bool isUnstaked) { return( cycleDetails[_user][_id].plan, cycleDetails[_user][_id].investment, cycleDetails[_user][_id].investmentTime, cycleDetails[_user][_id].stakingPeriod, cycleDetails[_user][_id].isUnstaked ); } function updateDirectReferralRate(uint index, uint value) external virtual onlyOwner { require(index > 0 && index < 4, 'IBGV0: Index length must be between 1 to 3'); require(value > 0 && value <= 100,'IBGV0: Invalid Value'); directReferralRate[index] = value; } function updateYieldMatchingRate(uint index, uint value) external virtual onlyOwner { require(index > 0 && index < 6, 'IBGV0: Index length must be between 1 to 5'); require(value > 0 && value <= 100,'IBGV0: Invalid Value'); yieldMatchingRate[index] = value; } function updatePack(uint packNumber, uint price) external virtual onlyOwner returns(uint, uint) { require((packNumber > 0 && packNumber <= maxPacks.add(1)), "IBGV0: Invalid PackNumber"); require(price > 0, "IBGV0: Invalid Packprice"); packPrice[packNumber] = price; if(packNumber > maxPacks) { maxPacks = packNumber; } return(packNumber, packPrice[packNumber]); } function updatePlan(uint planNumber, string calldata planName) external virtual onlyOwner returns(uint, string memory) { require((planNumber > 0 && planNumber <= maxPlans.add(1)), "IBGV0: Invalid PlanNumber"); require(keccak256(abi.encodePacked(planName)) != keccak256(abi.encodePacked('')), "IBGV0: Invalid Plan name"); plans[planNumber] = planName; if(planNumber > maxPlans) { maxPlans = planNumber; } return(planNumber, plans[planNumber]); } function updateStakingTime(uint timeIndex, uint timeValue) external virtual onlyOwner returns(uint, uint) { require(timeIndex > 0, 'IBGV0: Invalid TimeIndex'); require(timeValue > 0, 'IBGV0: Invalid TimeValue'); stakingTime[timeIndex] = timeValue; return(timeIndex, stakingTime[timeIndex]); } function updateYieldRate(uint timeInDays, uint yieldValue) external virtual onlyOwner returns(uint, uint) { require(timeInDays > 0, 'IBGV0: Invalid YieldIndex'); require(yieldValue > 0, 'IBGV0: Invalid YieldValue'); yieldRate[timeInDays] = yieldValue; return(timeInDays, yieldRate[timeInDays]); } function updateBGBFToken(address _token) external virtual onlyOwner { require(_token != address(0), "IBGV0: Invalid Token Address"); bgbf = IERC20(_token); } function updatePlanStatus(uint plan, bool status) external virtual onlyOwner { require(planActiveStatus[plan] != status, "IBGV0: Plan already has required status"); require(plan >= 1 && plan <= maxPlans, 'IBGV0: Invalid Plan'); planActiveStatus[plan] = status; } function updateTreasuryWallet(address _newWallet) external virtual onlyOwner { require(_newWallet != address(0), 'IBGV0: Invalid Address'); require(_newWallet != treasuryWallet, "IBGV0: Wallet is same as previous"); treasuryWallet = _newWallet; } function updateDirectCommissionWallet(address _newWallet) external virtual onlyOwner { require(_newWallet != address(0), 'IBGV0: Invalid Address'); require(_newWallet != directCommissionWallet, "IBGV0: Wallet is same as previous"); directCommissionWallet = _newWallet; } function updateYieldMatchingWallet(address _newWallet) external virtual onlyOwner { require(_newWallet != address(0), 'IBGV0: Invalid Address'); require(_newWallet != yieldMatchingWallet, "IBGV0: Wallet is same as previous"); yieldMatchingWallet = _newWallet; } function updateYieldWallet(address _newWallet) external virtual onlyOwner { require(_newWallet != address(0), 'IBGV0: Invalid Address'); require(_newWallet != yieldWallet, "IBGV0: Wallet is same as previous"); yieldWallet = _newWallet; } function walletBalance() external virtual onlyOwner { uint value = ibg.balanceOf(address(this)); require(value > 0, "IBGV0: Invalid balance"); TransferHelper.safeTransfer(address(ibg), treasuryWallet, value); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; /** * @title CustomOwnable * @dev This contract has the owner address providing basic authorization control */ contract CustomOwnable { /** * @dev Event to show ownership has been transferred * @param previousOwner representing the address of the previous owner * @param newOwner representing the address of the new owner */ event OwnershipTransferred(address previousOwner, address newOwner); // Owner of the contract address private _owner; /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner(), "CustomOwnable: FORBIDDEN"); _; } /** * @dev The constructor sets the original owner of the contract to the sender account. */ constructor() { _setOwner(msg.sender); } /** * @dev Tells the address of the owner * @return the address of the owner */ function owner() public view returns (address) { return _owner; } /** * @dev Sets a new owner address */ function _setOwner(address newOwner) internal { _owner = newOwner; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "CustomOwnable: FORBIDDEN"); emit OwnershipTransferred(owner(), newOwner); _setOwner(newOwner); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{ value: value }(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; library UserLibrary { struct User { uint referralCount; uint directReferrerIncome; uint lostIncome; uint currentPlan; uint investmentCount; address referrer; } function exists(User storage self) internal view returns (bool) { return self.investmentCount > 0; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; library IBGLibrary { struct IBGPlan { uint IBGTokens; uint stakedIBGTokens; uint IBGYieldIncome; uint IBGYieldMatchingIncome; uint IBGYieldMatchingLostIncome; uint withdrawnInvestment; uint withdrawnYield; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; library InvestmentLibrary { struct Investment { uint plan; uint investment; uint investmentTime; uint stakingPeriod; uint yieldRateValue; bool isUnstaked; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; interface IIBGEvents { event Registration(address indexed _user, address indexed referrer, uint registrationTime); event PackPurchased(address indexed _user, uint indexed _pack, uint _plan, uint currentPackAmount, uint time); event StakedToken(address indexed stakedBy, uint amountStaked, uint plan, uint time, uint stakingPeriod); event DirectReferralIncome(address indexed _from, address indexed receiver, uint incomeRecieved, uint indexed level, uint time); event LostIncome(address indexed _from, address indexed reciever, uint incomeLost, uint indexed level, uint time); event YieldIncome(address indexed user, uint yieldRecieved, uint time); event YieldMatchingIncome(address indexed _from, address indexed receiver, uint incomeRecieved, uint indexed level, uint time); event YieldMatchingLostIncome(address indexed _from, address indexed reciever, uint matchingLostIncome, uint indexed level, uint time); }
{ "optimizer": { "enabled": true, "runs": 999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"incomeRecieved","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"DirectReferralIncome","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"reciever","type":"address"},{"indexed":false,"internalType":"uint256","name":"incomeLost","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"LostIncome","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"uint256","name":"_pack","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_plan","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentPackAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"PackPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"registrationTime","type":"uint256"}],"name":"Registration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountStaked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"plan","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingPeriod","type":"uint256"}],"name":"StakedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldRecieved","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"YieldIncome","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"incomeRecieved","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"YieldMatchingIncome","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"reciever","type":"address"},{"indexed":false,"internalType":"uint256","name":"matchingLostIncome","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"YieldMatchingLostIncome","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IBGPlanDetails","outputs":[{"internalType":"uint256","name":"IBGTokens","type":"uint256"},{"internalType":"uint256","name":"stakedIBGTokens","type":"uint256"},{"internalType":"uint256","name":"IBGYieldIncome","type":"uint256"},{"internalType":"uint256","name":"IBGYieldMatchingIncome","type":"uint256"},{"internalType":"uint256","name":"IBGYieldMatchingLostIncome","type":"uint256"},{"internalType":"uint256","name":"withdrawnInvestment","type":"uint256"},{"internalType":"uint256","name":"withdrawnYield","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IBGToUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SERVICE_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculateYieldAndInvestment","outputs":[{"internalType":"uint256","name":"withdrawableYield","type":"uint256"},{"internalType":"uint256","name":"withdrawableInvestment","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"cycleDetails","outputs":[{"internalType":"uint256","name":"plan","type":"uint256"},{"internalType":"uint256","name":"investment","type":"uint256"},{"internalType":"uint256","name":"investmentTime","type":"uint256"},{"internalType":"uint256","name":"stakingPeriod","type":"uint256"},{"internalType":"uint256","name":"yieldRateValue","type":"uint256"},{"internalType":"bool","name":"isUnstaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"directReferralRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getInvestmentDetails","outputs":[{"internalType":"uint256","name":"plan","type":"uint256"},{"internalType":"uint256","name":"investmentAmount","type":"uint256"},{"internalType":"uint256","name":"investmentTime","type":"uint256"},{"internalType":"uint256","name":"stakingPeriod","type":"uint256"},{"internalType":"bool","name":"isUnstaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"increaseIBGAfterLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"increaseRateIBG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_ibg","type":"address"},{"internalType":"address","name":"_usdt","type":"address"},{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pack","type":"uint256"},{"internalType":"uint256","name":"_plan","type":"uint256"},{"internalType":"uint256","name":"stakingPeriod","type":"uint256"}],"name":"investment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pack","type":"uint256"},{"internalType":"uint256","name":"_plan","type":"uint256"},{"internalType":"uint256","name":"stakingPeriod","type":"uint256"}],"name":"investmentAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"packPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"planActiveStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"plans","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_pack","type":"uint256"},{"internalType":"uint256","name":"_plan","type":"uint256"},{"internalType":"uint256","name":"stakingPeriod","type":"uint256"}],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_pack","type":"uint256"},{"internalType":"uint256","name":"_plan","type":"uint256"},{"internalType":"uint256","name":"stakingPeriod","type":"uint256"}],"name":"registerAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"walks","type":"uint256"}],"name":"setMaxWalks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"plan","type":"uint256"}],"name":"setPackagePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalIBGDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"updateBGBFToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateDirectCommissionWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateDirectReferralRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"packNumber","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updatePack","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"planNumber","type":"uint256"},{"internalType":"string","name":"planName","type":"string"}],"name":"updatePlan","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plan","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updatePlanStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeIndex","type":"uint256"},{"internalType":"uint256","name":"timeValue","type":"uint256"}],"name":"updateStakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateYieldMatchingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateYieldMatchingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInDays","type":"uint256"},{"internalType":"uint256","name":"yieldValue","type":"uint256"}],"name":"updateYieldRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateYieldWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"referralCount","type":"uint256"},{"internalType":"uint256","name":"directReferrerIncome","type":"uint256"},{"internalType":"uint256","name":"lostIncome","type":"uint256"},{"internalType":"uint256","name":"currentPlan","type":"uint256"},{"internalType":"uint256","name":"investmentCount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onlyYield","type":"bool"}],"name":"withdrawYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"yieldMatchingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"yieldRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506200001d3362000027565b6001805562000049565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b61564a80620000596000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c806378b4adb411610186578063b7b8eb73116100e3578063e474388111610097578063f8c8765e11610071578063f8c8765e14610608578063fa224fb01461061b578063fa4a0b0c1461062e576102de565b8063e4743881146105cd578063ec593688146105d5578063f2fde38b146105f5576102de565b8063d3374436116100c8578063d337443614610594578063db1717cd146105a7578063dd9ec215146105ba576102de565b8063b7b8eb7314610568578063cd0a314b1461058c576102de565b806394ade59b1161013a578063a87430ba1161011f578063a87430ba14610510578063b162061614610535578063b685bc7b14610555576102de565b806394ade59b146104f5578063a730eeb1146104fd576102de565b8063859d8fd11161016b578063859d8fd1146104c75780638773b9ae146104da5780638da5cb5b146104ed576102de565b806378b4adb4146104a1578063809d458d146104b4576102de565b806342f0f4131161023f5780635b31b635116101f35780636c58a1bd116101cd5780636c58a1bd1461045557806374f576521461047b5780637838e4081461048e576102de565b80635b31b63514610432578063613280741461043a5780636c2d32fe1461044d576102de565b80634ba43fad116102245780634ba43fad146103f65780634e795b1c146104175780635482e18a1461042a576102de565b806342f0f413146103c25780634a991450146103d5576102de565b8063206799bc116102965780633a774b481161027b5780633a774b481461038957806340649ad51461039c57806341cf5f33146103af576102de565b8063206799bc1461034f5780632f48ab7d14610374576102de565b80630dfb80d0116102c75780630dfb80d0146103165780631bce0bdc146103295780631c010b511461033c576102de565b80630768ea9c146102e35780630b51ff78146102f8575b600080fd5b6102f66102f13660046148c5565b610641565b005b610300610755565b60405161030d919061521a565b60405180910390f35b6102f66103243660046147b0565b61075b565b6102f6610337366004614696565b6107c2565b6102f661034a3660046147ef565b6108c2565b61036261035d36600461474f565b61096d565b60405161030d969594939291906152e6565b61037c6109b0565b60405161030d919061498a565b6102f6610397366004614778565b6109cc565b6102f66103aa366004614696565b610a27565b6102f66103bd366004614703565b610b7c565b6103006103d03660046147ef565b610c84565b6103e86103e33660046148c5565b610c96565b60405161030d929190615244565b61040961040436600461484e565b610dc9565b60405161030d929190615223565b6103006104253660046147ef565b610fe6565b610300610ff8565b610300611000565b6103006104483660046147ef565b611006565b610300611018565b610468610463366004614696565b61101e565b60405161030d9796959493929190615310565b6103006104893660046147ef565b61105b565b6102f661049c36600461481f565b61106d565b6103006104af3660046147ef565b6111af565b6102f66104c2366004614696565b6111c1565b6102f66104d5366004614696565b611316565b6102f66104e8366004614778565b61146b565b61037c6116fe565b61030061171a565b6102f661050b3660046148c5565b611720565b61052361051e366004614696565b6117f9565b60405161030d969594939291906152a8565b6105486105433660046147ef565b611844565b60405161030d9190614a34565b6102f6610563366004614696565b6118de565b61057b61057636600461474f565b611a33565b60405161030d959493929190615283565b6102f6611a8b565b6103e86105a23660046148c5565b611c07565b6103e86105b53660046148c5565b611d01565b6102f66105c83660046148e6565b611dfb565b610300611ff0565b6105e86105e33660046147ef565b611ff6565b60405161030d9190614a29565b6102f6610603366004614696565b61200b565b6102f66106163660046146b0565b61210d565b6102f66106293660046148c5565b612802565b6103e861063c366004614696565b61290d565b6106496116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60405180910390fd5b6000821180156106c65750600682105b6106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614e5e565b60008111801561070d575060648111155b610743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ef2565b6000918252601e602052604090912055565b60115481565b60026001541415610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600155336000818152600660205260409020600401546107bb919083612aa4565b5060018055565b6107ca6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461082e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff811661087b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061503c565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108ca6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008111610968576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614bb5565b600e55565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415610a09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600155610a1d33858585856000612f9b565b5050600180555050565b610a2f6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff8116610ae0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60145473ffffffffffffffffffffffffffffffffffffffff82811691161415610b35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610b846116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b636087f14f4210610c25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d82565b60026001541415610c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600181905550610c7985858585856001612f9b565b505060018055505050565b601a6020526000908152604090205481565b600080610ca16116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b600084118015610d225750600c54610d1e9060016132a8565b8411155b610d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906151ac565b60008311610d92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614f29565b6000848152601a60205260409020839055600c54841115610db357600c8490555b5050506000818152601a60205260409020549091565b60006060610dd56116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b600085118015610e565750600d54610e529060016132a8565b8511155b610e8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614fce565b604051602001610e9b90614987565b604051602081830303815290604052805190602001208484604051602001610ec4929190614977565b604051602081830303815290604052805190602001201415610f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614e27565b6000858152601860205260409020610f2b908585614547565b50600d54851115610f3c57600d8590555b600085815260186020526040902080548691908190610f5a9061554a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f869061554a565b8015610fd35780601f10610fa857610100808354040283529160200191610fd3565b820191906000526020600020905b815481529060010190602001808311610fb657829003601f168201915b5050505050905091509150935093915050565b601b6020526000908152604090205481565b636087f14f81565b60125481565b601c6020526000908152604090205481565b600f5481565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b601d6020526000908152604090205481565b6110756116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008281526019602052604090205460ff1615158115151415611128576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614bec565b6001821015801561113b5750600d548211155b611171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60009182526019602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b601e6020526000908152604090205481565b6111c96116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff811661127a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60135473ffffffffffffffffffffffffffffffffffffffff828116911614156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61131e6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff81166113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60155473ffffffffffffffffffffffffffffffffffffffff82811691161415611424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6114736116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b636087f14f4210611514576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d82565b60026001541415611551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600190815583108015906115695750600c548311155b61159f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615175565b600182101580156115b25750600d548211155b6115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60008281526019602052604090205460ff16611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d14565b60018110158015611642575060038111155b611678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ebb565b73ffffffffffffffffffffffffffffffffffffffff841660009081526006602052604090206116a6906132bd565b6116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b7e565b610a1d848484601a6000888152602001908152602001600020548560016132ca565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600e5481565b6117286116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008211801561179d575060648211155b6117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614aea565b80600114156117e657600a8290556117f5565b80600214156117f557600b8290555b5050565b600660205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909173ffffffffffffffffffffffffffffffffffffffff1686565b6018602052600090815260409020805461185d9061554a565b80601f01602080910402602001604051908101604052809291908181526020018280546118899061554a565b80156118d65780601f106118ab576101008083540402835291602001916118d6565b820191906000526020600020905b8154815290600101906020018083116118b957829003601f168201915b505050505081565b6118e66116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461194a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff8116611997576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60165473ffffffffffffffffffffffffffffffffffffffff828116911614156119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600860209081526040808320938352929052208054600182015460028301546003840154600590940154929491939092909160ff90911690565b611a936116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611b4e90309060040161498a565b60206040518083038186803b158015611b6657600080fd5b505afa158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e9190614807565b905060008111611bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614db9565b600354601354611c049173ffffffffffffffffffffffffffffffffffffffff9081169116836135d7565b50565b600080611c126116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008411611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614cdd565b60008311611cea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ab3565b50506000828152601b602052604090208190559091565b600080611d0c6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008411611daa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614f60565b60008311611de4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614f97565b50506000828152601c602052604090208190559091565b60026001541415611e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b600260019081558310801590611e505750600c548311155b611e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615175565b60018210158015611e995750600d548211155b611ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60008281526019602052604090205460ff16611f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d14565b60018110158015611f29575060038111155b611f5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ebb565b336000908152600660205260409020611f77906132bd565b611fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b7e565b6000838152601a6020526040902054600254611fe19073ffffffffffffffffffffffffffffffffffffffff16333084613700565b610a1d338585848660006132ca565b60105481565b60196020526000908152604090205460ff1681565b6120136116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612077576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff81166120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06120ed6116fe565b826040516120fc9291906149ab565b60405180910390a1611c0481613824565b60095460ff161561214a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906151e3565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561217e84613824565b6002805473ffffffffffffffffffffffffffffffffffffffff8085167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600380548684169083161790556005805484841690831681179182905560138054841682179055601480548416821781556015805485168317905560168054909416909117909255909116600090815260066020526040902060016004909101819055600a918255600b9190915561224390670de0b6b3a7640000906154c6565b600f5567016345785d8a0000601155612267670de0b6b3a7640000620186a06154c6565b6010556006600c556003600d8190556019600e5560287f9de6abd965d55c3bb0cdbf6fa175050624c6ff8fe86f682dc08f2a450ede227855601e7f64f63e8728b8a1c8ce5fe5058430331934c8d0c3d8a2f2793f19836c1447addb5560147f628971151cb24dee737f6abea9bff35ce226e4c8f5760305d49b37257283909055604080518082019091529081527f494247000000000000000000000000000000000000000000000000000000000060208281019182526001600052601890529051612353917ff3794665d3af9b6fb6f858b70185898134f96768ef31c325d52e04f0ac195a4d916145e9565b5060408051808201909152600481527f4247424600000000000000000000000000000000000000000000000000000000602080830191825260026000526018905290516123c1917f2bacf7cca723d030d12aee795132f2c5f2d14ad131f16f3f27eeba3e79d18b8c916145e9565b5060408051808201909152600781527f424c454e444544000000000000000000000000000000000000000000000000006020808301918252600360005260189052905161242f917f7a6340a7048c03c55288da75abed74d2ce9194201bafb03be53c0a7cca591495916145e9565b506001600081905260196020527ffc941c3961fb6541da34150022cddf959da0fb2353866a6bfbd249c2da09291480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055612494620f424060646154c6565b6001600052601a6020527ff88cd8d612926ebb404e40725c01084b6e9b3ce0344cde068570342cbd448c61556124cf620f42406103e86154c6565b6002600052601a6020527f4c287b3e2c2cb129ae3ba596d613d760b15affdac7242e12903c37a886ea1c4f5561250a620f42406113886154c6565b6003600052601a6020527f4ac83fca211703e3ddb90093cd219714e5e3715bf0b4fd15b0441390534a24e255612545620f42406127106154c6565b6004600052601a6020527f06b28f262ad931a15c9e47271fc159a891b2bcb0da2659cac5bbfed4886cf26e55612580620f424061c3506154c6565b6005600052601a6020527f82f07edc09f3a46c1925d02252613a7fcc7be7d03b538b0c268df85f2f13a7ab556125bc620f4240620186a06154c6565b7fe7513fcd4f864b78baf560f46c15980b6aa41b90911efc4ce7454b83cce613b155601e7f9fafca4c9c0d5c2cbf85f49fd8ab8212430ce78c2a0cb75b51e0f9c4f9ace003819055603c7f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a555605a7f804a3d0621e73505f5f0c57c922f3e57d6b48e175551184eb12f80d7b4a9c7835560057f812aa1d85a6a479a48a560ac351450fc5d9e648fda9b4aabfb492f78fb8940e981905560067fbf5937da12a4f13f35054382bd8dc9d350c6e61c108f5992e567ebba24b5a19a5560077f9eb86fd661b18c93444823eda01137ecfaa938537d1ef55d64a42a60a67046d05560208290527f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e98f9190915560147f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c555600a7f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b08808190557f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e75414128190556000919091527f86d72ecda2f02015d839a182675ed983893a479e8f4279fb5498fd7244fa5dfe5561278d6002670de0b6b3a76400006153d7565b6005805473ffffffffffffffffffffffffffffffffffffffff9081166000908152600660205260408082206003019490945591549251919216907fcee02352690bbe849827b930e997d1ad93ad17fd3e6ab69fd65a88d342532120906127f490429061521a565b60405180910390a350505050565b61280a6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461286e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008211801561287e5750600482105b6128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614c49565b6000811180156128c5575060648111155b6128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ef2565b6000918252601d602052604090912055565b600080808060015b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600401548111612a535773ffffffffffffffffffffffffffffffffffffffff861660009081526008602090815260408083208484529091529020600581015460ff1615801561298a575080546001145b15612a2d5760006129b5620151806129af84600201544261386b90919063ffffffff16565b90613877565b9050600082600301548210612a265760038301546129d490601e613877565b9050612a0a612a0360646129af6129f887600401548661388390919063ffffffff16565b600188015490613883565b87906132a8565b9550612a238360010154866132a890919063ffffffff16565b94505b5050612a40565b6001810154612a3d9084906132a8565b92505b5080612a4b8161559e565b915050612915565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060050154612a8890829061386b565b9050612a9a60646129af84605f613883565b9350915050915091565b60008060015b848111612c9f5773ffffffffffffffffffffffffffffffffffffffff861660009081526008602090815260408083208484529091529020600581015460ff16158015612af7575080546001145b15612c79576000612b1c620151806129af84600201544261386b90919063ffffffff16565b9050600082600301548210612c72576003830154612b3b90601e613877565b73ffffffffffffffffffffffffffffffffffffffff8a166000818152600860209081526040808320898452825280832060050180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558881015494845260079092529091200154919250612bb8919061386b565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600760205260409020600101556004830154612c0090612a03906064906129af906129f8908690613883565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260076020526040902060060154909650612c3690876132a8565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600760205260409020600601556001830154612c6f9086906132a8565b94505b5050612c8c565b6001810154612c899084906132a8565b92505b5080612c978161559e565b915050612aaa565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060050154612cd490829061386b565b905082612d25576000811180612cea5750600082115b612d20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614a7e565b612d5f565b60008211612d5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615073565b600081118015612d6d575082155b15612e1957600354612d969073ffffffffffffffffffffffffffffffffffffffff1686836135d7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060050154612dc990826132a8565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260076020526040902060050155600f54612e19908690612e1490670de0b6b3a7640000906129af908690613883565b61388f565b81612e25575050612f96565b6000612e3760646129af85605f613883565b600354601654919250612e739173ffffffffffffffffffffffffffffffffffffffff9182169116612e6e60646129af886005613883565b6135d7565b612eb5612e8660646129af84605a613883565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260076020526040902060020154906132a8565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260076020526040902060020191909155600354612efb911687612e6e60646129af86605a613883565b337f1af49730fbda4f42f72d4ef7d8fb66ffbfa54a952fd596c91f65615fd75bf8f0612f2d60646129af85605a613883565b42604051612f3c929190615244565b60405180910390a273ffffffffffffffffffffffffffffffffffffffff80871660009081526006602052604090206005810154600390910154612f929289921690612f8d60646129af87600a613883565b613966565b5050505b505050565b60018410158015612fae5750600c548411155b612fe4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615175565b60018310158015612ff75750600d548311155b61302d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60008381526019602052604090205460ff16613075576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d14565b60018210158015613087575060038211155b6130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ebb565b73ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604090206130eb906132bd565b15613122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d4b565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020613150906132bd565b613186576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ca6565b6000848152601a6020526040902054816131bf576002546131bf9073ffffffffffffffffffffffffffffffffffffffff16883084613700565b73ffffffffffffffffffffffffffffffffffffffff87811660009081526006602052604080822060050180547fffffffffffffffffffffffff000000000000000000000000000000000000000016938a1693841790559181529081208054916132278361559e565b91905055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fcee02352690bbe849827b930e997d1ad93ad17fd3e6ab69fd65a88d34253212042604051613289919061521a565b60405180910390a361329f8786868487876132ca565b50505050505050565b60006132b48284615340565b90505b92915050565b600481015415155b919050565b73ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604081206004018054916132fe8361559e565b909155505073ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604090206003015461333690846132a8565b73ffffffffffffffffffffffffffffffffffffffff871660009081526006602090815260408083206003808201959095556008835281842060049182015485528352818420426002820155898155878552601b845282852054958101869055948452601c9092529091205490820155600185141561357b5760006133c9620f42406129af87670de0b6b3a7640000613883565b90508261343357600f546133e9906129af83670de0b6b3a7640000613883565b600254601354600a549293506134339273ffffffffffffffffffffffffffffffffffffffff9283169290911690612e6e906064906129af9061342c90839061386b565b8b90613883565b6001820181905560125461344790826132a8565b60125573ffffffffffffffffffffffffffffffffffffffff881660009081526007602052604090205461347a90826132a8565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600760205260409020908155600101546134b090826132a8565b73ffffffffffffffffffffffffffffffffffffffff8916600081815260076020526040908190206001019290925590517f2749de7bfe0ac6f01cba89f048beeae6fc98533eda1311ac36116b8d5feec558906135139084908a9042908a90615268565b60405180910390a2613523613eb6565b826135795773ffffffffffffffffffffffffffffffffffffffff808916600090815260066020526040902060050154600a54613579928b9216908890613571906064906129af908490613883565b600a54613f13565b505b858773ffffffffffffffffffffffffffffffffffffffff167f02da70551ce63ed18794b8eaf140e11d80315a361a87b3cdcb6b7df3bd34552e8787426040516135c693929190615252565b60405180910390a350505050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401613609929190614a03565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613657919061495b565b6000604051808303816000865af19150503d8060008114613694576040519150601f19603f3d011682016040523d82523d6000602084013e613699565b606091505b50915091508180156136c35750805115806136c35750808060200190518101906136c391906147d3565b6136f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614a47565b5050505050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613734939291906149d2565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613782919061495b565b6000604051808303816000865af19150503d80600081146137bf576040519150601f19603f3d011682016040523d82523d6000602084013e6137c4565b606091505b50915091508180156137ee5750805115806137ee5750808060200190518101906137ee91906147d3565b612f92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150e1565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006132b48284615503565b60006132b48284615358565b60006132b482846154c6565b6138a8670de0b6b3a76400006129af83620f4240613883565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902060030154909150811161393b5773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015461390d908261386b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260409020600301556117f5565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040812060030155565b60035460155460019161399d9173ffffffffffffffffffffffffffffffffffffffff9182169116612e6e60646129af876014613883565b600581116136f9576000818152601e60205260408120546139c6906064906129af908690613883565b905073ffffffffffffffffffffffffffffffffffffffff8516613abd57600354600554613a0d9173ffffffffffffffffffffffffffffffffffffffff9081169116836135d7565b60055473ffffffffffffffffffffffffffffffffffffffff16600090815260076020526040902060030154613a4290826132a8565b6005805473ffffffffffffffffffffffffffffffffffffffff90811660009081526007602052604090819020600301939093559054915184928216918916907f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f190613ab09086904290615244565b60405180910390a4613e75565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600301548411613ba957600354613b109073ffffffffffffffffffffffffffffffffffffffff1686836135d7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060030154613b4390826132a8565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260076020526040908190206003019390935591518492918916907f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f190613ab09086904290615244565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040812060030154613be39086906129af908590613883565b600354909150613c0a9073ffffffffffffffffffffffffffffffffffffffff1687836135d7565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260076020526040902060030154613c3d90826132a8565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260076020526040908190206003019390935591518592918a16907f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f190613ca39086904290615244565b60405180910390a46000613cb7838361386b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260076020526040902060040154909150613ced90826132a8565b73ffffffffffffffffffffffffffffffffffffffff80891660009081526007602090815260408083206004019490945560069052828120600501548b83168252928120600301549092613d41921690614481565b600354909150613d689073ffffffffffffffffffffffffffffffffffffffff1682846135d7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260076020526040902060030154613d9b90836132a8565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260076020526040908190206003019390935591518792918b16907faafd4d9ae432ed91473f989879d072b4ef2fad53e5144d3a2bb2836b811b490f90613e019087904290615244565b60405180910390a4848173ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f18542604051613e69929190615244565b60405180910390a45050505b73ffffffffffffffffffffffffffffffffffffffff9485166000908152600660205260409020600501549094169381613ead8161559e565b9250505061399d565b6000613ecf60105460125461387790919063ffffffff16565b9050601754811115611c04576017819055601154613eee908290613883565b9050613f0d81613f07670de0b6b3a764000060016154c6565b906132a8565b600f5550565b600254601454613f479173ffffffffffffffffffffffffffffffffffffffff9081169116612e6e60646129af87600a613883565b60015b60038111612f92576000818152601d6020526040812054613f73906064906129af908790613883565b905073ffffffffffffffffffffffffffffffffffffffff861661406a57600254600554613fba9173ffffffffffffffffffffffffffffffffffffffff9081169116836135d7565b60055473ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040902060010154613fef90826132a8565b6005805473ffffffffffffffffffffffffffffffffffffffff90811660009081526006602052604090819020600101939093559054915184928216918a16907f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de9061405d9086904290615244565b60405180910390a4614440565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600301548511614156576002546140bd9073ffffffffffffffffffffffffffffffffffffffff1687836135d7565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600101546140f090826132a8565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260066020526040908190206001019390935591518492918a16907f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de9061405d9086904290615244565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260066020526040812060030154614190906064906129af9087613883565b6000848152601d60205260409020549091506141b4906064906129af908490613883565b6002549091506141db9073ffffffffffffffffffffffffffffffffffffffff1688836135d7565b73ffffffffffffffffffffffffffffffffffffffff871660009081526006602052604090206001015461420e90826132a8565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260066020526040908190206001019390935591518592918b16907f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de906142749086904290615244565b60405180910390a460006142888284615503565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600660205260409020600201549091506142be90826132a8565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526006602052604080822060028101949094556005909301548c8316825292812060030154909261430c921690614481565b6002549091506143339073ffffffffffffffffffffffffffffffffffffffff1682846135d7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090206001015461436690836132a8565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260066020526040908190206001019390935591518792918c16907f03169690e94be1d5ca065ab8ceb20637fcca9711064dbc0f574893bd34391b83906143cc9087904290615244565b60405180910390a4848173ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de8542604051614434929190615244565b60405180910390a45050505b73ffffffffffffffffffffffffffffffffffffffff95861660009081526006602052604090206005015490951694816144788161559e565b92505050613f4a565b6000805b73ffffffffffffffffffffffffffffffffffffffff8416158015906144b65750600e54816144b28161559e565b9250105b156145265773ffffffffffffffffffffffffffffffffffffffff841660009081526006602052604090206003015483116144f357839150506132b7565b73ffffffffffffffffffffffffffffffffffffffff93841660009081526006602052604090206005015490931692614485565b505060055473ffffffffffffffffffffffffffffffffffffffff1692915050565b8280546145539061554a565b90600052602060002090601f01602090048101928261457557600085556145d9565b82601f106145ac578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556145d9565b828001600101855582156145d9579182015b828111156145d95782358255916020019190600101906145be565b506145e592915061465d565b5090565b8280546145f59061554a565b90600052602060002090601f01602090048101928261461757600085556145d9565b82601f1061463057805160ff19168380011785556145d9565b828001600101855582156145d9579182015b828111156145d9578251825591602001919060010190614642565b5b808211156145e5576000815560010161465e565b803573ffffffffffffffffffffffffffffffffffffffff811681146132c557600080fd5b6000602082840312156146a7578081fd5b6132b482614672565b600080600080608085870312156146c5578283fd5b6146ce85614672565b93506146dc60208601614672565b92506146ea60408601614672565b91506146f860608601614672565b905092959194509250565b600080600080600060a0868803121561471a578081fd5b61472386614672565b945061473160208701614672565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215614761578182fd5b61476a83614672565b946020939093013593505050565b6000806000806080858703121561478d578384fd5b61479685614672565b966020860135965060408601359560600135945092505050565b6000602082840312156147c1578081fd5b81356147cc81615606565b9392505050565b6000602082840312156147e4578081fd5b81516147cc81615606565b600060208284031215614800578081fd5b5035919050565b600060208284031215614818578081fd5b5051919050565b60008060408385031215614831578182fd5b82359150602083013561484381615606565b809150509250929050565b600080600060408486031215614862578283fd5b83359250602084013567ffffffffffffffff80821115614880578384fd5b818601915086601f830112614893578384fd5b8135818111156148a1578485fd5b8760208285010111156148b2578485fd5b6020830194508093505050509250925092565b600080604083850312156148d7578182fd5b50508035926020909101359150565b6000806000606084860312156148fa578283fd5b505081359360208301359350604090920135919050565b6000815180845261492981602086016020860161551a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000825161496d81846020870161551a565b9190910192915050565b6000828483379101908152919050565b90565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6000602082526132b46020830184614911565b6020808252601f908201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604082015260600190565b6020808252818101527f49424756303a205a65726f205969656c6420616e6420496e766573746d656e74604082015260600190565b60208082526018908201527f49424756303a20496e76616c69642054696d6556616c75650000000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c69642070657263656e7461676500000000000000604082015260600190565b60208082526021908201527f49424756303a2057616c6c65742069732073616d652061732070726576696f7560408201527f7300000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f49424756303a2055736572206e6f742072656769737465726564207965740000604082015260600190565b60208082526014908201527f49424756303a20496e76616c69642077616c6b73000000000000000000000000604082015260600190565b60208082526027908201527f49424756303a20506c616e20616c72656164792068617320726571756972656460408201527f2073746174757300000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f49424756303a20496e646578206c656e677468206d757374206265206265747760408201527f65656e203120746f203300000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f49424756303a20526566657272657220646f6573206e6f742065786973747300604082015260600190565b60208082526018908201527f49424756303a20496e76616c69642054696d65496e6465780000000000000000604082015260600190565b6020808252601d908201527f49424756303a20506c616e206973206e6f742061637469766520796574000000604082015260600190565b60208082526012908201527f49424756303a20557365725f4578697374730000000000000000000000000000604082015260600190565b60208082526016908201527f49424756303a2053657276696365204578706972656400000000000000000000604082015260600190565b60208082526016908201527f49424756303a20496e76616c69642062616c616e636500000000000000000000604082015260600190565b60208082526013908201527f49424756303a20496e76616c696420506c616e00000000000000000000000000604082015260600190565b60208082526018908201527f49424756303a20496e76616c696420506c616e206e616d650000000000000000604082015260600190565b6020808252602a908201527f49424756303a20496e646578206c656e677468206d757374206265206265747760408201527f65656e203120746f203500000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f49424756303a20496e76616c6964207374616b696e6720706572696f64000000604082015260600190565b60208082526014908201527f49424756303a20496e76616c69642056616c7565000000000000000000000000604082015260600190565b60208082526018908201527f49424756303a20496e76616c6964205061636b70726963650000000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c6964205969656c64496e64657800000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c6964205969656c6456616c756500000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c696420506c616e4e756d62657200000000000000604082015260600190565b60208082526018908201527f437573746f6d4f776e61626c653a20464f5242494444454e0000000000000000604082015260600190565b6020808252601c908201527f49424756303a20496e76616c696420546f6b656e204164647265737300000000604082015260600190565b60208082526011908201527f49424756303a205a65726f205969656c64000000000000000000000000000000604082015260600190565b60208082526016908201527f49424756303a20496e76616c6964204164647265737300000000000000000000604082015260600190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160408201527f494c454400000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526013908201527f49424756303a20496e76616c6964205061636b00000000000000000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c6964205061636b4e756d62657200000000000000604082015260600190565b6020808252600e908201527f49424756303a20494e56414c4944000000000000000000000000000000000000604082015260600190565b90815260200190565b60008382526040602083015261523c6040830184614911565b949350505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b9485526020850193909352604084019190915260608301521515608082015260a00190565b958652602086019490945260408501929092526060840152608083015273ffffffffffffffffffffffffffffffffffffffff1660a082015260c00190565b9586526020860194909452604085019290925260608401526080830152151560a082015260c00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60008219821115615353576153536155d7565b500190565b60008261538c577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b80825b60018086116153a357506153ce565b8187048211156153b5576153b56155d7565b808616156153c257918102915b9490941c938002615394565b94509492505050565b60006132b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851684600082615411575060016147cc565b8161541e575060006147cc565b8160018114615434576002811461543e5761546b565b60019150506147cc565b60ff84111561544f5761544f6155d7565b6001841b915084821115615465576154656155d7565b506147cc565b5060208310610133831016604e8410600b841016171561549e575081810a83811115615499576154996155d7565b6147cc565b6154ab8484846001615391565b8086048211156154bd576154bd6155d7565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154fe576154fe6155d7565b500290565b600082821015615515576155156155d7565b500390565b60005b8381101561553557818101518382015260200161551d565b83811115615544576000848401525b50505050565b60028104600182168061555e57607f821691505b60208210811415615598577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155d0576155d06155d7565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8015158114611c0457600080fdfea26469706673582212202c5899bd0dbf0dc71b25f28cf7ce0280bb830fd07c82cbf0727f03bc0fdaee2264736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102de5760003560e01c806378b4adb411610186578063b7b8eb73116100e3578063e474388111610097578063f8c8765e11610071578063f8c8765e14610608578063fa224fb01461061b578063fa4a0b0c1461062e576102de565b8063e4743881146105cd578063ec593688146105d5578063f2fde38b146105f5576102de565b8063d3374436116100c8578063d337443614610594578063db1717cd146105a7578063dd9ec215146105ba576102de565b8063b7b8eb7314610568578063cd0a314b1461058c576102de565b806394ade59b1161013a578063a87430ba1161011f578063a87430ba14610510578063b162061614610535578063b685bc7b14610555576102de565b806394ade59b146104f5578063a730eeb1146104fd576102de565b8063859d8fd11161016b578063859d8fd1146104c75780638773b9ae146104da5780638da5cb5b146104ed576102de565b806378b4adb4146104a1578063809d458d146104b4576102de565b806342f0f4131161023f5780635b31b635116101f35780636c58a1bd116101cd5780636c58a1bd1461045557806374f576521461047b5780637838e4081461048e576102de565b80635b31b63514610432578063613280741461043a5780636c2d32fe1461044d576102de565b80634ba43fad116102245780634ba43fad146103f65780634e795b1c146104175780635482e18a1461042a576102de565b806342f0f413146103c25780634a991450146103d5576102de565b8063206799bc116102965780633a774b481161027b5780633a774b481461038957806340649ad51461039c57806341cf5f33146103af576102de565b8063206799bc1461034f5780632f48ab7d14610374576102de565b80630dfb80d0116102c75780630dfb80d0146103165780631bce0bdc146103295780631c010b511461033c576102de565b80630768ea9c146102e35780630b51ff78146102f8575b600080fd5b6102f66102f13660046148c5565b610641565b005b610300610755565b60405161030d919061521a565b60405180910390f35b6102f66103243660046147b0565b61075b565b6102f6610337366004614696565b6107c2565b6102f661034a3660046147ef565b6108c2565b61036261035d36600461474f565b61096d565b60405161030d969594939291906152e6565b61037c6109b0565b60405161030d919061498a565b6102f6610397366004614778565b6109cc565b6102f66103aa366004614696565b610a27565b6102f66103bd366004614703565b610b7c565b6103006103d03660046147ef565b610c84565b6103e86103e33660046148c5565b610c96565b60405161030d929190615244565b61040961040436600461484e565b610dc9565b60405161030d929190615223565b6103006104253660046147ef565b610fe6565b610300610ff8565b610300611000565b6103006104483660046147ef565b611006565b610300611018565b610468610463366004614696565b61101e565b60405161030d9796959493929190615310565b6103006104893660046147ef565b61105b565b6102f661049c36600461481f565b61106d565b6103006104af3660046147ef565b6111af565b6102f66104c2366004614696565b6111c1565b6102f66104d5366004614696565b611316565b6102f66104e8366004614778565b61146b565b61037c6116fe565b61030061171a565b6102f661050b3660046148c5565b611720565b61052361051e366004614696565b6117f9565b60405161030d969594939291906152a8565b6105486105433660046147ef565b611844565b60405161030d9190614a34565b6102f6610563366004614696565b6118de565b61057b61057636600461474f565b611a33565b60405161030d959493929190615283565b6102f6611a8b565b6103e86105a23660046148c5565b611c07565b6103e86105b53660046148c5565b611d01565b6102f66105c83660046148e6565b611dfb565b610300611ff0565b6105e86105e33660046147ef565b611ff6565b60405161030d9190614a29565b6102f6610603366004614696565b61200b565b6102f66106163660046146b0565b61210d565b6102f66106293660046148c5565b612802565b6103e861063c366004614696565b61290d565b6106496116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60405180910390fd5b6000821180156106c65750600682105b6106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614e5e565b60008111801561070d575060648111155b610743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ef2565b6000918252601e602052604090912055565b60115481565b60026001541415610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600155336000818152600660205260409020600401546107bb919083612aa4565b5060018055565b6107ca6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461082e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff811661087b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061503c565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108ca6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008111610968576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614bb5565b600e55565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415610a09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600155610a1d33858585856000612f9b565b5050600180555050565b610a2f6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff8116610ae0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60145473ffffffffffffffffffffffffffffffffffffffff82811691161415610b35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610b846116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b636087f14f4210610c25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d82565b60026001541415610c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600181905550610c7985858585856001612f9b565b505060018055505050565b601a6020526000908152604090205481565b600080610ca16116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b600084118015610d225750600c54610d1e9060016132a8565b8411155b610d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906151ac565b60008311610d92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614f29565b6000848152601a60205260409020839055600c54841115610db357600c8490555b5050506000818152601a60205260409020549091565b60006060610dd56116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b600085118015610e565750600d54610e529060016132a8565b8511155b610e8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614fce565b604051602001610e9b90614987565b604051602081830303815290604052805190602001208484604051602001610ec4929190614977565b604051602081830303815290604052805190602001201415610f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614e27565b6000858152601860205260409020610f2b908585614547565b50600d54851115610f3c57600d8590555b600085815260186020526040902080548691908190610f5a9061554a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f869061554a565b8015610fd35780601f10610fa857610100808354040283529160200191610fd3565b820191906000526020600020905b815481529060010190602001808311610fb657829003601f168201915b5050505050905091509150935093915050565b601b6020526000908152604090205481565b636087f14f81565b60125481565b601c6020526000908152604090205481565b600f5481565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b601d6020526000908152604090205481565b6110756116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008281526019602052604090205460ff1615158115151415611128576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614bec565b6001821015801561113b5750600d548211155b611171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60009182526019602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b601e6020526000908152604090205481565b6111c96116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff811661127a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60135473ffffffffffffffffffffffffffffffffffffffff828116911614156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61131e6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff81166113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60155473ffffffffffffffffffffffffffffffffffffffff82811691161415611424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6114736116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b636087f14f4210611514576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d82565b60026001541415611551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b6002600190815583108015906115695750600c548311155b61159f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615175565b600182101580156115b25750600d548211155b6115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60008281526019602052604090205460ff16611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d14565b60018110158015611642575060038111155b611678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ebb565b73ffffffffffffffffffffffffffffffffffffffff841660009081526006602052604090206116a6906132bd565b6116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b7e565b610a1d848484601a6000888152602001908152602001600020548560016132ca565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600e5481565b6117286116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008211801561179d575060648211155b6117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614aea565b80600114156117e657600a8290556117f5565b80600214156117f557600b8290555b5050565b600660205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909173ffffffffffffffffffffffffffffffffffffffff1686565b6018602052600090815260409020805461185d9061554a565b80601f01602080910402602001604051908101604052809291908181526020018280546118899061554a565b80156118d65780601f106118ab576101008083540402835291602001916118d6565b820191906000526020600020905b8154815290600101906020018083116118b957829003601f168201915b505050505081565b6118e66116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461194a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff8116611997576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150aa565b60165473ffffffffffffffffffffffffffffffffffffffff828116911614156119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b21565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600860209081526040808320938352929052208054600182015460028301546003840154600590940154929491939092909160ff90911690565b611a936116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611b4e90309060040161498a565b60206040518083038186803b158015611b6657600080fd5b505afa158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e9190614807565b905060008111611bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614db9565b600354601354611c049173ffffffffffffffffffffffffffffffffffffffff9081169116836135d7565b50565b600080611c126116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008411611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614cdd565b60008311611cea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ab3565b50506000828152601b602052604090208190559091565b600080611d0c6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008411611daa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614f60565b60008311611de4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614f97565b50506000828152601c602052604090208190559091565b60026001541415611e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061513e565b600260019081558310801590611e505750600c548311155b611e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615175565b60018210158015611e995750600d548211155b611ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60008281526019602052604090205460ff16611f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d14565b60018110158015611f29575060038111155b611f5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ebb565b336000908152600660205260409020611f77906132bd565b611fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614b7e565b6000838152601a6020526040902054600254611fe19073ffffffffffffffffffffffffffffffffffffffff16333084613700565b610a1d338585848660006132ca565b60105481565b60196020526000908152604090205460ff1681565b6120136116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612077576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b73ffffffffffffffffffffffffffffffffffffffff81166120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06120ed6116fe565b826040516120fc9291906149ab565b60405180910390a1611c0481613824565b60095460ff161561214a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906151e3565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561217e84613824565b6002805473ffffffffffffffffffffffffffffffffffffffff8085167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600380548684169083161790556005805484841690831681179182905560138054841682179055601480548416821781556015805485168317905560168054909416909117909255909116600090815260066020526040902060016004909101819055600a918255600b9190915561224390670de0b6b3a7640000906154c6565b600f5567016345785d8a0000601155612267670de0b6b3a7640000620186a06154c6565b6010556006600c556003600d8190556019600e5560287f9de6abd965d55c3bb0cdbf6fa175050624c6ff8fe86f682dc08f2a450ede227855601e7f64f63e8728b8a1c8ce5fe5058430331934c8d0c3d8a2f2793f19836c1447addb5560147f628971151cb24dee737f6abea9bff35ce226e4c8f5760305d49b37257283909055604080518082019091529081527f494247000000000000000000000000000000000000000000000000000000000060208281019182526001600052601890529051612353917ff3794665d3af9b6fb6f858b70185898134f96768ef31c325d52e04f0ac195a4d916145e9565b5060408051808201909152600481527f4247424600000000000000000000000000000000000000000000000000000000602080830191825260026000526018905290516123c1917f2bacf7cca723d030d12aee795132f2c5f2d14ad131f16f3f27eeba3e79d18b8c916145e9565b5060408051808201909152600781527f424c454e444544000000000000000000000000000000000000000000000000006020808301918252600360005260189052905161242f917f7a6340a7048c03c55288da75abed74d2ce9194201bafb03be53c0a7cca591495916145e9565b506001600081905260196020527ffc941c3961fb6541da34150022cddf959da0fb2353866a6bfbd249c2da09291480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055612494620f424060646154c6565b6001600052601a6020527ff88cd8d612926ebb404e40725c01084b6e9b3ce0344cde068570342cbd448c61556124cf620f42406103e86154c6565b6002600052601a6020527f4c287b3e2c2cb129ae3ba596d613d760b15affdac7242e12903c37a886ea1c4f5561250a620f42406113886154c6565b6003600052601a6020527f4ac83fca211703e3ddb90093cd219714e5e3715bf0b4fd15b0441390534a24e255612545620f42406127106154c6565b6004600052601a6020527f06b28f262ad931a15c9e47271fc159a891b2bcb0da2659cac5bbfed4886cf26e55612580620f424061c3506154c6565b6005600052601a6020527f82f07edc09f3a46c1925d02252613a7fcc7be7d03b538b0c268df85f2f13a7ab556125bc620f4240620186a06154c6565b7fe7513fcd4f864b78baf560f46c15980b6aa41b90911efc4ce7454b83cce613b155601e7f9fafca4c9c0d5c2cbf85f49fd8ab8212430ce78c2a0cb75b51e0f9c4f9ace003819055603c7f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a555605a7f804a3d0621e73505f5f0c57c922f3e57d6b48e175551184eb12f80d7b4a9c7835560057f812aa1d85a6a479a48a560ac351450fc5d9e648fda9b4aabfb492f78fb8940e981905560067fbf5937da12a4f13f35054382bd8dc9d350c6e61c108f5992e567ebba24b5a19a5560077f9eb86fd661b18c93444823eda01137ecfaa938537d1ef55d64a42a60a67046d05560208290527f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e98f9190915560147f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c555600a7f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b08808190557f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e75414128190556000919091527f86d72ecda2f02015d839a182675ed983893a479e8f4279fb5498fd7244fa5dfe5561278d6002670de0b6b3a76400006153d7565b6005805473ffffffffffffffffffffffffffffffffffffffff9081166000908152600660205260408082206003019490945591549251919216907fcee02352690bbe849827b930e997d1ad93ad17fd3e6ab69fd65a88d342532120906127f490429061521a565b60405180910390a350505050565b61280a6116fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461286e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615005565b60008211801561287e5750600482105b6128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614c49565b6000811180156128c5575060648111155b6128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ef2565b6000918252601d602052604090912055565b600080808060015b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600401548111612a535773ffffffffffffffffffffffffffffffffffffffff861660009081526008602090815260408083208484529091529020600581015460ff1615801561298a575080546001145b15612a2d5760006129b5620151806129af84600201544261386b90919063ffffffff16565b90613877565b9050600082600301548210612a265760038301546129d490601e613877565b9050612a0a612a0360646129af6129f887600401548661388390919063ffffffff16565b600188015490613883565b87906132a8565b9550612a238360010154866132a890919063ffffffff16565b94505b5050612a40565b6001810154612a3d9084906132a8565b92505b5080612a4b8161559e565b915050612915565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060050154612a8890829061386b565b9050612a9a60646129af84605f613883565b9350915050915091565b60008060015b848111612c9f5773ffffffffffffffffffffffffffffffffffffffff861660009081526008602090815260408083208484529091529020600581015460ff16158015612af7575080546001145b15612c79576000612b1c620151806129af84600201544261386b90919063ffffffff16565b9050600082600301548210612c72576003830154612b3b90601e613877565b73ffffffffffffffffffffffffffffffffffffffff8a166000818152600860209081526040808320898452825280832060050180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558881015494845260079092529091200154919250612bb8919061386b565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600760205260409020600101556004830154612c0090612a03906064906129af906129f8908690613883565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260076020526040902060060154909650612c3690876132a8565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600760205260409020600601556001830154612c6f9086906132a8565b94505b5050612c8c565b6001810154612c899084906132a8565b92505b5080612c978161559e565b915050612aaa565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060050154612cd490829061386b565b905082612d25576000811180612cea5750600082115b612d20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614a7e565b612d5f565b60008211612d5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615073565b600081118015612d6d575082155b15612e1957600354612d969073ffffffffffffffffffffffffffffffffffffffff1686836135d7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060050154612dc990826132a8565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260076020526040902060050155600f54612e19908690612e1490670de0b6b3a7640000906129af908690613883565b61388f565b81612e25575050612f96565b6000612e3760646129af85605f613883565b600354601654919250612e739173ffffffffffffffffffffffffffffffffffffffff9182169116612e6e60646129af886005613883565b6135d7565b612eb5612e8660646129af84605a613883565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260076020526040902060020154906132a8565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260076020526040902060020191909155600354612efb911687612e6e60646129af86605a613883565b337f1af49730fbda4f42f72d4ef7d8fb66ffbfa54a952fd596c91f65615fd75bf8f0612f2d60646129af85605a613883565b42604051612f3c929190615244565b60405180910390a273ffffffffffffffffffffffffffffffffffffffff80871660009081526006602052604090206005810154600390910154612f929289921690612f8d60646129af87600a613883565b613966565b5050505b505050565b60018410158015612fae5750600c548411155b612fe4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90615175565b60018310158015612ff75750600d548311155b61302d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614df0565b60008381526019602052604090205460ff16613075576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d14565b60018210158015613087575060038211155b6130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ebb565b73ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604090206130eb906132bd565b15613122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614d4b565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020613150906132bd565b613186576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614ca6565b6000848152601a6020526040902054816131bf576002546131bf9073ffffffffffffffffffffffffffffffffffffffff16883084613700565b73ffffffffffffffffffffffffffffffffffffffff87811660009081526006602052604080822060050180547fffffffffffffffffffffffff000000000000000000000000000000000000000016938a1693841790559181529081208054916132278361559e565b91905055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fcee02352690bbe849827b930e997d1ad93ad17fd3e6ab69fd65a88d34253212042604051613289919061521a565b60405180910390a361329f8786868487876132ca565b50505050505050565b60006132b48284615340565b90505b92915050565b600481015415155b919050565b73ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604081206004018054916132fe8361559e565b909155505073ffffffffffffffffffffffffffffffffffffffff861660009081526006602052604090206003015461333690846132a8565b73ffffffffffffffffffffffffffffffffffffffff871660009081526006602090815260408083206003808201959095556008835281842060049182015485528352818420426002820155898155878552601b845282852054958101869055948452601c9092529091205490820155600185141561357b5760006133c9620f42406129af87670de0b6b3a7640000613883565b90508261343357600f546133e9906129af83670de0b6b3a7640000613883565b600254601354600a549293506134339273ffffffffffffffffffffffffffffffffffffffff9283169290911690612e6e906064906129af9061342c90839061386b565b8b90613883565b6001820181905560125461344790826132a8565b60125573ffffffffffffffffffffffffffffffffffffffff881660009081526007602052604090205461347a90826132a8565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600760205260409020908155600101546134b090826132a8565b73ffffffffffffffffffffffffffffffffffffffff8916600081815260076020526040908190206001019290925590517f2749de7bfe0ac6f01cba89f048beeae6fc98533eda1311ac36116b8d5feec558906135139084908a9042908a90615268565b60405180910390a2613523613eb6565b826135795773ffffffffffffffffffffffffffffffffffffffff808916600090815260066020526040902060050154600a54613579928b9216908890613571906064906129af908490613883565b600a54613f13565b505b858773ffffffffffffffffffffffffffffffffffffffff167f02da70551ce63ed18794b8eaf140e11d80315a361a87b3cdcb6b7df3bd34552e8787426040516135c693929190615252565b60405180910390a350505050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401613609929190614a03565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613657919061495b565b6000604051808303816000865af19150503d8060008114613694576040519150601f19603f3d011682016040523d82523d6000602084013e613699565b606091505b50915091508180156136c35750805115806136c35750808060200190518101906136c391906147d3565b6136f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90614a47565b5050505050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613734939291906149d2565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613782919061495b565b6000604051808303816000865af19150503d80600081146137bf576040519150601f19603f3d011682016040523d82523d6000602084013e6137c4565b606091505b50915091508180156137ee5750805115806137ee5750808060200190518101906137ee91906147d3565b612f92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad906150e1565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006132b48284615503565b60006132b48284615358565b60006132b482846154c6565b6138a8670de0b6b3a76400006129af83620f4240613883565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902060030154909150811161393b5773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604090206003015461390d908261386b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260409020600301556117f5565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040812060030155565b60035460155460019161399d9173ffffffffffffffffffffffffffffffffffffffff9182169116612e6e60646129af876014613883565b600581116136f9576000818152601e60205260408120546139c6906064906129af908690613883565b905073ffffffffffffffffffffffffffffffffffffffff8516613abd57600354600554613a0d9173ffffffffffffffffffffffffffffffffffffffff9081169116836135d7565b60055473ffffffffffffffffffffffffffffffffffffffff16600090815260076020526040902060030154613a4290826132a8565b6005805473ffffffffffffffffffffffffffffffffffffffff90811660009081526007602052604090819020600301939093559054915184928216918916907f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f190613ab09086904290615244565b60405180910390a4613e75565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600660205260409020600301548411613ba957600354613b109073ffffffffffffffffffffffffffffffffffffffff1686836135d7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902060030154613b4390826132a8565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260076020526040908190206003019390935591518492918916907f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f190613ab09086904290615244565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260066020526040812060030154613be39086906129af908590613883565b600354909150613c0a9073ffffffffffffffffffffffffffffffffffffffff1687836135d7565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260076020526040902060030154613c3d90826132a8565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260076020526040908190206003019390935591518592918a16907f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f190613ca39086904290615244565b60405180910390a46000613cb7838361386b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260076020526040902060040154909150613ced90826132a8565b73ffffffffffffffffffffffffffffffffffffffff80891660009081526007602090815260408083206004019490945560069052828120600501548b83168252928120600301549092613d41921690614481565b600354909150613d689073ffffffffffffffffffffffffffffffffffffffff1682846135d7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260076020526040902060030154613d9b90836132a8565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260076020526040908190206003019390935591518792918b16907faafd4d9ae432ed91473f989879d072b4ef2fad53e5144d3a2bb2836b811b490f90613e019087904290615244565b60405180910390a4848173ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f906e821323707a60fdbc121256ec336df2a00fe257e21e751db9a1ce5f7478f18542604051613e69929190615244565b60405180910390a45050505b73ffffffffffffffffffffffffffffffffffffffff9485166000908152600660205260409020600501549094169381613ead8161559e565b9250505061399d565b6000613ecf60105460125461387790919063ffffffff16565b9050601754811115611c04576017819055601154613eee908290613883565b9050613f0d81613f07670de0b6b3a764000060016154c6565b906132a8565b600f5550565b600254601454613f479173ffffffffffffffffffffffffffffffffffffffff9081169116612e6e60646129af87600a613883565b60015b60038111612f92576000818152601d6020526040812054613f73906064906129af908790613883565b905073ffffffffffffffffffffffffffffffffffffffff861661406a57600254600554613fba9173ffffffffffffffffffffffffffffffffffffffff9081169116836135d7565b60055473ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040902060010154613fef90826132a8565b6005805473ffffffffffffffffffffffffffffffffffffffff90811660009081526006602052604090819020600101939093559054915184928216918a16907f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de9061405d9086904290615244565b60405180910390a4614440565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600301548511614156576002546140bd9073ffffffffffffffffffffffffffffffffffffffff1687836135d7565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600660205260409020600101546140f090826132a8565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260066020526040908190206001019390935591518492918a16907f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de9061405d9086904290615244565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260066020526040812060030154614190906064906129af9087613883565b6000848152601d60205260409020549091506141b4906064906129af908490613883565b6002549091506141db9073ffffffffffffffffffffffffffffffffffffffff1688836135d7565b73ffffffffffffffffffffffffffffffffffffffff871660009081526006602052604090206001015461420e90826132a8565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260066020526040908190206001019390935591518592918b16907f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de906142749086904290615244565b60405180910390a460006142888284615503565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600660205260409020600201549091506142be90826132a8565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526006602052604080822060028101949094556005909301548c8316825292812060030154909261430c921690614481565b6002549091506143339073ffffffffffffffffffffffffffffffffffffffff1682846135d7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090206001015461436690836132a8565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260066020526040908190206001019390935591518792918c16907f03169690e94be1d5ca065ab8ceb20637fcca9711064dbc0f574893bd34391b83906143cc9087904290615244565b60405180910390a4848173ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f2f274640c67179e4a21b90315acb96d0df01666711b0f4b783a54013636ee2de8542604051614434929190615244565b60405180910390a45050505b73ffffffffffffffffffffffffffffffffffffffff95861660009081526006602052604090206005015490951694816144788161559e565b92505050613f4a565b6000805b73ffffffffffffffffffffffffffffffffffffffff8416158015906144b65750600e54816144b28161559e565b9250105b156145265773ffffffffffffffffffffffffffffffffffffffff841660009081526006602052604090206003015483116144f357839150506132b7565b73ffffffffffffffffffffffffffffffffffffffff93841660009081526006602052604090206005015490931692614485565b505060055473ffffffffffffffffffffffffffffffffffffffff1692915050565b8280546145539061554a565b90600052602060002090601f01602090048101928261457557600085556145d9565b82601f106145ac578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556145d9565b828001600101855582156145d9579182015b828111156145d95782358255916020019190600101906145be565b506145e592915061465d565b5090565b8280546145f59061554a565b90600052602060002090601f01602090048101928261461757600085556145d9565b82601f1061463057805160ff19168380011785556145d9565b828001600101855582156145d9579182015b828111156145d9578251825591602001919060010190614642565b5b808211156145e5576000815560010161465e565b803573ffffffffffffffffffffffffffffffffffffffff811681146132c557600080fd5b6000602082840312156146a7578081fd5b6132b482614672565b600080600080608085870312156146c5578283fd5b6146ce85614672565b93506146dc60208601614672565b92506146ea60408601614672565b91506146f860608601614672565b905092959194509250565b600080600080600060a0868803121561471a578081fd5b61472386614672565b945061473160208701614672565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215614761578182fd5b61476a83614672565b946020939093013593505050565b6000806000806080858703121561478d578384fd5b61479685614672565b966020860135965060408601359560600135945092505050565b6000602082840312156147c1578081fd5b81356147cc81615606565b9392505050565b6000602082840312156147e4578081fd5b81516147cc81615606565b600060208284031215614800578081fd5b5035919050565b600060208284031215614818578081fd5b5051919050565b60008060408385031215614831578182fd5b82359150602083013561484381615606565b809150509250929050565b600080600060408486031215614862578283fd5b83359250602084013567ffffffffffffffff80821115614880578384fd5b818601915086601f830112614893578384fd5b8135818111156148a1578485fd5b8760208285010111156148b2578485fd5b6020830194508093505050509250925092565b600080604083850312156148d7578182fd5b50508035926020909101359150565b6000806000606084860312156148fa578283fd5b505081359360208301359350604090920135919050565b6000815180845261492981602086016020860161551a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000825161496d81846020870161551a565b9190910192915050565b6000828483379101908152919050565b90565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6000602082526132b46020830184614911565b6020808252601f908201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604082015260600190565b6020808252818101527f49424756303a205a65726f205969656c6420616e6420496e766573746d656e74604082015260600190565b60208082526018908201527f49424756303a20496e76616c69642054696d6556616c75650000000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c69642070657263656e7461676500000000000000604082015260600190565b60208082526021908201527f49424756303a2057616c6c65742069732073616d652061732070726576696f7560408201527f7300000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f49424756303a2055736572206e6f742072656769737465726564207965740000604082015260600190565b60208082526014908201527f49424756303a20496e76616c69642077616c6b73000000000000000000000000604082015260600190565b60208082526027908201527f49424756303a20506c616e20616c72656164792068617320726571756972656460408201527f2073746174757300000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f49424756303a20496e646578206c656e677468206d757374206265206265747760408201527f65656e203120746f203300000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f49424756303a20526566657272657220646f6573206e6f742065786973747300604082015260600190565b60208082526018908201527f49424756303a20496e76616c69642054696d65496e6465780000000000000000604082015260600190565b6020808252601d908201527f49424756303a20506c616e206973206e6f742061637469766520796574000000604082015260600190565b60208082526012908201527f49424756303a20557365725f4578697374730000000000000000000000000000604082015260600190565b60208082526016908201527f49424756303a2053657276696365204578706972656400000000000000000000604082015260600190565b60208082526016908201527f49424756303a20496e76616c69642062616c616e636500000000000000000000604082015260600190565b60208082526013908201527f49424756303a20496e76616c696420506c616e00000000000000000000000000604082015260600190565b60208082526018908201527f49424756303a20496e76616c696420506c616e206e616d650000000000000000604082015260600190565b6020808252602a908201527f49424756303a20496e646578206c656e677468206d757374206265206265747760408201527f65656e203120746f203500000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f49424756303a20496e76616c6964207374616b696e6720706572696f64000000604082015260600190565b60208082526014908201527f49424756303a20496e76616c69642056616c7565000000000000000000000000604082015260600190565b60208082526018908201527f49424756303a20496e76616c6964205061636b70726963650000000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c6964205969656c64496e64657800000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c6964205969656c6456616c756500000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c696420506c616e4e756d62657200000000000000604082015260600190565b60208082526018908201527f437573746f6d4f776e61626c653a20464f5242494444454e0000000000000000604082015260600190565b6020808252601c908201527f49424756303a20496e76616c696420546f6b656e204164647265737300000000604082015260600190565b60208082526011908201527f49424756303a205a65726f205969656c64000000000000000000000000000000604082015260600190565b60208082526016908201527f49424756303a20496e76616c6964204164647265737300000000000000000000604082015260600190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160408201527f494c454400000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526013908201527f49424756303a20496e76616c6964205061636b00000000000000000000000000604082015260600190565b60208082526019908201527f49424756303a20496e76616c6964205061636b4e756d62657200000000000000604082015260600190565b6020808252600e908201527f49424756303a20494e56414c4944000000000000000000000000000000000000604082015260600190565b90815260200190565b60008382526040602083015261523c6040830184614911565b949350505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b9485526020850193909352604084019190915260608301521515608082015260a00190565b958652602086019490945260408501929092526060840152608083015273ffffffffffffffffffffffffffffffffffffffff1660a082015260c00190565b9586526020860194909452604085019290925260608401526080830152151560a082015260c00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60008219821115615353576153536155d7565b500190565b60008261538c577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b80825b60018086116153a357506153ce565b8187048211156153b5576153b56155d7565b808616156153c257918102915b9490941c938002615394565b94509492505050565b60006132b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851684600082615411575060016147cc565b8161541e575060006147cc565b8160018114615434576002811461543e5761546b565b60019150506147cc565b60ff84111561544f5761544f6155d7565b6001841b915084821115615465576154656155d7565b506147cc565b5060208310610133831016604e8410600b841016171561549e575081810a83811115615499576154996155d7565b6147cc565b6154ab8484846001615391565b8086048211156154bd576154bd6155d7565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154fe576154fe6155d7565b500290565b600082821015615515576155156155d7565b500390565b60005b8381101561553557818101518382015260200161551d565b83811115615544576000848401525b50505050565b60028104600182168061555e57607f821691505b60208210811415615598577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155d0576155d06155d7565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8015158114611c0457600080fdfea26469706673582212202c5899bd0dbf0dc71b25f28cf7ce0280bb830fd07c82cbf0727f03bc0fdaee2264736f6c63430008000033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.