More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 104 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16189937 | 745 days ago | IN | 0 ETH | 0.00059624 | ||||
Approve | 16079449 | 760 days ago | IN | 0 ETH | 0.00063631 | ||||
Approve | 16079436 | 760 days ago | IN | 0 ETH | 0.00062525 | ||||
Approve | 16079147 | 761 days ago | IN | 0 ETH | 0.00050831 | ||||
Approve | 16079142 | 761 days ago | IN | 0 ETH | 0.00049941 | ||||
Approve | 16079137 | 761 days ago | IN | 0 ETH | 0.00050832 | ||||
Approve | 16004110 | 771 days ago | IN | 0 ETH | 0.00058755 | ||||
Approve | 15987981 | 773 days ago | IN | 0 ETH | 0.00093283 | ||||
Approve | 15977777 | 775 days ago | IN | 0 ETH | 0.00064942 | ||||
Approve | 15977776 | 775 days ago | IN | 0 ETH | 0.00117717 | ||||
Approve | 15974608 | 775 days ago | IN | 0 ETH | 0.00066871 | ||||
Approve | 15974553 | 775 days ago | IN | 0 ETH | 0.00125509 | ||||
Approve | 15974551 | 775 days ago | IN | 0 ETH | 0.00078723 | ||||
Approve | 15971019 | 776 days ago | IN | 0 ETH | 0.00085999 | ||||
Approve | 15969712 | 776 days ago | IN | 0 ETH | 0.00093122 | ||||
Approve | 15952614 | 778 days ago | IN | 0 ETH | 0.00060984 | ||||
Approve | 15951992 | 778 days ago | IN | 0 ETH | 0.00071554 | ||||
Approve | 15951399 | 778 days ago | IN | 0 ETH | 0.00067412 | ||||
Approve | 15945465 | 779 days ago | IN | 0 ETH | 0.00076942 | ||||
Approve | 15942437 | 780 days ago | IN | 0 ETH | 0.00065681 | ||||
Approve | 15942437 | 780 days ago | IN | 0 ETH | 0.00119935 | ||||
Approve | 15904794 | 785 days ago | IN | 0 ETH | 0.0006671 | ||||
Approve | 15903311 | 785 days ago | IN | 0 ETH | 0.00064877 | ||||
Approve | 15899319 | 786 days ago | IN | 0 ETH | 0.0011346 | ||||
Approve | 15899090 | 786 days ago | IN | 0 ETH | 0.00076844 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WhaleInu
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-03 */ /** TG :- https://t.me/Whaleinujoin ***/ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) /* pragma solidity ^0.8.0; */ /* import "./IERC20.sol"; */ /* import "./extensions/IERC20Metadata.sol"; */ /* import "../../utils/Context.sol"; */ /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) /* pragma solidity ^0.8.0; */ // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract WhaleInu is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; bool private swapping; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = true; bool public whiteListEnabled = true; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public sellLiquidityFee; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public isWhitelisted; event ExcludeFromFees(address indexed account, bool isExcluded); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("Whale Inu", "WhaleInu") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), USDC); excludeFromMaxTransaction(address(uniswapV2Pair), true); uint256 _buyDevFee = 5; uint256 _buyLiquidityFee = 0; uint256 _sellDevFee = 10; uint256 _sellLiquidityFee = 0; uint256 totalSupply = 1000_000_000 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 2% from total supply maxTransactionAmountTxn maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyDevFee = _buyDevFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyDevFee + buyLiquidityFee; sellDevFee = _sellDevFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellDevFee + sellLiquidityFee; devWallet = address(0xe58839131E169EE01a96366c85f077ec8B1EA450); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } function disableWhitelist() external onlyOwner { whiteListEnabled = false; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyDevFee + buyLiquidityFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellDevFee + sellLiquidityFee; require(sellTotalFees <= 10, "Must keep fees at 10% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function whitelist(address[] memory account) public onlyOwner { for (uint i=0; i<account.length; i++) { isWhitelisted[account[i]] = true; } } function updateDevWallet(address newDevWallet) external onlyOwner { emit devWalletUpdated(newDevWallet, devWallet); devWallet = newDevWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } 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 (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } if(whiteListEnabled){ require(isWhitelisted[to], "You are not whitelisted to buy at the moment"); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. //when buy if ( from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 tokensForLiquidity = 0; uint256 tokensForDev = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (to == uniswapV2Pair && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees; tokensForDev = (fees * sellDevFee) / sellTotalFees; } // on buy else if (from == uniswapV2Pair && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; tokensForDev = (fees * buyDevFee) / buyTotalFees; } if (fees> 0) { super._transfer(from, address(this), fees); } if (tokensForLiquidity > 0) { super._transfer(address(this), uniswapV2Pair, tokensForLiquidity); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForUSDC(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = USDC; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of USDC path, devWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } swapTokensForUSDC(contractBalance); } }
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":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600680546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179055600b8054630101000163ffffffff199091161790553480156200004c57600080fd5b50604051806040016040528060098152602001685768616c6520496e7560b81b815250604051806040016040528060088152602001675768616c65496e7560c01b8152508160039081620000a1919062000650565b506004620000b0828262000650565b505050620000cd620000c76200034860201b60201c565b6200034c565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000ef8160016200039e565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200013a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016091906200071c565b6006546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620001b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d891906200071c565b6001600160a01b031660a0819052620001f39060016200039e565b60056000600a816b033b2e3c9fd0803ce800000060646200021682600162000764565b62000222919062000786565b60085560646200023482600262000764565b62000240919062000786565b600a556127106200025382600562000764565b6200025f919062000786565b600955600d859055600e849055620002788486620007a9565b600c5560108390556011829055620002918284620007a9565b600f55600780546001600160a01b03191673e58839131e169ee01a96366c85f077ec8b1ea450179055620002d9620002d16005546001600160a01b031690565b600162000418565b620002e630600162000418565b620002f561dead600162000418565b620003146200030c6005546001600160a01b031690565b60016200039e565b620003213060016200039e565b6200033061dead60016200039e565b6200033c3382620004c2565b505050505050620007c4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003ed5760405162461bcd60e51b8152602060048201819052602482015260008051602062002a2083398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620004635760405162461bcd60e51b8152602060048201819052602482015260008051602062002a208339815191526044820152606401620003e4565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200051a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003e4565b80600260008282546200052e9190620007a9565b90915550506001600160a01b038216600090815260208190526040812080548392906200055d908490620007a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005d757607f821691505b602082108103620005f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a757600081815260208120601f850160051c81016020861015620006275750805b601f850160051c820191505b81811015620006485782815560010162000633565b505050505050565b81516001600160401b038111156200066c576200066c620005ac565b62000684816200067d8454620005c2565b84620005fe565b602080601f831160018114620006bc5760008415620006a35750858301515b600019600386901b1c1916600185901b17855562000648565b600085815260208120601f198616915b82811015620006ed57888601518255948401946001909101908401620006cc565b50858210156200070c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200072f57600080fd5b81516001600160a01b03811681146200074757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200078157620007816200074e565b500290565b600082620007a457634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007bf57620007bf6200074e565b500190565b60805160a0516122056200081b60003960008181610479015281816115080152818161171901528181611829015281816118d2015261198c01526000818161034c01528181611c700152611caf01526122056000f3fe6080604052600436106102815760003560e01c80638a8c523c1161014f578063c18bc195116100c1578063e2e616bb1161007a578063e2e616bb146107de578063e2f45605146107ff578063f11a24d314610815578063f2fde38b1461082b578063f63743421461084b578063f8b45b051461086157600080fd5b8063c18bc19514610717578063c8c8ebe414610737578063d257b34f1461074d578063d6b0f4841461076d578063d85ba06314610782578063dd62ed3e1461079857600080fd5b80639c3b4fdc116101135780639c3b4fdc1461066c578063a0d82dc514610682578063a9059cbb14610698578063bbc0c742146106b8578063bd8aa780146106d7578063c0246668146106f757600080fd5b80638a8c523c146105e45780638da5cb5b146105f95780638ea5220f14610617578063924de9b71461063757806395d89b411461065757600080fd5b80633af32abf116101f35780636ddd1713116101ac5780636ddd17131461052457806370a0823114610544578063715018a61461057a578063751039fc1461058f5780637571336a146105a457806389a30271146105c457600080fd5b80633af32abf1461043757806349bd5a5e146104675780634a62bb651461049b5780634fbee193146104b557806366ca9b83146104ee5780636a486a8e1461050e57600080fd5b806318160ddd1161024557806318160ddd146103865780631816467f146103a5578063203e727e146103c557806323b872dd146103e557806327c8f83514610405578063313ce5671461041b57600080fd5b806302dbd8f81461028d57806306fdde03146102af578063095ea7b3146102da57806310d5de531461030a5780631694505e1461033a57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a8366004611d27565b610877565b005b3480156102bb57600080fd5b506102c4610917565b6040516102d19190611d49565b60405180910390f35b3480156102e657600080fd5b506102fa6102f5366004611db5565b6109a9565b60405190151581526020016102d1565b34801561031657600080fd5b506102fa610325366004611ddf565b60136020526000908152604090205460ff1681565b34801561034657600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d1565b34801561039257600080fd5b506002545b6040519081526020016102d1565b3480156103b157600080fd5b506102ad6103c0366004611ddf565b6109bf565b3480156103d157600080fd5b506102ad6103e0366004611dfa565b610a46565b3480156103f157600080fd5b506102fa610400366004611e13565b610b23565b34801561041157600080fd5b5061036e61dead81565b34801561042757600080fd5b50604051601281526020016102d1565b34801561044357600080fd5b506102fa610452366004611ddf565b60146020526000908152604090205460ff1681565b34801561047357600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a757600080fd5b50600b546102fa9060ff1681565b3480156104c157600080fd5b506102fa6104d0366004611ddf565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156104fa57600080fd5b506102ad610509366004611d27565b610bcd565b34801561051a57600080fd5b50610397600f5481565b34801561053057600080fd5b50600b546102fa9062010000900460ff1681565b34801561055057600080fd5b5061039761055f366004611ddf565b6001600160a01b031660009081526020819052604090205490565b34801561058657600080fd5b506102ad610c60565b34801561059b57600080fd5b506102fa610c96565b3480156105b057600080fd5b506102ad6105bf366004611e5f565b610cd3565b3480156105d057600080fd5b5060065461036e906001600160a01b031681565b3480156105f057600080fd5b506102ad610d28565b34801561060557600080fd5b506005546001600160a01b031661036e565b34801561062357600080fd5b5060075461036e906001600160a01b031681565b34801561064357600080fd5b506102ad610652366004611e92565b610d65565b34801561066357600080fd5b506102c4610dab565b34801561067857600080fd5b50610397600d5481565b34801561068e57600080fd5b5061039760105481565b3480156106a457600080fd5b506102fa6106b3366004611db5565b610dba565b3480156106c457600080fd5b50600b546102fa90610100900460ff1681565b3480156106e357600080fd5b506102ad6106f2366004611ec3565b610dc7565b34801561070357600080fd5b506102ad610712366004611e5f565b610e59565b34801561072357600080fd5b506102ad610732366004611dfa565b610ee2565b34801561074357600080fd5b5061039760085481565b34801561075957600080fd5b506102fa610768366004611dfa565b610fb3565b34801561077957600080fd5b506102ad61110a565b34801561078e57600080fd5b50610397600c5481565b3480156107a457600080fd5b506103976107b3366004611f88565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ea57600080fd5b50600b546102fa906301000000900460ff1681565b34801561080b57600080fd5b5061039760095481565b34801561082157600080fd5b50610397600e5481565b34801561083757600080fd5b506102ad610846366004611ddf565b611143565b34801561085757600080fd5b5061039760115481565b34801561086d57600080fd5b50610397600a5481565b6005546001600160a01b031633146108aa5760405162461bcd60e51b81526004016108a190611fb2565b60405180910390fd5b601082905560118190556108be8183611ffd565b600f819055600a10156109135760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108a1565b5050565b60606003805461092690612015565b80601f016020809104026020016040519081016040528092919081815260200182805461095290612015565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050905090565b60006109b63384846111de565b50600192915050565b6005546001600160a01b031633146109e95760405162461bcd60e51b81526004016108a190611fb2565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610a705760405162461bcd60e51b81526004016108a190611fb2565b670de0b6b3a76400006103e8610a8560025490565b610a9090600161204f565b610a9a919061206e565b610aa4919061206e565b811015610b0b5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016108a1565b610b1d81670de0b6b3a764000061204f565b60085550565b6000610b30848484611302565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610bb55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108a1565b610bc285338584036111de565b506001949350505050565b6005546001600160a01b03163314610bf75760405162461bcd60e51b81526004016108a190611fb2565b600d829055600e819055610c0b8183611ffd565b600c819055600a10156109135760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108a1565b6005546001600160a01b03163314610c8a5760405162461bcd60e51b81526004016108a190611fb2565b610c9460006119d4565b565b6005546000906001600160a01b03163314610cc35760405162461bcd60e51b81526004016108a190611fb2565b50600b805460ff19169055600190565b6005546001600160a01b03163314610cfd5760405162461bcd60e51b81526004016108a190611fb2565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d525760405162461bcd60e51b81526004016108a190611fb2565b600b805462ffff00191662010100179055565b6005546001600160a01b03163314610d8f5760405162461bcd60e51b81526004016108a190611fb2565b600b8054911515620100000262ff000019909216919091179055565b60606004805461092690612015565b60006109b6338484611302565b6005546001600160a01b03163314610df15760405162461bcd60e51b81526004016108a190611fb2565b60005b815181101561091357600160146000848481518110610e1557610e15612090565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e51816120a6565b915050610df4565b6005546001600160a01b03163314610e835760405162461bcd60e51b81526004016108a190611fb2565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610f0c5760405162461bcd60e51b81526004016108a190611fb2565b670de0b6b3a76400006103e8610f2160025490565b610f2c90600561204f565b610f36919061206e565b610f40919061206e565b811015610f9b5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016108a1565b610fad81670de0b6b3a764000061204f565b600a5550565b6005546000906001600160a01b03163314610fe05760405162461bcd60e51b81526004016108a190611fb2565b620186a0610fed60025490565b610ff890600161204f565b611002919061206e565b82101561106f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108a1565b6103e861107b60025490565b61108690600561204f565b611090919061206e565b8211156110fc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108a1565b50600981905560015b919050565b6005546001600160a01b031633146111345760405162461bcd60e51b81526004016108a190611fb2565b600b805463ff00000019169055565b6005546001600160a01b0316331461116d5760405162461bcd60e51b81526004016108a190611fb2565b6001600160a01b0381166111d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a1565b6111db816119d4565b50565b6001600160a01b0383166112405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a1565b6001600160a01b0382166112a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113285760405162461bcd60e51b81526004016108a1906120bf565b6001600160a01b03821661134e5760405162461bcd60e51b81526004016108a190612104565b806000036113675761136283836000611a26565b505050565b600b5460ff16156116ce576005546001600160a01b0384811691161480159061139e57506005546001600160a01b03838116911614155b80156113b257506001600160a01b03821615155b80156113c957506001600160a01b03821661dead14155b80156113df5750600654600160a01b900460ff16155b156116ce57600b54610100900460ff16611477576001600160a01b03831660009081526012602052604090205460ff168061143257506001600160a01b03821660009081526012602052604090205460ff165b6114775760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108a1565b600b546301000000900460ff1615611506576001600160a01b03821660009081526014602052604090205460ff166115065760405162461bcd60e51b815260206004820152602c60248201527f596f7520617265206e6f742077686974656c697374656420746f20627579206160448201526b1d081d1a19481b5bdb595b9d60a21b60648201526084016108a1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561156057506001600160a01b03821660009081526013602052604090205460ff16155b15611644576008548111156115d55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108a1565b600a546001600160a01b0383166000908152602081905260409020546115fb9083611ffd565b111561163f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a1565b6116ce565b6001600160a01b03821660009081526013602052604090205460ff166116ce57600a546001600160a01b03831660009081526020819052604090205461168a9083611ffd565b11156116ce5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a1565b30600090815260208190526040902054600954811080159081906116fa5750600b5462010000900460ff165b80156117105750600654600160a01b900460ff16155b801561174d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b801561177257506001600160a01b03851660009081526012602052604090205460ff16155b801561179757506001600160a01b03841660009081526012602052604090205460ff16155b156117c5576006805460ff60a01b1916600160a01b1790556117b7611b7b565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526012602052604090205460ff600160a01b90920482161591168061181357506001600160a01b03851660009081526012602052604090205460ff165b1561181c575060005b600080600083156119be577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b031614801561186a57506000600f54115b156118d05761188f6064611889600f548a611bc590919063ffffffff16565b90611bd8565b9250600f54601154846118a2919061204f565b6118ac919061206e565b9150600f54601054846118bf919061204f565b6118c9919061206e565b905061196f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b031614801561191357506000600c54115b1561196f576119326064611889600c548a611bc590919063ffffffff16565b9250600c54600e5484611945919061204f565b61194f919061206e565b9150600c54600d5484611962919061204f565b61196c919061206e565b90505b821561198057611980893085611a26565b81156119b1576119b1307f000000000000000000000000000000000000000000000000000000000000000084611a26565b6119bb8388612147565b96505b6119c9898989611a26565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316611a4c5760405162461bcd60e51b81526004016108a1906120bf565b6001600160a01b038216611a725760405162461bcd60e51b81526004016108a190612104565b6001600160a01b03831660009081526020819052604090205481811015611aea5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108a1565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b21908490611ffd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b6d91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490819003611b965750565b600954611ba490601461204f565b811115611bbc57600954611bb990601461204f565b90505b6111db81611be4565b6000611bd1828461204f565b9392505050565b6000611bd1828461206e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c1957611c19612090565b6001600160a01b039283166020918202929092010152600654825191169082906001908110611c4a57611c4a612090565b60200260200101906001600160a01b031690816001600160a01b031681525050611c95307f0000000000000000000000000000000000000000000000000000000000000000846111de565b600754604051635c11d79560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692635c11d79592611cf192879260009288929190911690429060040161215e565b600060405180830381600087803b158015611d0b57600080fd5b505af1158015611d1f573d6000803e3d6000fd5b505050505050565b60008060408385031215611d3a57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611d7657858101830151858201604001528201611d5a565b81811115611d88576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461110557600080fd5b60008060408385031215611dc857600080fd5b611dd183611d9e565b946020939093013593505050565b600060208284031215611df157600080fd5b611bd182611d9e565b600060208284031215611e0c57600080fd5b5035919050565b600080600060608486031215611e2857600080fd5b611e3184611d9e565b9250611e3f60208501611d9e565b9150604084013590509250925092565b8035801515811461110557600080fd5b60008060408385031215611e7257600080fd5b611e7b83611d9e565b9150611e8960208401611e4f565b90509250929050565b600060208284031215611ea457600080fd5b611bd182611e4f565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611ed657600080fd5b823567ffffffffffffffff80821115611eee57600080fd5b818501915085601f830112611f0257600080fd5b813581811115611f1457611f14611ead565b8060051b604051601f19603f83011681018181108582111715611f3957611f39611ead565b604052918252848201925083810185019188831115611f5757600080fd5b938501935b82851015611f7c57611f6d85611d9e565b84529385019392850192611f5c565b98975050505050505050565b60008060408385031215611f9b57600080fd5b611fa483611d9e565b9150611e8960208401611d9e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561201057612010611fe7565b500190565b600181811c9082168061202957607f821691505b60208210810361204957634e487b7160e01b600052602260045260246000fd5b50919050565b600081600019048311821515161561206957612069611fe7565b500290565b60008261208b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016120b8576120b8611fe7565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561215957612159611fe7565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121ae5784516001600160a01b031683529383019391830191600101612189565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122017151c1e7d45835c90cc8e2238a42918d564d60e58e8fd78c0f3c84370a1e21064736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106102815760003560e01c80638a8c523c1161014f578063c18bc195116100c1578063e2e616bb1161007a578063e2e616bb146107de578063e2f45605146107ff578063f11a24d314610815578063f2fde38b1461082b578063f63743421461084b578063f8b45b051461086157600080fd5b8063c18bc19514610717578063c8c8ebe414610737578063d257b34f1461074d578063d6b0f4841461076d578063d85ba06314610782578063dd62ed3e1461079857600080fd5b80639c3b4fdc116101135780639c3b4fdc1461066c578063a0d82dc514610682578063a9059cbb14610698578063bbc0c742146106b8578063bd8aa780146106d7578063c0246668146106f757600080fd5b80638a8c523c146105e45780638da5cb5b146105f95780638ea5220f14610617578063924de9b71461063757806395d89b411461065757600080fd5b80633af32abf116101f35780636ddd1713116101ac5780636ddd17131461052457806370a0823114610544578063715018a61461057a578063751039fc1461058f5780637571336a146105a457806389a30271146105c457600080fd5b80633af32abf1461043757806349bd5a5e146104675780634a62bb651461049b5780634fbee193146104b557806366ca9b83146104ee5780636a486a8e1461050e57600080fd5b806318160ddd1161024557806318160ddd146103865780631816467f146103a5578063203e727e146103c557806323b872dd146103e557806327c8f83514610405578063313ce5671461041b57600080fd5b806302dbd8f81461028d57806306fdde03146102af578063095ea7b3146102da57806310d5de531461030a5780631694505e1461033a57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a8366004611d27565b610877565b005b3480156102bb57600080fd5b506102c4610917565b6040516102d19190611d49565b60405180910390f35b3480156102e657600080fd5b506102fa6102f5366004611db5565b6109a9565b60405190151581526020016102d1565b34801561031657600080fd5b506102fa610325366004611ddf565b60136020526000908152604090205460ff1681565b34801561034657600080fd5b5061036e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102d1565b34801561039257600080fd5b506002545b6040519081526020016102d1565b3480156103b157600080fd5b506102ad6103c0366004611ddf565b6109bf565b3480156103d157600080fd5b506102ad6103e0366004611dfa565b610a46565b3480156103f157600080fd5b506102fa610400366004611e13565b610b23565b34801561041157600080fd5b5061036e61dead81565b34801561042757600080fd5b50604051601281526020016102d1565b34801561044357600080fd5b506102fa610452366004611ddf565b60146020526000908152604090205460ff1681565b34801561047357600080fd5b5061036e7f0000000000000000000000004fb4f9cc86622b450c525786542f3fd430aff78281565b3480156104a757600080fd5b50600b546102fa9060ff1681565b3480156104c157600080fd5b506102fa6104d0366004611ddf565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156104fa57600080fd5b506102ad610509366004611d27565b610bcd565b34801561051a57600080fd5b50610397600f5481565b34801561053057600080fd5b50600b546102fa9062010000900460ff1681565b34801561055057600080fd5b5061039761055f366004611ddf565b6001600160a01b031660009081526020819052604090205490565b34801561058657600080fd5b506102ad610c60565b34801561059b57600080fd5b506102fa610c96565b3480156105b057600080fd5b506102ad6105bf366004611e5f565b610cd3565b3480156105d057600080fd5b5060065461036e906001600160a01b031681565b3480156105f057600080fd5b506102ad610d28565b34801561060557600080fd5b506005546001600160a01b031661036e565b34801561062357600080fd5b5060075461036e906001600160a01b031681565b34801561064357600080fd5b506102ad610652366004611e92565b610d65565b34801561066357600080fd5b506102c4610dab565b34801561067857600080fd5b50610397600d5481565b34801561068e57600080fd5b5061039760105481565b3480156106a457600080fd5b506102fa6106b3366004611db5565b610dba565b3480156106c457600080fd5b50600b546102fa90610100900460ff1681565b3480156106e357600080fd5b506102ad6106f2366004611ec3565b610dc7565b34801561070357600080fd5b506102ad610712366004611e5f565b610e59565b34801561072357600080fd5b506102ad610732366004611dfa565b610ee2565b34801561074357600080fd5b5061039760085481565b34801561075957600080fd5b506102fa610768366004611dfa565b610fb3565b34801561077957600080fd5b506102ad61110a565b34801561078e57600080fd5b50610397600c5481565b3480156107a457600080fd5b506103976107b3366004611f88565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ea57600080fd5b50600b546102fa906301000000900460ff1681565b34801561080b57600080fd5b5061039760095481565b34801561082157600080fd5b50610397600e5481565b34801561083757600080fd5b506102ad610846366004611ddf565b611143565b34801561085757600080fd5b5061039760115481565b34801561086d57600080fd5b50610397600a5481565b6005546001600160a01b031633146108aa5760405162461bcd60e51b81526004016108a190611fb2565b60405180910390fd5b601082905560118190556108be8183611ffd565b600f819055600a10156109135760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108a1565b5050565b60606003805461092690612015565b80601f016020809104026020016040519081016040528092919081815260200182805461095290612015565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050905090565b60006109b63384846111de565b50600192915050565b6005546001600160a01b031633146109e95760405162461bcd60e51b81526004016108a190611fb2565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610a705760405162461bcd60e51b81526004016108a190611fb2565b670de0b6b3a76400006103e8610a8560025490565b610a9090600161204f565b610a9a919061206e565b610aa4919061206e565b811015610b0b5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016108a1565b610b1d81670de0b6b3a764000061204f565b60085550565b6000610b30848484611302565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610bb55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108a1565b610bc285338584036111de565b506001949350505050565b6005546001600160a01b03163314610bf75760405162461bcd60e51b81526004016108a190611fb2565b600d829055600e819055610c0b8183611ffd565b600c819055600a10156109135760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108a1565b6005546001600160a01b03163314610c8a5760405162461bcd60e51b81526004016108a190611fb2565b610c9460006119d4565b565b6005546000906001600160a01b03163314610cc35760405162461bcd60e51b81526004016108a190611fb2565b50600b805460ff19169055600190565b6005546001600160a01b03163314610cfd5760405162461bcd60e51b81526004016108a190611fb2565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d525760405162461bcd60e51b81526004016108a190611fb2565b600b805462ffff00191662010100179055565b6005546001600160a01b03163314610d8f5760405162461bcd60e51b81526004016108a190611fb2565b600b8054911515620100000262ff000019909216919091179055565b60606004805461092690612015565b60006109b6338484611302565b6005546001600160a01b03163314610df15760405162461bcd60e51b81526004016108a190611fb2565b60005b815181101561091357600160146000848481518110610e1557610e15612090565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e51816120a6565b915050610df4565b6005546001600160a01b03163314610e835760405162461bcd60e51b81526004016108a190611fb2565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610f0c5760405162461bcd60e51b81526004016108a190611fb2565b670de0b6b3a76400006103e8610f2160025490565b610f2c90600561204f565b610f36919061206e565b610f40919061206e565b811015610f9b5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016108a1565b610fad81670de0b6b3a764000061204f565b600a5550565b6005546000906001600160a01b03163314610fe05760405162461bcd60e51b81526004016108a190611fb2565b620186a0610fed60025490565b610ff890600161204f565b611002919061206e565b82101561106f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108a1565b6103e861107b60025490565b61108690600561204f565b611090919061206e565b8211156110fc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108a1565b50600981905560015b919050565b6005546001600160a01b031633146111345760405162461bcd60e51b81526004016108a190611fb2565b600b805463ff00000019169055565b6005546001600160a01b0316331461116d5760405162461bcd60e51b81526004016108a190611fb2565b6001600160a01b0381166111d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a1565b6111db816119d4565b50565b6001600160a01b0383166112405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a1565b6001600160a01b0382166112a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113285760405162461bcd60e51b81526004016108a1906120bf565b6001600160a01b03821661134e5760405162461bcd60e51b81526004016108a190612104565b806000036113675761136283836000611a26565b505050565b600b5460ff16156116ce576005546001600160a01b0384811691161480159061139e57506005546001600160a01b03838116911614155b80156113b257506001600160a01b03821615155b80156113c957506001600160a01b03821661dead14155b80156113df5750600654600160a01b900460ff16155b156116ce57600b54610100900460ff16611477576001600160a01b03831660009081526012602052604090205460ff168061143257506001600160a01b03821660009081526012602052604090205460ff165b6114775760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108a1565b600b546301000000900460ff1615611506576001600160a01b03821660009081526014602052604090205460ff166115065760405162461bcd60e51b815260206004820152602c60248201527f596f7520617265206e6f742077686974656c697374656420746f20627579206160448201526b1d081d1a19481b5bdb595b9d60a21b60648201526084016108a1565b7f0000000000000000000000004fb4f9cc86622b450c525786542f3fd430aff7826001600160a01b0316836001600160a01b031614801561156057506001600160a01b03821660009081526013602052604090205460ff16155b15611644576008548111156115d55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108a1565b600a546001600160a01b0383166000908152602081905260409020546115fb9083611ffd565b111561163f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a1565b6116ce565b6001600160a01b03821660009081526013602052604090205460ff166116ce57600a546001600160a01b03831660009081526020819052604090205461168a9083611ffd565b11156116ce5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a1565b30600090815260208190526040902054600954811080159081906116fa5750600b5462010000900460ff165b80156117105750600654600160a01b900460ff16155b801561174d57507f0000000000000000000000004fb4f9cc86622b450c525786542f3fd430aff7826001600160a01b0316846001600160a01b0316145b801561177257506001600160a01b03851660009081526012602052604090205460ff16155b801561179757506001600160a01b03841660009081526012602052604090205460ff16155b156117c5576006805460ff60a01b1916600160a01b1790556117b7611b7b565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526012602052604090205460ff600160a01b90920482161591168061181357506001600160a01b03851660009081526012602052604090205460ff165b1561181c575060005b600080600083156119be577f0000000000000000000000004fb4f9cc86622b450c525786542f3fd430aff7826001600160a01b0316886001600160a01b031614801561186a57506000600f54115b156118d05761188f6064611889600f548a611bc590919063ffffffff16565b90611bd8565b9250600f54601154846118a2919061204f565b6118ac919061206e565b9150600f54601054846118bf919061204f565b6118c9919061206e565b905061196f565b7f0000000000000000000000004fb4f9cc86622b450c525786542f3fd430aff7826001600160a01b0316896001600160a01b031614801561191357506000600c54115b1561196f576119326064611889600c548a611bc590919063ffffffff16565b9250600c54600e5484611945919061204f565b61194f919061206e565b9150600c54600d5484611962919061204f565b61196c919061206e565b90505b821561198057611980893085611a26565b81156119b1576119b1307f0000000000000000000000004fb4f9cc86622b450c525786542f3fd430aff78284611a26565b6119bb8388612147565b96505b6119c9898989611a26565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316611a4c5760405162461bcd60e51b81526004016108a1906120bf565b6001600160a01b038216611a725760405162461bcd60e51b81526004016108a190612104565b6001600160a01b03831660009081526020819052604090205481811015611aea5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108a1565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b21908490611ffd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b6d91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490819003611b965750565b600954611ba490601461204f565b811115611bbc57600954611bb990601461204f565b90505b6111db81611be4565b6000611bd1828461204f565b9392505050565b6000611bd1828461206e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c1957611c19612090565b6001600160a01b039283166020918202929092010152600654825191169082906001908110611c4a57611c4a612090565b60200260200101906001600160a01b031690816001600160a01b031681525050611c95307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111de565b600754604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d811692635c11d79592611cf192879260009288929190911690429060040161215e565b600060405180830381600087803b158015611d0b57600080fd5b505af1158015611d1f573d6000803e3d6000fd5b505050505050565b60008060408385031215611d3a57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611d7657858101830151858201604001528201611d5a565b81811115611d88576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461110557600080fd5b60008060408385031215611dc857600080fd5b611dd183611d9e565b946020939093013593505050565b600060208284031215611df157600080fd5b611bd182611d9e565b600060208284031215611e0c57600080fd5b5035919050565b600080600060608486031215611e2857600080fd5b611e3184611d9e565b9250611e3f60208501611d9e565b9150604084013590509250925092565b8035801515811461110557600080fd5b60008060408385031215611e7257600080fd5b611e7b83611d9e565b9150611e8960208401611e4f565b90509250929050565b600060208284031215611ea457600080fd5b611bd182611e4f565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611ed657600080fd5b823567ffffffffffffffff80821115611eee57600080fd5b818501915085601f830112611f0257600080fd5b813581811115611f1457611f14611ead565b8060051b604051601f19603f83011681018181108582111715611f3957611f39611ead565b604052918252848201925083810185019188831115611f5757600080fd5b938501935b82851015611f7c57611f6d85611d9e565b84529385019392850192611f5c565b98975050505050505050565b60008060408385031215611f9b57600080fd5b611fa483611d9e565b9150611e8960208401611d9e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561201057612010611fe7565b500190565b600181811c9082168061202957607f821691505b60208210810361204957634e487b7160e01b600052602260045260246000fd5b50919050565b600081600019048311821515161561206957612069611fe7565b500290565b60008261208b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016120b8576120b8611fe7565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561215957612159611fe7565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121ae5784516001600160a01b031683529383019391830191600101612189565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122017151c1e7d45835c90cc8e2238a42918d564d60e58e8fd78c0f3c84370a1e21064736f6c634300080f0033
Deployed Bytecode Sourcemap
23265:11289:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28741:318;;;;;;;;;;-1:-1:-1;28741:318:0;;;;;:::i;:::-;;:::i;:::-;;8121:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10288:169;;;;;;;;;;-1:-1:-1;10288:169:0;;;;;:::i;:::-;;:::i;:::-;;;1471:14:1;;1464:22;1446:41;;1434:2;1419:18;10288:169:0;1306:187:1;24269:63:0;;;;;;;;;;-1:-1:-1;24269:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23343:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1879:32:1;;;1861:51;;1849:2;1834:18;23343:51:0;1689:229:1;9241:108:0;;;;;;;;;;-1:-1:-1;9329:12:0;;9241:108;;;2069:25:1;;;2057:2;2042:18;9241:108:0;1923:177:1;29448:189:0;;;;;;;;;;-1:-1:-1;29448:189:0;;;;;:::i;:::-;;:::i;27504:275::-;;;;;;;;;;-1:-1:-1;27504:275:0;;;;;:::i;:::-;;:::i;10939:492::-;;;;;;;;;;-1:-1:-1;10939:492:0;;;;;:::i;:::-;;:::i;23446:53::-;;;;;;;;;;;;23492:6;23446:53;;9083:93;;;;;;;;;;-1:-1:-1;9083:93:0;;9166:2;2973:36:1;;2961:2;2946:18;9083:93:0;2831:184:1;24339:45:0;;;;;;;;;;-1:-1:-1;24339:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23401:38;;;;;;;;;;;;;;;23757:33;;;;;;;;;;-1:-1:-1;23757:33:0;;;;;;;;29647:126;;;;;;;;;;-1:-1:-1;29647:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;29737:28:0;29713:4;29737:28;;;:19;:28;;;;;;;;;29647:126;28422:311;;;;;;;;;;-1:-1:-1;28422:311:0;;;;;:::i;:::-;;:::i;24022:28::-;;;;;;;;;;;;;;;;23837:30;;;;;;;;;;-1:-1:-1;23837:30:0;;;;;;;;;;;9412:127;;;;;;;;;;-1:-1:-1;9412:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9513:18:0;9486:7;9513:18;;;;;;;;;;;;9412:127;1356:103;;;;;;;;;;;;;:::i;26808:121::-;;;;;;;;;;;;;:::i;28051:167::-;;;;;;;;;;-1:-1:-1;28051:167:0;;;;;:::i;:::-;;:::i;23506:64::-;;;;;;;;;;-1:-1:-1;23506:64:0;;;;-1:-1:-1;;;;;23506:64:0;;;26545:112;;;;;;;;;;;;;:::i;705:87::-;;;;;;;;;;-1:-1:-1;778:6:0;;-1:-1:-1;;;;;778:6:0;705:87;;23609:24;;;;;;;;;;-1:-1:-1;23609:24:0;;;;-1:-1:-1;;;;;23609:24:0;;;28314:100;;;;;;;;;;-1:-1:-1;28314:100:0;;;;;:::i;:::-;;:::i;8340:104::-;;;;;;;;;;;;;:::i;23952:24::-;;;;;;;;;;;;;;;;24057:25;;;;;;;;;;;;;;;;9752:175;;;;;;;;;;-1:-1:-1;9752:175:0;;;;;:::i;:::-;;:::i;23797:33::-;;;;;;;;;;-1:-1:-1;23797:33:0;;;;;;;;;;;29260:180;;;;;;;;;;-1:-1:-1;29260:180:0;;;;;:::i;:::-;;:::i;29067:182::-;;;;;;;;;;-1:-1:-1;29067:182:0;;;;;:::i;:::-;;:::i;27787:256::-;;;;;;;;;;-1:-1:-1;27787:256:0;;;;;:::i;:::-;;:::i;23642:35::-;;;;;;;;;;;;;;;;26999:497;;;;;;;;;;-1:-1:-1;26999:497:0;;;;;:::i;:::-;;:::i;26667:89::-;;;;;;;;;;;;;:::i;23918:27::-;;;;;;;;;;;;;;;;9990:151;;;;;;;;;;-1:-1:-1;9990:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;10106:18:0;;;10079:7;10106:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9990:151;23874:35;;;;;;;;;;-1:-1:-1;23874:35:0;;;;;;;;;;;23684:33;;;;;;;;;;;;;;;;23983:30;;;;;;;;;;;;;;;;1614:201;;;;;;;;;;-1:-1:-1;1614:201:0;;;;;:::i;:::-;;:::i;24089:31::-;;;;;;;;;;;;;;;;23724:24;;;;;;;;;;;;;;;;28741:318;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;;;;;;;;;28860:10:::1;:20:::0;;;28891:16:::1;:32:::0;;;28950:29:::1;28910:13:::0;28873:7;28950:29:::1;:::i;:::-;28934:13;:45:::0;;;29015:2:::1;-1:-1:-1::0;28998:19:0::1;28990:61;;;::::0;-1:-1:-1;;;28990:61:0;;5980:2:1;28990:61:0::1;::::0;::::1;5962:21:1::0;6019:2;5999:18;;;5992:30;6058:31;6038:18;;;6031:59;6107:18;;28990:61:0::1;5778:353:1::0;28990:61:0::1;28741:318:::0;;:::o;8121:100::-;8175:13;8208:5;8201:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8121:100;:::o;10288:169::-;10371:4;10388:39;157:10;10411:7;10420:6;10388:8;:39::i;:::-;-1:-1:-1;10445:4:0;10288:169;;;;:::o;29448:189::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;29584:9:::1;::::0;29553:41:::1;::::0;-1:-1:-1;;;;;29584:9:0;;::::1;::::0;29553:41;::::1;::::0;::::1;::::0;29584:9:::1;::::0;29553:41:::1;29605:9;:24:::0;;-1:-1:-1;;;;;;29605:24:0::1;-1:-1:-1::0;;;;;29605:24:0;;;::::1;::::0;;;::::1;::::0;;29448:189::o;27504:275::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;27641:4:::1;27633;27612:13;9329:12:::0;;;9241:108;27612:13:::1;:17;::::0;27628:1:::1;27612:17;:::i;:::-;27611:26;;;;:::i;:::-;27610:35;;;;:::i;:::-;27600:6;:45;;27578:142;;;::::0;-1:-1:-1;;;27578:142:0;;7118:2:1;27578:142:0::1;::::0;::::1;7100:21:1::0;7157:2;7137:18;;;7130:30;7196:34;7176:18;;;7169:62;-1:-1:-1;;;7247:18:1;;;7240:45;7302:19;;27578:142:0::1;6916:411:1::0;27578:142:0::1;27754:17;:6:::0;27764::::1;27754:17;:::i;:::-;27731:20;:40:::0;-1:-1:-1;27504:275:0:o;10939:492::-;11079:4;11096:36;11106:6;11114:9;11125:6;11096:9;:36::i;:::-;-1:-1:-1;;;;;11172:19:0;;11145:24;11172:19;;;:11;:19;;;;;;;;157:10;11172:33;;;;;;;;11224:26;;;;11216:79;;;;-1:-1:-1;;;11216:79:0;;7534:2:1;11216:79:0;;;7516:21:1;7573:2;7553:18;;;7546:30;7612:34;7592:18;;;7585:62;-1:-1:-1;;;7663:18:1;;;7656:38;7711:19;;11216:79:0;7332:404:1;11216:79:0;11331:57;11340:6;157:10;11381:6;11362:16;:25;11331:8;:57::i;:::-;-1:-1:-1;11419:4:0;;10939:492;-1:-1:-1;;;;10939:492:0:o;28422:311::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;28540:9:::1;:19:::0;;;28570:15:::1;:31:::0;;;28627:27:::1;28588:13:::0;28552:7;28627:27:::1;:::i;:::-;28612:12;:42:::0;;;28689:2:::1;-1:-1:-1::0;28673:18:0::1;28665:60;;;::::0;-1:-1:-1;;;28665:60:0;;5980:2:1;28665:60:0::1;::::0;::::1;5962:21:1::0;6019:2;5999:18;;;5992:30;6058:31;6038:18;;;6031:59;6107:18;;28665:60:0::1;5778:353:1::0;1356:103:0;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;1421:30:::1;1448:1;1421:18;:30::i;:::-;1356:103::o:0;26808:121::-;778:6;;26860:4;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;-1:-1:-1;26877:14:0::1;:22:::0;;-1:-1:-1;;26877:22:0::1;::::0;;;26808:121;:::o;28051:167::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28164:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;28164:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28051:167::o;26545:112::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;26600:13:::1;:20:::0;;-1:-1:-1;;26631:18:0;;;;;26545:112::o;28314:100::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;28385:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;28385:21:0;;::::1;::::0;;;::::1;::::0;;28314:100::o;8340:104::-;8396:13;8429:7;8422:14;;;;;:::i;9752:175::-;9838:4;9855:42;157:10;9879:9;9890:6;9855:9;:42::i;29260:180::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;29341:6:::1;29336:97;29353:7;:14;29351:1;:16;29336:97;;;29417:4;29389:13;:25;29403:7;29411:1;29403:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29389:25:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;29389:25:0;:32;;-1:-1:-1;;29389:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29369:3;::::1;::::0;::::1;:::i;:::-;;;;29336:97;;29067:182:::0;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29152:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;29152:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29207:34;;1446:41:1;;;29207:34:0::1;::::0;1419:18:1;29207:34:0::1;;;;;;;29067:182:::0;;:::o;27787:256::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;27927:4:::1;27919;27898:13;9329:12:::0;;;9241:108;27898:13:::1;:17;::::0;27914:1:::1;27898:17;:::i;:::-;27897:26;;;;:::i;:::-;27896:35;;;;:::i;:::-;27886:6;:45;;27864:131;;;::::0;-1:-1:-1;;;27864:131:0;;8215:2:1;27864:131:0::1;::::0;::::1;8197:21:1::0;8254:2;8234:18;;;8227:30;8293:34;8273:18;;;8266:62;-1:-1:-1;;;8344:18:1;;;8337:34;8388:19;;27864:131:0::1;8013:400:1::0;27864:131:0::1;28018:17;:6:::0;28028::::1;28018:17;:::i;:::-;28006:9;:29:::0;-1:-1:-1;27787:256:0:o;26999:497::-;778:6;;27107:4;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;27186:6:::1;27165:13;9329:12:::0;;;9241:108;27165:13:::1;:17;::::0;27181:1:::1;27165:17;:::i;:::-;27164:28;;;;:::i;:::-;27151:9;:41;;27129:144;;;::::0;-1:-1:-1;;;27129:144:0;;8620:2:1;27129:144:0::1;::::0;::::1;8602:21:1::0;8659:2;8639:18;;;8632:30;8698:34;8678:18;;;8671:62;-1:-1:-1;;;8749:18:1;;;8742:51;8810:19;;27129:144:0::1;8418:417:1::0;27129:144:0::1;27341:4;27320:13;9329:12:::0;;;9241:108;27320:13:::1;:17;::::0;27336:1:::1;27320:17;:::i;:::-;27319:26;;;;:::i;:::-;27306:9;:39;;27284:141;;;::::0;-1:-1:-1;;;27284:141:0;;9042:2:1;27284:141:0::1;::::0;::::1;9024:21:1::0;9081:2;9061:18;;;9054:30;9120:34;9100:18;;;9093:62;-1:-1:-1;;;9171:18:1;;;9164:50;9231:19;;27284:141:0::1;8840:416:1::0;27284:141:0::1;-1:-1:-1::0;27436:18:0::1;:30:::0;;;27484:4:::1;996:1;26999:497:::0;;;:::o;26667:89::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;26724:16:::1;:24:::0;;-1:-1:-1;;26724:24:0::1;::::0;;26667:89::o;1614:201::-;778:6;;-1:-1:-1;;;;;778:6:0;157:10;925:23;917:68;;;;-1:-1:-1;;;917:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1703:22:0;::::1;1695:73;;;::::0;-1:-1:-1;;;1695:73:0;;9463:2:1;1695:73:0::1;::::0;::::1;9445:21:1::0;9502:2;9482:18;;;9475:30;9541:34;9521:18;;;9514:62;-1:-1:-1;;;9592:18:1;;;9585:36;9638:19;;1695:73:0::1;9261:402:1::0;1695:73:0::1;1779:28;1798:8;1779:18;:28::i;:::-;1614:201:::0;:::o;13780:380::-;-1:-1:-1;;;;;13916:19:0;;13908:68;;;;-1:-1:-1;;;13908:68:0;;9870:2:1;13908:68:0;;;9852:21:1;9909:2;9889:18;;;9882:30;9948:34;9928:18;;;9921:62;-1:-1:-1;;;9999:18:1;;;9992:34;10043:19;;13908:68:0;9668:400:1;13908:68:0;-1:-1:-1;;;;;13995:21:0;;13987:68;;;;-1:-1:-1;;;13987:68:0;;10275:2:1;13987:68:0;;;10257:21:1;10314:2;10294:18;;;10287:30;10353:34;10333:18;;;10326:62;-1:-1:-1;;;10404:18:1;;;10397:32;10446:19;;13987:68:0;10073:398:1;13987:68:0;-1:-1:-1;;;;;14068:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14120:32;;2069:25:1;;;14120:32:0;;2042:18:1;14120:32:0;;;;;;;13780:380;;;:::o;29781:3840::-;-1:-1:-1;;;;;29913:18:0;;29905:68;;;;-1:-1:-1;;;29905:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29992:16:0;;29984:64;;;;-1:-1:-1;;;29984:64:0;;;;;;;:::i;:::-;30065:6;30075:1;30065:11;30061:93;;30093:28;30109:4;30115:2;30119:1;30093:15;:28::i;:::-;29781:3840;;;:::o;30061:93::-;30170:14;;;;30166:1591;;;778:6;;-1:-1:-1;;;;;30223:15:0;;;778:6;;30223:15;;;;:49;;-1:-1:-1;778:6:0;;-1:-1:-1;;;;;30259:13:0;;;778:6;;30259:13;;30223:49;:86;;;;-1:-1:-1;;;;;;30293:16:0;;;;30223:86;:128;;;;-1:-1:-1;;;;;;30330:21:0;;30344:6;30330:21;;30223:128;:158;;;;-1:-1:-1;30373:8:0;;-1:-1:-1;;;30373:8:0;;;;30372:9;30223:158;30201:1545;;;30421:13;;;;;;;30416:223;;-1:-1:-1;;;;;30493:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;30522:23:0;;;;;;:19;:23;;;;;;;;30493:52;30459:160;;;;-1:-1:-1;;;30459:160:0;;11488:2:1;30459:160:0;;;11470:21:1;11527:2;11507:18;;;11500:30;-1:-1:-1;;;11546:18:1;;;11539:52;11608:18;;30459:160:0;11286:346:1;30459:160:0;30664:16;;;;;;;30661:139;;;-1:-1:-1;;;;;30708:17:0;;;;;;:13;:17;;;;;;;;30700:74;;;;-1:-1:-1;;;30700:74:0;;11839:2:1;30700:74:0;;;11821:21:1;11878:2;11858:18;;;11851:30;11917:34;11897:18;;;11890:62;-1:-1:-1;;;11968:18:1;;;11961:42;12020:19;;30700:74:0;11637:408:1;30700:74:0;31014:13;-1:-1:-1;;;;;31006:21:0;:4;-1:-1:-1;;;;;31006:21:0;;:82;;;;-1:-1:-1;;;;;;31053:35:0;;;;;;:31;:35;;;;;;;;31052:36;31006:82;30980:751;;;31175:20;;31165:6;:30;;31131:169;;;;-1:-1:-1;;;31131:169:0;;12252:2:1;31131:169:0;;;12234:21:1;12291:2;12271:18;;;12264:30;12330:34;12310:18;;;12303:62;-1:-1:-1;;;12381:18:1;;;12374:51;12442:19;;31131:169:0;12050:417:1;31131:169:0;31383:9;;-1:-1:-1;;;;;9513:18:0;;9486:7;9513:18;;;;;;;;;;;31357:22;;:6;:22;:::i;:::-;:35;;31323:140;;;;-1:-1:-1;;;31323:140:0;;12674:2:1;31323:140:0;;;12656:21:1;12713:2;12693:18;;;12686:30;-1:-1:-1;;;12732:18:1;;;12725:49;12791:18;;31323:140:0;12472:343:1;31323:140:0;30980:751;;;-1:-1:-1;;;;;31511:35:0;;;;;;:31;:35;;;;;;;;31506:225;;31631:9;;-1:-1:-1;;;;;9513:18:0;;9486:7;9513:18;;;;;;;;;;;31605:22;;:6;:22;:::i;:::-;:35;;31571:140;;;;-1:-1:-1;;;31571:140:0;;12674:2:1;31571:140:0;;;12656:21:1;12713:2;12693:18;;;12686:30;-1:-1:-1;;;12732:18:1;;;12725:49;12791:18;;31571:140:0;12472:343:1;31571:140:0;31818:4;31769:28;9513:18;;;;;;;;;;;31876;;31852:42;;;;;;;31925:35;;-1:-1:-1;31949:11:0;;;;;;;31925:35;:61;;;;-1:-1:-1;31978:8:0;;-1:-1:-1;;;31978:8:0;;;;31977:9;31925:61;:97;;;;;32009:13;-1:-1:-1;;;;;32003:19:0;:2;-1:-1:-1;;;;;32003:19:0;;31925:97;:140;;;;-1:-1:-1;;;;;;32040:25:0;;;;;;:19;:25;;;;;;;;32039:26;31925:140;:181;;;;-1:-1:-1;;;;;;32083:23:0;;;;;;:19;:23;;;;;;;;32082:24;31925:181;31907:313;;;32133:8;:15;;-1:-1:-1;;;;32133:15:0;-1:-1:-1;;;32133:15:0;;;32165:10;:8;:10::i;:::-;32192:8;:16;;-1:-1:-1;;;;32192:16:0;;;31907:313;32248:8;;-1:-1:-1;;;;;32358:25:0;;32232:12;32358:25;;;:19;:25;;;;;;32248:8;-1:-1:-1;;;32248:8:0;;;;;32247:9;;32358:25;;:52;;-1:-1:-1;;;;;;32387:23:0;;;;;;:19;:23;;;;;;;;32358:52;32354:100;;;-1:-1:-1;32437:5:0;32354:100;32466:12;32493:26;32534:20;32647:7;32643:925;;;32705:13;-1:-1:-1;;;;;32699:19:0;:2;-1:-1:-1;;;;;32699:19:0;;:40;;;;;32738:1;32722:13;;:17;32699:40;32695:583;;;32767:34;32797:3;32767:25;32778:13;;32767:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;32760:41;;32869:13;;32849:16;;32842:4;:23;;;;:::i;:::-;32841:41;;;;:::i;:::-;32820:62;;32938:13;;32924:10;;32917:4;:17;;;;:::i;:::-;32916:35;;;;:::i;:::-;32901:50;;32695:583;;;33021:13;-1:-1:-1;;;;;33013:21:0;:4;-1:-1:-1;;;;;33013:21:0;;:41;;;;;33053:1;33038:12;;:16;33013:41;33009:269;;;33082:33;33111:3;33082:24;33093:12;;33082:6;:10;;:24;;;;:::i;:33::-;33075:40;;33182:12;;33163:15;;33156:4;:22;;;;:::i;:::-;33155:39;;;;:::i;:::-;33134:60;;33250:12;;33237:9;;33230:4;:16;;;;:::i;:::-;33229:33;;;;:::i;:::-;33214:48;;33009:269;33298:7;;33294:90;;33326:42;33342:4;33356;33363;33326:15;:42::i;:::-;33402:22;;33398:128;;33445:65;33469:4;33476:13;33491:18;33445:15;:65::i;:::-;33542:14;33552:4;33542:14;;:::i;:::-;;;32643:925;33580:33;33596:4;33602:2;33606:6;33580:15;:33::i;:::-;29894:3727;;;;;;29781:3840;;;:::o;1975:191::-;2068:6;;;-1:-1:-1;;;;;2085:17:0;;;-1:-1:-1;;;;;;2085:17:0;;;;;;;2118:40;;2068:6;;;2085:17;2068:6;;2118:40;;2049:16;;2118:40;2038:128;1975:191;:::o;11921:733::-;-1:-1:-1;;;;;12061:20:0;;12053:70;;;;-1:-1:-1;;;12053:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12142:23:0;;12134:71;;;;-1:-1:-1;;;12134:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12302:17:0;;12278:21;12302:17;;;;;;;;;;;12338:23;;;;12330:74;;;;-1:-1:-1;;;12330:74:0;;13152:2:1;12330:74:0;;;13134:21:1;13191:2;13171:18;;;13164:30;13230:34;13210:18;;;13203:62;-1:-1:-1;;;13281:18:1;;;13274:36;13327:19;;12330:74:0;12950:402:1;12330:74:0;-1:-1:-1;;;;;12440:17:0;;;:9;:17;;;;;;;;;;;12460:22;;;12440:42;;12504:20;;;;;;;;:30;;12476:6;;12440:9;12504:30;;12476:6;;12504:30;:::i;:::-;;;;;;;;12569:9;-1:-1:-1;;;;;12552:35:0;12561:6;-1:-1:-1;;;;;12552:35:0;;12580:6;12552:35;;;;2069:25:1;;2057:2;2042:18;;1923:177;12552:35:0;;;;;;;;12042:612;11921:733;;;:::o;34209:340::-;34292:4;34248:23;9513:18;;;;;;;;;;;;34313:20;;;34309:59;;34350:7;34209:340::o;34309:59::-;34402:18;;:23;;34423:2;34402:23;:::i;:::-;34384:15;:41;34380:115;;;34460:18;;:23;;34481:2;34460:23;:::i;:::-;34442:41;;34380:115;34507:34;34525:15;34507:17;:34::i;19233:98::-;19291:7;19318:5;19322:1;19318;:5;:::i;:::-;19311:12;19233:98;-1:-1:-1;;;19233:98:0:o;19632:::-;19690:7;19717:5;19721:1;19717;:5;:::i;33629:572::-;33780:16;;;33794:1;33780:16;;;;;;;;33756:21;;33780:16;;;;;;;;;;-1:-1:-1;33780:16:0;33756:40;;33825:4;33807;33812:1;33807:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33807:23:0;;;:7;;;;;;;;;:23;33851:4;;33841:7;;33851:4;;;33841;;33851;;33841:7;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;33841:14:0;;;-1:-1:-1;;;;;33841:14:0;;;;;33868:62;33885:4;33900:15;33918:11;33868:8;:62::i;:::-;34143:9;;33969:224;;-1:-1:-1;;;33969:224:0;;-1:-1:-1;;;;;33969:15:0;:69;;;;;:224;;34053:11;;34079:1;;34124:4;;34143:9;;;;;34167:15;;33969:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33685:516;33629:572;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;869:173::-;937:20;;-1:-1:-1;;;;;986:31:1;;976:42;;966:70;;1032:1;1029;1022:12;1047:254;1115:6;1123;1176:2;1164:9;1155:7;1151:23;1147:32;1144:52;;;1192:1;1189;1182:12;1144:52;1215:29;1234:9;1215:29;:::i;:::-;1205:39;1291:2;1276:18;;;;1263:32;;-1:-1:-1;;;1047:254:1:o;1498:186::-;1557:6;1610:2;1598:9;1589:7;1585:23;1581:32;1578:52;;;1626:1;1623;1616:12;1578:52;1649:29;1668:9;1649:29;:::i;2105:180::-;2164:6;2217:2;2205:9;2196:7;2192:23;2188:32;2185:52;;;2233:1;2230;2223:12;2185:52;-1:-1:-1;2256:23:1;;2105:180;-1:-1:-1;2105:180:1:o;2290:328::-;2367:6;2375;2383;2436:2;2424:9;2415:7;2411:23;2407:32;2404:52;;;2452:1;2449;2442:12;2404:52;2475:29;2494:9;2475:29;:::i;:::-;2465:39;;2523:38;2557:2;2546:9;2542:18;2523:38;:::i;:::-;2513:48;;2608:2;2597:9;2593:18;2580:32;2570:42;;2290:328;;;;;:::o;3020:160::-;3085:20;;3141:13;;3134:21;3124:32;;3114:60;;3170:1;3167;3160:12;3185:254;3250:6;3258;3311:2;3299:9;3290:7;3286:23;3282:32;3279:52;;;3327:1;3324;3317:12;3279:52;3350:29;3369:9;3350:29;:::i;:::-;3340:39;;3398:35;3429:2;3418:9;3414:18;3398:35;:::i;:::-;3388:45;;3185:254;;;;;:::o;3444:180::-;3500:6;3553:2;3541:9;3532:7;3528:23;3524:32;3521:52;;;3569:1;3566;3559:12;3521:52;3592:26;3608:9;3592:26;:::i;3629:127::-;3690:10;3685:3;3681:20;3678:1;3671:31;3721:4;3718:1;3711:15;3745:4;3742:1;3735:15;3761:1121;3845:6;3876:2;3919;3907:9;3898:7;3894:23;3890:32;3887:52;;;3935:1;3932;3925:12;3887:52;3975:9;3962:23;4004:18;4045:2;4037:6;4034:14;4031:34;;;4061:1;4058;4051:12;4031:34;4099:6;4088:9;4084:22;4074:32;;4144:7;4137:4;4133:2;4129:13;4125:27;4115:55;;4166:1;4163;4156:12;4115:55;4202:2;4189:16;4224:2;4220;4217:10;4214:36;;;4230:18;;:::i;:::-;4276:2;4273:1;4269:10;4308:2;4302:9;4371:2;4367:7;4362:2;4358;4354:11;4350:25;4342:6;4338:38;4426:6;4414:10;4411:22;4406:2;4394:10;4391:18;4388:46;4385:72;;;4437:18;;:::i;:::-;4473:2;4466:22;4523:18;;;4557:15;;;;-1:-1:-1;4599:11:1;;;4595:20;;;4627:19;;;4624:39;;;4659:1;4656;4649:12;4624:39;4683:11;;;;4703:148;4719:6;4714:3;4711:15;4703:148;;;4785:23;4804:3;4785:23;:::i;:::-;4773:36;;4736:12;;;;4829;;;;4703:148;;;4870:6;3761:1121;-1:-1:-1;;;;;;;;3761:1121:1:o;4887:260::-;4955:6;4963;5016:2;5004:9;4995:7;4991:23;4987:32;4984:52;;;5032:1;5029;5022:12;4984:52;5055:29;5074:9;5055:29;:::i;:::-;5045:39;;5103:38;5137:2;5126:9;5122:18;5103:38;:::i;5152:356::-;5354:2;5336:21;;;5373:18;;;5366:30;5432:34;5427:2;5412:18;;5405:62;5499:2;5484:18;;5152:356::o;5513:127::-;5574:10;5569:3;5565:20;5562:1;5555:31;5605:4;5602:1;5595:15;5629:4;5626:1;5619:15;5645:128;5685:3;5716:1;5712:6;5709:1;5706:13;5703:39;;;5722:18;;:::i;:::-;-1:-1:-1;5758:9:1;;5645:128::o;6136:380::-;6215:1;6211:12;;;;6258;;;6279:61;;6333:4;6325:6;6321:17;6311:27;;6279:61;6386:2;6378:6;6375:14;6355:18;6352:38;6349:161;;6432:10;6427:3;6423:20;6420:1;6413:31;6467:4;6464:1;6457:15;6495:4;6492:1;6485:15;6349:161;;6136:380;;;:::o;6521:168::-;6561:7;6627:1;6623;6619:6;6615:14;6612:1;6609:21;6604:1;6597:9;6590:17;6586:45;6583:71;;;6634:18;;:::i;:::-;-1:-1:-1;6674:9:1;;6521:168::o;6694:217::-;6734:1;6760;6750:132;;6804:10;6799:3;6795:20;6792:1;6785:31;6839:4;6836:1;6829:15;6867:4;6864:1;6857:15;6750:132;-1:-1:-1;6896:9:1;;6694:217::o;7741:127::-;7802:10;7797:3;7793:20;7790:1;7783:31;7833:4;7830:1;7823:15;7857:4;7854:1;7847:15;7873:135;7912:3;7933:17;;;7930:43;;7953:18;;:::i;:::-;-1:-1:-1;8000:1:1;7989:13;;7873:135::o;10476:401::-;10678:2;10660:21;;;10717:2;10697:18;;;10690:30;10756:34;10751:2;10736:18;;10729:62;-1:-1:-1;;;10822:2:1;10807:18;;10800:35;10867:3;10852:19;;10476:401::o;10882:399::-;11084:2;11066:21;;;11123:2;11103:18;;;11096:30;11162:34;11157:2;11142:18;;11135:62;-1:-1:-1;;;11228:2:1;11213:18;;11206:33;11271:3;11256:19;;10882:399::o;12820:125::-;12860:4;12888:1;12885;12882:8;12879:34;;;12893:18;;:::i;:::-;-1:-1:-1;12930:9:1;;12820:125::o;13357:980::-;13619:4;13667:3;13656:9;13652:19;13698:6;13687:9;13680:25;13724:2;13762:6;13757:2;13746:9;13742:18;13735:34;13805:3;13800:2;13789:9;13785:18;13778:31;13829:6;13864;13858:13;13895:6;13887;13880:22;13933:3;13922:9;13918:19;13911:26;;13972:2;13964:6;13960:15;13946:29;;13993:1;14003:195;14017:6;14014:1;14011:13;14003:195;;;14082:13;;-1:-1:-1;;;;;14078:39:1;14066:52;;14173:15;;;;14138:12;;;;14114:1;14032:9;14003:195;;;-1:-1:-1;;;;;;;14254:32:1;;;;14249:2;14234:18;;14227:60;-1:-1:-1;;;14318:3:1;14303:19;14296:35;14215:3;13357:980;-1:-1:-1;;;13357:980:1:o
Swarm Source
ipfs://17151c1e7d45835c90cc8e2238a42918d564d60e58e8fd78c0f3c84370a1e210
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.