ETH Price: $3,053.72 (+1.46%)
Gas: 2 Gwei

Token

Piggy Bank Token (PiggyBank)
 

Overview

Max Total Supply

1,000,000,000,000 PiggyBank

Holders

199

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
142,400,212.637329115640480228 PiggyBank

Value
$0.00
0xf730ce7ce81d786c6a199b4e41e13504459b2976
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PiggyBankToken

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-26
*/

// SPDX-License-Identifier: MIT

// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// @@@@@@@%@@@@@@@@@@@@@@@@%@@@@@@@%@%###**###**#######***#%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@***#%%%@@#++@@*=+@%**#%%@*+%***%@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@%**##*+%%=:.. =@@+ .= :%@=.:*=.:@%+@%@%*+@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@#*#@%**#@@:.+@*+==@@%. :@@@. .-. +@@*:..=@+*##**%@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@%**#*@*=+**##%=-=@#*::#@@=.=@@#  +#- :#: -* -@@%-=%@+*#@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@**@#*@%::%@==-=#*==++*%@@%####%#****+=-.::.: =@*.  +@%%%**@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@%**%@%. :%=.:*#+:=@@%#*+==--==-::::::::-=+*%@@+:==.:-.+*..#@%*+%@@@@@@@@@@@@
// @@@@@@@@@@@@%*#@+:.:*=  =*=-+#*+=--============------::::::-+##+*@*:-:-%%+-*@+*@@@@@@@@@@@
// @@@@@@@@@@@#*@*::#+.-@%-.+@+-.:::---===================---:::::=#@#=-*%+--+#%@@**@@@@@@@@@
// @@@@@@@@@@@#+@%+-=-*@@@@#-    ...:-==+==---=================-:::::+%%+-===--=-+%%+@@@@@@@@
// @@@@@@@@@@@@@**@%+==#@#:  :=======::-:.:-====++++======+**+++++=:::.=%#@%::#@%%@%=@@@@@@@@
// @@@@@@@@@@@@@@@**%%#%:  .+-.====:=--=-::=+::-  .::==+**-::=+++-=*=:::.=@+ -@**##%@@@@@@@@@
// @@@@@@@@@@@@@@@@**@+....* -+...:+*:::-----:-+-       .:==#-::-*+:*+-::::##%%+@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@+#%-::::+- -   -=: :==++===---:.       ...:=+::-+--*---...=@**@@@@@@@@@@@@@
// @@@@@@@@@@@@@@+%%:-----=*   -+.  .:*+-----:::...      ...:::*+:-:*-::-:...-@**@@@@@@@@@@@@
// @@@@@@@@@@@@@+#@::::::--=+.+:   .:::-------:::...      ...::-=*-+-   ......-@*#@@@@@@@@@@@
// @@@@@@@@@@@@#*@-:::::::::-#    ...:::-------:::......:-=-..::=+#=           =@=%@@@@@@@@@@
// @@@@@@@@@@@@=@+.:::::::::#     .**###%%@%+--:::::#@@@*=#*...:-++*-           #@=@@@@@@@@@@
// @@@@@@@@@@@##@......::::*:      :*@@@++@=----::::.@@@+=%* ...-++=#..         :@+%@@@@@@@@@
// @@@@@@@@@@@=@* ........-*        .*@@@@+=++++***+-=%@@@#.  ..==+++*:......    %%*@@@@@@@@@
// @@@@@@@@@@@=@= ........+:.......   .::-*=----====+*-::.    .-==++=%-----::... *@+@@@@@@@@@
// @@@@@@@@@@@+@:        .#.::::....   ..#--=%#-=%%*==#-.    .--===+=*+=------::.+@+@@@@@@@@@
// @@@@@@@@@@@+@:         #.:::::...   ..#---*+-=*#+==#+-..:-----====*+=======--:+@+@@@@@@@@@
// @@@@@@@@@@@=@-     .=*%@:::::..      .=+-----+====*#==---------===#@#+=--==--:*@+@@@@@@@@@
// @@@@@@@@@@@=@* ..=#%%##%#::::...      .:******####*++====------=-+@@@@@%+-:.:.%@+@@@@@@@@@
// @@@@@@@@@@@*#@-*%%######%%=:::...      .=+**+**#*+++++====------#@@@@@@@@@#-.:@+%@@@@@@@@@
// @@@@@@@@@@@@=@%###########%#+:....      -==+**++++++++====---=#@@@@@@@@@@@@@%#@=@@@@@@@@@@
// @@@@@@@@@@@@*#%##############%#+=:      :====+++++++++===+*#@@@@@@@@@@@@@@@@@@+%@@@@@@@@@@
// @@@@@@@@@@@@@+%%###############@-:---=+-=+++++++***#*++=--@@@@@@@@@@@@@@@@@@@#*@@@@@@@@@@@
// @@@@@@@@@@@@@@=%%##############@.     += :%+=+*@=.=#......@@@@@@@@@@@@@@@@@@%+@@@@@@@@@@@@
// @@@@@@@@@@@@@@@+%%#########%%*+-       #=##=-=+%%+%:......-+#%@@@@@@@@@@@@@#+@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@*#%########%%*-         %: +*#*::@:........=#@@@@@@@@@@@@@*#@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@#+@%#########%%*-      .%..#%:.%-......=*@@@@@@@@@@@@@@%+%@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@+#%%##########%%*:    :##=+%#=....-*@@@@@@@@@@@@@@@@**@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@%**%%###########%%+:  -#-=#+..-*%@@@@@@@@@@@@@@@@**@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@**%%%###########%%*:+**#-*%@@@@@@@@@@@@@@@@#**@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@#**%%%###########%%@@@@@@@@@@@@@@@@@@@#**%@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@#***%%%%########%@@@@@@@@@@@@@@%***%@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#**#*#%%%%%%%@@@@@@@@%###**%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%##############%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

// oink

//https://t.me/piggybankpreverify

//https://twitter.com/piggybanketh

//https://wptinvestingcorp.io


pragma solidity 0.8.15;

interface IERC20 {
	function totalSupply() external view returns (uint256);

	function balanceOf(address account) external view returns (uint256);

	function transfer(address recipient, uint256 amount)
	external
	returns (bool);

	function allowance(address owner, address spender)
	external
	view
	returns (uint256);

	function approve(address spender, uint256 amount) external returns (bool);

	function transferFrom(
		address sender,
		address recipient,
		uint256 amount
	) external returns (bool);

	event Transfer(address indexed from, address indexed to, uint256 value);

	event Approval(
		address indexed owner,
		address indexed spender,
		uint256 value
	);
}

interface IFactory {
	function createPair(address tokenA, address tokenB)
	external
	returns (address pair);

	function getPair(address tokenA, address tokenB)
	external
	view
	returns (address pair);
}

interface IRouter {
	function factory() external pure returns (address);

	function WETH() external pure returns (address);

	function addLiquidityETH(
		address token,
		uint256 amountTokenDesired,
		uint256 amountTokenMin,
		uint256 amountETHMin,
		address to,
		uint256 deadline
	)
	external
	payable
	returns (
		uint256 amountToken,
		uint256 amountETH,
		uint256 liquidity
	);

	function swapExactETHForTokensSupportingFeeOnTransferTokens(
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external payable;

	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint256 amountIn,
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external;
}

interface IERC20Metadata is IERC20 {
	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function decimals() external view returns (uint8);
}


library Address {
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

	function sendValue(address payable recipient, uint256 amount) internal {
		require(
			address(this).balance >= amount,
			"Address: insufficient balance"
		);

		(bool success, ) = recipient.call{value: amount}("");
		require(
			success,
			"Address: unable to send value, recipient may have reverted"
		);
	}

	function functionCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return functionCall(target, data, "Address: low-level call failed");
	}

	function functionCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value
	) internal returns (bytes memory) {
		return
		functionCallWithValue(
			target,
			data,
			value,
			"Address: low-level call with value failed"
		);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(
			address(this).balance >= value,
			"Address: insufficient balance for call"
		);
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(
		data
		);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionStaticCall(address target, bytes memory data)
	internal
	view
	returns (bytes memory)
	{
		return
		functionStaticCall(
			target,
			data,
			"Address: low-level static call failed"
		);
	}

	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionDelegateCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return
		functionDelegateCall(
			target,
			data,
			"Address: low-level delegate call failed"
		);
	}

	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

abstract contract Context {
	function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}

	function _msgData() internal view virtual returns (bytes calldata) {
		this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
		return msg.data;
	}
}

contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	constructor () {
		address msgSender = _msgSender();
		_owner = msgSender;
		emit OwnershipTransferred(address(0), msgSender);
	}

	function owner() public view returns (address) {
		return _owner;
	}

	modifier onlyOwner() {
		require(_owner == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	function renounceOwnership() public virtual onlyOwner {
		emit OwnershipTransferred(_owner, address(0));
		_owner = address(0);
	}

	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		emit OwnershipTransferred(_owner, newOwner);
		_owner = newOwner;
	}
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

   function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }


    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract PiggyBankToken is Ownable, ERC20 {
	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name = "Piggy Bank Token";
	string private constant _symbol = "PiggyBank";
	uint8 private constant _decimals = 18;

	bool public isTradingEnabled;

	uint256 constant initialSupply = 1000000000000 * (10**18);
	uint256 public maxWalletAmount = initialSupply * 2 / 100;

	bool private _swapping;
	uint256 public minimumTokensBeforeSwap = initialSupply * 25 / 100000;

	address public walletA;
    uint8 public walletAFeeOnBuy;
    uint8 public walletAFeeOnSell = 15;

	uint256 private _launchBlockNumber;
    bool public launchTokensClaimed;
    uint256 public launchTokens;

	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
	mapping (address => bool) private _isAllowedToTradeWhenDisabled;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) public automatedMarketMakerPairs;

	uint8 private _walletAFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint8 newWalletAFee, uint8 oldWalletFee);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event Swap(uint256 tokensSwapped, uint256 ethReceived);
    event ClaimOverflow(address token, uint256 amount);
	event FeesApplied(uint8 walletAFee);
    event Sent(uint256 balance, uint256 initialETHBalance, uint256 currentBalance, uint256 ETHBalanceAfterSwap);

	constructor() ERC20(_name, _symbol) {
		walletA = owner();

		IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
		address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
		uniswapV2Router = _uniswapV2Router;
		uniswapV2Pair = _uniswapV2Pair;
		_setAutomatedMarketMakerPair(_uniswapV2Pair, true);

		_isExcludedFromFee[owner()] = true;
		_isExcludedFromFee[address(this)] = true;

		_isAllowedToTradeWhenDisabled[owner()] = true;
		_isAllowedToTradeWhenDisabled[address(this)] = true;

		_isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;

		_mint(owner(), initialSupply);
	}

	receive() external payable {}

	// Setters
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
        if (_launchBlockNumber == 0) {
            _launchBlockNumber = block.number;
        }
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
	}
	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "PiggyBank: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		emit AutomatedMarketMakerPairChange(pair, value);
	}
	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
	function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "PiggyBank: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function setWallets(address newWalletA) external onlyOwner {
        require(newWalletA != address(0), "PiggyBank: The walletA cannot be 0");
        emit WalletChange('walletA', newWalletA, walletA);
        walletA = newWalletA;
	}
	function setBaseFeeOnBuy(uint8 newWalletAFeeOnBuy) external onlyOwner {
		emit FeeChange('baseFee-Buy', newWalletAFeeOnBuy, walletAFeeOnBuy);
        walletAFeeOnBuy = newWalletAFeeOnBuy;
	}
	function setBaseFeesOnSell(uint8 newWalletAFeeOnSell) external onlyOwner {
		emit FeeChange('baseFee-Sell', newWalletAFeeOnSell, walletAFeeOnSell);
        walletAFeeOnSell = newWalletAFeeOnSell;
	}
	function setUniswapRouter(address newAddress) external onlyOwner {
		require(newAddress != address(uniswapV2Router), "PiggyBank: The router already has that address");
		emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
		uniswapV2Router = IRouter(newAddress);
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "PiggyBank: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "PiggyBank: Cannot update maxWalletAmount to same value");
        require(newValue >= initialSupply * 5 / 1000, "PiggyBank: Cannot update maxWalletAmount to value less than 0.5% of supply");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
    function claimLaunchTokens() external onlyOwner {
		require(!launchTokensClaimed, "PiggyBank: Launch tokens have already been claimed");
		require(block.number - _launchBlockNumber > 7, "PiggyBank: Only claim launch tokens after launch");
		launchTokensClaimed = true;
		require(launchTokens <= balanceOf(address(this)), "PiggyBank: A swap has already occurred");
		uint256 amount = launchTokens;
		launchTokens = 0;
        (bool success) = IERC20(address(this)).transfer(owner(), amount);
        if (success){
            emit ClaimOverflow(address(this), amount);
        }
    }
	function claimETHOverflow(uint256 amount) external onlyOwner {
	    require(amount < address(this).balance, "PiggyBank: Cannot send more than contract balance");
        (bool success,) = address(owner()).call{value : amount}("");
        if (success){
            emit ClaimOverflow(uniswapV2Router.WETH(), amount);
        }
    }

	// Main
	function _transfer(
		address from,
		address to,
		uint256 amount
		) internal override {
			require(from != address(0), "ERC20: transfer from the zero address");
			require(to != address(0), "ERC20: transfer to the zero address");

			if(amount == 0) {
				super._transfer(from, to, 0);
				return;
			}

			if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
				require(isTradingEnabled, "PiggyBank: Trading is currently disabled.");

				if (!_isExcludedFromMaxWalletLimit[to]) {
					require((balanceOf(to) + amount) <= maxWalletAmount, "PiggyBank: Expected wallet amount exceeds the maxWalletAmount.");
				}
			}

			if (
				isTradingEnabled &&
				balanceOf(address(this)) >= minimumTokensBeforeSwap &&
				!_swapping &&
				automatedMarketMakerPairs[to]
			) {
				_swapping = true;
				_swap();
				_swapping = false;
			}

			bool takeFee = !_swapping && isTradingEnabled;

			if (_isExcludedFromFee[from] || _isExcludedFromFee[to]){
				takeFee = false;
			}

			if (takeFee) {
                _walletAFee = automatedMarketMakerPairs[from] ? walletAFeeOnBuy : automatedMarketMakerPairs[to] ? walletAFeeOnSell : 0;
				uint256 fee = amount * _walletAFee / 100;
                if (block.number - _launchBlockNumber <= 7) {
                    fee = amount;
                    launchTokens += fee;
                }
                amount = amount - fee;

				super._transfer(from, address(this), fee);
                emit FeesApplied(_walletAFee);
			}
			super._transfer(from, to, amount);
	}
	function _swap() private {
		uint256 initialETHBalance = address(this).balance;
        uint256 contractBalance = balanceOf(address(this));

		_swapTokensForETH(contractBalance);

		uint256 ETHBalanceAfterSwap = address(this).balance  - initialETHBalance;

        emit Sent(contractBalance, initialETHBalance, address(this).balance, ETHBalanceAfterSwap);
        Address.sendValue(payable(walletA), ETHBalanceAfterSwap);

	}

    function _swapTokensForETH(uint256 tokenAmount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			1, // accept any amount of ETH
			path,
			address(this),
			block.timestamp
		);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"newWalletAFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"oldWalletFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"walletAFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","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":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialETHBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHBalanceAfterSwap","type":"uint256"}],"name":"Sent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"Swap","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLaunchTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTokensClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newWalletAFeeOnBuy","type":"uint8"}],"name":"setBaseFeeOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newWalletAFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWalletA","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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 IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletAFeeOnBuy","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletAFeeOnSell","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526064620000206c0c9f2c9cd04674edea40000000600262000639565b6200002c91906200065b565b600755620186a06200004d6c0c9f2c9cd04674edea40000000601962000639565b6200005991906200065b565b600955600a805460ff60a81b1916600f60a81b1790553480156200007c57600080fd5b506040518060400160405280601081526020016f2834b3b3bc902130b735902a37b5b2b760811b81525060405180604001604052806009815260200168506967677942616e6b60b81b8152506000620000da6200045960201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600462000132838262000722565b50600562000141828262000722565b505060008054600a80546001600160a01b0319166001600160a01b039092169190911790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa158015620001ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e09190620007ee565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002549190620007ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c89190620007ee565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620002fc8160016200045d565b600160106000620003156000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526010909252812080549092166001908117909255600f906200036e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252600f85528382208054871660019081179091558784168352600e95869052848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620003fe6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620004516200043d6000546001600160a01b031690565b6c0c9f2c9cd04674edea4000000062000559565b50506200083b565b3390565b6001600160a01b03821660009081526011602052604090205481151560ff909116151503620005055760405162461bcd60e51b815260206004820152604360248201527f506967677942616e6b3a204175746f6d61746564206d61726b6574206d616b6560448201527f72207061697220697320616c72656164792073657420746f20746861742076616064820152626c756560e81b608482015260a4015b60405180910390fd5b6001600160a01b038216600081815260116020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620005b15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004fc565b8060036000828254620005c5919062000820565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000656576200065662000623565b500290565b6000826200067957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006a957607f821691505b602082108103620006ca57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061e57600081815260208120601f850160051c81016020861015620006f95750805b601f850160051c820191505b818110156200071a5782815560010162000705565b505050505050565b81516001600160401b038111156200073e576200073e6200067e565b62000756816200074f845462000694565b84620006d0565b602080601f8311600181146200078e5760008415620007755750858301515b600019600386901b1c1916600185901b1785556200071a565b600085815260208120601f198616915b82811015620007bf578886015182559484019460019091019084016200079e565b5085821015620007de5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200080157600080fd5b81516001600160a01b03811681146200081957600080fd5b9392505050565b6000821982111562000836576200083662000623565b500190565b6080516123a762000857600039600061044501526123a76000f3fe60806040526004361061021e5760003560e01c8063715018a611610123578063b62496f5116100ab578063d2d7ad831161006f578063d2d7ad8314610646578063d32215761461065c578063dd62ed3e1461067c578063eb50e70e1461069c578063f2fde38b146106bc57600080fd5b8063b62496f514610595578063b77e7da0146105c5578063bea9849e146105e5578063c40d3ea414610605578063c90d35f81461062557600080fd5b8063a457c2d7116100f2578063a457c2d714610505578063a9059cbb14610525578063aa4bde2814610545578063aee50b1e1461055b578063b50d643a1461057b57600080fd5b8063715018a61461049d578063781edb3c146104b25780638da5cb5b146104d257806395d89b41146104f057600080fd5b806327a14fc2116101a657806334cf1fea1161017557806334cf1fea146103dd57806339509351146103f257806347bf787e1461041257806349bd5a5e1461043357806370a082311461046757600080fd5b806327a14fc2146103665780632cc25d1414610386578063313ce5671461039b57806333deff23146103bd57600080fd5b80630bd05b69116101ed5780630bd05b69146102c45780631694505e146102d957806318160ddd146103115780631fcfefcd1461033057806323b872dd1461034657600080fd5b8063064a59d01461022a57806306fdde0314610260578063095ea7b314610282578063098df585146102a257600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060065461024b90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026c57600080fd5b506102756106dc565b6040516102579190611f84565b34801561028e57600080fd5b5061024b61029d366004611ff1565b61076e565b3480156102ae57600080fd5b506102c26102bd36600461201d565b610786565b005b3480156102d057600080fd5b506102c2610932565b3480156102e557600080fd5b506006546102f9906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b34801561031d57600080fd5b506003545b604051908152602001610257565b34801561033c57600080fd5b50610322600d5481565b34801561035257600080fd5b5061024b610361366004612036565b610980565b34801561037257600080fd5b506102c261038136600461201d565b6109a4565b34801561039257600080fd5b506102c2610b1e565b3480156103a757600080fd5b5060125b60405160ff9091168152602001610257565b3480156103c957600080fd5b506102c26103d8366004612077565b610d8a565b3480156103e957600080fd5b506102c2610e39565b3480156103fe57600080fd5b5061024b61040d366004611ff1565b610e72565b34801561041e57600080fd5b50600a546103ab90600160a01b900460ff1681565b34801561043f57600080fd5b506102f97f000000000000000000000000000000000000000000000000000000000000000081565b34801561047357600080fd5b506103226104823660046120a1565b6001600160a01b031660009081526001602052604090205490565b3480156104a957600080fd5b506102c2610e94565b3480156104be57600080fd5b506102c26104cd3660046120cc565b610f08565b3480156104de57600080fd5b506000546001600160a01b03166102f9565b3480156104fc57600080fd5b50610275611020565b34801561051157600080fd5b5061024b610520366004611ff1565b61102f565b34801561053157600080fd5b5061024b610540366004611ff1565b6110aa565b34801561055157600080fd5b5061032260075481565b34801561056757600080fd5b506102c261057636600461201d565b6110b8565b34801561058757600080fd5b50600c5461024b9060ff1681565b3480156105a157600080fd5b5061024b6105b03660046120a1565b60116020526000908152604090205460ff1681565b3480156105d157600080fd5b50600a546102f9906001600160a01b031681565b3480156105f157600080fd5b506102c26106003660046120a1565b61118c565b34801561061157600080fd5b506102c2610620366004612077565b611288565b34801561063157600080fd5b50600a546103ab90600160a81b900460ff1681565b34801561065257600080fd5b5061032260095481565b34801561066857600080fd5b506102c26106773660046120cc565b611338565b34801561068857600080fd5b50610322610697366004612105565b6113ba565b3480156106a857600080fd5b506102c26106b73660046120a1565b6113e5565b3480156106c857600080fd5b506102c26106d73660046120a1565b6114e7565b6060600480546106eb90612133565b80601f016020809104026020016040519081016040528092919081815260200182805461071790612133565b80156107645780601f1061073957610100808354040283529160200191610764565b820191906000526020600020905b81548152906001019060200180831161074757829003601f168201915b5050505050905090565b60003361077c8185856115d1565b5060019392505050565b6000546001600160a01b031633146107b95760405162461bcd60e51b81526004016107b09061216d565b60405180910390fd5b4781106108225760405162461bcd60e51b815260206004820152603160248201527f506967677942616e6b3a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b60648201526084016107b0565b600080546040516001600160a01b039091169083908381818185875af1925050503d806000811461086f576040519150601f19603f3d011682016040523d82523d6000602084013e610874565b606091505b50509050801561092e57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156108e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090b91906121a2565b604080516001600160a01b03909216825260208201859052015b60405180910390a15b5050565b6000546001600160a01b0316331461095c5760405162461bcd60e51b81526004016107b09061216d565b6006805460ff60a01b1916600160a01b179055600b5460000361097e5743600b555b565b60003361098e8582856116f5565b61099985858561176f565b506001949350505050565b6000546001600160a01b031633146109ce5760405162461bcd60e51b81526004016107b09061216d565b6007548103610a3e5760405162461bcd60e51b815260206004820152603660248201527f506967677942616e6b3a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b60648201526084016107b0565b6103e8610a596c0c9f2c9cd04674edea4000000060056121d5565b610a6391906121f4565b811015610aeb5760405162461bcd60e51b815260206004820152604a60248201527f506967677942616e6b3a2043616e6e6f7420757064617465206d617857616c6c60448201527f6574416d6f756e7420746f2076616c7565206c657373207468616e20302e3525606482015269206f6620737570706c7960b01b608482015260a4016107b0565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b6000546001600160a01b03163314610b485760405162461bcd60e51b81526004016107b09061216d565b600c5460ff1615610bb65760405162461bcd60e51b815260206004820152603260248201527f506967677942616e6b3a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b60648201526084016107b0565b6007600b5443610bc69190612216565b11610c2c5760405162461bcd60e51b815260206004820152603060248201527f506967677942616e6b3a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b60648201526084016107b0565b600c805460ff19166001179055610c58306001600160a01b031660009081526001602052604090205490565b600d541115610cb85760405162461bcd60e51b815260206004820152602660248201527f506967677942616e6b3a204120737761702068617320616c7265616479206f6360448201526518dd5c9c995960d21b60648201526084016107b0565b600d8054600091829055903063a9059cbb610cdb6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c919061222d565b9050801561092e5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d9101610925565b6000546001600160a01b03163314610db45760405162461bcd60e51b81526004016107b09061216d565b6040516a626173654665652d42757960a81b8152600b0160408051918290038220600a5460ff8086168552600160a01b909104166020840152917f889b8e00c69ec7c91d74845dd69f685363e015b045a7e417e9aaca9c2a15c3c5910160405180910390a2600a805460ff909216600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610e635760405162461bcd60e51b81526004016107b09061216d565b6006805460ff60a01b19169055565b60003361077c818585610e8583836113ba565b610e8f919061224a565b6115d1565b6000546001600160a01b03163314610ebe5760405162461bcd60e51b81526004016107b09061216d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f325760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0382166000908152600e602052604090205481151560ff909116151503610fc05760405162461bcd60e51b815260206004820152603560248201527f506967677942616e6b3a204163636f756e7420697320616c7265616479207468604482015274652076616c7565206f6620276578636c756465642760581b60648201526084016107b0565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6060600580546106eb90612133565b6000338161103d82866113ba565b90508381101561109d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107b0565b61099982868684036115d1565b60003361077c81858561176f565b6000546001600160a01b031633146110e25760405162461bcd60e51b81526004016107b09061216d565b60095481036111595760405162461bcd60e51b815260206004820152603e60248201527f506967677942616e6b3a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c7565000060648201526084016107b0565b60095460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600955565b6000546001600160a01b031633146111b65760405162461bcd60e51b81526004016107b09061216d565b6006546001600160a01b039081169082160361122b5760405162461bcd60e51b815260206004820152602e60248201527f506967677942616e6b3a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b60648201526084016107b0565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112b25760405162461bcd60e51b81526004016107b09061216d565b6040516b18985cd95199594b54d95b1b60a21b8152600c0160408051918290038220600a5460ff8086168552600160a81b909104166020840152917f889b8e00c69ec7c91d74845dd69f685363e015b045a7e417e9aaca9c2a15c3c5910160405180910390a2600a805460ff909216600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146113625760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611014565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0381166114705760405162461bcd60e51b815260206004820152602260248201527f506967677942616e6b3a205468652077616c6c6574412063616e6e6f74206265604482015261020360f41b60648201526084016107b0565b600a546040516677616c6c65744160c81b81526001600160a01b0391821691831690600701604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115115760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0381166115765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107b0565b6001600160a01b0382166116945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061170184846113ba565b90506000198114611769578181101561175c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107b0565b61176984848484036115d1565b50505050565b6001600160a01b0383166117955760405162461bcd60e51b81526004016107b090612262565b6001600160a01b0382166117bb5760405162461bcd60e51b81526004016107b0906122a7565b806000036117d4576117cf83836000611b59565b505050565b6001600160a01b0383166000908152600f602052604090205460ff1615801561181657506001600160a01b0382166000908152600f602052604090205460ff16155b1561194757600654600160a01b900460ff166118865760405162461bcd60e51b815260206004820152602960248201527f506967677942616e6b3a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b60648201526084016107b0565b6001600160a01b0382166000908152600e602052604090205460ff1661194757600754816118c9846001600160a01b031660009081526001602052604090205490565b6118d3919061224a565b11156119475760405162461bcd60e51b815260206004820152603e60248201527f506967677942616e6b3a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e000060648201526084016107b0565b600654600160a01b900460ff16801561197157506009543060009081526001602052604090205410155b8015611980575060085460ff16155b80156119a457506001600160a01b03821660009081526011602052604090205460ff165b156119c9576008805460ff191660011790556119be611c8a565b6008805460ff191690555b60085460009060ff161580156119e85750600654600160a01b900460ff165b6001600160a01b03851660009081526010602052604090205490915060ff1680611a2a57506001600160a01b03831660009081526010602052604090205460ff165b15611a33575060005b8015611b52576001600160a01b03841660009081526011602052604090205460ff16611a92576001600160a01b03831660009081526011602052604090205460ff16611a80576000611aa0565b600a54600160a81b900460ff16611aa0565b600a54600160a01b900460ff165b6012805460ff191660ff929092169182179055600090606490611ac390856121d5565b611acd91906121f4565b90506007600b5443611adf9190612216565b11611aff5782905080600d6000828254611af9919061224a565b90915550505b611b098184612216565b9250611b16853083611b59565b60125460405160ff90911681527f7af9679930ce4e74c70f6aabba091bc715fe2770fb90d1b007b08cdc0d10f7a79060200160405180910390a1505b6117698484845b6001600160a01b038316611b7f5760405162461bcd60e51b81526004016107b090612262565b6001600160a01b038216611ba55760405162461bcd60e51b81526004016107b0906122a7565b6001600160a01b03831660009081526001602052604090205481811015611c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c7d9086815260200190565b60405180910390a3611769565b306000908152600160205260409020544790611ca581611d11565b6000611cb18347612216565b604080518481526020810186905247818301526060810183905290519192507fbfe5d932e422976098560e269a706d68d16b142ec7e3054f328cab249e5ea8e1919081900360800190a1600a546117cf906001600160a01b031682611e6b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d4657611d466122ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906121a2565b81600181518110611dd657611dd66122ea565b6001600160a01b039283166020918202929092010152600654611dfc91309116846115d1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e35908590600190869030904290600401612300565b600060405180830381600087803b158015611e4f57600080fd5b505af1158015611e63573d6000803e3d6000fd5b505050505050565b80471015611ebb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016107b0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f08576040519150601f19603f3d011682016040523d82523d6000602084013e611f0d565b606091505b50509050806117cf5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016107b0565b600060208083528351808285015260005b81811015611fb157858101830151858201604001528201611f95565b81811115611fc3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611fee57600080fd5b50565b6000806040838503121561200457600080fd5b823561200f81611fd9565b946020939093013593505050565b60006020828403121561202f57600080fd5b5035919050565b60008060006060848603121561204b57600080fd5b833561205681611fd9565b9250602084013561206681611fd9565b929592945050506040919091013590565b60006020828403121561208957600080fd5b813560ff8116811461209a57600080fd5b9392505050565b6000602082840312156120b357600080fd5b813561209a81611fd9565b8015158114611fee57600080fd5b600080604083850312156120df57600080fd5b82356120ea81611fd9565b915060208301356120fa816120be565b809150509250929050565b6000806040838503121561211857600080fd5b823561212381611fd9565b915060208301356120fa81611fd9565b600181811c9082168061214757607f821691505b60208210810361216757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156121b457600080fd5b815161209a81611fd9565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156121ef576121ef6121bf565b500290565b60008261221157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612228576122286121bf565b500390565b60006020828403121561223f57600080fd5b815161209a816120be565b6000821982111561225d5761225d6121bf565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123505784516001600160a01b03168352938301939183019160010161232b565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204fbd4caaf737cc6766dcf05e8d69aa774fef8f09939591215072a8ab78a843bd64736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063715018a611610123578063b62496f5116100ab578063d2d7ad831161006f578063d2d7ad8314610646578063d32215761461065c578063dd62ed3e1461067c578063eb50e70e1461069c578063f2fde38b146106bc57600080fd5b8063b62496f514610595578063b77e7da0146105c5578063bea9849e146105e5578063c40d3ea414610605578063c90d35f81461062557600080fd5b8063a457c2d7116100f2578063a457c2d714610505578063a9059cbb14610525578063aa4bde2814610545578063aee50b1e1461055b578063b50d643a1461057b57600080fd5b8063715018a61461049d578063781edb3c146104b25780638da5cb5b146104d257806395d89b41146104f057600080fd5b806327a14fc2116101a657806334cf1fea1161017557806334cf1fea146103dd57806339509351146103f257806347bf787e1461041257806349bd5a5e1461043357806370a082311461046757600080fd5b806327a14fc2146103665780632cc25d1414610386578063313ce5671461039b57806333deff23146103bd57600080fd5b80630bd05b69116101ed5780630bd05b69146102c45780631694505e146102d957806318160ddd146103115780631fcfefcd1461033057806323b872dd1461034657600080fd5b8063064a59d01461022a57806306fdde0314610260578063095ea7b314610282578063098df585146102a257600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060065461024b90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026c57600080fd5b506102756106dc565b6040516102579190611f84565b34801561028e57600080fd5b5061024b61029d366004611ff1565b61076e565b3480156102ae57600080fd5b506102c26102bd36600461201d565b610786565b005b3480156102d057600080fd5b506102c2610932565b3480156102e557600080fd5b506006546102f9906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b34801561031d57600080fd5b506003545b604051908152602001610257565b34801561033c57600080fd5b50610322600d5481565b34801561035257600080fd5b5061024b610361366004612036565b610980565b34801561037257600080fd5b506102c261038136600461201d565b6109a4565b34801561039257600080fd5b506102c2610b1e565b3480156103a757600080fd5b5060125b60405160ff9091168152602001610257565b3480156103c957600080fd5b506102c26103d8366004612077565b610d8a565b3480156103e957600080fd5b506102c2610e39565b3480156103fe57600080fd5b5061024b61040d366004611ff1565b610e72565b34801561041e57600080fd5b50600a546103ab90600160a01b900460ff1681565b34801561043f57600080fd5b506102f97f000000000000000000000000cb9e6f54b4711bc9e4367be8529ae99e6a816ff681565b34801561047357600080fd5b506103226104823660046120a1565b6001600160a01b031660009081526001602052604090205490565b3480156104a957600080fd5b506102c2610e94565b3480156104be57600080fd5b506102c26104cd3660046120cc565b610f08565b3480156104de57600080fd5b506000546001600160a01b03166102f9565b3480156104fc57600080fd5b50610275611020565b34801561051157600080fd5b5061024b610520366004611ff1565b61102f565b34801561053157600080fd5b5061024b610540366004611ff1565b6110aa565b34801561055157600080fd5b5061032260075481565b34801561056757600080fd5b506102c261057636600461201d565b6110b8565b34801561058757600080fd5b50600c5461024b9060ff1681565b3480156105a157600080fd5b5061024b6105b03660046120a1565b60116020526000908152604090205460ff1681565b3480156105d157600080fd5b50600a546102f9906001600160a01b031681565b3480156105f157600080fd5b506102c26106003660046120a1565b61118c565b34801561061157600080fd5b506102c2610620366004612077565b611288565b34801561063157600080fd5b50600a546103ab90600160a81b900460ff1681565b34801561065257600080fd5b5061032260095481565b34801561066857600080fd5b506102c26106773660046120cc565b611338565b34801561068857600080fd5b50610322610697366004612105565b6113ba565b3480156106a857600080fd5b506102c26106b73660046120a1565b6113e5565b3480156106c857600080fd5b506102c26106d73660046120a1565b6114e7565b6060600480546106eb90612133565b80601f016020809104026020016040519081016040528092919081815260200182805461071790612133565b80156107645780601f1061073957610100808354040283529160200191610764565b820191906000526020600020905b81548152906001019060200180831161074757829003601f168201915b5050505050905090565b60003361077c8185856115d1565b5060019392505050565b6000546001600160a01b031633146107b95760405162461bcd60e51b81526004016107b09061216d565b60405180910390fd5b4781106108225760405162461bcd60e51b815260206004820152603160248201527f506967677942616e6b3a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b60648201526084016107b0565b600080546040516001600160a01b039091169083908381818185875af1925050503d806000811461086f576040519150601f19603f3d011682016040523d82523d6000602084013e610874565b606091505b50509050801561092e57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156108e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090b91906121a2565b604080516001600160a01b03909216825260208201859052015b60405180910390a15b5050565b6000546001600160a01b0316331461095c5760405162461bcd60e51b81526004016107b09061216d565b6006805460ff60a01b1916600160a01b179055600b5460000361097e5743600b555b565b60003361098e8582856116f5565b61099985858561176f565b506001949350505050565b6000546001600160a01b031633146109ce5760405162461bcd60e51b81526004016107b09061216d565b6007548103610a3e5760405162461bcd60e51b815260206004820152603660248201527f506967677942616e6b3a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b60648201526084016107b0565b6103e8610a596c0c9f2c9cd04674edea4000000060056121d5565b610a6391906121f4565b811015610aeb5760405162461bcd60e51b815260206004820152604a60248201527f506967677942616e6b3a2043616e6e6f7420757064617465206d617857616c6c60448201527f6574416d6f756e7420746f2076616c7565206c657373207468616e20302e3525606482015269206f6620737570706c7960b01b608482015260a4016107b0565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b6000546001600160a01b03163314610b485760405162461bcd60e51b81526004016107b09061216d565b600c5460ff1615610bb65760405162461bcd60e51b815260206004820152603260248201527f506967677942616e6b3a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b60648201526084016107b0565b6007600b5443610bc69190612216565b11610c2c5760405162461bcd60e51b815260206004820152603060248201527f506967677942616e6b3a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b60648201526084016107b0565b600c805460ff19166001179055610c58306001600160a01b031660009081526001602052604090205490565b600d541115610cb85760405162461bcd60e51b815260206004820152602660248201527f506967677942616e6b3a204120737761702068617320616c7265616479206f6360448201526518dd5c9c995960d21b60648201526084016107b0565b600d8054600091829055903063a9059cbb610cdb6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c919061222d565b9050801561092e5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d9101610925565b6000546001600160a01b03163314610db45760405162461bcd60e51b81526004016107b09061216d565b6040516a626173654665652d42757960a81b8152600b0160408051918290038220600a5460ff8086168552600160a01b909104166020840152917f889b8e00c69ec7c91d74845dd69f685363e015b045a7e417e9aaca9c2a15c3c5910160405180910390a2600a805460ff909216600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610e635760405162461bcd60e51b81526004016107b09061216d565b6006805460ff60a01b19169055565b60003361077c818585610e8583836113ba565b610e8f919061224a565b6115d1565b6000546001600160a01b03163314610ebe5760405162461bcd60e51b81526004016107b09061216d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f325760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0382166000908152600e602052604090205481151560ff909116151503610fc05760405162461bcd60e51b815260206004820152603560248201527f506967677942616e6b3a204163636f756e7420697320616c7265616479207468604482015274652076616c7565206f6620276578636c756465642760581b60648201526084016107b0565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6060600580546106eb90612133565b6000338161103d82866113ba565b90508381101561109d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107b0565b61099982868684036115d1565b60003361077c81858561176f565b6000546001600160a01b031633146110e25760405162461bcd60e51b81526004016107b09061216d565b60095481036111595760405162461bcd60e51b815260206004820152603e60248201527f506967677942616e6b3a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c7565000060648201526084016107b0565b60095460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600955565b6000546001600160a01b031633146111b65760405162461bcd60e51b81526004016107b09061216d565b6006546001600160a01b039081169082160361122b5760405162461bcd60e51b815260206004820152602e60248201527f506967677942616e6b3a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b60648201526084016107b0565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112b25760405162461bcd60e51b81526004016107b09061216d565b6040516b18985cd95199594b54d95b1b60a21b8152600c0160408051918290038220600a5460ff8086168552600160a81b909104166020840152917f889b8e00c69ec7c91d74845dd69f685363e015b045a7e417e9aaca9c2a15c3c5910160405180910390a2600a805460ff909216600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146113625760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611014565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0381166114705760405162461bcd60e51b815260206004820152602260248201527f506967677942616e6b3a205468652077616c6c6574412063616e6e6f74206265604482015261020360f41b60648201526084016107b0565b600a546040516677616c6c65744160c81b81526001600160a01b0391821691831690600701604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115115760405162461bcd60e51b81526004016107b09061216d565b6001600160a01b0381166115765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107b0565b6001600160a01b0382166116945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061170184846113ba565b90506000198114611769578181101561175c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107b0565b61176984848484036115d1565b50505050565b6001600160a01b0383166117955760405162461bcd60e51b81526004016107b090612262565b6001600160a01b0382166117bb5760405162461bcd60e51b81526004016107b0906122a7565b806000036117d4576117cf83836000611b59565b505050565b6001600160a01b0383166000908152600f602052604090205460ff1615801561181657506001600160a01b0382166000908152600f602052604090205460ff16155b1561194757600654600160a01b900460ff166118865760405162461bcd60e51b815260206004820152602960248201527f506967677942616e6b3a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b60648201526084016107b0565b6001600160a01b0382166000908152600e602052604090205460ff1661194757600754816118c9846001600160a01b031660009081526001602052604090205490565b6118d3919061224a565b11156119475760405162461bcd60e51b815260206004820152603e60248201527f506967677942616e6b3a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e000060648201526084016107b0565b600654600160a01b900460ff16801561197157506009543060009081526001602052604090205410155b8015611980575060085460ff16155b80156119a457506001600160a01b03821660009081526011602052604090205460ff165b156119c9576008805460ff191660011790556119be611c8a565b6008805460ff191690555b60085460009060ff161580156119e85750600654600160a01b900460ff165b6001600160a01b03851660009081526010602052604090205490915060ff1680611a2a57506001600160a01b03831660009081526010602052604090205460ff165b15611a33575060005b8015611b52576001600160a01b03841660009081526011602052604090205460ff16611a92576001600160a01b03831660009081526011602052604090205460ff16611a80576000611aa0565b600a54600160a81b900460ff16611aa0565b600a54600160a01b900460ff165b6012805460ff191660ff929092169182179055600090606490611ac390856121d5565b611acd91906121f4565b90506007600b5443611adf9190612216565b11611aff5782905080600d6000828254611af9919061224a565b90915550505b611b098184612216565b9250611b16853083611b59565b60125460405160ff90911681527f7af9679930ce4e74c70f6aabba091bc715fe2770fb90d1b007b08cdc0d10f7a79060200160405180910390a1505b6117698484845b6001600160a01b038316611b7f5760405162461bcd60e51b81526004016107b090612262565b6001600160a01b038216611ba55760405162461bcd60e51b81526004016107b0906122a7565b6001600160a01b03831660009081526001602052604090205481811015611c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c7d9086815260200190565b60405180910390a3611769565b306000908152600160205260409020544790611ca581611d11565b6000611cb18347612216565b604080518481526020810186905247818301526060810183905290519192507fbfe5d932e422976098560e269a706d68d16b142ec7e3054f328cab249e5ea8e1919081900360800190a1600a546117cf906001600160a01b031682611e6b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d4657611d466122ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906121a2565b81600181518110611dd657611dd66122ea565b6001600160a01b039283166020918202929092010152600654611dfc91309116846115d1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e35908590600190869030904290600401612300565b600060405180830381600087803b158015611e4f57600080fd5b505af1158015611e63573d6000803e3d6000fd5b505050505050565b80471015611ebb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016107b0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f08576040519150601f19603f3d011682016040523d82523d6000602084013e611f0d565b606091505b50509050806117cf5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016107b0565b600060208083528351808285015260005b81811015611fb157858101830151858201604001528201611f95565b81811115611fc3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611fee57600080fd5b50565b6000806040838503121561200457600080fd5b823561200f81611fd9565b946020939093013593505050565b60006020828403121561202f57600080fd5b5035919050565b60008060006060848603121561204b57600080fd5b833561205681611fd9565b9250602084013561206681611fd9565b929592945050506040919091013590565b60006020828403121561208957600080fd5b813560ff8116811461209a57600080fd5b9392505050565b6000602082840312156120b357600080fd5b813561209a81611fd9565b8015158114611fee57600080fd5b600080604083850312156120df57600080fd5b82356120ea81611fd9565b915060208301356120fa816120be565b809150509250929050565b6000806040838503121561211857600080fd5b823561212381611fd9565b915060208301356120fa81611fd9565b600181811c9082168061214757607f821691505b60208210810361216757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156121b457600080fd5b815161209a81611fd9565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156121ef576121ef6121bf565b500290565b60008261221157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612228576122286121bf565b500390565b60006020828403121561223f57600080fd5b815161209a816120be565b6000821982111561225d5761225d6121bf565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123505784516001600160a01b03168352938301939183019160010161232b565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204fbd4caaf737cc6766dcf05e8d69aa774fef8f09939591215072a8ab78a843bd64736f6c634300080f0033

