Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
1.209784427247919762 ETH
Eth Value
$3,622.80 (@ $2,994.58/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20232903 | 43 hrs ago | 0.00302504 ETH | ||||
20179020 | 9 days ago | 0.00115376 ETH | ||||
20179020 | 9 days ago | 0.01124186 ETH | ||||
20136308 | 15 days ago | 0.00091562 ETH | ||||
20136308 | 15 days ago | 0.05045966 ETH | ||||
20136308 | 15 days ago | 0.00536603 ETH | ||||
20119390 | 17 days ago | 0.00000514 ETH | ||||
20118894 | 17 days ago | 0.00000433 ETH | ||||
20118894 | 17 days ago | 0.00010634 ETH | ||||
20118894 | 17 days ago | 0.02149226 ETH | ||||
20113112 | 18 days ago | 0.00049347 ETH | ||||
20113112 | 18 days ago | 0.00337343 ETH | ||||
20074076 | 23 days ago | 0.00018597 ETH | ||||
20074076 | 23 days ago | 0.01329412 ETH | ||||
20070394 | 24 days ago | 0.00152837 ETH | ||||
20069825 | 24 days ago | 0.00061631 ETH | ||||
20069825 | 24 days ago | 0.01572834 ETH | ||||
20069270 | 24 days ago | 0.00019931 ETH | ||||
20069270 | 24 days ago | 0.00899892 ETH | ||||
20069270 | 24 days ago | 0.00009628 ETH | ||||
20060505 | 25 days ago | 0.00004809 ETH | ||||
20060505 | 25 days ago | 0.00439088 ETH | ||||
20060505 | 25 days ago | 0.00787802 ETH | ||||
20037339 | 29 days ago | 0.02466314 ETH | ||||
20002774 | 33 days ago | 0.00014612 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
BrewlabsDividendTracker
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-26 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns (uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns (uint256); function withdrawnDividendOf(address _owner) external view returns (uint256); function accumulativeDividendOf(address _owner) external view returns (uint256); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library IterableMapping { struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; address public rewardToken; IRouter public uniswapV2Router; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public payable override onlyOwner { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function withdrawDividend() public virtual override onlyOwner { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); return swapETHForTokensAndWithdrawDividend(user, _withdrawableDividend); } return 0; } function swapETHForTokensAndWithdrawDividend(address holder, uint256 ethAmount) private returns (uint256) { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(rewardToken); try uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ethAmount }( 0, // accept any amount of tokens path, address(holder), block.timestamp ) { return ethAmount; } catch { withdrawnDividends[holder] = withdrawnDividends[holder].sub(ethAmount); return 0; } } function dividendOf(address _owner) public view override returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns (uint256) { return magnifiedDividendPerShare .mul(balanceOf(_owner)) .toInt256Safe() .add(magnifiedDividendCorrections[_owner]) .toUint256Safe() / magnitude; } function _transfer( address from, address to, uint256 value ) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account].sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account].add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function _setRewardToken(address token) internal onlyOwner { rewardToken = token; } function _setUniswapRouter(address router) internal onlyOwner { uniswapV2Router = IRouter(router); } } contract Brewlabs is Ownable, ERC20 { using Address for address; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "Brewlabs"; string private constant _symbol = "BREWLABS"; uint8 private constant _decimals = 9; BrewlabsDividendTracker public dividendTracker; bool public isTradingEnabled; // max wallet is 1.5% of Brewlabs(BEP20)'s initialSupply uint256 public maxWalletAmount = (1000000000 * (10**9) * 150) / 10000; // max buy and sell tx is 0.2% of Brewlabs(BEP20)'s initialSupply uint256 public maxTxAmount = (1000000000 * (10**9) * 20) / 10000; bool private _swapping; uint256 public minimumTokensBeforeSwap = 250000000 * (10**9); address public dividendToken = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //USDC address public liquidityWallet; address public devWallet; address public buyBackWallet; address public bridge; address public stakingAddress; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 devFeeOnBuy; uint8 devFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 stakingFeeOnBuy; uint8 stakingFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod("base", 0, 0, 1, 1, 1, 1, 8, 8, 1, 1, 4, 4); mapping(address => bool) private _isAllowedToTradeWhenDisabled; mapping(address => bool) private _feeOnSelectedWalletTransfers; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) public automatedMarketMakerPairs; uint8 private _liquidityFee; uint8 private _devFee; uint8 private _buyBackFee; uint8 private _stakingFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange( string indexed indentifier, address indexed newWallet, address indexed oldWallet ); event FeeChange( string indexed identifier, uint8 liquidityFee, uint8 devFee, uint8 buyBackFee, uint8 stakingFee, uint8 holdersFee ); event CustomTaxPeriodChange( uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period ); event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event ExcludeFromDividendsChange(address indexed account, bool isExcluded); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event MinTokenAmountForDividendsChange(uint256 indexed newValue, uint256 indexed oldValue); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue); event ClaimETHOverflow(uint256 amount); event FeesApplied( uint8 liquidityFee, uint8 devFee, uint8 buyBackFee, uint8 stakingFee, uint8 holdersFee, uint8 totalFee ); event SetBridgeContract(address indexed bridgeContract); event SetStakingAddress(address indexed stakingAddress); modifier hasMintPermission() { require(msg.sender == bridge, "Only bridge contract can mint"); _; } constructor() ERC20(_name, _symbol) { dividendTracker = new BrewlabsDividendTracker(); dividendTracker.setUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); dividendTracker.setRewardToken(dividendToken); liquidityWallet = owner(); devWallet = owner(); buyBackWallet = owner(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendTracker)] = true; dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD)); dividendTracker.excludeFromDividends(owner()); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; } receive() external payable {} // Setters function decimals() public view virtual override returns (uint8) { return _decimals; } function activateTrading() external onlyOwner { isTradingEnabled = true; } function deactivateTrading() external onlyOwner { isTradingEnabled = false; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "Brewlabs: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; if (value) { dividendTracker.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require( _feeOnSelectedWalletTransfers[account] != value, "Brewlabs: The selected wallet is already set to the value " ); _feeOnSelectedWalletTransfers[account] = value; emit FeeOnSelectedWalletTransfersChange(account, value); } function excludeFromFees(address account, bool excluded) external onlyOwner { require( _isExcludedFromFee[account] != excluded, "Brewlabs: Account is already the value of 'excluded'" ); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account) external onlyOwner { dividendTracker.excludeFromDividends(account); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxTransactionLimit[account] != excluded, "Brewlabs: Account is already the value of 'excluded'" ); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != excluded, "Brewlabs: Account is already the value of 'excluded'" ); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function setStakingAddress( address newStakingAddress ) external onlyOwner { require(newStakingAddress != address(0), "Brewlabs: The stakingAddress cannot be 0"); require(newStakingAddress != stakingAddress, "Brewlabs: The stakingAddress is already the value of newStakingAddress"); stakingAddress = newStakingAddress; emit SetStakingAddress(stakingAddress); } function setWallets( address newLiquidityWallet, address newDevWallet, address newBuyBackWallet ) external onlyOwner { if (liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "Brewlabs: The liquidityWallet cannot be 0"); emit WalletChange("liquidityWallet", newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if (devWallet != newDevWallet) { require(newDevWallet != address(0), "Brewlabs: The devWallet cannot be 0"); emit WalletChange("devWallet", newDevWallet, devWallet); devWallet = newDevWallet; } if (buyBackWallet != newBuyBackWallet) { require(newBuyBackWallet != address(0), "Brewlabs: The buyBackWallet cannot be 0"); emit WalletChange("buyBackWallet", newBuyBackWallet, buyBackWallet); buyBackWallet = newBuyBackWallet; } } // Base fees function setBaseFeesOnBuy( uint8 _liquidityFeeOnBuy, uint8 _devFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _stakingFeeOnBuy, uint8 _holdersFeeOnBuy ) external onlyOwner { _setCustomBuyTaxPeriod( _base, _liquidityFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _stakingFeeOnBuy, _holdersFeeOnBuy ); emit FeeChange( "baseFees-Buy", _liquidityFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _stakingFeeOnBuy, _holdersFeeOnBuy ); } function setBaseFeesOnSell( uint8 _liquidityFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _stakingFeeOnSell, uint8 _holdersFeeOnSell ) external onlyOwner { _setCustomSellTaxPeriod( _base, _liquidityFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _stakingFeeOnSell, _holdersFeeOnSell ); emit FeeChange( "baseFees-Sell", _liquidityFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _stakingFeeOnSell, _holdersFeeOnSell ); } function setUniswapRouter(address newAddress) external onlyOwner { require( newAddress != address(uniswapV2Router), "Brewlabs: The router already has that address" ); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); dividendTracker.setUniswapRouter(newAddress); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "Brewlabs: Cannot update maxTxAmount to same value"); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require( newValue != maxWalletAmount, "Brewlabs: Cannot update maxWalletAmount to same value" ); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require( newValue != minimumTokensBeforeSwap, "Brewlabs: Cannot update minimumTokensBeforeSwap to same value" ); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner { dividendTracker.setTokenBalanceForDividends(newValue); } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function claimETHOverflow(uint256 amount) external onlyOwner { require(amount < address(this).balance, "Brewlabs: Cannot send more than contract balance"); (bool success, ) = address(owner()).call{ value: amount }(""); if (success) { emit ClaimETHOverflow(amount); } } function mint(address account, uint256 value) external hasMintPermission returns (bool) { _mint(account, value); try dividendTracker.setBalance(payable(account), balanceOf(account)) {} catch {} return true; } function burn(uint256 value) external { _burn(msg.sender, value); try dividendTracker.setBalance(payable(msg.sender), balanceOf(msg.sender)) {} catch {} } function setBridgeContract(address _bridgeContract) external onlyOwner { require(_bridgeContract != address(0x0) && _bridgeContract != bridge, "Brewlabs: Invalid bridge"); bridge = _bridgeContract; emit SetBridgeContract(_bridgeContract); } // Getters function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function withdrawableDividendOf(address account) external view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) external view returns (uint256) { return dividendTracker.balanceOf(account); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getBaseBuyFees() external view returns ( uint8, uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.stakingFeeOnBuy, _base.holdersFeeOnBuy ); } function getBaseSellFees() external view returns ( uint8, uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.stakingFeeOnSell, _base.holdersFeeOnSell ); } // Main function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "Brewlabs: Trading is currently disabled."); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "Brewlabs: Buy amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "Brewlabs: Expected wallet amount exceeds the maxWalletAmount."); } } _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], from, to); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; amount = amount - fee; super._transfer(from, address(this), fee); } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} } function _adjustTaxes( bool isBuyFromLp, bool isSelltoLp, address from, address to ) private { _liquidityFee = 0; _devFee = 0; _buyBackFee = 0; _stakingFee = 0; _holdersFee = 0; if (isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnBuy; _devFee = _base.devFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _stakingFee = _base.stakingFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _devFee = _base.devFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _stakingFee = _base.stakingFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if ( !isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to]) ) { _liquidityFee = _base.liquidityFeeOnBuy; _devFee = _base.devFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _stakingFee = _base.stakingFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } _totalFee = _liquidityFee + _devFee + _buyBackFee + _stakingFee + _holdersFee; emit FeesApplied(_liquidityFee, _devFee, _buyBackFee, _stakingFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _stakingFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange( _liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName ); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.devFeeOnSell != _devFeeOnSell) { emit CustomTaxPeriodChange( _devFeeOnSell, map.devFeeOnSell, "devFeeOnSell", map.periodName ); map.devFeeOnSell = _devFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit CustomTaxPeriodChange( _buyBackFeeOnSell, map.buyBackFeeOnSell, "buyBackFeeOnSell", map.periodName ); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.stakingFeeOnSell != _stakingFeeOnSell) { emit CustomTaxPeriodChange( _stakingFeeOnSell, map.stakingFeeOnSell, "stakingFeeOnSell", map.periodName ); map.stakingFeeOnSell = _stakingFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange( _holdersFeeOnSell, map.holdersFeeOnSell, "holdersFeeOnSell", map.periodName ); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _devFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _stakingFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange( _liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName ); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.devFeeOnBuy != _devFeeOnBuy) { emit CustomTaxPeriodChange( _devFeeOnBuy, map.devFeeOnBuy, "devFeeOnBuy", map.periodName ); map.devFeeOnBuy = _devFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit CustomTaxPeriodChange( _buyBackFeeOnBuy, map.buyBackFeeOnBuy, "buyBackFeeOnBuy", map.periodName ); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.stakingFeeOnBuy != _stakingFeeOnBuy) { emit CustomTaxPeriodChange( _stakingFeeOnBuy, map.stakingFeeOnBuy, "stakingFeeOnBuy", map.periodName ); map.stakingFeeOnBuy = _stakingFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange( _holdersFeeOnBuy, map.holdersFeeOnBuy, "holdersFeeOnBuy", map.periodName ); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountForStaking = (contractBalance * _stakingFee) / _totalFee; uint256 amountToSwap = contractBalance - (amountToLiquify + amountForStaking); _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - (_liquidityFee / 2) - _stakingFee; uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2; uint256 amountETHBuyBack = (ETHBalanceAfterSwap * _buyBackFee) / totalETHFee; uint256 amountETHDev = (ETHBalanceAfterSwap * _devFee) / totalETHFee; uint256 amountETHHolders = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHBuyBack + amountETHDev); Address.sendValue(payable(buyBackWallet),amountETHBuyBack); Address.sendValue(payable(devWallet),amountETHDev); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify); } bool success = IERC20(address(this)).transfer(address(stakingAddress), amountForStaking); (success, ) = address(dividendTracker).call{ value: amountETHHolders }(""); if (success) { emit DividendsSent(amountETHHolders); } } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 1, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{ value: ethAmount }( address(this), tokenAmount, 1, // slippage is unavoidable 1, // slippage is unavoidable liquidityWallet, block.timestamp ); } } contract BrewlabsDividendTracker is DividendPayingToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; mapping(address => bool) public excludedFromDividends; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() DividendPayingToken("Brewlabs_Dividend_Tracker", "Brewlabs_Dividend_Tracker") { claimWait = 3600; minimumTokenBalanceForDividends = 0 * (10**18); } function setRewardToken(address token) external onlyOwner { _setRewardToken(token); } function setUniswapRouter(address router) external onlyOwner { _setUniswapRouter(router); } function _transfer( address, address, uint256 ) internal pure override { require(false, "Brewlabs_Dividend_Tracker: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require( minimumTokenBalanceForDividends != newValue, "Brewlabs_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'." ); minimumTokenBalanceForDividends = newValue; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060408051808201825260198082527f427265776c6162735f4469766964656e645f547261636b6572000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611ce680620002736000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105c4578063dd62ed3e146105e4578063e30443bc1461062a578063f2fde38b1461064a578063f7c618c11461066a57600080fd5b8063a9059cbb14610538578063aafd847a14610558578063bc4c4b371461058e578063be10b614146105ae57600080fd5b806391b89fba116100dc57806391b89fba146104c357806395d89b41146104e3578063a457c2d7146104f8578063a8b9d2401461051857600080fd5b8063715018a61461045a57806385a6b3ae1461046f5780638aee8127146104855780638da5cb5b146104a557600080fd5b806323b872dd11610190578063395093511161015f57806339509351146103a95780634e7b827f146103c95780636a474002146103f95780636f2789ec1461040e57806370a082311461042457600080fd5b806323b872dd1461032d57806327ce01471461034d578063313ce5671461036d57806331e79db01461038957600080fd5b8063163c7cef116101cc578063163c7cef146102935780631694505e146102b357806318160ddd146102eb578063226cfa3d1461030057600080fd5b806303c833021461021157806306fdde0314610219578063095ea7b31461024457806309bbedde1461027457600080fd5b3661020c5761020a61068a565b005b600080fd5b61020a61068a565b34801561022557600080fd5b5061022e610750565b60405161023b9190611906565b60405180910390f35b34801561025057600080fd5b5061026461025f366004611969565b6107e2565b604051901515815260200161023b565b34801561028057600080fd5b50600c545b60405190815260200161023b565b34801561029f57600080fd5b5061020a6102ae366004611995565b6107f9565b3480156102bf57600080fd5b506009546102d3906001600160a01b031681565b6040516001600160a01b03909116815260200161023b565b3480156102f757600080fd5b50600254610285565b34801561030c57600080fd5b5061028561031b3660046119ae565b60116020526000908152604090205481565b34801561033957600080fd5b506102646103483660046119cb565b6108c5565b34801561035957600080fd5b506102856103683660046119ae565b61092e565b34801561037957600080fd5b506040516012815260200161023b565b34801561039557600080fd5b5061020a6103a43660046119ae565b61098a565b3480156103b557600080fd5b506102646103c4366004611969565b610ab1565b3480156103d557600080fd5b506102646103e43660046119ae565b60106020526000908152604090205460ff1681565b34801561040557600080fd5b5061020a610ae7565b34801561041a57600080fd5b5061028560125481565b34801561043057600080fd5b5061028561043f3660046119ae565b6001600160a01b031660009081526020819052604090205490565b34801561046657600080fd5b5061020a610b1d565b34801561047b57600080fd5b5061028560075481565b34801561049157600080fd5b5061020a6104a03660046119ae565b610b91565b3480156104b157600080fd5b506005546001600160a01b03166102d3565b3480156104cf57600080fd5b506102856104de3660046119ae565b610bc4565b3480156104ef57600080fd5b5061022e610bcf565b34801561050457600080fd5b50610264610513366004611969565b610bde565b34801561052457600080fd5b506102856105333660046119ae565b610c2d565b34801561054457600080fd5b50610264610553366004611969565b610c59565b34801561056457600080fd5b506102856105733660046119ae565b6001600160a01b03166000908152600b602052604090205490565b34801561059a57600080fd5b506102646105a9366004611a0c565b610c66565b3480156105ba57600080fd5b5061028560135481565b3480156105d057600080fd5b5061020a6105df3660046119ae565b610d14565b3480156105f057600080fd5b506102856105ff366004611a4a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561063657600080fd5b5061020a610645366004611969565b610d47565b34801561065657600080fd5b5061020a6106653660046119ae565b610eb1565b34801561067657600080fd5b506008546102d3906001600160a01b031681565b6005546001600160a01b031633146106bd5760405162461bcd60e51b81526004016106b490611a78565b60405180910390fd5b60006106c860025490565b116106d257600080fd5b341561074e576107056106e460025490565b6106f234600160801b610f9c565b6106fc9190611ac3565b60065490611025565b60065560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a260075461074a9034611025565b6007555b565b60606003805461075f90611ae5565b80601f016020809104026020016040519081016040528092919081815260200182805461078b90611ae5565b80156107d85780601f106107ad576101008083540402835291602001916107d8565b820191906000526020600020905b8154815290600101906020018083116107bb57829003601f168201915b5050505050905090565b60006107ef338484611084565b5060015b92915050565b6005546001600160a01b031633146108235760405162461bcd60e51b81526004016106b490611a78565b80601354036108c05760405162461bcd60e51b815260206004820152605b60248201527f427265776c6162735f4469766964656e645f547261636b65723a206d696e696d60448201527f756d546f6b656e42616c616e6365466f724469766964656e647320616c72656160648201527f6479207468652076616c7565206f6620276e657756616c7565272e0000000000608482015260a4016106b4565b601355565b60006108d28484846111a8565b610924843361091f85604051806060016040528060288152602001611c64602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611208565b611084565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926109809261097b92610975916109709190610f9c565b611242565b90611252565b611290565b6107f39190611ac3565b6005546001600160a01b031633146109b45760405162461bcd60e51b81526004016106b490611a78565b6001600160a01b03811660009081526010602052604090205460ff16156109da57600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610a089082906112a3565b60405163131836e760e21b8152600c60048201526001600160a01b0382166024820152733e4d3617dc6ef067fc82ad3dab35504140ab717e90634c60db9c9060440160006040518083038186803b158015610a6257600080fd5b505af4158015610a76573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107ef91859061091f9086611025565b6005546001600160a01b03163314610b115760405162461bcd60e51b81526004016106b490611a78565b610b1a33611308565b50565b6005546001600160a01b03163314610b475760405162461bcd60e51b81526004016106b490611a78565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bbb5760405162461bcd60e51b81526004016106b490611a78565b610b1a816113a9565b60006107f382610c2d565b60606004805461075f90611ae5565b60006107ef338461091f85604051806060016040528060258152602001611c8c602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611208565b6001600160a01b0381166000908152600b60205260408120546107f390610c538461092e565b906113f5565b60006107ef3384846111a8565b6005546000906001600160a01b03163314610c935760405162461bcd60e51b81526004016106b490611a78565b6000610c9e84611308565b90508015610d0a576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610cf89085815260200190565b60405180910390a360019150506107f3565b5060009392505050565b6005546001600160a01b03163314610d3e5760405162461bcd60e51b81526004016106b490611a78565b610b1a81611437565b6005546001600160a01b03163314610d715760405162461bcd60e51b81526004016106b490611a78565b6001600160a01b03821660009081526010602052604090205460ff16610ead576013548110610e2257610da482826112a3565b604051632f0ad01760e21b8152600c60048201526001600160a01b038316602482015260448101829052733e4d3617dc6ef067fc82ad3dab35504140ab717e9063bc2b405c9060640160006040518083038186803b158015610e0557600080fd5b505af4158015610e19573d6000803e3d6000fd5b50505050610ea0565b610e2d8260006112a3565b60405163131836e760e21b8152600c60048201526001600160a01b0383166024820152733e4d3617dc6ef067fc82ad3dab35504140ab717e90634c60db9c9060440160006040518083038186803b158015610e8757600080fd5b505af4158015610e9b573d6000803e3d6000fd5b505050505b610eab826001610c66565b505b5050565b6005546001600160a01b03163314610edb5760405162461bcd60e51b81526004016106b490611a78565b6001600160a01b038116610f405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003610fae575060006107f3565b6000610fba8385611b1f565b905082610fc78583611ac3565b1461101e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b4565b9392505050565b6000806110328385611b36565b90508381101561101e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106b4565b6001600160a01b0383166110e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b4565b6001600160a01b0382166111475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602f60248201527f427265776c6162735f4469766964656e645f547261636b65723a204e6f20747260448201526e185b9cd9995c9cc8185b1b1bddd959608a1b60648201526084016106b4565b6000818484111561122c5760405162461bcd60e51b81526004016106b49190611906565b5060006112398486611b49565b95945050505050565b600081818112156107f357600080fd5b60008061125f8385611b5c565b9050600083121580156112725750838112155b80611287575060008312801561128757508381125b61101e57600080fd5b60008082121561129f57600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156112e25760006112d083836113f5565b90506112dc8482611483565b50610eab565b80821015610eab5760006112f682846113f5565b905061130284826114e7565b50505050565b60008061131483610c2d565b905080156113a0576001600160a01b0383166000908152600b602052604090205461133f9082611025565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061138e9084815260200190565b60405180910390a261101e838261152b565b50600092915050565b6005546001600160a01b031633146113d35760405162461bcd60e51b81526004016106b490611a78565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061101e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611208565b6005546001600160a01b031633146114615760405162461bcd60e51b81526004016106b490611a78565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61148d82826116ce565b6114c76114a861097083600654610f9c90919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906117b9565b6001600160a01b039092166000908152600a602052604090209190915550565b6114f182826117f6565b6114c761150c61097083600654610f9c90919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611252565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190611b84565b816000815181106115d0576115d0611ba1565b6001600160a01b03928316602091820292909201015260085482519116908290600190811061160157611601611ba1565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959085906116479060009086908a904290600401611bb7565b6000604051808303818588803b15801561166057600080fd5b505af193505050508015611672575060015b6116be576001600160a01b0384166000908152600b602052604090205461169990846113f5565b6001600160a01b0385166000908152600b602052604081209190915591506107f39050565b829150506107f3565b5092915050565b6001600160a01b0382166117245760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106b4565b61173060008383610eab565b60025461173d9082611025565b6002556001600160a01b0382166000908152602081905260409020546117639082611025565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806117c68385611c21565b9050600083121580156117d95750838113155b806112875750600083128015611287575083811361101e57600080fd5b6001600160a01b0382166118565760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106b4565b61186282600083610eab565b61189f81604051806060016040528060228152602001611c42602291396001600160a01b0385166000908152602081905260409020549190611208565b6001600160a01b0383166000908152602081905260409020556002546118c590826113f5565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016117ad565b600060208083528351808285015260005b8181101561193357858101830151858201604001528201611917565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b1a57600080fd5b6000806040838503121561197c57600080fd5b823561198781611954565b946020939093013593505050565b6000602082840312156119a757600080fd5b5035919050565b6000602082840312156119c057600080fd5b813561101e81611954565b6000806000606084860312156119e057600080fd5b83356119eb81611954565b925060208401356119fb81611954565b929592945050506040919091013590565b60008060408385031215611a1f57600080fd5b8235611a2a81611954565b915060208301358015158114611a3f57600080fd5b809150509250929050565b60008060408385031215611a5d57600080fd5b8235611a6881611954565b91506020830135611a3f81611954565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611ae057634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680611af957607f821691505b602082108103611b1957634e487b7160e01b600052602260045260246000fd5b50919050565b80820281158282048414176107f3576107f3611aad565b808201808211156107f3576107f3611aad565b818103818111156107f3576107f3611aad565b8082018281126000831280158216821582161715611b7c57611b7c611aad565b505092915050565b600060208284031215611b9657600080fd5b815161101e81611954565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611c015784516001600160a01b031683529383019391830191600101611bdc565b50506001600160a01b039690961660408501525050506060015292915050565b81810360008312801583831316838312821617156116c7576116c7611aad56fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220794ace93881b91e45ae3974c7478eb0e89875a605b20422aeb718d2199860ead64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c8063715018a61161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105c4578063dd62ed3e146105e4578063e30443bc1461062a578063f2fde38b1461064a578063f7c618c11461066a57600080fd5b8063a9059cbb14610538578063aafd847a14610558578063bc4c4b371461058e578063be10b614146105ae57600080fd5b806391b89fba116100dc57806391b89fba146104c357806395d89b41146104e3578063a457c2d7146104f8578063a8b9d2401461051857600080fd5b8063715018a61461045a57806385a6b3ae1461046f5780638aee8127146104855780638da5cb5b146104a557600080fd5b806323b872dd11610190578063395093511161015f57806339509351146103a95780634e7b827f146103c95780636a474002146103f95780636f2789ec1461040e57806370a082311461042457600080fd5b806323b872dd1461032d57806327ce01471461034d578063313ce5671461036d57806331e79db01461038957600080fd5b8063163c7cef116101cc578063163c7cef146102935780631694505e146102b357806318160ddd146102eb578063226cfa3d1461030057600080fd5b806303c833021461021157806306fdde0314610219578063095ea7b31461024457806309bbedde1461027457600080fd5b3661020c5761020a61068a565b005b600080fd5b61020a61068a565b34801561022557600080fd5b5061022e610750565b60405161023b9190611906565b60405180910390f35b34801561025057600080fd5b5061026461025f366004611969565b6107e2565b604051901515815260200161023b565b34801561028057600080fd5b50600c545b60405190815260200161023b565b34801561029f57600080fd5b5061020a6102ae366004611995565b6107f9565b3480156102bf57600080fd5b506009546102d3906001600160a01b031681565b6040516001600160a01b03909116815260200161023b565b3480156102f757600080fd5b50600254610285565b34801561030c57600080fd5b5061028561031b3660046119ae565b60116020526000908152604090205481565b34801561033957600080fd5b506102646103483660046119cb565b6108c5565b34801561035957600080fd5b506102856103683660046119ae565b61092e565b34801561037957600080fd5b506040516012815260200161023b565b34801561039557600080fd5b5061020a6103a43660046119ae565b61098a565b3480156103b557600080fd5b506102646103c4366004611969565b610ab1565b3480156103d557600080fd5b506102646103e43660046119ae565b60106020526000908152604090205460ff1681565b34801561040557600080fd5b5061020a610ae7565b34801561041a57600080fd5b5061028560125481565b34801561043057600080fd5b5061028561043f3660046119ae565b6001600160a01b031660009081526020819052604090205490565b34801561046657600080fd5b5061020a610b1d565b34801561047b57600080fd5b5061028560075481565b34801561049157600080fd5b5061020a6104a03660046119ae565b610b91565b3480156104b157600080fd5b506005546001600160a01b03166102d3565b3480156104cf57600080fd5b506102856104de3660046119ae565b610bc4565b3480156104ef57600080fd5b5061022e610bcf565b34801561050457600080fd5b50610264610513366004611969565b610bde565b34801561052457600080fd5b506102856105333660046119ae565b610c2d565b34801561054457600080fd5b50610264610553366004611969565b610c59565b34801561056457600080fd5b506102856105733660046119ae565b6001600160a01b03166000908152600b602052604090205490565b34801561059a57600080fd5b506102646105a9366004611a0c565b610c66565b3480156105ba57600080fd5b5061028560135481565b3480156105d057600080fd5b5061020a6105df3660046119ae565b610d14565b3480156105f057600080fd5b506102856105ff366004611a4a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561063657600080fd5b5061020a610645366004611969565b610d47565b34801561065657600080fd5b5061020a6106653660046119ae565b610eb1565b34801561067657600080fd5b506008546102d3906001600160a01b031681565b6005546001600160a01b031633146106bd5760405162461bcd60e51b81526004016106b490611a78565b60405180910390fd5b60006106c860025490565b116106d257600080fd5b341561074e576107056106e460025490565b6106f234600160801b610f9c565b6106fc9190611ac3565b60065490611025565b60065560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a260075461074a9034611025565b6007555b565b60606003805461075f90611ae5565b80601f016020809104026020016040519081016040528092919081815260200182805461078b90611ae5565b80156107d85780601f106107ad576101008083540402835291602001916107d8565b820191906000526020600020905b8154815290600101906020018083116107bb57829003601f168201915b5050505050905090565b60006107ef338484611084565b5060015b92915050565b6005546001600160a01b031633146108235760405162461bcd60e51b81526004016106b490611a78565b80601354036108c05760405162461bcd60e51b815260206004820152605b60248201527f427265776c6162735f4469766964656e645f547261636b65723a206d696e696d60448201527f756d546f6b656e42616c616e6365466f724469766964656e647320616c72656160648201527f6479207468652076616c7565206f6620276e657756616c7565272e0000000000608482015260a4016106b4565b601355565b60006108d28484846111a8565b610924843361091f85604051806060016040528060288152602001611c64602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611208565b611084565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926109809261097b92610975916109709190610f9c565b611242565b90611252565b611290565b6107f39190611ac3565b6005546001600160a01b031633146109b45760405162461bcd60e51b81526004016106b490611a78565b6001600160a01b03811660009081526010602052604090205460ff16156109da57600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610a089082906112a3565b60405163131836e760e21b8152600c60048201526001600160a01b0382166024820152733e4d3617dc6ef067fc82ad3dab35504140ab717e90634c60db9c9060440160006040518083038186803b158015610a6257600080fd5b505af4158015610a76573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107ef91859061091f9086611025565b6005546001600160a01b03163314610b115760405162461bcd60e51b81526004016106b490611a78565b610b1a33611308565b50565b6005546001600160a01b03163314610b475760405162461bcd60e51b81526004016106b490611a78565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bbb5760405162461bcd60e51b81526004016106b490611a78565b610b1a816113a9565b60006107f382610c2d565b60606004805461075f90611ae5565b60006107ef338461091f85604051806060016040528060258152602001611c8c602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611208565b6001600160a01b0381166000908152600b60205260408120546107f390610c538461092e565b906113f5565b60006107ef3384846111a8565b6005546000906001600160a01b03163314610c935760405162461bcd60e51b81526004016106b490611a78565b6000610c9e84611308565b90508015610d0a576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610cf89085815260200190565b60405180910390a360019150506107f3565b5060009392505050565b6005546001600160a01b03163314610d3e5760405162461bcd60e51b81526004016106b490611a78565b610b1a81611437565b6005546001600160a01b03163314610d715760405162461bcd60e51b81526004016106b490611a78565b6001600160a01b03821660009081526010602052604090205460ff16610ead576013548110610e2257610da482826112a3565b604051632f0ad01760e21b8152600c60048201526001600160a01b038316602482015260448101829052733e4d3617dc6ef067fc82ad3dab35504140ab717e9063bc2b405c9060640160006040518083038186803b158015610e0557600080fd5b505af4158015610e19573d6000803e3d6000fd5b50505050610ea0565b610e2d8260006112a3565b60405163131836e760e21b8152600c60048201526001600160a01b0383166024820152733e4d3617dc6ef067fc82ad3dab35504140ab717e90634c60db9c9060440160006040518083038186803b158015610e8757600080fd5b505af4158015610e9b573d6000803e3d6000fd5b505050505b610eab826001610c66565b505b5050565b6005546001600160a01b03163314610edb5760405162461bcd60e51b81526004016106b490611a78565b6001600160a01b038116610f405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003610fae575060006107f3565b6000610fba8385611b1f565b905082610fc78583611ac3565b1461101e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b4565b9392505050565b6000806110328385611b36565b90508381101561101e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106b4565b6001600160a01b0383166110e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b4565b6001600160a01b0382166111475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602f60248201527f427265776c6162735f4469766964656e645f547261636b65723a204e6f20747260448201526e185b9cd9995c9cc8185b1b1bddd959608a1b60648201526084016106b4565b6000818484111561122c5760405162461bcd60e51b81526004016106b49190611906565b5060006112398486611b49565b95945050505050565b600081818112156107f357600080fd5b60008061125f8385611b5c565b9050600083121580156112725750838112155b80611287575060008312801561128757508381125b61101e57600080fd5b60008082121561129f57600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156112e25760006112d083836113f5565b90506112dc8482611483565b50610eab565b80821015610eab5760006112f682846113f5565b905061130284826114e7565b50505050565b60008061131483610c2d565b905080156113a0576001600160a01b0383166000908152600b602052604090205461133f9082611025565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061138e9084815260200190565b60405180910390a261101e838261152b565b50600092915050565b6005546001600160a01b031633146113d35760405162461bcd60e51b81526004016106b490611a78565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061101e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611208565b6005546001600160a01b031633146114615760405162461bcd60e51b81526004016106b490611a78565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61148d82826116ce565b6114c76114a861097083600654610f9c90919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906117b9565b6001600160a01b039092166000908152600a602052604090209190915550565b6114f182826117f6565b6114c761150c61097083600654610f9c90919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611252565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190611b84565b816000815181106115d0576115d0611ba1565b6001600160a01b03928316602091820292909201015260085482519116908290600190811061160157611601611ba1565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959085906116479060009086908a904290600401611bb7565b6000604051808303818588803b15801561166057600080fd5b505af193505050508015611672575060015b6116be576001600160a01b0384166000908152600b602052604090205461169990846113f5565b6001600160a01b0385166000908152600b602052604081209190915591506107f39050565b829150506107f3565b5092915050565b6001600160a01b0382166117245760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106b4565b61173060008383610eab565b60025461173d9082611025565b6002556001600160a01b0382166000908152602081905260409020546117639082611025565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806117c68385611c21565b9050600083121580156117d95750838113155b806112875750600083128015611287575083811361101e57600080fd5b6001600160a01b0382166118565760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106b4565b61186282600083610eab565b61189f81604051806060016040528060228152602001611c42602291396001600160a01b0385166000908152602081905260409020549190611208565b6001600160a01b0383166000908152602081905260409020556002546118c590826113f5565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016117ad565b600060208083528351808285015260005b8181101561193357858101830151858201604001528201611917565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b1a57600080fd5b6000806040838503121561197c57600080fd5b823561198781611954565b946020939093013593505050565b6000602082840312156119a757600080fd5b5035919050565b6000602082840312156119c057600080fd5b813561101e81611954565b6000806000606084860312156119e057600080fd5b83356119eb81611954565b925060208401356119fb81611954565b929592945050506040919091013590565b60008060408385031215611a1f57600080fd5b8235611a2a81611954565b915060208301358015158114611a3f57600080fd5b809150509250929050565b60008060408385031215611a5d57600080fd5b8235611a6881611954565b91506020830135611a3f81611954565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611ae057634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680611af957607f821691505b602082108103611b1957634e487b7160e01b600052602260045260246000fd5b50919050565b80820281158282048414176107f3576107f3611aad565b808201808211156107f3576107f3611aad565b818103818111156107f3576107f3611aad565b8082018281126000831280158216821582161715611b7c57611b7c611aad565b505092915050565b600060208284031215611b9657600080fd5b815161101e81611954565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611c015784516001600160a01b031683529383019391830191600101611bdc565b50506001600160a01b039690961660408501525050506060015292915050565b81810360008312801583831316838312821617156116c7576116c7611aad56fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220794ace93881b91e45ae3974c7478eb0e89875a605b20422aeb718d2199860ead64736f6c63430008110033
Deployed Bytecode Sourcemap
47845:2930:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17757:21;:19;:21::i;:::-;47845:2930;;;;;17794:445;;;:::i;12891:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13855:169;;;;;;;;;;-1:-1:-1;13855:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13855:169:0;1023:187:1;49755:120:0;;;;;;;;;;-1:-1:-1;49840:15:0;:27;49755:120;;;1361:25:1;;;1349:2;1334:18;49755:120:0;1215:177:1;49417:330:0;;;;;;;;;;-1:-1:-1;49417:330:0;;;;;:::i;:::-;;:::i;17457:30::-;;;;;;;;;;-1:-1:-1;17457:30:0;;;;-1:-1:-1;;;;;17457:30:0;;;;;;-1:-1:-1;;;;;1761:32:1;;;1743:51;;1731:2;1716:18;17457:30:0;1582:218:1;13212:108:0;;;;;;;;;;-1:-1:-1;13300:12:0;;13212:108;;48142:49;;;;;;;;;;-1:-1:-1;48142:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;14032:454;;;;;;;;;;-1:-1:-1;14032:454:0;;;;;:::i;:::-;;:::i;20064:331::-;;;;;;;;;;-1:-1:-1;20064:331:0;;;;;:::i;:::-;;:::i;13111:93::-;;;;;;;;;;-1:-1:-1;13111:93:0;;13194:2;2660:36:1;;2648:2;2633:18;13111:93:0;2518:184:1;49115:294:0;;;;;;;;;;-1:-1:-1;49115:294:0;;;;;:::i;:::-;;:::i;14494:218::-;;;;;;;;;;-1:-1:-1;14494:218:0;;;;;:::i;:::-;;:::i;48082:53::-;;;;;;;;;;-1:-1:-1;48082:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18247:125;;;;;;;;;;;;;:::i;48198:24::-;;;;;;;;;;;;;;;;13328:127;;;;;;;;;;-1:-1:-1;13328:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13429:18:0;13402:7;13429:18;;;;;;;;;;;;13328:127;12047:148;;;;;;;;;;;;;:::i;17377:40::-;;;;;;;;;;;;;;;;48700:99;;;;;;;;;;-1:-1:-1;48700:99:0;;;;;:::i;:::-;;:::i;11833:79::-;;;;;;;;;;-1:-1:-1;11898:6:0;;-1:-1:-1;;;;;11898:6:0;11833:79;;19598:131;;;;;;;;;;-1:-1:-1;19598:131:0;;;;;:::i;:::-;;:::i;12999:104::-;;;;;;;;;;;;;:::i;14720:400::-;;;;;;;;;;-1:-1:-1;14720:400:0;;;;;:::i;:::-;;:::i;19737:175::-;;;;;;;;;;-1:-1:-1;19737:175:0;;;;;:::i;:::-;;:::i;13463:::-;;;;;;;;;;-1:-1:-1;13463:175:0;;;;;:::i;:::-;;:::i;19920:136::-;;;;;;;;;;-1:-1:-1;19920:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;20022:26:0;19995:7;20022:26;;;:18;:26;;;;;;;19920:136;50379:393;;;;;;;;;;-1:-1:-1;50379:393:0;;;;;:::i;:::-;;:::i;48229:46::-;;;;;;;;;;;;;;;;48807:105;;;;;;;;;;-1:-1:-1;48807:105:0;;;;;:::i;:::-;;:::i;13646:201::-;;;;;;;;;;-1:-1:-1;13646:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;13812:18:0;;;13780:7;13812:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13646:201;49883:488;;;;;;;;;;-1:-1:-1;49883:488:0;;;;;:::i;:::-;;:::i;12203:244::-;;;;;;;;;;-1:-1:-1;12203:244:0;;;;;:::i;:::-;;:::i;17424:26::-;;;;;;;;;;-1:-1:-1;17424:26:0;;;;-1:-1:-1;;;;;17424:26:0;;;17794:445;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;;;;;;;;;17894:1:::1;17878:13;13300:12:::0;;;13212:108;17878:13:::1;:17;17870:26;;;::::0;::::1;;17911:9;:13:::0;17907:325:::1;;17969:105;18046:13;13300:12:::0;;;13212:108;18046:13:::1;18017:26;18018:9;-1:-1:-1::0;;;18017:15:0::1;:26::i;:::-;:42;;;;:::i;:::-;17969:25;::::0;;:29:::1;:105::i;:::-;17941:25;:133:::0;18094:43:::1;::::0;18127:9:::1;1361:25:1::0;;18115:10:0::1;::::0;18094:43:::1;::::0;1349:2:1;1334:18;18094:43:0::1;;;;;;;18180:25;::::0;:40:::1;::::0;18210:9:::1;18180:29;:40::i;:::-;18152:25;:68:::0;17907:325:::1;17794:445::o:0;12891:100::-;12945:13;12978:5;12971:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12891:100;:::o;13855:169::-;13938:4;13955:39;11246:10;13978:7;13987:6;13955:8;:39::i;:::-;-1:-1:-1;14012:4:0;13855:169;;;;;:::o;49417:330::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;49559:8:::1;49524:31;;:43:::0;49502:184:::1;;;::::0;-1:-1:-1;;;49502:184:0;;5367:2:1;49502:184:0::1;::::0;::::1;5349:21:1::0;5406:2;5386:18;;;5379:30;5445:34;5425:18;;;5418:62;5516:34;5496:18;;;5489:62;5588:29;5567:19;;;5560:58;5635:19;;49502:184:0::1;5165:495:1::0;49502:184:0::1;49697:31;:42:::0;49417:330::o;14032:454::-;14172:4;14189:36;14199:6;14207:9;14218:6;14189:9;:36::i;:::-;14236:220;14259:6;11246:10;14307:138;14363:6;14307:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14307:19:0;;;;;;:11;:19;;;;;;;;11246:10;14307:33;;;;;;;;;;:37;:138::i;:::-;14236:8;:220::i;:::-;-1:-1:-1;14474:4:0;14032:454;;;;;:::o;20064:331::-;-1:-1:-1;;;;;20304:36:0;;20142:7;20304:36;;;:28;:36;;;;;;;;;13429:18;;;;;;;20182:25;;-1:-1:-1;;;17315:6:0;20182:193;;:159;;:99;;:66;;:25;:47;:66::i;:::-;:97;:99::i;:::-;:121;;:159::i;:::-;:191;:193::i;:::-;:205;;;;:::i;49115:294::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49201:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;49200:31;49192:40;;;::::0;::::1;;-1:-1:-1::0;;;;;49243:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;49243:37:0::1;49276:4;49243:37;::::0;;49291:23:::1;::::0;49265:7;;49291:11:::1;:23::i;:::-;49325:31;::::0;-1:-1:-1;;;49325:31:0;;:15:::1;:31;::::0;::::1;5868:25:1::0;-1:-1:-1;;;;;5929:32:1;;5909:18;;;5902:60;49325:22:0::1;::::0;::::1;::::0;5841:18:1;;49325:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49372:29:0::1;::::0;-1:-1:-1;;;;;49372:29:0;::::1;::::0;-1:-1:-1;49372:29:0::1;::::0;-1:-1:-1;49372:29:0;;::::1;49115:294:::0;:::o;14494:218::-;11246:10;14582:4;14631:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14631:34:0;;;;;;;;;;14582:4;;14599:83;;14622:7;;14631:50;;14670:10;14631:38;:50::i;18247:125::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;18320:44:::1;18352:10;18320:23;:44::i;:::-;;18247:125::o:0;12047:148::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;12138:6:::1;::::0;12117:40:::1;::::0;12154:1:::1;::::0;-1:-1:-1;;;;;12138:6:0::1;::::0;12117:40:::1;::::0;12154:1;;12117:40:::1;12168:6;:19:::0;;-1:-1:-1;;;;;;12168:19:0::1;::::0;;12047:148::o;48700:99::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;48769:22:::1;48785:5;48769:15;:22::i;19598:131::-:0;19664:7;19691:30;19714:6;19691:22;:30::i;12999:104::-;13055:13;13088:7;13081:14;;;;;:::i;14720:400::-;14840:4;14862:228;11246:10;14912:7;14934:145;14991:15;14934:145;;;;;;;;;;;;;;;;;11246:10;14934:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14934:34:0;;;;;;;;;;;;:38;:145::i;19737:175::-;-1:-1:-1;;;;;19877:26:0;;19815:7;19877:26;;;:18;:26;;;;;;19842:62;;:30;19896:6;19842:22;:30::i;:::-;:34;;:62::i;13463:175::-;13549:4;13566:42;11246:10;13590:9;13601:6;13566:9;:42::i;50379:393::-;11960:6;;50497:4;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;50519:14:::1;50536:32;50560:7;50536:23;:32::i;:::-;50519:49:::0;-1:-1:-1;50583:10:0;;50579:163:::1;;-1:-1:-1::0;;;;;50610:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;50636:15:::1;50610:41:::0;;50671:33;;::::1;;::::0;50610:23;50671:33:::1;::::0;::::1;::::0;50686:6;1361:25:1;;1349:2;1334:18;;1215:177;50671:33:0::1;;;;;;;;50726:4;50719:11;;;;;50579:163;-1:-1:-1::0;50759:5:0::1;::::0;50379:393;-1:-1:-1;;;50379:393:0:o;48807:105::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;48879:25:::1;48897:6;48879:17;:25::i;49883:488::-:0;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49982:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;50029:7;49978:69;50075:31;;50061:10;:45;50057:267;;50123:32;50135:7;50144:10;50123:11;:32::i;:::-;50170:40;::::0;-1:-1:-1;;;50170:40:0;;:15:::1;:40;::::0;::::1;6212:25:1::0;-1:-1:-1;;;;;6273:32:1;;6253:18;;;6246:60;6322:18;;;6315:34;;;50170:19:0::1;::::0;::::1;::::0;6185:18:1;;50170:40:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50057:267;;;50243:23;50255:7;50264:1;50243:11;:23::i;:::-;50281:31;::::0;-1:-1:-1;;;50281:31:0;;:15:::1;:31;::::0;::::1;5868:25:1::0;-1:-1:-1;;;;;5929:32:1;;5909:18;;;5902:60;50281:22:0::1;::::0;::::1;::::0;5841:18:1;;50281:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50057:267;50334:29;50349:7;50358:4;50334:14;:29::i;:::-;;12030:1;49883:488:::0;;:::o;12203:244::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12292:22:0;::::1;12284:73;;;::::0;-1:-1:-1;;;12284:73:0;;6878:2:1;12284:73:0::1;::::0;::::1;6860:21:1::0;6917:2;6897:18;;;6890:30;6956:34;6936:18;;;6929:62;-1:-1:-1;;;7007:18:1;;;7000:36;7053:19;;12284:73:0::1;6676:402:1::0;12284:73:0::1;12394:6;::::0;12373:38:::1;::::0;-1:-1:-1;;;;;12373:38:0;;::::1;::::0;12394:6:::1;::::0;12373:38:::1;::::0;12394:6:::1;::::0;12373:38:::1;12422:6;:17:::0;;-1:-1:-1;;;;;;12422:17:0::1;-1:-1:-1::0;;;;;12422:17:0;;;::::1;::::0;;;::::1;::::0;;12203:244::o;3436:471::-;3494:7;3739:1;3744;3739:6;3735:47;;-1:-1:-1;3769:1:0;3762:8;;3735:47;3794:9;3806:5;3810:1;3806;:5;:::i;:::-;3794:17;-1:-1:-1;3839:1:0;3830:5;3834:1;3794:17;3830:5;:::i;:::-;:10;3822:56;;;;-1:-1:-1;;;3822:56:0;;7458:2:1;3822:56:0;;;7440:21:1;7497:2;7477:18;;;7470:30;7536:34;7516:18;;;7509:62;-1:-1:-1;;;7587:18:1;;;7580:31;7628:19;;3822:56:0;7256:397:1;3822:56:0;3898:1;3436:471;-1:-1:-1;;;3436:471:0:o;2869:181::-;2927:7;;2959:5;2963:1;2959;:5;:::i;:::-;2947:17;;2988:1;2983;:6;;2975:46;;;;-1:-1:-1;;;2975:46:0;;7990:2:1;2975:46:0;;;7972:21:1;8029:2;8009:18;;;8002:30;8068:29;8048:18;;;8041:57;8115:18;;2975:46:0;7788:351:1;16509:378:0;-1:-1:-1;;;;;16645:19:0;;16637:68;;;;-1:-1:-1;;;16637:68:0;;8346:2:1;16637:68:0;;;8328:21:1;8385:2;8365:18;;;8358:30;8424:34;8404:18;;;8397:62;-1:-1:-1;;;8475:18:1;;;8468:34;8519:19;;16637:68:0;8144:400:1;16637:68:0;-1:-1:-1;;;;;16724:21:0;;16716:68;;;;-1:-1:-1;;;16716:68:0;;8751:2:1;16716:68:0;;;8733:21:1;8790:2;8770:18;;;8763:30;8829:34;8809:18;;;8802:62;-1:-1:-1;;;8880:18:1;;;8873:32;8922:19;;16716:68:0;8549:398:1;16716:68:0;-1:-1:-1;;;;;16795:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16847:32;;1361:25:1;;;16847:32:0;;1334:18:1;16847:32:0;;;;;;;16509:378;;;:::o;48920:187::-;49034:65;;-1:-1:-1;;;49034:65:0;;9154:2:1;49034:65:0;;;9136:21:1;9193:2;9173:18;;;9166:30;9232:34;9212:18;;;9205:62;-1:-1:-1;;;9283:18:1;;;9276:45;9338:19;;49034:65:0;8952:411:1;3202:226:0;3322:7;3358:12;3350:6;;;;3342:29;;;;-1:-1:-1;;;3342:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3382:9:0;3394:5;3398:1;3394;:5;:::i;:::-;3382:17;3202:226;-1:-1:-1;;;;;3202:226:0:o;6117:148::-;6173:6;6210:1;6231:6;;;;6223:15;;;;;5634:176;5690:6;;5720:5;5724:1;5720;:5;:::i;:::-;5709:16;;5750:1;5745;:6;;:16;;;;;5760:1;5755;:6;;5745:16;5744:38;;;;5771:1;5767;:5;:14;;;;;5780:1;5776;:5;5767:14;5736:47;;;;;5955:127;6011:7;6044:1;6039;:6;;6031:15;;;;;;-1:-1:-1;6072:1:0;5955:127::o;21430:449::-;-1:-1:-1;;;;;13429:18:0;;21508:22;13429:18;;;;;;;;;;;21566:27;;;21562:310;;;21610:18;21631:30;:10;21646:14;21631;:30::i;:::-;21610:51;;21676:26;21682:7;21691:10;21676:5;:26::i;:::-;21595:119;21562:310;;;21737:14;21724:10;:27;21720:152;;;21768:18;21789:30;:14;21808:10;21789:18;:30::i;:::-;21768:51;;21834:26;21840:7;21849:10;21834:5;:26::i;:::-;21753:119;21497:382;21430:449;;:::o;18380:478::-;18453:7;18473:29;18505:28;18528:4;18505:22;:28::i;:::-;18473:60;-1:-1:-1;18548:25:0;;18544:288;;-1:-1:-1;;;;;18617:24:0;;;;;;:18;:24;;;;;;:51;;18646:21;18617:28;:51::i;:::-;-1:-1:-1;;;;;18590:24:0;;;;;;:18;:24;;;;;;;:78;;;;18688:46;;;;;;18712:21;1361:25:1;;1349:2;1334:18;;1215:177;18688:46:0;;;;;;;;18756:64;18792:4;18798:21;18756:35;:64::i;18544:288::-;-1:-1:-1;18849:1:0;;18380:478;-1:-1:-1;;18380:478:0:o;21887:97::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;21957:11:::1;:19:::0;;-1:-1:-1;;;;;;21957:19:0::1;-1:-1:-1::0;;;;;21957:19:0;;;::::1;::::0;;;::::1;::::0;;21887:97::o;3058:136::-;3116:7;3143:43;3147:1;3150;3143:43;;;;;;;;;;;;;;;;;:3;:43::i;21992:114::-;11960:6;;-1:-1:-1;;;;;11960:6:0;11246:10;11960:22;11952:67;;;;-1:-1:-1;;;11952:67:0;;;;;;;:::i;:::-;22065:15:::1;:33:::0;;-1:-1:-1;;;;;;22065:33:0::1;-1:-1:-1::0;;;;;22065:33:0;;;::::1;::::0;;;::::1;::::0;;21992:114::o;20850:282::-;20926:27;20938:7;20947:5;20926:11;:27::i;:::-;21004:120;21060:53;21061:36;21091:5;21061:25;;:29;;:36;;;;:::i;21060:53::-;-1:-1:-1;;;;;21004:37:0;;;;;;:28;:37;;;;;;;:41;:120::i;:::-;-1:-1:-1;;;;;20964:37:0;;;;;;;:28;:37;;;;;:160;;;;-1:-1:-1;20850:282:0:o;21140:::-;21216:27;21228:7;21237:5;21216:11;:27::i;:::-;21294:120;21350:53;21351:36;21381:5;21351:25;;:29;;:36;;;;:::i;21350:53::-;-1:-1:-1;;;;;21294:37:0;;;;;;:28;:37;;;;;;;:41;:120::i;18866:724::-;19030:16;;;19044:1;19030:16;;;;;;;;18981:7;;;;19030:16;19044:1;19030:16;;;;;;;;-1:-1:-1;;19067:15:0;;:22;;;-1:-1:-1;;;19067:22:0;;;;19006:40;;-1:-1:-1;;;;;;19067:15:0;;;;:20;;-1:-1:-1;19067:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19057:4;19062:1;19057:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19057:32:0;;;:7;;;;;;;;;:32;19118:11;;19100:7;;19118:11;;;19100:4;;19118:11;;19100:7;;;;;;:::i;:::-;-1:-1:-1;;;;;19100:30:0;;;:7;;;;;;;;;:30;19160:15;;:243;;-1:-1:-1;;;19160:243:0;;:15;;;:66;;19235:9;;19160:243;;:15;;19316:4;;19347:6;;19373:15;;19160:243;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19143:440;;-1:-1:-1;;;;;19507:26:0;;;;;;:18;:26;;;;;;:41;;19538:9;19507:30;:41::i;:::-;-1:-1:-1;;;;;19478:26:0;;;;;;:18;:26;;;;;:70;;;;:26;-1:-1:-1;19563:8:0;;-1:-1:-1;19563:8:0;19143:440;19435:9;19428:16;;;;;19143:440;18995:595;18866:724;;;;:::o;15705:374::-;-1:-1:-1;;;;;15789:21:0;;15781:65;;;;-1:-1:-1;;;15781:65:0;;11357:2:1;15781:65:0;;;11339:21:1;11396:2;11376:18;;;11369:30;11435:33;11415:18;;;11408:61;11486:18;;15781:65:0;11155:355:1;15781:65:0;15857:49;15886:1;15890:7;15899:6;15857:20;:49::i;:::-;15932:12;;:24;;15949:6;15932:16;:24::i;:::-;15917:12;:39;-1:-1:-1;;;;;15988:18:0;;:9;:18;;;;;;;;;;;:30;;16011:6;15988:22;:30::i;:::-;-1:-1:-1;;;;;15967:18:0;;:9;:18;;;;;;;;;;;:51;;;;16034:37;;1361:25:1;;;15967:18:0;;:9;;16034:37;;1334:18:1;16034:37:0;;;;;;;;15705:374;;:::o;5450:176::-;5506:6;;5536:5;5540:1;5536;:5;:::i;:::-;5525:16;;5566:1;5561;:6;;:16;;;;;5576:1;5571;:6;;5561:16;5560:38;;;;5587:1;5583;:5;:14;;;;;5596:1;5592;:5;5552:47;;;;;16087:414;-1:-1:-1;;;;;16171:21:0;;16163:67;;;;-1:-1:-1;;;16163:67:0;;11922:2:1;16163:67:0;;;11904:21:1;11961:2;11941:18;;;11934:30;12000:34;11980:18;;;11973:62;-1:-1:-1;;;12051:18:1;;;12044:31;12092:19;;16163:67:0;11720:397:1;16163:67:0;16241:49;16262:7;16279:1;16283:6;16241:20;:49::i;:::-;16322:68;16345:6;16322:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16322:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;16301:18:0;;:9;:18;;;;;;;;;;:89;16416:12;;:24;;16433:6;16416:16;:24::i;:::-;16401:12;:39;16456:37;;1361:25:1;;;16482:1:0;;-1:-1:-1;;;;;16456:37:0;;;;;1349:2:1;1334:18;16456:37:0;1215:177:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1805:247::-;1864:6;1917:2;1905:9;1896:7;1892:23;1888:32;1885:52;;;1933:1;1930;1923:12;1885:52;1972:9;1959:23;1991:31;2016:5;1991:31;:::i;2057:456::-;2134:6;2142;2150;2203:2;2191:9;2182:7;2178:23;2174:32;2171:52;;;2219:1;2216;2209:12;2171:52;2258:9;2245:23;2277:31;2302:5;2277:31;:::i;:::-;2327:5;-1:-1:-1;2384:2:1;2369:18;;2356:32;2397:33;2356:32;2397:33;:::i;:::-;2057:456;;2449:7;;-1:-1:-1;;;2503:2:1;2488:18;;;;2475:32;;2057:456::o;2915:424::-;2988:6;2996;3049:2;3037:9;3028:7;3024:23;3020:32;3017:52;;;3065:1;3062;3055:12;3017:52;3104:9;3091:23;3123:31;3148:5;3123:31;:::i;:::-;3173:5;-1:-1:-1;3230:2:1;3215:18;;3202:32;3272:15;;3265:23;3253:36;;3243:64;;3303:1;3300;3293:12;3243:64;3326:7;3316:17;;;2915:424;;;;;:::o;3344:388::-;3412:6;3420;3473:2;3461:9;3452:7;3448:23;3444:32;3441:52;;;3489:1;3486;3479:12;3441:52;3528:9;3515:23;3547:31;3572:5;3547:31;:::i;:::-;3597:5;-1:-1:-1;3654:2:1;3639:18;;3626:32;3667:33;3626:32;3667:33;:::i;4065:356::-;4267:2;4249:21;;;4286:18;;;4279:30;4345:34;4340:2;4325:18;;4318:62;4412:2;4397:18;;4065:356::o;4426:127::-;4487:10;4482:3;4478:20;4475:1;4468:31;4518:4;4515:1;4508:15;4542:4;4539:1;4532:15;4558:217;4598:1;4624;4614:132;;4668:10;4663:3;4659:20;4656:1;4649:31;4703:4;4700:1;4693:15;4731:4;4728:1;4721:15;4614:132;-1:-1:-1;4760:9:1;;4558:217::o;4780:380::-;4859:1;4855:12;;;;4902;;;4923:61;;4977:4;4969:6;4965:17;4955:27;;4923:61;5030:2;5022:6;5019:14;4999:18;4996:38;4993:161;;5076:10;5071:3;5067:20;5064:1;5057:31;5111:4;5108:1;5101:15;5139:4;5136:1;5129:15;4993:161;;4780:380;;;:::o;7083:168::-;7156:9;;;7187;;7204:15;;;7198:22;;7184:37;7174:71;;7225:18;;:::i;7658:125::-;7723:9;;;7744:10;;;7741:36;;;7757:18;;:::i;9368:128::-;9435:9;;;9456:11;;;9453:37;;;9470:18;;:::i;9501:216::-;9565:9;;;9593:11;;;9540:3;9623:9;;9651:10;;9647:19;;9676:10;;9668:19;;9644:44;9641:70;;;9691:18;;:::i;:::-;9641:70;;9501:216;;;;:::o;9854:251::-;9924:6;9977:2;9965:9;9956:7;9952:23;9948:32;9945:52;;;9993:1;9990;9983:12;9945:52;10025:9;10019:16;10044:31;10069:5;10044:31;:::i;10110:127::-;10171:10;10166:3;10162:20;10159:1;10152:31;10202:4;10199:1;10192:15;10226:4;10223:1;10216:15;10242:908;10476:4;10524:3;10513:9;10509:19;10555:6;10544:9;10537:25;10581:2;10619:3;10614:2;10603:9;10599:18;10592:31;10643:6;10678;10672:13;10709:6;10701;10694:22;10747:3;10736:9;10732:19;10725:26;;10786:2;10778:6;10774:15;10760:29;;10807:1;10817:195;10831:6;10828:1;10825:13;10817:195;;;10896:13;;-1:-1:-1;;;;;10892:39:1;10880:52;;10987:15;;;;10952:12;;;;10928:1;10846:9;10817:195;;;-1:-1:-1;;;;;;;11068:32:1;;;;11063:2;11048:18;;11041:60;-1:-1:-1;;;11132:2:1;11117:18;11110:34;11029:3;10242:908;-1:-1:-1;;10242:908:1:o;11515:200::-;11581:9;;;11554:4;11609:9;;11637:10;;11649:12;;;11633:29;11672:12;;;11664:21;;11630:56;11627:82;;;11689:18;;:::i
Swarm Source
ipfs://794ace93881b91e45ae3974c7478eb0e89875a605b20422aeb718d2199860ead
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,992.45 | 1.2098 | $3,620.22 |
Loading...
Loading
[ Download: CSV Export ]
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.