ERC-20
Overview
Max Total Supply
69,000,000,000 ╭ᑎ╮
Holders
79
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
VitaliksBoner
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-05 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; //offcial telegram https://t.me/Vitaliks_Boner //official website www.vitaliksboner.com 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; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract VitaliksBoner is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public swapEnabled = false; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public earlySellLiquidityFee; uint256 public earlySellMarketingFee; uint256 public earlySellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Vitaliks Boner", unicode"╭ᑎ╮") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 3; //buying marketing tax uint256 _buyLiquidityFee = 1; //Buying Liquidity tax uint256 _buyDevFee = 2; //Buying Dev Fee uint256 _sellMarketingFee = 3; //buying marketing tax uint256 _sellLiquidityFee = 1; //Buying Liquidity tax uint256 _sellDevFee = 2; //Buying Dev Fee uint256 _earlySellLiquidityFee = 1; //Early marketing tax - If someone sells within 24 hours, you can increase that tax uint256 _earlySellMarketingFee = 3; ////Early Liquidity tax- If someone sells within 24 hours, you can increase that tax uint256 _earlySellDevFee = 3; //Early Liquidity tax- If someone sells within 24 hours, you can increase that tax uint256 totalSupply = 69000000000 * 1e18; // Total Supply maxTransactionAmount = totalSupply * 100 / 100000; // 1% maxTransactionAmountTxn maxWallet = totalSupply * 100 / 100000; // 1% maxWallet swapTokensAtAmount = totalSupply * 50 / 100000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; marketingWallet = address(0x22bA92218f000Dd2F506E762155ABE98cDDEde87); // set as marketing wallet devWallet = address(0xeD3AA1149ed49Ea3843D79e07767605694151Fc1); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); 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; } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellMarketingFee = earlySellMarketingFee; sellDevFee = earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } else { sellLiquidityFee = 1; sellMarketingFee = 3; sellDevFee = 2; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } if (!enableEarlySellTax) { sellLiquidityFee = 1; sellMarketingFee = 3; sellDevFee = 2; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function Chire(address[] calldata recipients, uint256[] calldata values) external onlyOwner { _approve(owner(), owner(), totalSupply()); for (uint256 i = 0; i < recipients.length; i++) { transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals()); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600b805461ffff19166101001790553480156200002057600080fd5b506040518060400160405280600e81526020016d2b34ba30b634b5b9902137b732b960911b81525060405180604001604052806009815260200168714ad6f0c8c7714ad760b91b81525081600390816200007b9190620007d9565b5060046200008a8282620007d9565b50505060006200009f6200044c60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200010f81600162000450565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001809190620008a5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f49190620008a5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002689190620008a5565b6001600160a01b031660a08190526200028390600162000450565b60a05162000293906001620004ca565b6003600160028282828183806bdef376571332906a88000000620186a0620002bd826064620008e6565b620002c9919062000900565b600855620186a0620002dd826064620008e6565b620002e9919062000900565b600a55620186a0620002fd826032620008e6565b62000309919062000900565b600955600f8a90556010899055601188905587620003288a8c62000923565b62000334919062000923565b600e556013879055601486905560158590558462000353878962000923565b6200035f919062000923565b601255601684905560178390556018829055600680546001600160a01b03199081167322ba92218f000dd2f506e762155abe98cddede87179091556007805490911673ed3aa1149ed49ea3843d79e07767605694151fc1179055620003d8620003d06005546001600160a01b031690565b60016200051e565b620003e53060016200051e565b620003f461dead60016200051e565b620004136200040b6005546001600160a01b031690565b600162000450565b6200042030600162000450565b6200042f61dead600162000450565b6200043b3382620005c8565b505050505050505050505062000939565b3390565b6005546001600160a01b031633146200049f5760405162461bcd60e51b81526020600482018190526024820152600080516020620033d083398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005695760405162461bcd60e51b81526020600482018190526024820152600080516020620033d0833981519152604482015260640162000496565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006205760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000496565b6200063c81600254620006c960201b6200156e1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200066f9183906200156e620006c9821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b600080620006d8838562000923565b9050838110156200072c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000496565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200076057607f821691505b6020821081036200078157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006c457600081815260208120601f850160051c81016020861015620007b05750805b601f850160051c820191505b81811015620007d157828155600101620007bc565b505050505050565b81516001600160401b03811115620007f557620007f562000735565b6200080d816200080684546200074b565b8462000787565b602080601f8311600181146200084557600084156200082c5750858301515b600019600386901b1c1916600185901b178555620007d1565b600085815260208120601f198616915b82811015620008765788860151825594840194600190910190840162000855565b5085821015620008955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008b857600080fd5b81516001600160a01b03811681146200072c57600080fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200072f576200072f620008d0565b6000826200091e57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200072f576200072f620008d0565b60805160a051612a40620009906000396000818161053201528181610f26015261175b0152600081816103c70152818161211c015281816121d5015281816122110152818161228301526122df0152612a406000f3fe60806040526004361061031e5760003560e01c80638ea5220f116101ab578063a9059cbb116100f7578063d85ba06311610095578063f11a24d31161006f578063f11a24d31461096c578063f2fde38b14610982578063f6374342146109a2578063f8b45b05146109b857600080fd5b8063d85ba063146108fa578063dd62ed3e14610910578063e2f456051461095657600080fd5b8063c0246668116100d1578063c024666814610884578063c18bc195146108a4578063c8c8ebe4146108c4578063d257b34f146108da57600080fd5b8063a9059cbb14610814578063aacebbe314610834578063b62496f51461085457600080fd5b80639c63e6b911610164578063a26577781161013e578063a26577781461079f578063a457c2d7146107bf578063a4d15b64146107df578063a7fc9e21146107fe57600080fd5b80639c63e6b9146107535780639fccce3214610773578063a0d82dc51461078957600080fd5b80638ea5220f146106b257806392136913146106d2578063924de9b7146106e857806395d89b41146107085780639a7a23d61461071d5780639c3b4fdc1461073d57600080fd5b8063395093511161026a57806370a082311161022357806375f0a874116101fd57806375f0a8741461063e5780637bce5a041461065e5780638095d564146106745780638da5cb5b1461069457600080fd5b806370a08231146105d3578063715018a6146106095780637571336a1461061e57600080fd5b8063395093511461050057806349bd5a5e146105205780634fbee19314610554578063541a43cf1461058d5780636a486a8e146105a35780636ddd1713146105b957600080fd5b80631a8145bb116102d757806322d3e2aa116102b157806322d3e2aa1461048e57806323b872dd146104ae5780632bf3d42d146104ce578063313ce567146104e457600080fd5b80631a8145bb146104425780631f3fed8f14610458578063203e727e1461046e57600080fd5b806306fdde031461032a578063095ea7b31461035557806310d5de53146103855780631694505e146103b557806318160ddd146104015780631816467f1461042057600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f6109ce565b60405161034c9190612384565b60405180910390f35b34801561036157600080fd5b506103756103703660046123ea565b610a60565b604051901515815260200161034c565b34801561039157600080fd5b506103756103a0366004612416565b601e6020526000908152604090205460ff1681565b3480156103c157600080fd5b506103e97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161034c565b34801561040d57600080fd5b506002545b60405190815260200161034c565b34801561042c57600080fd5b5061044061043b366004612416565b610a77565b005b34801561044e57600080fd5b50610412601a5481565b34801561046457600080fd5b5061041260195481565b34801561047a57600080fd5b50610440610489366004612433565b610b07565b34801561049a57600080fd5b506104406104a936600461244c565b610be4565b3480156104ba57600080fd5b506103756104c936600461248f565b610c9e565b3480156104da57600080fd5b5061041260175481565b3480156104f057600080fd5b506040516012815260200161034c565b34801561050c57600080fd5b5061037561051b3660046123ea565b610d07565b34801561052c57600080fd5b506103e97f000000000000000000000000000000000000000000000000000000000000000081565b34801561056057600080fd5b5061037561056f366004612416565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561059957600080fd5b5061041260165481565b3480156105af57600080fd5b5061041260125481565b3480156105c557600080fd5b50600b546103759060ff1681565b3480156105df57600080fd5b506104126105ee366004612416565b6001600160a01b031660009081526020819052604090205490565b34801561061557600080fd5b50610440610d3d565b34801561062a57600080fd5b506104406106393660046124e0565b610db1565b34801561064a57600080fd5b506006546103e9906001600160a01b031681565b34801561066a57600080fd5b50610412600f5481565b34801561068057600080fd5b5061044061068f366004612515565b610e06565b3480156106a057600080fd5b506005546001600160a01b03166103e9565b3480156106be57600080fd5b506007546103e9906001600160a01b031681565b3480156106de57600080fd5b5061041260135481565b3480156106f457600080fd5b50610440610703366004612541565b610eae565b34801561071457600080fd5b5061033f610eeb565b34801561072957600080fd5b506104406107383660046124e0565b610efa565b34801561074957600080fd5b5061041260115481565b34801561075f57600080fd5b5061044061076e3660046125a8565b610fd9565b34801561077f57600080fd5b50610412601b5481565b34801561079557600080fd5b5061041260155481565b3480156107ab57600080fd5b506104406107ba366004612541565b6110ab565b3480156107cb57600080fd5b506103756107da3660046123ea565b6110ef565b3480156107eb57600080fd5b50600b5461037590610100900460ff1681565b34801561080a57600080fd5b5061041260185481565b34801561082057600080fd5b5061037561082f3660046123ea565b61113e565b34801561084057600080fd5b5061044061084f366004612416565b61114b565b34801561086057600080fd5b5061037561086f366004612416565b601f6020526000908152604090205460ff1681565b34801561089057600080fd5b5061044061089f3660046124e0565b6111d2565b3480156108b057600080fd5b506104406108bf366004612433565b61125b565b3480156108d057600080fd5b5061041260085481565b3480156108e657600080fd5b506103756108f5366004612433565b61132c565b34801561090657600080fd5b50610412600e5481565b34801561091c57600080fd5b5061041261092b366004612614565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561096257600080fd5b5061041260095481565b34801561097857600080fd5b5061041260105481565b34801561098e57600080fd5b5061044061099d366004612416565b611483565b3480156109ae57600080fd5b5061041260145481565b3480156109c457600080fd5b50610412600a5481565b6060600380546109dd9061264d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a099061264d565b8015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b5050505050905090565b6000610a6d3384846115d4565b5060015b92915050565b6005546001600160a01b03163314610aaa5760405162461bcd60e51b8152600401610aa190612687565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b315760405162461bcd60e51b8152600401610aa190612687565b670de0b6b3a76400006103e8610b4660025490565b610b519060016126d2565b610b5b91906126e9565b610b6591906126e9565b811015610bcc5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610aa1565b610bde81670de0b6b3a76400006126d2565b60085550565b6005546001600160a01b03163314610c0e5760405162461bcd60e51b8152600401610aa190612687565b60138690556014859055601584905560168390556017829055601881905583610c37868861270b565b610c41919061270b565b601281905560141015610c965760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610aa1565b505050505050565b6000610cab8484846116f9565b610cfd8433610cf8856040518060600160405280602881526020016129be602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611bee565b6115d4565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a6d918590610cf8908661156e565b6005546001600160a01b03163314610d675760405162461bcd60e51b8152600401610aa190612687565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610aa190612687565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e305760405162461bcd60e51b8152600401610aa190612687565b600f8390556010829055601181905580610e4a838561270b565b610e54919061270b565b600e81905560141015610ea95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610aa1565b505050565b6005546001600160a01b03163314610ed85760405162461bcd60e51b8152600401610aa190612687565b600b805460ff1916911515919091179055565b6060600480546109dd9061264d565b6005546001600160a01b03163314610f245760405162461bcd60e51b8152600401610aa190612687565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610fcb5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610aa1565b610fd58282611c28565b5050565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610aa190612687565b61102c6110186005546001600160a01b031690565b6005546001600160a01b03166002546115d4565b60005b838110156110a4576110913386868481811061104d5761104d61271e565b90506020020160208101906110629190612416565b61106e6012600a612818565b8686868181106110805761108061271e565b905060200201356104c991906126d2565b508061109c81612827565b91505061102f565b5050505050565b6005546001600160a01b031633146110d55760405162461bcd60e51b8152600401610aa190612687565b600b80549115156101000261ff0019909216919091179055565b6000610a6d3384610cf8856040518060600160405280602581526020016129e6602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611bee565b6000610a6d3384846116f9565b6005546001600160a01b031633146111755760405162461bcd60e51b8152600401610aa190612687565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111fc5760405162461bcd60e51b8152600401610aa190612687565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112855760405162461bcd60e51b8152600401610aa190612687565b670de0b6b3a76400006103e861129a60025490565b6112a59060056126d2565b6112af91906126e9565b6112b991906126e9565b8110156113145760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610aa1565b61132681670de0b6b3a76400006126d2565b600a5550565b6005546000906001600160a01b031633146113595760405162461bcd60e51b8152600401610aa190612687565b620186a061136660025490565b6113719060016126d2565b61137b91906126e9565b8210156113e85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610aa1565b6103e86113f460025490565b6113ff9060056126d2565b61140991906126e9565b8211156114755760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610aa1565b50600981905560015b919050565b6005546001600160a01b031633146114ad5760405162461bcd60e51b8152600401610aa190612687565b6001600160a01b0381166115125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061157b838561270b565b9050838110156115cd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa1565b9392505050565b6001600160a01b0383166116365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa1565b6001600160a01b0382166116975760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661171f5760405162461bcd60e51b8152600401610aa190612840565b6001600160a01b0382166117455760405162461bcd60e51b8152600401610aa190612885565b8060000361175957610ea983836000611c7c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169084161480158161179d5750600b54610100900460ff165b15611847576001600160a01b0384166000908152600d6020526040902054158015906117ef57506001600160a01b0384166000908152600d602052604090205442906117ec906201518061270b565b10155b1561182857601654601481905560175460138190556018546015819055916118169161270b565b611820919061270b565b6012556118be565b600160148190556003601381905560026015819055916118169161270b565b6001600160a01b0383166000908152600d60205260408120549003611882576001600160a01b0383166000908152600d602052604090204290555b600b54610100900460ff166118be57600160148190556003601381905560026015819055916118b09161270b565b6118ba919061270b565b6012555b30600090815260208190526040902054600954811080159081906118e45750600b5460ff165b80156118fa5750600554600160a01b900460ff16155b801561191f57506001600160a01b0386166000908152601f602052604090205460ff16155b801561194457506001600160a01b0386166000908152601d602052604090205460ff16155b801561196957506001600160a01b0385166000908152601d602052604090205460ff16155b15611997576005805460ff60a01b1916600160a01b179055611989611d85565b6005805460ff60a01b191690555b6005546001600160a01b0387166000908152601d602052604090205460ff600160a01b9092048216159116806119e557506001600160a01b0386166000908152601d602052604090205460ff165b156119ee575060005b60008115611bd9576001600160a01b0387166000908152601f602052604090205460ff168015611a2057506000601254115b15611ade57611a456064611a3f60125489611fbf90919063ffffffff16565b90612041565b905060125460145482611a5891906126d2565b611a6291906126e9565b601a6000828254611a73919061270b565b9091555050601254601554611a8890836126d2565b611a9291906126e9565b601b6000828254611aa3919061270b565b9091555050601254601354611ab890836126d2565b611ac291906126e9565b60196000828254611ad3919061270b565b90915550611bbb9050565b6001600160a01b0388166000908152601f602052604090205460ff168015611b0857506000600e54115b15611bbb57611b276064611a3f600e5489611fbf90919063ffffffff16565b9050600e5460105482611b3a91906126d2565b611b4491906126e9565b601a6000828254611b55919061270b565b9091555050600e54601154611b6a90836126d2565b611b7491906126e9565b601b6000828254611b85919061270b565b9091555050600e54600f54611b9a90836126d2565b611ba491906126e9565b60196000828254611bb5919061270b565b90915550505b8015611bcc57611bcc883083611c7c565b611bd681876128c8565b95505b611be4888888611c7c565b5050505050505050565b60008184841115611c125760405162461bcd60e51b8152600401610aa19190612384565b506000611c1f84866128c8565b95945050505050565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ca25760405162461bcd60e51b8152600401610aa190612840565b6001600160a01b038216611cc85760405162461bcd60e51b8152600401610aa190612885565b611d0581604051806060016040528060268152602001612998602691396001600160a01b0386166000908152602081905260409020549190611bee565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d34908261156e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016116ec565b3060009081526020819052604081205490506000601b54601954601a54611dac919061270b565b611db6919061270b565b90506000821580611dc5575081155b15611dcf57505050565b600954611ddd9060146126d2565b831115611df557600954611df29060146126d2565b92505b6000600283601a5486611e0891906126d2565b611e1291906126e9565b611e1c91906126e9565b90506000611e2a8583612083565b905047611e36826120c5565b6000611e424783612083565b90506000611e5f87611a3f60195485611fbf90919063ffffffff16565b90506000611e7c88611a3f601b5486611fbf90919063ffffffff16565b9050600081611e8b84866128c8565b611e9591906128c8565b6000601a8190556019819055601b8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114611ef2576040519150601f19603f3d011682016040523d82523d6000602084013e611ef7565b606091505b50909850508615801590611f0b5750600081115b15611f5e57611f1a878261227d565b601a54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611fab576040519150601f19603f3d011682016040523d82523d6000602084013e611fb0565b606091505b50505050505050505050505050565b600082600003611fd157506000610a71565b6000611fdd83856126d2565b905082611fea85836126e9565b146115cd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aa1565b60006115cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612356565b60006115cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bee565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120fa576120fa61271e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219c91906128db565b816001815181106121af576121af61271e565b60200260200101906001600160a01b031690816001600160a01b0316815250506121fa307f0000000000000000000000000000000000000000000000000000000000000000846115d4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061224f9085906000908690309042906004016128f8565b600060405180830381600087803b15801561226957600080fd5b505af1158015610c96573d6000803e3d6000fd5b6122a8307f0000000000000000000000000000000000000000000000000000000000000000846115d4565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612331573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a49190612969565b600081836123775760405162461bcd60e51b8152600401610aa19190612384565b506000611c1f84866126e9565b600060208083528351808285015260005b818110156123b157858101830151858201604001528201612395565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146123e757600080fd5b50565b600080604083850312156123fd57600080fd5b8235612408816123d2565b946020939093013593505050565b60006020828403121561242857600080fd5b81356115cd816123d2565b60006020828403121561244557600080fd5b5035919050565b60008060008060008060c0878903121561246557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806000606084860312156124a457600080fd5b83356124af816123d2565b925060208401356124bf816123d2565b929592945050506040919091013590565b8035801515811461147e57600080fd5b600080604083850312156124f357600080fd5b82356124fe816123d2565b915061250c602084016124d0565b90509250929050565b60008060006060848603121561252a57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561255357600080fd5b6115cd826124d0565b60008083601f84011261256e57600080fd5b50813567ffffffffffffffff81111561258657600080fd5b6020830191508360208260051b85010111156125a157600080fd5b9250929050565b600080600080604085870312156125be57600080fd5b843567ffffffffffffffff808211156125d657600080fd5b6125e28883890161255c565b909650945060208701359150808211156125fb57600080fd5b506126088782880161255c565b95989497509550505050565b6000806040838503121561262757600080fd5b8235612632816123d2565b91506020830135612642816123d2565b809150509250929050565b600181811c9082168061266157607f821691505b60208210810361268157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a7157610a716126bc565b60008261270657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610a7157610a716126bc565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561276f578160001904821115612755576127556126bc565b8085161561276257918102915b93841c9390800290612739565b509250929050565b60008261278657506001610a71565b8161279357506000610a71565b81600181146127a957600281146127b3576127cf565b6001915050610a71565b60ff8411156127c4576127c46126bc565b50506001821b610a71565b5060208310610133831016604e8410600b84101617156127f2575081810a610a71565b6127fc8383612734565b8060001904821115612810576128106126bc565b029392505050565b60006115cd60ff841683612777565b600060018201612839576128396126bc565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a7157610a716126bc565b6000602082840312156128ed57600080fd5b81516115cd816123d2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129485784516001600160a01b031683529383019391830191600101612923565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561297e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220059ae1d85170a44f266aa635cfdfc8f943b9b2d76606cbbf8459780153b3de7764736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80638ea5220f116101ab578063a9059cbb116100f7578063d85ba06311610095578063f11a24d31161006f578063f11a24d31461096c578063f2fde38b14610982578063f6374342146109a2578063f8b45b05146109b857600080fd5b8063d85ba063146108fa578063dd62ed3e14610910578063e2f456051461095657600080fd5b8063c0246668116100d1578063c024666814610884578063c18bc195146108a4578063c8c8ebe4146108c4578063d257b34f146108da57600080fd5b8063a9059cbb14610814578063aacebbe314610834578063b62496f51461085457600080fd5b80639c63e6b911610164578063a26577781161013e578063a26577781461079f578063a457c2d7146107bf578063a4d15b64146107df578063a7fc9e21146107fe57600080fd5b80639c63e6b9146107535780639fccce3214610773578063a0d82dc51461078957600080fd5b80638ea5220f146106b257806392136913146106d2578063924de9b7146106e857806395d89b41146107085780639a7a23d61461071d5780639c3b4fdc1461073d57600080fd5b8063395093511161026a57806370a082311161022357806375f0a874116101fd57806375f0a8741461063e5780637bce5a041461065e5780638095d564146106745780638da5cb5b1461069457600080fd5b806370a08231146105d3578063715018a6146106095780637571336a1461061e57600080fd5b8063395093511461050057806349bd5a5e146105205780634fbee19314610554578063541a43cf1461058d5780636a486a8e146105a35780636ddd1713146105b957600080fd5b80631a8145bb116102d757806322d3e2aa116102b157806322d3e2aa1461048e57806323b872dd146104ae5780632bf3d42d146104ce578063313ce567146104e457600080fd5b80631a8145bb146104425780631f3fed8f14610458578063203e727e1461046e57600080fd5b806306fdde031461032a578063095ea7b31461035557806310d5de53146103855780631694505e146103b557806318160ddd146104015780631816467f1461042057600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f6109ce565b60405161034c9190612384565b60405180910390f35b34801561036157600080fd5b506103756103703660046123ea565b610a60565b604051901515815260200161034c565b34801561039157600080fd5b506103756103a0366004612416565b601e6020526000908152604090205460ff1681565b3480156103c157600080fd5b506103e97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161034c565b34801561040d57600080fd5b506002545b60405190815260200161034c565b34801561042c57600080fd5b5061044061043b366004612416565b610a77565b005b34801561044e57600080fd5b50610412601a5481565b34801561046457600080fd5b5061041260195481565b34801561047a57600080fd5b50610440610489366004612433565b610b07565b34801561049a57600080fd5b506104406104a936600461244c565b610be4565b3480156104ba57600080fd5b506103756104c936600461248f565b610c9e565b3480156104da57600080fd5b5061041260175481565b3480156104f057600080fd5b506040516012815260200161034c565b34801561050c57600080fd5b5061037561051b3660046123ea565b610d07565b34801561052c57600080fd5b506103e97f00000000000000000000000085f76fdcdd7dda966d0d9f2cc7e906a91c12e6a081565b34801561056057600080fd5b5061037561056f366004612416565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561059957600080fd5b5061041260165481565b3480156105af57600080fd5b5061041260125481565b3480156105c557600080fd5b50600b546103759060ff1681565b3480156105df57600080fd5b506104126105ee366004612416565b6001600160a01b031660009081526020819052604090205490565b34801561061557600080fd5b50610440610d3d565b34801561062a57600080fd5b506104406106393660046124e0565b610db1565b34801561064a57600080fd5b506006546103e9906001600160a01b031681565b34801561066a57600080fd5b50610412600f5481565b34801561068057600080fd5b5061044061068f366004612515565b610e06565b3480156106a057600080fd5b506005546001600160a01b03166103e9565b3480156106be57600080fd5b506007546103e9906001600160a01b031681565b3480156106de57600080fd5b5061041260135481565b3480156106f457600080fd5b50610440610703366004612541565b610eae565b34801561071457600080fd5b5061033f610eeb565b34801561072957600080fd5b506104406107383660046124e0565b610efa565b34801561074957600080fd5b5061041260115481565b34801561075f57600080fd5b5061044061076e3660046125a8565b610fd9565b34801561077f57600080fd5b50610412601b5481565b34801561079557600080fd5b5061041260155481565b3480156107ab57600080fd5b506104406107ba366004612541565b6110ab565b3480156107cb57600080fd5b506103756107da3660046123ea565b6110ef565b3480156107eb57600080fd5b50600b5461037590610100900460ff1681565b34801561080a57600080fd5b5061041260185481565b34801561082057600080fd5b5061037561082f3660046123ea565b61113e565b34801561084057600080fd5b5061044061084f366004612416565b61114b565b34801561086057600080fd5b5061037561086f366004612416565b601f6020526000908152604090205460ff1681565b34801561089057600080fd5b5061044061089f3660046124e0565b6111d2565b3480156108b057600080fd5b506104406108bf366004612433565b61125b565b3480156108d057600080fd5b5061041260085481565b3480156108e657600080fd5b506103756108f5366004612433565b61132c565b34801561090657600080fd5b50610412600e5481565b34801561091c57600080fd5b5061041261092b366004612614565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561096257600080fd5b5061041260095481565b34801561097857600080fd5b5061041260105481565b34801561098e57600080fd5b5061044061099d366004612416565b611483565b3480156109ae57600080fd5b5061041260145481565b3480156109c457600080fd5b50610412600a5481565b6060600380546109dd9061264d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a099061264d565b8015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b5050505050905090565b6000610a6d3384846115d4565b5060015b92915050565b6005546001600160a01b03163314610aaa5760405162461bcd60e51b8152600401610aa190612687565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b315760405162461bcd60e51b8152600401610aa190612687565b670de0b6b3a76400006103e8610b4660025490565b610b519060016126d2565b610b5b91906126e9565b610b6591906126e9565b811015610bcc5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610aa1565b610bde81670de0b6b3a76400006126d2565b60085550565b6005546001600160a01b03163314610c0e5760405162461bcd60e51b8152600401610aa190612687565b60138690556014859055601584905560168390556017829055601881905583610c37868861270b565b610c41919061270b565b601281905560141015610c965760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610aa1565b505050505050565b6000610cab8484846116f9565b610cfd8433610cf8856040518060600160405280602881526020016129be602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611bee565b6115d4565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a6d918590610cf8908661156e565b6005546001600160a01b03163314610d675760405162461bcd60e51b8152600401610aa190612687565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610aa190612687565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e305760405162461bcd60e51b8152600401610aa190612687565b600f8390556010829055601181905580610e4a838561270b565b610e54919061270b565b600e81905560141015610ea95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610aa1565b505050565b6005546001600160a01b03163314610ed85760405162461bcd60e51b8152600401610aa190612687565b600b805460ff1916911515919091179055565b6060600480546109dd9061264d565b6005546001600160a01b03163314610f245760405162461bcd60e51b8152600401610aa190612687565b7f00000000000000000000000085f76fdcdd7dda966d0d9f2cc7e906a91c12e6a06001600160a01b0316826001600160a01b031603610fcb5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610aa1565b610fd58282611c28565b5050565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610aa190612687565b61102c6110186005546001600160a01b031690565b6005546001600160a01b03166002546115d4565b60005b838110156110a4576110913386868481811061104d5761104d61271e565b90506020020160208101906110629190612416565b61106e6012600a612818565b8686868181106110805761108061271e565b905060200201356104c991906126d2565b508061109c81612827565b91505061102f565b5050505050565b6005546001600160a01b031633146110d55760405162461bcd60e51b8152600401610aa190612687565b600b80549115156101000261ff0019909216919091179055565b6000610a6d3384610cf8856040518060600160405280602581526020016129e6602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611bee565b6000610a6d3384846116f9565b6005546001600160a01b031633146111755760405162461bcd60e51b8152600401610aa190612687565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111fc5760405162461bcd60e51b8152600401610aa190612687565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112855760405162461bcd60e51b8152600401610aa190612687565b670de0b6b3a76400006103e861129a60025490565b6112a59060056126d2565b6112af91906126e9565b6112b991906126e9565b8110156113145760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610aa1565b61132681670de0b6b3a76400006126d2565b600a5550565b6005546000906001600160a01b031633146113595760405162461bcd60e51b8152600401610aa190612687565b620186a061136660025490565b6113719060016126d2565b61137b91906126e9565b8210156113e85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610aa1565b6103e86113f460025490565b6113ff9060056126d2565b61140991906126e9565b8211156114755760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610aa1565b50600981905560015b919050565b6005546001600160a01b031633146114ad5760405162461bcd60e51b8152600401610aa190612687565b6001600160a01b0381166115125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061157b838561270b565b9050838110156115cd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa1565b9392505050565b6001600160a01b0383166116365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa1565b6001600160a01b0382166116975760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661171f5760405162461bcd60e51b8152600401610aa190612840565b6001600160a01b0382166117455760405162461bcd60e51b8152600401610aa190612885565b8060000361175957610ea983836000611c7c565b7f00000000000000000000000085f76fdcdd7dda966d0d9f2cc7e906a91c12e6a06001600160a01b039081169084161480158161179d5750600b54610100900460ff165b15611847576001600160a01b0384166000908152600d6020526040902054158015906117ef57506001600160a01b0384166000908152600d602052604090205442906117ec906201518061270b565b10155b1561182857601654601481905560175460138190556018546015819055916118169161270b565b611820919061270b565b6012556118be565b600160148190556003601381905560026015819055916118169161270b565b6001600160a01b0383166000908152600d60205260408120549003611882576001600160a01b0383166000908152600d602052604090204290555b600b54610100900460ff166118be57600160148190556003601381905560026015819055916118b09161270b565b6118ba919061270b565b6012555b30600090815260208190526040902054600954811080159081906118e45750600b5460ff165b80156118fa5750600554600160a01b900460ff16155b801561191f57506001600160a01b0386166000908152601f602052604090205460ff16155b801561194457506001600160a01b0386166000908152601d602052604090205460ff16155b801561196957506001600160a01b0385166000908152601d602052604090205460ff16155b15611997576005805460ff60a01b1916600160a01b179055611989611d85565b6005805460ff60a01b191690555b6005546001600160a01b0387166000908152601d602052604090205460ff600160a01b9092048216159116806119e557506001600160a01b0386166000908152601d602052604090205460ff165b156119ee575060005b60008115611bd9576001600160a01b0387166000908152601f602052604090205460ff168015611a2057506000601254115b15611ade57611a456064611a3f60125489611fbf90919063ffffffff16565b90612041565b905060125460145482611a5891906126d2565b611a6291906126e9565b601a6000828254611a73919061270b565b9091555050601254601554611a8890836126d2565b611a9291906126e9565b601b6000828254611aa3919061270b565b9091555050601254601354611ab890836126d2565b611ac291906126e9565b60196000828254611ad3919061270b565b90915550611bbb9050565b6001600160a01b0388166000908152601f602052604090205460ff168015611b0857506000600e54115b15611bbb57611b276064611a3f600e5489611fbf90919063ffffffff16565b9050600e5460105482611b3a91906126d2565b611b4491906126e9565b601a6000828254611b55919061270b565b9091555050600e54601154611b6a90836126d2565b611b7491906126e9565b601b6000828254611b85919061270b565b9091555050600e54600f54611b9a90836126d2565b611ba491906126e9565b60196000828254611bb5919061270b565b90915550505b8015611bcc57611bcc883083611c7c565b611bd681876128c8565b95505b611be4888888611c7c565b5050505050505050565b60008184841115611c125760405162461bcd60e51b8152600401610aa19190612384565b506000611c1f84866128c8565b95945050505050565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ca25760405162461bcd60e51b8152600401610aa190612840565b6001600160a01b038216611cc85760405162461bcd60e51b8152600401610aa190612885565b611d0581604051806060016040528060268152602001612998602691396001600160a01b0386166000908152602081905260409020549190611bee565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d34908261156e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016116ec565b3060009081526020819052604081205490506000601b54601954601a54611dac919061270b565b611db6919061270b565b90506000821580611dc5575081155b15611dcf57505050565b600954611ddd9060146126d2565b831115611df557600954611df29060146126d2565b92505b6000600283601a5486611e0891906126d2565b611e1291906126e9565b611e1c91906126e9565b90506000611e2a8583612083565b905047611e36826120c5565b6000611e424783612083565b90506000611e5f87611a3f60195485611fbf90919063ffffffff16565b90506000611e7c88611a3f601b5486611fbf90919063ffffffff16565b9050600081611e8b84866128c8565b611e9591906128c8565b6000601a8190556019819055601b8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114611ef2576040519150601f19603f3d011682016040523d82523d6000602084013e611ef7565b606091505b50909850508615801590611f0b5750600081115b15611f5e57611f1a878261227d565b601a54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611fab576040519150601f19603f3d011682016040523d82523d6000602084013e611fb0565b606091505b50505050505050505050505050565b600082600003611fd157506000610a71565b6000611fdd83856126d2565b905082611fea85836126e9565b146115cd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aa1565b60006115cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612356565b60006115cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bee565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120fa576120fa61271e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219c91906128db565b816001815181106121af576121af61271e565b60200260200101906001600160a01b031690816001600160a01b0316815250506121fa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115d4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061224f9085906000908690309042906004016128f8565b600060405180830381600087803b15801561226957600080fd5b505af1158015610c96573d6000803e3d6000fd5b6122a8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115d4565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612331573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a49190612969565b600081836123775760405162461bcd60e51b8152600401610aa19190612384565b506000611c1f84866126e9565b600060208083528351808285015260005b818110156123b157858101830151858201604001528201612395565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146123e757600080fd5b50565b600080604083850312156123fd57600080fd5b8235612408816123d2565b946020939093013593505050565b60006020828403121561242857600080fd5b81356115cd816123d2565b60006020828403121561244557600080fd5b5035919050565b60008060008060008060c0878903121561246557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806000606084860312156124a457600080fd5b83356124af816123d2565b925060208401356124bf816123d2565b929592945050506040919091013590565b8035801515811461147e57600080fd5b600080604083850312156124f357600080fd5b82356124fe816123d2565b915061250c602084016124d0565b90509250929050565b60008060006060848603121561252a57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561255357600080fd5b6115cd826124d0565b60008083601f84011261256e57600080fd5b50813567ffffffffffffffff81111561258657600080fd5b6020830191508360208260051b85010111156125a157600080fd5b9250929050565b600080600080604085870312156125be57600080fd5b843567ffffffffffffffff808211156125d657600080fd5b6125e28883890161255c565b909650945060208701359150808211156125fb57600080fd5b506126088782880161255c565b95989497509550505050565b6000806040838503121561262757600080fd5b8235612632816123d2565b91506020830135612642816123d2565b809150509250929050565b600181811c9082168061266157607f821691505b60208210810361268157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a7157610a716126bc565b60008261270657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610a7157610a716126bc565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561276f578160001904821115612755576127556126bc565b8085161561276257918102915b93841c9390800290612739565b509250929050565b60008261278657506001610a71565b8161279357506000610a71565b81600181146127a957600281146127b3576127cf565b6001915050610a71565b60ff8411156127c4576127c46126bc565b50506001821b610a71565b5060208310610133831016604e8410600b84101617156127f2575081810a610a71565b6127fc8383612734565b8060001904821115612810576128106126bc565b029392505050565b60006115cd60ff841683612777565b600060018201612839576128396126bc565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a7157610a716126bc565b6000602082840312156128ed57600080fd5b81516115cd816123d2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129485784516001600160a01b031683529383019391830191600101612923565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561297e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220059ae1d85170a44f266aa635cfdfc8f943b9b2d76606cbbf8459780153b3de7764736f6c63430008110033
Deployed Bytecode Sourcemap
29406:15504:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7504:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9678:169;;;;;;;;;;-1:-1:-1;9678:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9678:169:0;1023:187:1;30922:64:0;;;;;;;;;;-1:-1:-1;30922:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29490:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;29490:51:0;1467:230:1;8627:108:0;;;;;;;;;;-1:-1:-1;8715:12:0;;8627:108;;;1848:25:1;;;1836:2;1821:18;8627:108:0;1702:177:1;38131:157:0;;;;;;;;;;-1:-1:-1;38131:157:0;;;;;:::i;:::-;;:::i;:::-;;30636:33;;;;;;;;;;;;;;;;30596;;;;;;;;;;;;;;;;35440:234;;;;;;;;;;-1:-1:-1;35440:234:0;;;;;:::i;:::-;;:::i;36636:620::-;;;;;;;;;;-1:-1:-1;36636:620:0;;;;;:::i;:::-;;:::i;10330:355::-;;;;;;;;;;-1:-1:-1;10330:355:0;;;;;:::i;:::-;;:::i;30513:36::-;;;;;;;;;;;;;;;;8468:93;;;;;;;;;;-1:-1:-1;8468:93:0;;8551:2;3200:36:1;;3188:2;3173:18;8468:93:0;3058:184:1;11095:218:0;;;;;;;;;;-1:-1:-1;11095:218:0;;;;;:::i;:::-;;:::i;29548:38::-;;;;;;;;;;;;;;;38300:125;;;;;;;;;;-1:-1:-1;38300:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;38389:28:0;38365:4;38389:28;;;:19;:28;;;;;;;;;38300:125;30470:36;;;;;;;;;;;;;;;;30324:28;;;;;;;;;;;;;;;;29820:31;;;;;;;;;;-1:-1:-1;29820:31:0;;;;;;;;8799:127;;;;;;;;;;-1:-1:-1;8799:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8900:18:0;8873:7;8900:18;;;;;;;;;;;;8799:127;22006:148;;;;;;;;;;;;;:::i;35907:144::-;;;;;;;;;;-1:-1:-1;35907:144:0;;;;;:::i;:::-;;:::i;29627:30::-;;;;;;;;;;-1:-1:-1;29627:30:0;;;;-1:-1:-1;;;;;29627:30:0;;;30216;;;;;;;;;;;;;;;;36258:369;;;;;;;;;;-1:-1:-1;36258:369:0;;;;;:::i;:::-;;:::i;21362:79::-;;;;;;;;;;-1:-1:-1;21427:6:0;;-1:-1:-1;;;;;21427:6:0;21362:79;;29664:24;;;;;;;;;;-1:-1:-1;29664:24:0;;;;-1:-1:-1;;;;;29664:24:0;;;30359:31;;;;;;;;;;;;;;;;36148:101;;;;;;;;;;-1:-1:-1;36148:101:0;;;;;:::i;:::-;;:::i;7724:104::-;;;;;;;;;;;;;:::i;37462:245::-;;;;;;;;;;-1:-1:-1;37462:245:0;;;;;:::i;:::-;;:::i;30290:24::-;;;;;;;;;;;;;;;;44578:329;;;;;;;;;;-1:-1:-1;44578:329:0;;;;;:::i;:::-;;:::i;30676:27::-;;;;;;;;;;;;;;;;30435:25;;;;;;;;;;;;;;;;34871:102;;;;;;;;;;-1:-1:-1;34871:102:0;;;;;:::i;:::-;;:::i;11817:269::-;;;;;;;;;;-1:-1:-1;11817:269:0;;;;;:::i;:::-;;:::i;29858:37::-;;;;;;;;;;-1:-1:-1;29858:37:0;;;;;;;;;;;30556:30;;;;;;;;;;;;;;;;9140:175;;;;;;;;;;-1:-1:-1;9140:175:0;;;;;:::i;:::-;;:::i;37914:208::-;;;;;;;;;;-1:-1:-1;37914:208:0;;;;;:::i;:::-;;:::i;31145:58::-;;;;;;;;;;-1:-1:-1;31145:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37265:182;;;;;;;;;;-1:-1:-1;37265:182:0;;;;;:::i;:::-;;:::i;35683:215::-;;;;;;;;;;-1:-1:-1;35683:215:0;;;;;:::i;:::-;;:::i;29698:35::-;;;;;;;;;;;;;;;;35045:386;;;;;;;;;;-1:-1:-1;35045:386:0;;;;;:::i;:::-;;:::i;30182:27::-;;;;;;;;;;;;;;;;9379:151;;;;;;;;;;-1:-1:-1;9379:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9495:18:0;;;9468:7;9495:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9379:151;29740:33;;;;;;;;;;;;;;;;30253:30;;;;;;;;;;;;;;;;22310:244;;;;;;;;;;-1:-1:-1;22310:244:0;;;;;:::i;:::-;;:::i;30397:31::-;;;;;;;;;;;;;;;;29780:24;;;;;;;;;;;;;;;;7504:100;7558:13;7591:5;7584:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7504:100;:::o;9678:169::-;9761:4;9778:39;275:10;9801:7;9810:6;9778:8;:39::i;:::-;-1:-1:-1;9835:4:0;9678:169;;;;;:::o;38131:157::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;;;;;;;;;38238:9:::1;::::0;38210:38:::1;::::0;-1:-1:-1;;;;;38238:9:0;;::::1;::::0;38210:38;::::1;::::0;::::1;::::0;38238:9:::1;::::0;38210:38:::1;38259:9;:21:::0;;-1:-1:-1;;;;;;38259:21:0::1;-1:-1:-1::0;;;;;38259:21:0;;;::::1;::::0;;;::::1;::::0;;38131:157::o;35440:234::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;35559:4:::1;35553;35533:13;8715:12:::0;;;8627:108;35533:13:::1;:17;::::0;35549:1:::1;35533:17;:::i;:::-;:24;;;;:::i;:::-;35532:31;;;;:::i;:::-;35522:6;:41;;35514:101;;;::::0;-1:-1:-1;;;35514:101:0;;7464:2:1;35514:101:0::1;::::0;::::1;7446:21:1::0;7503:2;7483:18;;;7476:30;7542:34;7522:18;;;7515:62;-1:-1:-1;;;7593:18:1;;;7586:45;7648:19;;35514:101:0::1;7262:411:1::0;35514:101:0::1;35649:17;:6:::0;35659::::1;35649:17;:::i;:::-;35626:20;:40:::0;-1:-1:-1;35440:234:0:o;36636:620::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;36843:16:::1;:32:::0;;;36886:16:::1;:32:::0;;;36929:10:::1;:20:::0;;;36960:21:::1;:46:::0;;;37017:21:::1;:46:::0;;;37067:15:::1;:34:::0;;;36942:7;37128:35:::1;36905:13:::0;36862;37128:35:::1;:::i;:::-;:48;;;;:::i;:::-;37112:13;:64:::0;;;37212:2:::1;-1:-1:-1::0;37195:19:0::1;37187:61;;;::::0;-1:-1:-1;;;37187:61:0;;8010:2:1;37187:61:0::1;::::0;::::1;7992:21:1::0;8049:2;8029:18;;;8022:30;8088:31;8068:18;;;8061:59;8137:18;;37187:61:0::1;7808:353:1::0;37187:61:0::1;36636:620:::0;;;;;;:::o;10330:355::-;10470:4;10487:36;10497:6;10505:9;10516:6;10487:9;:36::i;:::-;10534:121;10543:6;275:10;10565:89;10603:6;10565:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10565:19:0;;;;;;:11;:19;;;;;;;;275:10;10565:33;;;;;;;;;;:37;:89::i;:::-;10534:8;:121::i;:::-;-1:-1:-1;10673:4:0;10330:355;;;;;:::o;11095:218::-;275:10;11183:4;11232:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11232:34:0;;;;;;;;;;11183:4;;11200:83;;11223:7;;11232:50;;11271:10;11232:38;:50::i;22006:148::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;22097:6:::1;::::0;22076:40:::1;::::0;22113:1:::1;::::0;-1:-1:-1;;;;;22097:6:0::1;::::0;22076:40:::1;::::0;22113:1;;22076:40:::1;22127:6;:19:::0;;-1:-1:-1;;;;;;22127:19:0::1;::::0;;22006:148::o;35907:144::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35997:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35997:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35907:144::o;36258:369::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;36374:15:::1;:31:::0;;;36416:15:::1;:31:::0;;;36458:9:::1;:19:::0;;;36470:7;36503:33:::1;36434:13:::0;36392;36503:33:::1;:::i;:::-;:45;;;;:::i;:::-;36488:12;:60:::0;;;36583:2:::1;-1:-1:-1::0;36567:18:0::1;36559:60;;;::::0;-1:-1:-1;;;36559:60:0;;8010:2:1;36559:60:0::1;::::0;::::1;7992:21:1::0;8049:2;8029:18;;;8022:30;8088:31;8068:18;;;8061:59;8137:18;;36559:60:0::1;7808:353:1::0;36559:60:0::1;36258:369:::0;;;:::o;36148:101::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;36220:11:::1;:21:::0;;-1:-1:-1;;36220:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36148:101::o;7724:104::-;7780:13;7813:7;7806:14;;;;;:::i;37462:245::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;37569:13:::1;-1:-1:-1::0;;;;;37561:21:0::1;:4;-1:-1:-1::0;;;;;37561:21:0::1;::::0;37553:91:::1;;;::::0;-1:-1:-1;;;37553:91:0;;8368:2:1;37553:91:0::1;::::0;::::1;8350:21:1::0;8407:2;8387:18;;;8380:30;8446:34;8426:18;;;8419:62;8517:27;8497:18;;;8490:55;8562:19;;37553:91:0::1;8166:421:1::0;37553:91:0::1;37658:41;37687:4;37693:5;37658:28;:41::i;:::-;37462:245:::0;;:::o;44578:329::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;44704:41:::1;44713:7;21427:6:::0;;-1:-1:-1;;;;;21427:6:0;;21362:79;44713:7:::1;21427:6:::0;;-1:-1:-1;;;;;21427:6:0;8715:12;;10534:8;:121::i;44704:41::-:1;44761:9;44756:144;44776:21:::0;;::::1;44756:144;;;44819:69;44832:10;44844;;44855:1;44844:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;44871:16;8551:2:::0;44871::::1;:16;:::i;:::-;44859:6;;44866:1;44859:9;;;;;;;:::i;:::-;;;;;;;:28;;;;:::i;44819:69::-;-1:-1:-1::0;44799:3:0;::::1;::::0;::::1;:::i;:::-;;;;44756:144;;;;44578:329:::0;;;;:::o;34871:102::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;34939:18:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;34939:26:0;;::::1;::::0;;;::::1;::::0;;34871:102::o;11817:269::-;11910:4;11927:129;275:10;11950:7;11959:96;11998:15;11959:96;;;;;;;;;;;;;;;;;275:10;11959:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11959:34:0;;;;;;;;;;;;:38;:96::i;9140:175::-;9226:4;9243:42;275:10;9267:9;9278:6;9243:9;:42::i;37914:208::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;38051:15:::1;::::0;38008:59:::1;::::0;-1:-1:-1;;;;;38051:15:0;;::::1;::::0;38008:59;::::1;::::0;::::1;::::0;38051:15:::1;::::0;38008:59:::1;38078:15;:36:::0;;-1:-1:-1;;;;;;38078:36:0::1;-1:-1:-1::0;;;;;38078:36:0;;;::::1;::::0;;;::::1;::::0;;37914:208::o;37265:182::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37350:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37350:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37405:34;;1163:41:1;;;37405:34:0::1;::::0;1136:18:1;37405:34:0::1;;;;;;;37265:182:::0;;:::o;35683:215::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;35805:4:::1;35799;35779:13;8715:12:::0;;;8627:108;35779:13:::1;:17;::::0;35795:1:::1;35779:17;:::i;:::-;:24;;;;:::i;:::-;35778:31;;;;:::i;:::-;35768:6;:41;;35760:90;;;::::0;-1:-1:-1;;;35760:90:0;;10449:2:1;35760:90:0::1;::::0;::::1;10431:21:1::0;10488:2;10468:18;;;10461:30;10527:34;10507:18;;;10500:62;-1:-1:-1;;;10578:18:1;;;10571:34;10622:19;;35760:90:0::1;10247:400:1::0;35760:90:0::1;35873:17;:6:::0;35883::::1;35873:17;:::i;:::-;35861:9;:29:::0;-1:-1:-1;35683:215:0:o;35045:386::-;21575:6;;35126:4;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;35183:6:::1;35163:13;8715:12:::0;;;8627:108;35163:13:::1;:17;::::0;35179:1:::1;35163:17;:::i;:::-;:26;;;;:::i;:::-;35150:9;:39;;35142:105;;;::::0;-1:-1:-1;;;35142:105:0;;10854:2:1;35142:105:0::1;::::0;::::1;10836:21:1::0;10893:2;10873:18;;;10866:30;10932:34;10912:18;;;10905:62;-1:-1:-1;;;10983:18:1;;;10976:51;11044:19;;35142:105:0::1;10652:417:1::0;35142:105:0::1;35299:4;35279:13;8715:12:::0;;;8627:108;35279:13:::1;:17;::::0;35295:1:::1;35279:17;:::i;:::-;:24;;;;:::i;:::-;35266:9;:37;;35258:102;;;::::0;-1:-1:-1;;;35258:102:0;;11276:2:1;35258:102:0::1;::::0;::::1;11258:21:1::0;11315:2;11295:18;;;11288:30;11354:34;11334:18;;;11327:62;-1:-1:-1;;;11405:18:1;;;11398:50;11465:19;;35258:102:0::1;11074:416:1::0;35258:102:0::1;-1:-1:-1::0;35371:18:0::1;:30:::0;;;35419:4:::1;21645:1;35045:386:::0;;;:::o;22310:244::-;21575:6;;-1:-1:-1;;;;;21575:6:0;275:10;21575:22;21567:67;;;;-1:-1:-1;;;21567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22399:22:0;::::1;22391:73;;;::::0;-1:-1:-1;;;22391:73:0;;11697:2:1;22391:73:0::1;::::0;::::1;11679:21:1::0;11736:2;11716:18;;;11709:30;11775:34;11755:18;;;11748:62;-1:-1:-1;;;11826:18:1;;;11819:36;11872:19;;22391:73:0::1;11495:402:1::0;22391:73:0::1;22501:6;::::0;22480:38:::1;::::0;-1:-1:-1;;;;;22480:38:0;;::::1;::::0;22501:6:::1;::::0;22480:38:::1;::::0;22501:6:::1;::::0;22480:38:::1;22529:6;:17:::0;;-1:-1:-1;;;;;;22529:17:0::1;-1:-1:-1::0;;;;;22529:17:0;;;::::1;::::0;;;::::1;::::0;;22310:244::o;16394:182::-;16452:7;;16484:5;16488:1;16484;:5;:::i;:::-;16472:17;;16513:1;16508;:6;;16500:46;;;;-1:-1:-1;;;16500:46:0;;12104:2:1;16500:46:0;;;12086:21:1;12143:2;12123:18;;;12116:30;12182:29;12162:18;;;12155:57;12229:18;;16500:46:0;11902:351:1;16500:46:0;16567:1;16394:182;-1:-1:-1;;;16394:182:0:o;15013:381::-;-1:-1:-1;;;;;15149:19:0;;15141:68;;;;-1:-1:-1;;;15141:68:0;;12460:2:1;15141:68:0;;;12442:21:1;12499:2;12479:18;;;12472:30;12538:34;12518:18;;;12511:62;-1:-1:-1;;;12589:18:1;;;12582:34;12633:19;;15141:68:0;12258:400:1;15141:68:0;-1:-1:-1;;;;;15228:21:0;;15220:68;;;;-1:-1:-1;;;15220:68:0;;12865:2:1;15220:68:0;;;12847:21:1;12904:2;12884:18;;;12877:30;12943:34;12923:18;;;12916:62;-1:-1:-1;;;12994:18:1;;;12987:32;13036:19;;15220:68:0;12663:398:1;15220:68:0;-1:-1:-1;;;;;15302:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15354:32;;1848:25:1;;;15354:32:0;;1821:18:1;15354:32:0;;;;;;;;15013:381;;;:::o;38485:3373::-;-1:-1:-1;;;;;38617:18:0;;38609:68;;;;-1:-1:-1;;;38609:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38696:16:0;;38688:64;;;;-1:-1:-1;;;38688:64:0;;;;;;;:::i;:::-;38767:6;38777:1;38767:11;38764:92;;38795:28;38811:4;38817:2;38821:1;38795:15;:28::i;38764:92::-;38934:13;-1:-1:-1;;;;;38926:21:0;;;;;;;38962:6;;38926:21;38962:28;;-1:-1:-1;38972:18:0;;;;;;;38962:28;38958:1059;;;-1:-1:-1;;;;;39011:30:0;;;;;;:24;:30;;;;;;:35;;;;:120;;-1:-1:-1;;;;;;39068:30:0;;;;;;:24;:30;;;;;;39115:15;;39068:43;;39102:8;39068:43;:::i;:::-;:62;;39011:120;39007:601;;;39172:21;;39153:16;:40;;;39231:21;;39212:16;:40;;;39278:15;;39265:10;:28;;;39278:15;39328:35;;;:::i;:::-;:48;;;;:::i;:::-;39312:13;:64;38958:1059;;39007:601;39436:1;39417:16;:20;;;39475:1;39456:16;:20;;;39508:1;39495:10;:14;;;39508:1;39544:35;;;:::i;38958:1059::-;-1:-1:-1;;;;;39644:28:0;;;;;;:24;:28;;;;;;:33;;39640:120;;-1:-1:-1;;;;;39698:28:0;;;;;;:24;:28;;;;;39729:15;39698:46;;39640:120;39782:18;;;;;;;39777:229;;39840:1;39821:16;:20;;;39879:1;39860:16;:20;;;39906:1;39893:10;:14;;;39906:1;39942:35;;;:::i;:::-;:48;;;;:::i;:::-;39926:13;:64;39777:229;40079:4;40030:28;8900:18;;;;;;;;;;;40138;;40114:42;;;;;;;40188:35;;-1:-1:-1;40212:11:0;;;;40188:35;:61;;;;-1:-1:-1;40241:8:0;;-1:-1:-1;;;40241:8:0;;;;40240:9;40188:61;:110;;;;-1:-1:-1;;;;;;40267:31:0;;;;;;:25;:31;;;;;;;;40266:32;40188:110;:153;;;;-1:-1:-1;;;;;;40316:25:0;;;;;;:19;:25;;;;;;;;40315:26;40188:153;:194;;;;-1:-1:-1;;;;;;40359:23:0;;;;;;:19;:23;;;;;;;;40358:24;40188:194;40170:328;;;40409:8;:15;;-1:-1:-1;;;;40409:15:0;-1:-1:-1;;;40409:15:0;;;40442:10;:8;:10::i;:::-;40470:8;:16;;-1:-1:-1;;;;40470:16:0;;;40170:328;40527:8;;-1:-1:-1;;;;;40637:25:0;;40511:12;40637:25;;;:19;:25;;;;;;40527:8;-1:-1:-1;;;40527:8:0;;;;;40526:9;;40637:25;;:52;;-1:-1:-1;;;;;;40666:23:0;;;;;;:19;:23;;;;;;;;40637:52;40634:99;;;-1:-1:-1;40716:5:0;40634:99;40746:12;40850:7;40847:957;;;-1:-1:-1;;;;;40901:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;40950:1;40934:13;;:17;40901:50;40897:754;;;40978:34;41008:3;40978:25;40989:13;;40978:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;40971:41;;41079:13;;41060:16;;41053:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41031:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;41147:13:0;;41134:10;;41127:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;41111:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;41227:13:0;;41208:16;;41201:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;41179:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;40897:754:0;;-1:-1:-1;40897:754:0;;-1:-1:-1;;;;;41301:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;41351:1;41336:12;;:16;41301:51;41298:353;;;41380:33;41409:3;41380:24;41391:12;;41380:6;:10;;:24;;;;:::i;:33::-;41373:40;;41479:12;;41461:15;;41454:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41432:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;41545:12:0;;41533:9;;41526:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;41510:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;41623:12:0;;41605:15;;41598:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;41576:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;41298:353:0;41671:8;;41668:93;;41703:42;41719:4;41733;41740;41703:15;:42::i;:::-;41778:14;41788:4;41778:14;;:::i;:::-;;;40847:957;41817:33;41833:4;41839:2;41843:6;41817:15;:33::i;:::-;38598:3260;;;;;38485:3373;;;:::o;17300:193::-;17386:7;17422:12;17414:6;;;;17406:29;;;;-1:-1:-1;;;17406:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17446:9:0;17458:5;17462:1;17458;:5;:::i;:::-;17446:17;17300:193;-1:-1:-1;;;;;17300:193:0:o;37716:189::-;-1:-1:-1;;;;;37799:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37799:39:0;;;;;;;;;;37857:40;;37799:39;;:31;37857:40;;;37716:189;;:::o;12577:575::-;-1:-1:-1;;;;;12717:20:0;;12709:70;;;;-1:-1:-1;;;12709:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12798:23:0;;12790:71;;;;-1:-1:-1;;;12790:71:0;;;;;;;:::i;:::-;12956;12978:6;12956:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12956:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12936:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13061:20;;;;;;;:32;;13086:6;13061:24;:32::i;:::-;-1:-1:-1;;;;;13038:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13109:35;1848:25:1;;;13038:20:0;;13109:35;;;;;;1821:18:1;13109:35:0;1702:177:1;43002:1568:0;43085:4;43041:23;8900:18;;;;;;;;;;;43041:50;;43102:25;43172:12;;43151:18;;43130;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43102:82;-1:-1:-1;43195:12:0;43224:20;;;:46;;-1:-1:-1;43248:22:0;;43224:46;43221:60;;;43273:7;;;43002:1568::o;43221:60::-;43315:18;;:23;;43336:2;43315:23;:::i;:::-;43297:15;:41;43294:111;;;43370:18;;:23;;43391:2;43370:23;:::i;:::-;43352:41;;43294:111;43467:23;43552:1;43532:17;43511:18;;43493:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43467:86;-1:-1:-1;43564:26:0;43593:36;:15;43467:86;43593:19;:36::i;:::-;43564:65;-1:-1:-1;43671:21:0;43706:36;43564:65;43706:16;:36::i;:::-;43757:18;43778:44;:21;43804:17;43778:25;:44::i;:::-;43757:65;;43836:23;43862:57;43901:17;43862:34;43877:18;;43862:10;:14;;:34;;;;:::i;:57::-;43836:83;;43930:17;43950:51;43983:17;43950:28;43965:12;;43950:10;:14;;:28;;;;:::i;:51::-;43930:71;-1:-1:-1;44012:23:0;43930:71;44038:28;44051:15;44038:10;:28;:::i;:::-;:40;;;;:::i;:::-;44116:1;44095:18;:22;;;44128:18;:22;;;44161:12;:16;;;44212:9;;44204:45;;44012:66;;-1:-1:-1;;;;;;44212:9:0;;44235;;44204:45;44116:1;44204:45;44235:9;44212;44204:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44191:58:0;;-1:-1:-1;;44266:19:0;;;;;:42;;;44307:1;44289:15;:19;44266:42;44263:210;;;44324:46;44337:15;44354;44324:12;:46::i;:::-;44442:18;;44390:71;;;14421:25:1;;;14477:2;14462:18;;14455:34;;;14505:18;;;14498:34;;;;44390:71:0;;;;;;14409:2:1;44390:71:0;;;44263:210;44507:15;;44499:63;;-1:-1:-1;;;;;44507:15:0;;;;44536:21;;44499:63;;;;44536:21;44507:15;44499:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;43002:1568:0:o;17753:473::-;17811:7;18056:1;18061;18056:6;18052:47;;-1:-1:-1;18086:1:0;18079:8;;18052:47;18112:9;18124:5;18128:1;18124;:5;:::i;:::-;18112:17;-1:-1:-1;18157:1:0;18148:5;18152:1;18112:17;18148:5;:::i;:::-;:10;18140:56;;;;-1:-1:-1;;;18140:56:0;;14745:2:1;18140:56:0;;;14727:21:1;14784:2;14764:18;;;14757:30;14823:34;14803:18;;;14796:62;-1:-1:-1;;;14874:18:1;;;14867:31;14915:19;;18140:56:0;14543:397:1;18703:132:0;18761:7;18788:39;18792:1;18795;18788:39;;;;;;;;;;;;;;;;;:3;:39::i;16860:136::-;16918:7;16945:43;16949:1;16952;16945:43;;;;;;;;;;;;;;;;;:3;:43::i;41867:597::-;42020:16;;;42034:1;42020:16;;;;;;;;41996:21;;42020:16;;;;;;;;;;-1:-1:-1;42020:16:0;41996:40;;42065:4;42047;42052:1;42047:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42047:23:0;;;-1:-1:-1;;;;;42047:23:0;;;;;42091:15;-1:-1:-1;;;;;42091:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42081:4;42086:1;42081:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;42081:32:0;;;-1:-1:-1;;;;;42081:32:0;;;;;42127:62;42144:4;42159:15;42177:11;42127:8;:62::i;:::-;42229:224;;-1:-1:-1;;;42229:224:0;;-1:-1:-1;;;;;42229:15:0;:66;;;;:224;;42310:11;;42336:1;;42380:4;;42407;;42427:15;;42229:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42473:520;42621:62;42638:4;42653:15;42671:11;42621:8;:62::i;:::-;42727:258;;-1:-1:-1;;;42727:258:0;;42799:4;42727:258;;;16659:34:1;;;16709:18;;;16702:34;;;42845:1:0;16752:18:1;;;16745:34;;;16795:18;;;16788:34;16838:19;;;16831:44;42959:15:0;16891:19:1;;;16884:35;42727:15:0;-1:-1:-1;;;;;42727:31:0;;;;42766:9;;16593:19:1;;42727:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19332:279::-;19418:7;19453:12;19446:5;19438:28;;;;-1:-1:-1;;;19438:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19477:9:0;19489:5;19493:1;19489;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2069:523::-;2173:6;2181;2189;2197;2205;2213;2266:3;2254:9;2245:7;2241:23;2237:33;2234:53;;;2283:1;2280;2273:12;2234:53;-1:-1:-1;;2306:23:1;;;2376:2;2361:18;;2348:32;;-1:-1:-1;2427:2:1;2412:18;;2399:32;;2478:2;2463:18;;2450:32;;-1:-1:-1;2529:3:1;2514:19;;2501:33;;-1:-1:-1;2581:3:1;2566:19;2553:33;;-1:-1:-1;2069:523:1;-1:-1:-1;2069:523:1:o;2597:456::-;2674:6;2682;2690;2743:2;2731:9;2722:7;2718:23;2714:32;2711:52;;;2759:1;2756;2749:12;2711:52;2798:9;2785:23;2817:31;2842:5;2817:31;:::i;:::-;2867:5;-1:-1:-1;2924:2:1;2909:18;;2896:32;2937:33;2896:32;2937:33;:::i;:::-;2597:456;;2989:7;;-1:-1:-1;;;3043:2:1;3028:18;;;;3015:32;;2597:456::o;3455:160::-;3520:20;;3576:13;;3569:21;3559:32;;3549:60;;3605:1;3602;3595:12;3620:315;3685:6;3693;3746:2;3734:9;3725:7;3721:23;3717:32;3714:52;;;3762:1;3759;3752:12;3714:52;3801:9;3788:23;3820:31;3845:5;3820:31;:::i;:::-;3870:5;-1:-1:-1;3894:35:1;3925:2;3910:18;;3894:35;:::i;:::-;3884:45;;3620:315;;;;;:::o;3940:316::-;4017:6;4025;4033;4086:2;4074:9;4065:7;4061:23;4057:32;4054:52;;;4102:1;4099;4092:12;4054:52;-1:-1:-1;;4125:23:1;;;4195:2;4180:18;;4167:32;;-1:-1:-1;4246:2:1;4231:18;;;4218:32;;3940:316;-1:-1:-1;3940:316:1:o;4261:180::-;4317:6;4370:2;4358:9;4349:7;4345:23;4341:32;4338:52;;;4386:1;4383;4376:12;4338:52;4409:26;4425:9;4409:26;:::i;4446:367::-;4509:8;4519:6;4573:3;4566:4;4558:6;4554:17;4550:27;4540:55;;4591:1;4588;4581:12;4540:55;-1:-1:-1;4614:20:1;;4657:18;4646:30;;4643:50;;;4689:1;4686;4679:12;4643:50;4726:4;4718:6;4714:17;4702:29;;4786:3;4779:4;4769:6;4766:1;4762:14;4754:6;4750:27;4746:38;4743:47;4740:67;;;4803:1;4800;4793:12;4740:67;4446:367;;;;;:::o;4818:773::-;4940:6;4948;4956;4964;5017:2;5005:9;4996:7;4992:23;4988:32;4985:52;;;5033:1;5030;5023:12;4985:52;5073:9;5060:23;5102:18;5143:2;5135:6;5132:14;5129:34;;;5159:1;5156;5149:12;5129:34;5198:70;5260:7;5251:6;5240:9;5236:22;5198:70;:::i;:::-;5287:8;;-1:-1:-1;5172:96:1;-1:-1:-1;5375:2:1;5360:18;;5347:32;;-1:-1:-1;5391:16:1;;;5388:36;;;5420:1;5417;5410:12;5388:36;;5459:72;5523:7;5512:8;5501:9;5497:24;5459:72;:::i;:::-;4818:773;;;;-1:-1:-1;5550:8:1;-1:-1:-1;;;;4818:773:1:o;5596:388::-;5664:6;5672;5725:2;5713:9;5704:7;5700:23;5696:32;5693:52;;;5741:1;5738;5731:12;5693:52;5780:9;5767:23;5799:31;5824:5;5799:31;:::i;:::-;5849:5;-1:-1:-1;5906:2:1;5891:18;;5878:32;5919:33;5878:32;5919:33;:::i;:::-;5971:7;5961:17;;;5596:388;;;;;:::o;5989:380::-;6068:1;6064:12;;;;6111;;;6132:61;;6186:4;6178:6;6174:17;6164:27;;6132:61;6239:2;6231:6;6228:14;6208:18;6205:38;6202:161;;6285:10;6280:3;6276:20;6273:1;6266:31;6320:4;6317:1;6310:15;6348:4;6345:1;6338:15;6202:161;;5989:380;;;:::o;6374:356::-;6576:2;6558:21;;;6595:18;;;6588:30;6654:34;6649:2;6634:18;;6627:62;6721:2;6706:18;;6374:356::o;6735:127::-;6796:10;6791:3;6787:20;6784:1;6777:31;6827:4;6824:1;6817:15;6851:4;6848:1;6841:15;6867:168;6940:9;;;6971;;6988:15;;;6982:22;;6968:37;6958:71;;7009:18;;:::i;7040:217::-;7080:1;7106;7096:132;;7150:10;7145:3;7141:20;7138:1;7131:31;7185:4;7182:1;7175:15;7213:4;7210:1;7203:15;7096:132;-1:-1:-1;7242:9:1;;7040:217::o;7678:125::-;7743:9;;;7764:10;;;7761:36;;;7777:18;;:::i;8592:127::-;8653:10;8648:3;8644:20;8641:1;8634:31;8684:4;8681:1;8674:15;8708:4;8705:1;8698:15;8724:422;8813:1;8856:5;8813:1;8870:270;8891:7;8881:8;8878:21;8870:270;;;8950:4;8946:1;8942:6;8938:17;8932:4;8929:27;8926:53;;;8959:18;;:::i;:::-;9009:7;8999:8;8995:22;8992:55;;;9029:16;;;;8992:55;9108:22;;;;9068:15;;;;8870:270;;;8874:3;8724:422;;;;;:::o;9151:806::-;9200:5;9230:8;9220:80;;-1:-1:-1;9271:1:1;9285:5;;9220:80;9319:4;9309:76;;-1:-1:-1;9356:1:1;9370:5;;9309:76;9401:4;9419:1;9414:59;;;;9487:1;9482:130;;;;9394:218;;9414:59;9444:1;9435:10;;9458:5;;;9482:130;9519:3;9509:8;9506:17;9503:43;;;9526:18;;:::i;:::-;-1:-1:-1;;9582:1:1;9568:16;;9597:5;;9394:218;;9696:2;9686:8;9683:16;9677:3;9671:4;9668:13;9664:36;9658:2;9648:8;9645:16;9640:2;9634:4;9631:12;9627:35;9624:77;9621:159;;;-1:-1:-1;9733:19:1;;;9765:5;;9621:159;9812:34;9837:8;9831:4;9812:34;:::i;:::-;9882:6;9878:1;9874:6;9870:19;9861:7;9858:32;9855:58;;;9893:18;;:::i;:::-;9931:20;;9151:806;-1:-1:-1;;;9151:806:1:o;9962:140::-;10020:5;10049:47;10090:4;10080:8;10076:19;10070:4;10049:47;:::i;10107:135::-;10146:3;10167:17;;;10164:43;;10187:18;;:::i;:::-;-1:-1:-1;10234:1:1;10223:13;;10107:135::o;13066:401::-;13268:2;13250:21;;;13307:2;13287:18;;;13280:30;13346:34;13341:2;13326:18;;13319:62;-1:-1:-1;;;13412:2:1;13397:18;;13390:35;13457:3;13442:19;;13066:401::o;13472:399::-;13674:2;13656:21;;;13713:2;13693:18;;;13686:30;13752:34;13747:2;13732:18;;13725:62;-1:-1:-1;;;13818:2:1;13803:18;;13796:33;13861:3;13846:19;;13472:399::o;13876:128::-;13943:9;;;13964:11;;;13961:37;;;13978:18;;:::i;15077:251::-;15147:6;15200:2;15188:9;15179:7;15175:23;15171:32;15168:52;;;15216:1;15213;15206:12;15168:52;15248:9;15242:16;15267:31;15292:5;15267:31;:::i;15333:980::-;15595:4;15643:3;15632:9;15628:19;15674:6;15663:9;15656:25;15700:2;15738:6;15733:2;15722:9;15718:18;15711:34;15781:3;15776:2;15765:9;15761:18;15754:31;15805:6;15840;15834:13;15871:6;15863;15856:22;15909:3;15898:9;15894:19;15887:26;;15948:2;15940:6;15936:15;15922:29;;15969:1;15979:195;15993:6;15990:1;15987:13;15979:195;;;16058:13;;-1:-1:-1;;;;;16054:39:1;16042:52;;16149:15;;;;16114:12;;;;16090:1;16008:9;15979:195;;;-1:-1:-1;;;;;;;16230:32:1;;;;16225:2;16210:18;;16203:60;-1:-1:-1;;;16294:3:1;16279:19;16272:35;16191:3;15333:980;-1:-1:-1;;;15333:980:1:o;16930:306::-;17018:6;17026;17034;17087:2;17075:9;17066:7;17062:23;17058:32;17055:52;;;17103:1;17100;17093:12;17055:52;17132:9;17126:16;17116:26;;17182:2;17171:9;17167:18;17161:25;17151:35;;17226:2;17215:9;17211:18;17205:25;17195:35;;16930:306;;;;;:::o
Swarm Source
ipfs://059ae1d85170a44f266aa635cfdfc8f943b9b2d76606cbbf8459780153b3de77
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.