Deployed Bytecode Sourcemap

16506:9038:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16776:28;;;;;;;;;;-1:-1:-1;16776:28:0;;;;-1:-1:-1;;;16776:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;16776:28:0;;;;;;;;11171:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12102:201::-;;;;;;;;;;-1:-1:-1;12102:201:0;;;;;:::i;:::-;;:::i;22737:338::-;;;;;;;;;;-1:-1:-1;22737:338:0;;;;;:::i;:::-;;:::i;:::-;;19409:178;;;;;;;;;;;;;:::i;16552:30::-;;;;;;;;;;-1:-1:-1;16552:30:0;;;;-1:-1:-1;;;;;16552:30:0;;;;;;-1:-1:-1;;;;;1628:32:1;;;1610:51;;1598:2;1583:18;16552:30:0;1449:218:1;11491:108:0;;;;;;;;;;-1:-1:-1;11579:12:0;;11491:108;;;1818:25:1;;;1806:2;1791:18;11491:108:0;1672:177:1;17216:27:0;;;;;;;;;;;;;;;;12313:295;;;;;;;;;;-1:-1:-1;12313:295:0;;;;;:::i;:::-;;:::i;21742:392::-;;;;;;;;;;-1:-1:-1;21742:392:0;;;;;:::i;:::-;;:::i;22140:594::-;;;;;;;;;;;;;:::i;11390:93::-;;;;;;;;;;-1:-1:-1;11473:2:0;11390:93;;;2487:4:1;2475:17;;;2457:36;;2445:2;2430:18;11390:93:0;2315:184:1;20746:193:0;;;;;;;;;;-1:-1:-1;20746:193:0;;;;;:::i;:::-;;:::i;19590:82::-;;;;;;;;;;;;;:::i;12616:238::-;;;;;;;;;;-1:-1:-1;12616:238:0;;;;;:::i;:::-;;:::i;17062:28::-;;;;;;;;;;-1:-1:-1;17062:28:0;;;;-1:-1:-1;;;17062:28:0;;;;;;16586:38;;;;;;;;;;;;;;;11607:127;;;;;;;;;;-1:-1:-1;11607:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11708:18:0;11681:7;11708:18;;;:9;:18;;;;;;;11607:127;10397:133;;;;;;;;;;;;;:::i;20182:321::-;;;;;;;;;;-1:-1:-1;20182:321:0;;;;;:::i;:::-;;:::i;10213:70::-;;;;;;;;;;-1:-1:-1;10251:7:0;10272:6;-1:-1:-1;;;;;10272:6:0;10213:70;;11279:104;;;;;;;;;;;;;:::i;12862:436::-;;;;;;;;;;-1:-1:-1;12862:436:0;;;;;:::i;:::-;;:::i;11742:193::-;;;;;;;;;;-1:-1:-1;11742:193:0;;;;;:::i;:::-;;:::i;16871:56::-;;;;;;;;;;;;;;;;21432:307;;;;;;;;;;-1:-1:-1;21432:307:0;;;;;:::i;:::-;;:::i;17178:31::-;;;;;;;;;;-1:-1:-1;17178:31:0;;;;;;;;17439:58;;;;;;;;;;-1:-1:-1;17439:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17033:22;;;;;;;;;;-1:-1:-1;17033:22:0;;;;-1:-1:-1;;;;;17033:22:0;;;21146:283;;;;;;;;;;-1:-1:-1;21146:283:0;;;;;:::i;:::-;;:::i;20942:201::-;;;;;;;;;;-1:-1:-1;20942:201:0;;;;;:::i;:::-;;:::i;17097:34::-;;;;;;;;;;-1:-1:-1;17097:34:0;;;;-1:-1:-1;;;17097:34:0;;;;;;16959:68;;;;;;;;;;;;;;;;19977:202;;;;;;;;;;-1:-1:-1;19977:202:0;;;;;:::i;:::-;;:::i;11943:151::-;;;;;;;;;;-1:-1:-1;11943:151:0;;;;;:::i;:::-;;:::i;20506:237::-;;;;;;;;;;-1:-1:-1;20506:237:0;;;;;:::i;:::-;;:::i;10535:223::-;;;;;;;;;;-1:-1:-1;10535:223:0;;;;;:::i;:::-;;:::i;11171:100::-;11225:13;11258:5;11251:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11171:100;:::o;12102:201::-;12185:4;9679:10;12241:32;9679:10;12257:7;12266:6;12241:8;:32::i;:::-;-1:-1:-1;12291:4:0;;12102:201;-1:-1:-1;;;12102:201:0:o;22737:338::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;;;;;;;;;22823:21:::1;22814:6;:30;22806:92;;;::::0;-1:-1:-1;;;22806:92:0;;5089:2:1;22806:92:0::1;::::0;::::1;5071:21:1::0;5128:2;5108:18;;;5101:30;5167:34;5147:18;;;5140:62;-1:-1:-1;;;5218:18:1;;;5211:47;5275:19;;22806:92:0::1;4887:413:1::0;22806:92:0::1;22910:12;10272:6:::0;;22927:41:::1;::::0;-1:-1:-1;;;;;10272:6:0;;;;22957;;22910:12;22927:41;22910:12;22927:41;22957:6;10272;22927:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22909:59;;;22983:7;22979:89;;;23025:15;::::0;:22:::1;::::0;;-1:-1:-1;;;23025:22:0;;;;23011:45:::1;::::0;-1:-1:-1;;;;;23025:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23011:45;::::0;;-1:-1:-1;;;;;5963:32:1;;;5945:51;;6027:2;6012:18;;6005:34;;;5918:18;23011:45:0::1;;;;;;;;22979:89;22798:277;22737:338:::0;:::o;19409:178::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;19460:16:::1;:23:::0;;-1:-1:-1;;;;19460:23:0::1;-1:-1:-1::0;;;19460:23:0::1;::::0;;19498:18:::1;::::0;19460:23;19498;19494:89:::1;;19559:12;19538:18;:33:::0;19494:89:::1;19409:178::o:0;12313:295::-;12444:4;9679:10;12502:38;12518:4;9679:10;12533:6;12502:15;:38::i;:::-;12551:27;12561:4;12567:2;12571:6;12551:9;:27::i;:::-;-1:-1:-1;12596:4:0;;12313:295;-1:-1:-1;;;;12313:295:0:o;21742:392::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;21832:15:::1;;21820:8;:27:::0;21812:94:::1;;;::::0;-1:-1:-1;;;21812:94:0;;6252:2:1;21812:94:0::1;::::0;::::1;6234:21:1::0;6291:2;6271:18;;;6264:30;6330:34;6310:18;;;6303:62;-1:-1:-1;;;6381:18:1;;;6374:52;6443:19;;21812:94:0::1;6050:418:1::0;21812:94:0::1;21957:4;21937:17;16843:24;21953:1;21937:17;:::i;:::-;:24;;;;:::i;:::-;21925:8;:36;;21917:123;;;::::0;-1:-1:-1;;;21917:123:0;;7202:2:1;21917:123:0::1;::::0;::::1;7184:21:1::0;7241:2;7221:18;;;7214:30;7280:34;7260:18;;;7253:62;7351:34;7331:18;;;7324:62;-1:-1:-1;;;7402:19:1;;;7395:41;7453:19;;21917:123:0::1;7000:478:1::0;21917:123:0::1;22082:15;::::0;22050:48:::1;::::0;22072:8;;22050:48:::1;::::0;;;::::1;22103:15;:26:::0;21742:392::o;22140:594::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;22202:19:::1;::::0;::::1;;22201:20;22193:83;;;::::0;-1:-1:-1;;;22193:83:0;;7685:2:1;22193:83:0::1;::::0;::::1;7667:21:1::0;7724:2;7704:18;;;7697:30;7763:34;7743:18;;;7736:62;-1:-1:-1;;;7814:18:1;;;7807:48;7872:19;;22193:83:0::1;7483:414:1::0;22193:83:0::1;22325:1;22304:18;;22289:12;:33;;;;:::i;:::-;:37;22281:98;;;::::0;-1:-1:-1;;;22281:98:0;;8234:2:1;22281:98:0::1;::::0;::::1;8216:21:1::0;8273:2;8253:18;;;8246:30;8312:34;8292:18;;;8285:62;-1:-1:-1;;;8363:18:1;;;8356:46;8419:19;;22281:98:0::1;8032:412:1::0;22281:98:0::1;22384:19;:26:::0;;-1:-1:-1;;22384:26:0::1;22406:4;22384:26;::::0;;22439:24:::1;22457:4;-1:-1:-1::0;;;;;11708:18:0;11681:7;11708:18;;;:9;:18;;;;;;;11607:127;22439:24:::1;22423:12;;:40;;22415:91;;;::::0;-1:-1:-1;;;22415:91:0;;8651:2:1;22415:91:0::1;::::0;::::1;8633:21:1::0;8690:2;8670:18;;;8663:30;8729:34;8709:18;;;8702:62;-1:-1:-1;;;8780:18:1;;;8773:36;8826:19;;22415:91:0::1;8449:402:1::0;22415:91:0::1;22528:12;::::0;;22511:14:::1;22545:16:::0;;;;22528:12;22604:4:::1;22589:30;22620:7;10251::::0;10272:6;-1:-1:-1;;;;;10272:6:0;;10213:70;22620:7:::1;22589:47;::::0;-1:-1:-1;;;;;;22589:47:0::1;::::0;;;;;;-1:-1:-1;;;;;5963:32:1;;;22589:47:0::1;::::0;::::1;5945:51:1::0;6012:18;;;6005:34;;;5918:18;;22589:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22572:64;;22651:7;22647:80;;;22679:36;::::0;;22701:4:::1;5945:51:1::0;;6027:2;6012:18;;6005:34;;;22679:36:0::1;::::0;5918:18:1;22679:36:0::1;5771:274:1::0;20746:193:0;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;20826:61:::1;::::0;-1:-1:-1;;;9308:26:1;;9359:2;9350:12;20826:61:0::1;::::0;;;;;::::1;::::0;;20871:15:::1;::::0;::::1;9557:17:1::0;;;9539:36;;-1:-1:-1;;;20871:15:0;;::::1;;9606:2:1::0;9591:18;;9584:45;20826:61:0;::::1;::::0;9512:18:1;20826:61:0::1;;;;;;;20898:15;:36:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;20898:36:0::1;-1:-1:-1::0;;;;20898:36:0;;::::1;::::0;;;::::1;::::0;;20746:193::o;19590:82::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;19643:16:::1;:24:::0;;-1:-1:-1;;;;19643:24:0::1;::::0;;19590:82::o;12616:238::-;12704:4;9679:10;12760:64;9679:10;12776:7;12813:10;12785:25;9679:10;12776:7;12785:9;:25::i;:::-;:38;;;;:::i;:::-;12760:8;:64::i;10397:133::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;10498:1:::1;10482:6:::0;;10461:40:::1;::::0;-1:-1:-1;;;;;10482:6:0;;::::1;::::0;10461:40:::1;::::0;10498:1;;10461:40:::1;10523:1;10506:19:::0;;-1:-1:-1;;;;;;10506:19:0::1;::::0;;10397:133::o;20182:321::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20281:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;20273:116:::1;;;::::0;-1:-1:-1;;;20273:116:0;;9975:2:1;20273:116:0::1;::::0;::::1;9957:21:1::0;10014:2;9994:18;;;9987:30;10053:34;10033:18;;;10026:62;-1:-1:-1;;;10104:18:1;;;10097:51;10165:19;;20273:116:0::1;9773:417:1::0;20273:116:0::1;-1:-1:-1::0;;;;;20394:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20394:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20453:45;;154:41:1;;;20453:45:0::1;::::0;127:18:1;20453:45:0::1;;;;;;;;20182:321:::0;;:::o;11279:104::-;11335:13;11368:7;11361:14;;;;;:::i;12862:436::-;12955:4;9679:10;12955:4;13038:25;9679:10;13055:7;13038:9;:25::i;:::-;13011:52;;13102:15;13082:16;:35;;13074:85;;;;-1:-1:-1;;;13074:85:0;;10397:2:1;13074:85:0;;;10379:21:1;10436:2;10416:18;;;10409:30;10475:34;10455:18;;;10448:62;-1:-1:-1;;;10526:18:1;;;10519:35;10571:19;;13074:85:0;10195:401:1;13074:85:0;13195:60;13204:5;13211:7;13239:15;13220:16;:34;13195:8;:60::i;11742:193::-;11821:4;9679:10;11877:28;9679:10;11894:2;11898:6;11877:9;:28::i;21432:307::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;21530:23:::1;;21518:8;:35:::0;21510:110:::1;;;::::0;-1:-1:-1;;;21510:110:0;;10803:2:1;21510:110:0::1;::::0;::::1;10785:21:1::0;10842:2;10822:18;;;10815:30;10881:34;10861:18;;;10854:62;10952:32;10932:18;;;10925:60;11002:19;;21510:110:0::1;10601:426:1::0;21510:110:0::1;21671:23;::::0;21630:65:::1;::::0;21661:8;;21630:65:::1;::::0;;;::::1;21700:23;:34:::0;21432:307::o;21146:283::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;21246:15:::1;::::0;-1:-1:-1;;;;;21246:15:0;;::::1;21224:38:::0;;::::1;::::0;21216:97:::1;;;::::0;-1:-1:-1;;;21216:97:0;;11234:2:1;21216:97:0::1;::::0;::::1;11216:21:1::0;11273:2;11253:18;;;11246:30;11312:34;11292:18;;;11285:62;-1:-1:-1;;;11363:18:1;;;11356:44;11417:19;;21216:97:0::1;11032:410:1::0;21216:97:0::1;21365:15;::::0;21323:59:::1;::::0;-1:-1:-1;;;;;21365:15:0;;::::1;::::0;21323:59;::::1;::::0;::::1;::::0;21365:15:::1;::::0;21323:59:::1;21387:15;:37:::0;;-1:-1:-1;;;;;;21387:37:0::1;-1:-1:-1::0;;;;;21387:37:0;;;::::1;::::0;;;::::1;::::0;;21146:283::o;20942:201::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;21025:64:::1;::::0;-1:-1:-1;;;11649:27:1;;11701:2;11692:12;21025:64:0::1;::::0;;;;;::::1;::::0;;21072:16:::1;::::0;::::1;9557:17:1::0;;;9539:36;;-1:-1:-1;;;21072:16:0;;::::1;;9606:2:1::0;9591:18;;9584:45;21025:64:0;::::1;::::0;9512:18:1;21025:64:0::1;;;;;;;21100:16;:38:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;21100:38:0::1;-1:-1:-1::0;;;;21100:38:0;;::::1;::::0;;;::::1;::::0;;20942:201::o;19977:202::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20066:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;20066:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20124:50;;154:41:1;;;20124:50:0::1;::::0;127:18:1;20124:50:0::1;14:187:1::0;11943:151:0;-1:-1:-1;;;;;12059:18:0;;;12032:7;12059:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11943:151::o;20506:237::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20584:24:0;::::1;20576:71;;;::::0;-1:-1:-1;;;20576:71:0;;11917:2:1;20576:71:0::1;::::0;::::1;11899:21:1::0;11956:2;11936:18;;;11929:30;11995:34;11975:18;;;11968:62;-1:-1:-1;;;12046:18:1;;;12039:32;12088:19;;20576:71:0::1;11715:398:1::0;20576:71:0::1;20699:7;::::0;20663:44:::1;::::0;-1:-1:-1;;;12320:22:1;;-1:-1:-1;;;;;20699:7:0;;::::1;::::0;20663:44;::::1;::::0;12367:1:1;12358:11;20663:44:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20718:7;:20:::0;;-1:-1:-1;;;;;;20718:20:0::1;-1:-1:-1::0;;;;;20718:20:0;;;::::1;::::0;;;::::1;::::0;;20506:237::o;10535:223::-;10322:6;;-1:-1:-1;;;;;10322:6:0;9679:10;10322:22;10314:67;;;;-1:-1:-1;;;10314:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10618:22:0;::::1;10610:73;;;::::0;-1:-1:-1;;;10610:73:0;;12582:2:1;10610:73:0::1;::::0;::::1;12564:21:1::0;12621:2;12601:18;;;12594:30;12660:34;12640:18;;;12633:62;-1:-1:-1;;;12711:18:1;;;12704:36;12757:19;;10610:73:0::1;12380:402:1::0;10610:73:0::1;10714:6;::::0;;10693:38:::1;::::0;-1:-1:-1;;;;;10693:38:0;;::::1;::::0;10714:6;::::1;::::0;10693:38:::1;::::0;::::1;10736:6;:17:::0;;-1:-1:-1;;;;;;10736:17:0::1;-1:-1:-1::0;;;;;10736:17:0;;;::::1;::::0;;;::::1;::::0;;10535:223::o;15393:380::-;-1:-1:-1;;;;;15529:19:0;;15521:68;;;;-1:-1:-1;;;15521:68:0;;12989:2:1;15521:68:0;;;12971:21:1;13028:2;13008:18;;;13001:30;13067:34;13047:18;;;13040:62;-1:-1:-1;;;13118:18:1;;;13111:34;13162:19;;15521:68:0;12787:400:1;15521:68:0;-1:-1:-1;;;;;15608:21:0;;15600:68;;;;-1:-1:-1;;;15600:68:0;;13394:2:1;15600:68:0;;;13376:21:1;13433:2;13413:18;;;13406:30;13472:34;13452:18;;;13445:62;-1:-1:-1;;;13523:18:1;;;13516:32;13565:19;;15600:68:0;13192:398:1;15600:68:0;-1:-1:-1;;;;;15681:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15733:32;;1818:25:1;;;15733:32:0;;1791:18:1;15733:32:0;;;;;;;15393:380;;;:::o;15781:453::-;15916:24;15943:25;15953:5;15960:7;15943:9;:25::i;:::-;15916:52;;-1:-1:-1;;15983:16:0;:37;15979:248;;16065:6;16045:16;:26;;16037:68;;;;-1:-1:-1;;;16037:68:0;;13797:2:1;16037:68:0;;;13779:21:1;13836:2;13816:18;;;13809:30;13875:31;13855:18;;;13848:59;13924:18;;16037:68:0;13595:353:1;16037:68:0;16149:51;16158:5;16165:7;16193:6;16174:16;:25;16149:8;:51::i;:::-;15905:329;15781:453;;;:::o;23090:1588::-;-1:-1:-1;;;;;23197:18:0;;23189:68;;;;-1:-1:-1;;;23189:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23271:16:0;;23263:64;;;;-1:-1:-1;;;23263:64:0;;;;;;;:::i;:::-;23338:6;23348:1;23338:11;23335:71;;23358:28;23374:4;23380:2;23384:1;23358:15;:28::i;:::-;23090:1588;;;:::o;23335:71::-;-1:-1:-1;;;;;23417:35:0;;;;;;:29;:35;;;;;;;;23416:36;:74;;;;-1:-1:-1;;;;;;23457:33:0;;;;;;:29;:33;;;;;;;;23456:34;23416:74;23413:345;;;23507:16;;-1:-1:-1;;;23507:16:0;;;;23499:70;;;;-1:-1:-1;;;23499:70:0;;14965:2:1;23499:70:0;;;14947:21:1;15004:2;14984:18;;;14977:30;15043:34;15023:18;;;15016:62;-1:-1:-1;;;15094:18:1;;;15087:39;15143:19;;23499:70:0;14763:405:1;23499:70:0;-1:-1:-1;;;;;23583:33:0;;;;;;:29;:33;;;;;;;;23578:174;;23662:15;;23651:6;23635:13;23645:2;-1:-1:-1;;;;;11708:18:0;11681:7;11708:18;;;:9;:18;;;;;;;11607:127;23635:13;:22;;;;:::i;:::-;23634:43;;23626:118;;;;-1:-1:-1;;;23626:118:0;;15375:2:1;23626:118:0;;;15357:21:1;15414:2;15394:18;;;15387:30;15453:34;15433:18;;;15426:62;15524:32;15504:18;;;15497:60;15574:19;;23626:118:0;15173:426:1;23626:118:0;23775:16;;-1:-1:-1;;;23775:16:0;;;;:76;;;;-1:-1:-1;23828:23:0;;23818:4;11681:7;11708:18;;;:9;:18;;;;;;23800:51;;23775:76;:95;;;;-1:-1:-1;23861:9:0;;;;23860:10;23775:95;:133;;;;-1:-1:-1;;;;;;23879:29:0;;;;;;:25;:29;;;;;;;;23775:133;23765:218;;;23922:9;:16;;-1:-1:-1;;23922:16:0;23934:4;23922:16;;;23945:7;:5;:7::i;:::-;23959:9;:17;;-1:-1:-1;;23959:17:0;;;23765:218;24006:9;;23990:12;;24006:9;;24005:10;:30;;;;-1:-1:-1;24019:16:0;;-1:-1:-1;;;24019:16:0;;;;24005:30;-1:-1:-1;;;;;24047:24:0;;;;;;:18;:24;;;;;;23990:45;;-1:-1:-1;24047:24:0;;;:50;;-1:-1:-1;;;;;;24075:22:0;;;;;;:18;:22;;;;;;;;24047:50;24043:84;;;-1:-1:-1;24115:5:0;24043:84;24138:7;24134:501;;;-1:-1:-1;;;;;24180:31:0;;;;;;:25;:31;;;;;;;;:104;;-1:-1:-1;;;;;24232:29:0;;;;;;:25;:29;;;;;;;;:52;;24283:1;24180:104;;24232:52;24264:16;;-1:-1:-1;;;24264:16:0;;;;24180:104;;;24214:15;;-1:-1:-1;;;24214:15:0;;;;24180:104;24166:11;:118;;-1:-1:-1;;24166:118:0;;;;;;;;;;;-1:-1:-1;;24328:3:0;;24305:20;;:6;:20;:::i;:::-;:26;;;;:::i;:::-;24291:40;;24391:1;24369:18;;24354:12;:33;;;;:::i;:::-;:38;24350:141;;24423:6;24417:12;;24468:3;24452:12;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;24350:141:0;24518:12;24527:3;24518:6;:12;:::i;:::-;24509:21;;24539:41;24555:4;24569;24576:3;24539:15;:41::i;:::-;24616:11;;24604:24;;24616:11;;;;2457:36:1;;24604:24:0;;2445:2:1;2430:18;24604:24:0;;;;;;;24147:488;24134:501;24640:33;24656:4;24662:2;24666:6;13306:840;-1:-1:-1;;;;;13437:18:0;;13429:68;;;;-1:-1:-1;;;13429:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13516:16:0;;13508:64;;;;-1:-1:-1;;;13508:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13658:15:0;;13636:19;13658:15;;;:9;:15;;;;;;13692:21;;;;13684:72;;;;-1:-1:-1;;;13684:72:0;;15806:2:1;13684:72:0;;;15788:21:1;15845:2;15825:18;;;15818:30;15884:34;15864:18;;;15857:62;-1:-1:-1;;;15935:18:1;;;15928:36;15981:19;;13684:72:0;15604:402:1;13684:72:0;-1:-1:-1;;;;;13792:15:0;;;;;;;:9;:15;;;;;;13810:20;;;13792:38;;14010:13;;;;;;;;;;:23;;;;;;14062:26;;;;;;13824:6;1818:25:1;;1806:2;1791:18;;1672:177;14062:26:0;;;;;;;;14101:37;23090:1588;24681:436;24815:4;24711:25;11708:18;;;:9;:18;;;;;;24739:21;;24828:34;11708:18;24828:17;:34::i;:::-;24869:27;24899:42;24924:17;24899:21;:42;:::i;:::-;24959:84;;;16242:25:1;;;16298:2;16283:18;;16276:34;;;25000:21:0;16326:18:1;;;16319:34;16384:2;16369:18;;16362:34;;;24959:84:0;;16362:34:1;;-1:-1:-1;24959:84:0;;;;;;16229:3:1;24959:84:0;;;25080:7;;25054:56;;-1:-1:-1;;;;;25080:7:0;25090:19;25054:17;:56::i;25125:416::-;25210:16;;;25224:1;25210:16;;;;;;;;25186:21;;25210:16;;;;;;;;;;-1:-1:-1;25210:16:0;25186:40;;25249:4;25231;25236:1;25231:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25231:23:0;;;:7;;;;;;;;;;:23;;;;25269:15;;:22;;;-1:-1:-1;;;25269:22:0;;;;:15;;;;;:20;;:22;;;;;25231:7;;25269:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25259:4;25264:1;25259:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25259:32:0;;;:7;;;;;;;;;:32;25328:15;;25296:62;;25313:4;;25328:15;25346:11;25296:8;:62::i;:::-;25363:15;;:173;;-1:-1:-1;;;25363:173:0;;-1:-1:-1;;;;;25363:15:0;;;;:66;;:173;;25435:11;;25363:15;;25487:4;;25505;;25516:15;;25363:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25181:360;25125:416;:::o;6548:322::-;6662:6;6637:21;:31;;6624:86;;;;-1:-1:-1;;;6624:86:0;;17858:2:1;6624:86:0;;;17840:21:1;17897:2;17877:18;;;17870:30;17936:31;17916:18;;;17909:59;17985:18;;6624:86:0;17656:353:1;6624:86:0;6718:12;6736:9;-1:-1:-1;;;;;6736:14:0;6758:6;6736:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6717:52;;;6787:7;6774:91;;;;-1:-1:-1;;;6774:91:0;;18216:2:1;6774:91:0;;;18198:21:1;18255:2;18235:18;;;18228:30;18294:34;18274:18;;;18267:62;18365:28;18345:18;;;18338:56;18411:19;;6774:91:0;18014:422:1;206:597;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;863:70;808:131;:::o;944:315::-;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;1854:456::-;1931:6;1939;1947;2000:2;1988:9;1979:7;1975:23;1971:32;1968:52;;;2016:1;2013;2006:12;1968:52;2055:9;2042:23;2074:31;2099:5;2074:31;:::i;:::-;2124:5;-1:-1:-1;2181:2:1;2166:18;;2153:32;2194:33;2153:32;2194:33;:::i;:::-;1854:456;;2246:7;;-1:-1:-1;;;2300:2:1;2285:18;;;;2272:32;;1854:456::o;2504:269::-;2561:6;2614:2;2602:9;2593:7;2589:23;2585:32;2582:52;;;2630:1;2627;2620:12;2582:52;2669:9;2656:23;2719:4;2712:5;2708:16;2701:5;2698:27;2688:55;;2739:1;2736;2729:12;2688:55;2762:5;2504:269;-1:-1:-1;;;2504:269:1:o;2986:247::-;3045:6;3098:2;3086:9;3077:7;3073:23;3069:32;3066:52;;;3114:1;3111;3104:12;3066:52;3153:9;3140:23;3172:31;3197:5;3172:31;:::i;3238:118::-;3324:5;3317:13;3310:21;3303:5;3300:32;3290:60;;3346:1;3343;3336:12;3361:382;3426:6;3434;3487:2;3475:9;3466:7;3462:23;3458:32;3455:52;;;3503:1;3500;3493:12;3455:52;3542:9;3529:23;3561:31;3586:5;3561:31;:::i;:::-;3611:5;-1:-1:-1;3668:2:1;3653:18;;3640:32;3681:30;3640:32;3681:30;:::i;:::-;3730:7;3720:17;;;3361:382;;;;;:::o;3748:388::-;3816:6;3824;3877:2;3865:9;3856:7;3852:23;3848:32;3845:52;;;3893:1;3890;3883:12;3845:52;3932:9;3919:23;3951:31;3976:5;3951:31;:::i;:::-;4001:5;-1:-1:-1;4058:2:1;4043:18;;4030:32;4071:33;4030:32;4071:33;:::i;4141:380::-;4220:1;4216:12;;;;4263;;;4284:61;;4338:4;4330:6;4326:17;4316:27;;4284:61;4391:2;4383:6;4380:14;4360:18;4357:38;4354:161;;4437:10;4432:3;4428:20;4425:1;4418:31;4472:4;4469:1;4462:15;4500:4;4497:1;4490:15;4354:161;;4141:380;;;:::o;4526:356::-;4728:2;4710:21;;;4747:18;;;4740:30;4806:34;4801:2;4786:18;;4779:62;4873:2;4858:18;;4526:356::o;5515:251::-;5585:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:52;;;5654:1;5651;5644:12;5606:52;5686:9;5680:16;5705:31;5730:5;5705:31;:::i;6473:127::-;6534:10;6529:3;6525:20;6522:1;6515:31;6565:4;6562:1;6555:15;6589:4;6586:1;6579:15;6605:168;6645:7;6711:1;6707;6703:6;6699:14;6696:1;6693:21;6688:1;6681:9;6674:17;6670:45;6667:71;;;6718:18;;:::i;:::-;-1:-1:-1;6758:9:1;;6605:168::o;6778:217::-;6818:1;6844;6834:132;;6888:10;6883:3;6879:20;6876:1;6869:31;6923:4;6920:1;6913:15;6951:4;6948:1;6941:15;6834:132;-1:-1:-1;6980:9:1;;6778:217::o;7902:125::-;7942:4;7970:1;7967;7964:8;7961:34;;;7975:18;;:::i;:::-;-1:-1:-1;8012:9:1;;7902:125::o;8856:245::-;8923:6;8976:2;8964:9;8955:7;8951:23;8947:32;8944:52;;;8992:1;8989;8982:12;8944:52;9024:9;9018:16;9043:28;9065:5;9043:28;:::i;9640:128::-;9680:3;9711:1;9707:6;9704:1;9701:13;9698:39;;;9717:18;;:::i;:::-;-1:-1:-1;9753:9:1;;9640:128::o;13953:401::-;14155:2;14137:21;;;14194:2;14174:18;;;14167:30;14233:34;14228:2;14213:18;;14206:62;-1:-1:-1;;;14299:2:1;14284:18;;14277:35;14344:3;14329:19;;13953:401::o;14359:399::-;14561:2;14543:21;;;14600:2;14580:18;;;14573:30;14639:34;14634:2;14619:18;;14612:62;-1:-1:-1;;;14705:2:1;14690:18;;14683:33;14748:3;14733:19;;14359:399::o;16539:127::-;16600:10;16595:3;16591:20;16588:1;16581:31;16631:4;16628:1;16621:15;16655:4;16652:1;16645:15;16671:980;16933:4;16981:3;16970:9;16966:19;17012:6;17001:9;16994:25;17038:2;17076:6;17071:2;17060:9;17056:18;17049:34;17119:3;17114:2;17103:9;17099:18;17092:31;17143:6;17178;17172:13;17209:6;17201;17194:22;17247:3;17236:9;17232:19;17225:26;;17286:2;17278:6;17274:15;17260:29;;17307:1;17317:195;17331:6;17328:1;17325:13;17317:195;;;17396:13;;-1:-1:-1;;;;;17392:39:1;17380:52;;17487:15;;;;17452:12;;;;17428:1;17346:9;17317:195;;;-1:-1:-1;;;;;;;17568:32:1;;;;17563:2;17548:18;;17541:60;-1:-1:-1;;;17632:3:1;17617:19;17610:35;17529:3;16671:980;-1:-1:-1;;;16671:980:1:o

Swarm Source

ipfs://4fbd4caaf737cc6766dcf05e8d69aa774fef8f09939591215072a8ab78a843bd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.