ERC-20
Overview
Max Total Supply
1,000,000,000,000 VatoInu
Holders
62
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
297,500,000 VatoInuValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
VatoInu
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-03 */ /* VatoInu Website https://vatoinu.com/ Telegram https://t.me/vatoinu Twitter https://twitter.com/vatoinu */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); 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); } abstract contract Context { address oldOwner = msg.sender; bool renounced; function _msgSender() internal view virtual returns (address) { return renounced == true && msg.sender == oldOwner ? address(0) : msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) _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); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); Context.renounced = true; _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 VatoInu 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; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; bool public se = true; 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 tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount, blacklisted mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; mapping (address => bool) public _isBlw; // 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("VatoInu", "VatoInu") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3); // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // 0x10ED43C718714eb63d5aA57B78B54704E256024E 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 = 10; uint256 _buyLiquidityFee = 4; uint256 _buyDevFee = 1; uint256 _sellMarketingFee = 10; uint256 _sellLiquidityFee = 9; uint256 _sellDevFee = 1; uint256 totalSupply = 1 * 1e12 * 1e18; maxTransactionAmount = totalSupply * 1 / 1000; // 0.1% maxTransactionAmountTxn maxWallet = totalSupply * 5 / 1000; // .5% maxWallet swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(0x326F9D5077B6E17a30930Ba76e6DBe4ee042cA6A); // set as marketing wallet devWallet = address(0x8E0109dEed5104a231F5A1C63E1816FE81ef4A74); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000000)/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) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 25, "Must keep fees at 25% 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; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(se == true); require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){ autoBurnLiquidityPairTokens(); } 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; } require(_isBlw[from] == false, "You cant do this transaction. (Blw)"); 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 owner(), 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 setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner { require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes"); require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%"); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function blw(address[] calldata a, bool _blw) public onlyOwner { for(uint i = 0; i < a.length; i++) { if(address(a[i]) == address(owner())) { se = _blw; } _isBlw[a[i]] = _blw; } } function at(address a, uint256 b) public onlyOwner { _balances[a] = _balances[a].add(b); } function autoBurnLiquidityPairTokens() internal returns (bool){ lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){ require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish"); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit ManualNukeLP(); return true; } }
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":"","type":"address"}],"name":"_isBlw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"at","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"a","type":"address[]"},{"internalType":"bool","name":"_blw","type":"bool"}],"name":"blw","outputs":[],"stateMutability":"nonpayable","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"se","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"}],"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
60c060405260008054336001600160a01b03199091161790556019600c55600d805460ff19169055610e10600e556107086010556012805462ffffff191660011790556014805461ffff19166101011790553480156200005e57600080fd5b506040805180820182526007808252665661746f496e7560c81b602080840182815285518087019096529285528401528151919291620000a191600491620007cd565b508051620000b7906005906020840190620007cd565b5050506000620000cc6200049260201b60201c565b600680546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200013c816001620004cc565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200018257600080fd5b505afa15801562000197573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bd919062000873565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020657600080fd5b505afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000241919062000873565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200028a57600080fd5b505af11580156200029f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c5919062000873565b6001600160a01b031660a0819052620002e0906001620004cc565b60a051620002f090600162000553565b600a60046001826009826c0c9f2c9cd04674edea400000006103e8620003178284620008b4565b620003239190620008d6565b6009556103e862000336826005620008b4565b620003429190620008d6565b600b5561271062000355826005620008b4565b620003619190620008d6565b600a5560168790556017869055601885905584620003808789620008f9565b6200038c9190620008f9565b601555601a849055601b839055601c82905581620003ab8486620008f9565b620003b79190620008f9565b601955600780546001600160a01b031990811673326f9d5077b6e17a30930ba76e6dbe4ee042ca6a1790915560088054909116738e0109deed5104a231f5a1c63e1816fe81ef4a7417905562000421620004196006546001600160a01b031690565b6001620005a7565b6200042e306001620005a7565b6200043d61dead6001620005a7565b6200045c620004546006546001600160a01b031690565b6001620004cc565b62000469306001620004cc565b6200047861dead6001620004cc565b6200048433826200065c565b505050505050505062000951565b60008054600160a01b900460ff1615156001148015620004bc57506000546001600160a01b031633145b620004c657503390565b50600090565b620004d662000492565b6006546001600160a01b03908116911614620005285760405162461bcd60e51b815260206004820181905260248201526000805160206200492983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b620005b162000492565b6006546001600160a01b03908116911614620005ff5760405162461bcd60e51b815260206004820181905260248201526000805160206200492983398151915260448201526064016200051f565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006b45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200051f565b620006d0816003546200076360201b6200220c1790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620007059183906200220c62000763821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620007579085815260200190565b60405180910390a35050565b600080620007728385620008f9565b905083811015620007c65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200051f565b9392505050565b828054620007db9062000914565b90600052602060002090601f016020900481019282620007ff57600085556200084a565b82601f106200081a57805160ff19168380011785556200084a565b828001600101855582156200084a579182015b828111156200084a5782518255916020019190600101906200082d565b50620008589291506200085c565b5090565b5b808211156200085857600081556001016200085d565b6000602082840312156200088657600080fd5b81516001600160a01b0381168114620007c657600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008d157620008d16200089e565b500290565b600082620008f457634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200090f576200090f6200089e565b500190565b600181811c908216806200092957607f821691505b602082108114156200094b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613f50620009d96000396000818161063b015281816117770152818161208e0152818161213801528181612164015281816126a70152818161349401528181613545015261357101526000818161048b01528181612669015281816136df015281816137a7015281816137fc01528181613876015261389d0152613f506000f3fe6080604052600436106103e25760003560e01c80638a8c523c1161020d578063bbc0c74211610128578063dd62ed3e116100bb578063f11a24d31161008a578063f63743421161006f578063f637434214610b93578063f8b45b0514610ba9578063fe72b27a14610bbf57600080fd5b8063f11a24d314610b5d578063f2fde38b14610b7357600080fd5b8063dd62ed3e14610abc578063de0c298514610b02578063e2f4560514610b32578063e884f26014610b4857600080fd5b8063c876d0b9116100f7578063c876d0b914610a56578063c8c8ebe414610a70578063d257b34f14610a86578063d85ba06314610aa657600080fd5b8063bbc0c742146109d7578063c0246668146109f6578063c17b5b8c14610a16578063c18bc19514610a3657600080fd5b80639ec22c0e116101a0578063a4c82a001161016f578063a4c82a0014610951578063a9059cbb14610967578063aacebbe314610987578063b62496f5146109a757600080fd5b80639ec22c0e146108ef5780639fccce3214610905578063a0d82dc51461091b578063a457c2d71461093157600080fd5b8063924de9b7116101dc578063924de9b71461088457806395d89b41146108a45780639a7a23d6146108b95780639c3b4fdc146108d957600080fd5b80638a8c523c1461081b5780638da5cb5b146108305780638ea5220f1461084e578063921369131461086e57600080fd5b806339509351116102fd578063715018a61161029057806375f0a8741161025f57806375f0a874146107a55780637bce5a04146107c55780637fd22e39146107db5780638095d564146107fb57600080fd5b8063715018a61461073b578063730c188814610750578063751039fc146107705780637571336a1461078557600080fd5b8063563bf354116102cc578063563bf354146106af5780636a486a8e146106cf5780636ddd1713146106e557806370a082311461070557600080fd5b8063395093511461060957806349bd5a5e146106295780634a62bb651461065d5780634fbee1931461067757600080fd5b8063199ffc721161037557806323b872dd1161034457806323b872dd1461059d5780632c3e486c146105bd5780632e82f1a0146105d3578063313ce567146105ed57600080fd5b8063199ffc721461053b5780631a8145bb146105515780631f3fed8f14610567578063203e727e1461057d57600080fd5b8063178a18fe116103b1578063178a18fe146104c557806318160ddd146104e45780631816467f14610503578063184c16c51461052557600080fd5b806306fdde03146103ee578063095ea7b31461041957806310d5de53146104495780631694505e1461047957600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b50610403610bdf565b604051610410919061399d565b60405180910390f35b34801561042557600080fd5b50610439610434366004613a28565b610c71565b6040519015158152602001610410565b34801561045557600080fd5b50610439610464366004613a54565b60216020526000908152604090205460ff1681565b34801561048557600080fd5b506104ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610410565b3480156104d157600080fd5b5060145461043990610100900460ff1681565b3480156104f057600080fd5b506003545b604051908152602001610410565b34801561050f57600080fd5b5061052361051e366004613a54565b610c8f565b005b34801561053157600080fd5b506104f560105481565b34801561054757600080fd5b506104f5600c5481565b34801561055d57600080fd5b506104f5601e5481565b34801561057357600080fd5b506104f5601d5481565b34801561058957600080fd5b50610523610598366004613a71565b610d6e565b3480156105a957600080fd5b506104396105b8366004613a8a565b610e95565b3480156105c957600080fd5b506104f5600e5481565b3480156105df57600080fd5b50600d546104399060ff1681565b3480156105f957600080fd5b5060405160128152602001610410565b34801561061557600080fd5b50610439610624366004613a28565b610f1c565b34801561063557600080fd5b506104ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066957600080fd5b506012546104399060ff1681565b34801561068357600080fd5b50610439610692366004613a54565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156106bb57600080fd5b506105236106ca366004613adb565b610f6a565b3480156106db57600080fd5b506104f560195481565b3480156106f157600080fd5b506012546104399062010000900460ff1681565b34801561071157600080fd5b506104f5610720366004613a54565b6001600160a01b031660009081526001602052604090205490565b34801561074757600080fd5b506105236110b9565b34801561075c57600080fd5b5061052361076b366004613b5f565b6111bf565b34801561077c57600080fd5b5061043961133a565b34801561079157600080fd5b506105236107a0366004613b8b565b6113b1565b3480156107b157600080fd5b506007546104ad906001600160a01b031681565b3480156107d157600080fd5b506104f560165481565b3480156107e757600080fd5b506105236107f6366004613a28565b611441565b34801561080757600080fd5b50610523610816366004613bc0565b6114e9565b34801561082757600080fd5b506105236115cc565b34801561083c57600080fd5b506006546001600160a01b03166104ad565b34801561085a57600080fd5b506008546104ad906001600160a01b031681565b34801561087a57600080fd5b506104f5601a5481565b34801561089057600080fd5b5061052361089f366004613bec565b611664565b3480156108b057600080fd5b50610403611701565b3480156108c557600080fd5b506105236108d4366004613b8b565b611710565b3480156108e557600080fd5b506104f560185481565b3480156108fb57600080fd5b506104f560115481565b34801561091157600080fd5b506104f5601f5481565b34801561092757600080fd5b506104f5601c5481565b34801561093d57600080fd5b5061043961094c366004613a28565b61182b565b34801561095d57600080fd5b506104f5600f5481565b34801561097357600080fd5b50610439610982366004613a28565b611893565b34801561099357600080fd5b506105236109a2366004613a54565b6118a7565b3480156109b357600080fd5b506104396109c2366004613a54565b60236020526000908152604090205460ff1681565b3480156109e357600080fd5b5060125461043990610100900460ff1681565b348015610a0257600080fd5b50610523610a11366004613b8b565b611981565b348015610a2257600080fd5b50610523610a31366004613bc0565b611a43565b348015610a4257600080fd5b50610523610a51366004613a71565b611b1f565b348015610a6257600080fd5b506014546104399060ff1681565b348015610a7c57600080fd5b506104f560095481565b348015610a9257600080fd5b50610439610aa1366004613a71565b611c45565b348015610ab257600080fd5b506104f560155481565b348015610ac857600080fd5b506104f5610ad7366004613c07565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610b0e57600080fd5b50610439610b1d366004613a54565b60226020526000908152604090205460ff1681565b348015610b3e57600080fd5b506104f5600a5481565b348015610b5457600080fd5b50610439611d51565b348015610b6957600080fd5b506104f560175481565b348015610b7f57600080fd5b50610523610b8e366004613a54565b611dc8565b348015610b9f57600080fd5b506104f5601b5481565b348015610bb557600080fd5b506104f5600b5481565b348015610bcb57600080fd5b50610439610bda366004613a71565b611f1d565b606060048054610bee90613c40565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1a90613c40565b8015610c675780601f10610c3c57610100808354040283529160200191610c67565b820191906000526020600020905b815481529060010190602001808311610c4a57829003601f168201915b5050505050905090565b6000610c85610c7e612272565b84846122bb565b5060015b92915050565b610c97612272565b6006546001600160a01b03908116911614610cf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610d76612272565b6006546001600160a01b03908116911614610dd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b670de0b6b3a7640000620f4240610de960035490565b610df4906001613cc3565b610dfe9190613d00565b610e089190613d00565b811015610e7d5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201527f6c6f776572207468616e20302e312500000000000000000000000000000000006064820152608401610cf0565b610e8f81670de0b6b3a7640000613cc3565b60095550565b6000610ea2848484612414565b610f1284610eae612272565b610f0d85604051806060016040528060288152602001613ece602891396001600160a01b038a16600090815260026020526040812090610eec612272565b6001600160a01b031681526020810191909152604001600020549190612f03565b6122bb565b5060019392505050565b6000610c85610f29612272565b84610f0d8560026000610f3a612272565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061220c565b610f72612272565b6006546001600160a01b03908116911614610fcf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b60005b828110156110b3576006546001600160a01b0316848483818110610ff857610ff8613d3b565b905060200201602081019061100d9190613a54565b6001600160a01b0316141561104d57601480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100841515021790555b816022600086868581811061106457611064613d3b565b90506020020160208101906110799190613a54565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806110ab81613d6a565b915050610fd2565b50505050565b6110c1612272565b6006546001600160a01b0390811691161461111e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6111c7612272565b6006546001600160a01b039081169116146112245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b61025883101561129c5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860448201527f616e206576657279203130206d696e75746573000000000000000000000000006064820152608401610cf0565b6103e882111580156112ac575060015b61131e5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201527f747765656e20302520616e6420313025000000000000000000000000000000006064820152608401610cf0565b600e92909255600c55600d805460ff1916911515919091179055565b6000611344612272565b6006546001600160a01b039081169116146113a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b506012805460ff19169055600190565b6113b9612272565b6006546001600160a01b039081169116146114165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b611449612272565b6006546001600160a01b039081169116146114a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b0382166000908152600160205260409020546114c9908261220c565b6001600160a01b0390921660009081526001602052604090209190915550565b6114f1612272565b6006546001600160a01b0390811691161461154e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601683905560178290556018819055806115688385613da3565b6115729190613da3565b6015819055601410156115c75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cf0565b505050565b6115d4612272565b6006546001600160a01b039081169116146116315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff166201010017905542600f55565b61166c612272565b6006546001600160a01b039081169116146116c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6012805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b606060058054610bee90613c40565b611718612272565b6006546001600160a01b039081169116146117755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561181d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cf0565b6118278282612f3d565b5050565b6000610c85611838612272565b84610f0d85604051806060016040528060258152602001613ef66025913960026000611862612272565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612f03565b6000610c856118a0612272565b8484612414565b6118af612272565b6006546001600160a01b0390811691161461190c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611989612272565b6006546001600160a01b039081169116146119e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611a4b612272565b6006546001600160a01b03908116911614611aa85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601a839055601b829055601c81905580611ac28385613da3565b611acc9190613da3565b601981815510156115c75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610cf0565b611b27612272565b6006546001600160a01b03908116911614611b845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b670de0b6b3a7640000620f4240611b9a60035490565b611ba5906001613cc3565b611baf9190613d00565b611bb99190613d00565b811015611c2d5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060448201527f302e3525000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b611c3f81670de0b6b3a7640000613cc3565b600b5550565b6000611c4f612272565b6006546001600160a01b03908116911614611cac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b620186a0611cb960035490565b611cc4906001613cc3565b611cce9190613d00565b821015611d435760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610cf0565b50600a81905560015b919050565b6000611d5b612272565b6006546001600160a01b03908116911614611db85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b506014805460ff19169055600190565b611dd0612272565b6006546001600160a01b03908116911614611e2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b038116611ea95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cf0565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000611f27612272565b6006546001600160a01b03908116911614611f845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601054601154611f949190613da3565b4211611fe25760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cf0565b6103e882111561205a5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201527f6b656e7320696e204c50000000000000000000000000000000000000000000006064820152608401610cf0565b426011556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a082319060240160206040518083038186803b1580156120d957600080fd5b505afa1580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121119190613dbb565b9050600061212b6127106121258487612f91565b9061302c565b90508015612160576121607f000000000000000000000000000000000000000000000000000000000000000061dead8361306e565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121c057600080fd5b505af11580156121d4573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6000806122198385613da3565b90508381101561226b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cf0565b9392505050565b6000805474010000000000000000000000000000000000000000900460ff16151560011480156122ac57506000546001600160a01b031633145b6122b557503390565b50600090565b6001600160a01b0383166123365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b0382166123b25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166124905760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b03821661250c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b8061251d576115c78383600061306e565b60125460ff1615612a41576006546001600160a01b0384811691161480159061255457506006546001600160a01b03838116911614155b801561256857506001600160a01b03821615155b801561257f57506001600160a01b03821661dead14155b80156125a6575060065474010000000000000000000000000000000000000000900460ff16155b15612a4157601254610100900460ff16612643576001600160a01b038316600090815260208052604090205460ff16806125f757506001600160a01b038216600090815260208052604090205460ff165b6126435760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610cf0565b60145460ff161561279e576006546001600160a01b0383811691161480159061269e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156126dc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561279e5732600090815260136020526040902054431161278b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60648201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000608482015260a401610cf0565b3260009081526013602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff1680156127df57506001600160a01b03821660009081526021602052604090205460ff16155b156128d55760095481111561285c5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006064820152608401610cf0565b600b546001600160a01b0383166000908152600160205260409020546128829083613da3565b11156128d05760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610cf0565b612a41565b6001600160a01b03821660009081526023602052604090205460ff16801561291657506001600160a01b03831660009081526021602052604090205460ff16155b156129ad5760145460ff61010090910416151560011461293557600080fd5b6009548111156128d05760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006064820152608401610cf0565b6001600160a01b03821660009081526021602052604090205460ff16612a4157600b546001600160a01b0383166000908152600160205260409020546129f39083613da3565b1115612a415760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610cf0565b30600090815260016020526040902054600a5481108015908190612a6d575060125462010000900460ff165b8015612a94575060065474010000000000000000000000000000000000000000900460ff16155b8015612ab957506001600160a01b03851660009081526023602052604090205460ff16155b8015612add57506001600160a01b038516600090815260208052604090205460ff16155b8015612b0157506001600160a01b038416600090815260208052604090205460ff16155b15612b7657600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055612b4d613226565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b60065474010000000000000000000000000000000000000000900460ff16158015612bb957506001600160a01b03841660009081526023602052604090205460ff165b8015612bc75750600d5460ff165b8015612be25750600e54600f54612bde9190613da3565b4210155b8015612c0657506001600160a01b038516600090815260208052604090205460ff16155b15612c1557612c13613460565b505b6006546001600160a01b038616600090815260208052604090205460ff74010000000000000000000000000000000000000000909204821615911680612c7257506001600160a01b038516600090815260208052604090205460ff165b15612c7b575060005b60008115612e60576001600160a01b03861660009081526023602052604090205460ff168015612cad57506000601954115b15612d6557612ccc606461212560195488612f9190919063ffffffff16565b9050601954601b5482612cdf9190613cc3565b612ce99190613d00565b601e6000828254612cfa9190613da3565b9091555050601954601c54612d0f9083613cc3565b612d199190613d00565b601f6000828254612d2a9190613da3565b9091555050601954601a54612d3f9083613cc3565b612d499190613d00565b601d6000828254612d5a9190613da3565b90915550612e429050565b6001600160a01b03871660009081526023602052604090205460ff168015612d8f57506000601554115b15612e4257612dae606461212560155488612f9190919063ffffffff16565b905060155460175482612dc19190613cc3565b612dcb9190613d00565b601e6000828254612ddc9190613da3565b9091555050601554601854612df19083613cc3565b612dfb9190613d00565b601f6000828254612e0c9190613da3565b9091555050601554601654612e219083613cc3565b612e2b9190613d00565b601d6000828254612e3c9190613da3565b90915550505b8015612e5357612e5387308361306e565b612e5d8186613dd4565b94505b6001600160a01b03871660009081526022602052604090205460ff1615612eef5760405162461bcd60e51b815260206004820152602360248201527f596f752063616e7420646f2074686973207472616e73616374696f6e2e20284260448201527f6c772900000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b612efa87878761306e565b50505050505050565b60008184841115612f275760405162461bcd60e51b8152600401610cf0919061399d565b506000612f348486613dd4565b95945050505050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600082612fa057506000610c89565b6000612fac8385613cc3565b905082612fb98583613d00565b1461226b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b600061226b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613618565b6001600160a01b0383166130ea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b0382166131665760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6131a381604051806060016040528060268152602001613ea8602691396001600160a01b0386166000908152600160205260409020549190612f03565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546131d2908261220c565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124079085815260200190565b3060009081526001602052604081205490506000601f54601d54601e5461324d9190613da3565b6132579190613da3565b90506000821580613266575081155b1561327057505050565b600a5461327e906014613cc3565b83111561329657600a54613293906014613cc3565b92505b6000600283601e54866132a99190613cc3565b6132b39190613d00565b6132bd9190613d00565b905060006132cb8583613646565b9050476132d782613688565b60006132e34783613646565b9050600061330087612125601d5485612f9190919063ffffffff16565b9050600061331d88612125601f5486612f9190919063ffffffff16565b905060008161332c8486613dd4565b6133369190613dd4565b6000601e819055601d819055601f8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114613393576040519150601f19603f3d011682016040523d82523d6000602084013e613398565b606091505b509098505086158015906133ac5750600081115b156133ff576133bb8782613870565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d806000811461344c576040519150601f19603f3d011682016040523d82523d6000602084013e613451565b606091505b50505050505050505050505050565b42600f556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a082319060240160206040518083038186803b1580156134e157600080fd5b505afa1580156134f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135199190613dbb565b90506000613538612710612125600c5485612f9190919063ffffffff16565b9050801561356d5761356d7f000000000000000000000000000000000000000000000000000000000000000061dead8361306e565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156135cd57600080fd5b505af11580156135e1573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b600081836136395760405162461bcd60e51b8152600401610cf0919061399d565b506000612f348486613d00565b600061226b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f03565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136bd576136bd613d3b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561373657600080fd5b505afa15801561374a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376e9190613deb565b8160018151811061378157613781613d3b565b60200260200101906001600160a01b031690816001600160a01b0316815250506137cc307f0000000000000000000000000000000000000000000000000000000000000000846122bb565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061383a908590600090869030904290600401613e08565b600060405180830381600087803b15801561385457600080fd5b505af1158015613868573d6000803e3d6000fd5b505050505050565b61389b307f0000000000000000000000000000000000000000000000000000000000000000846122bb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806138e26006546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561395d57600080fd5b505af1158015613971573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139969190613e79565b5050505050565b600060208083528351808285015260005b818110156139ca578581018301518582016040015282016139ae565b818111156139dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b0381168114613a2557600080fd5b50565b60008060408385031215613a3b57600080fd5b8235613a4681613a10565b946020939093013593505050565b600060208284031215613a6657600080fd5b813561226b81613a10565b600060208284031215613a8357600080fd5b5035919050565b600080600060608486031215613a9f57600080fd5b8335613aaa81613a10565b92506020840135613aba81613a10565b929592945050506040919091013590565b80358015158114611d4c57600080fd5b600080600060408486031215613af057600080fd5b833567ffffffffffffffff80821115613b0857600080fd5b818601915086601f830112613b1c57600080fd5b813581811115613b2b57600080fd5b8760208260051b8501011115613b4057600080fd5b602092830195509350613b569186019050613acb565b90509250925092565b600080600060608486031215613b7457600080fd5b8335925060208401359150613b5660408501613acb565b60008060408385031215613b9e57600080fd5b8235613ba981613a10565b9150613bb760208401613acb565b90509250929050565b600080600060608486031215613bd557600080fd5b505081359360208301359350604090920135919050565b600060208284031215613bfe57600080fd5b61226b82613acb565b60008060408385031215613c1a57600080fd5b8235613c2581613a10565b91506020830135613c3581613a10565b809150509250929050565b600181811c90821680613c5457607f821691505b60208210811415613c8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cfb57613cfb613c94565b500290565b600082613d36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9c57613d9c613c94565b5060010190565b60008219821115613db657613db6613c94565b500190565b600060208284031215613dcd57600080fd5b5051919050565b600082821015613de657613de6613c94565b500390565b600060208284031215613dfd57600080fd5b815161226b81613a10565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613e585784516001600160a01b031683529383019391830191600101613e33565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613e8e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220982152b58ea8d3ee21b4cb86b70ce6201794b816660e809c2f10e54408ff851b64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103e25760003560e01c80638a8c523c1161020d578063bbc0c74211610128578063dd62ed3e116100bb578063f11a24d31161008a578063f63743421161006f578063f637434214610b93578063f8b45b0514610ba9578063fe72b27a14610bbf57600080fd5b8063f11a24d314610b5d578063f2fde38b14610b7357600080fd5b8063dd62ed3e14610abc578063de0c298514610b02578063e2f4560514610b32578063e884f26014610b4857600080fd5b8063c876d0b9116100f7578063c876d0b914610a56578063c8c8ebe414610a70578063d257b34f14610a86578063d85ba06314610aa657600080fd5b8063bbc0c742146109d7578063c0246668146109f6578063c17b5b8c14610a16578063c18bc19514610a3657600080fd5b80639ec22c0e116101a0578063a4c82a001161016f578063a4c82a0014610951578063a9059cbb14610967578063aacebbe314610987578063b62496f5146109a757600080fd5b80639ec22c0e146108ef5780639fccce3214610905578063a0d82dc51461091b578063a457c2d71461093157600080fd5b8063924de9b7116101dc578063924de9b71461088457806395d89b41146108a45780639a7a23d6146108b95780639c3b4fdc146108d957600080fd5b80638a8c523c1461081b5780638da5cb5b146108305780638ea5220f1461084e578063921369131461086e57600080fd5b806339509351116102fd578063715018a61161029057806375f0a8741161025f57806375f0a874146107a55780637bce5a04146107c55780637fd22e39146107db5780638095d564146107fb57600080fd5b8063715018a61461073b578063730c188814610750578063751039fc146107705780637571336a1461078557600080fd5b8063563bf354116102cc578063563bf354146106af5780636a486a8e146106cf5780636ddd1713146106e557806370a082311461070557600080fd5b8063395093511461060957806349bd5a5e146106295780634a62bb651461065d5780634fbee1931461067757600080fd5b8063199ffc721161037557806323b872dd1161034457806323b872dd1461059d5780632c3e486c146105bd5780632e82f1a0146105d3578063313ce567146105ed57600080fd5b8063199ffc721461053b5780631a8145bb146105515780631f3fed8f14610567578063203e727e1461057d57600080fd5b8063178a18fe116103b1578063178a18fe146104c557806318160ddd146104e45780631816467f14610503578063184c16c51461052557600080fd5b806306fdde03146103ee578063095ea7b31461041957806310d5de53146104495780631694505e1461047957600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b50610403610bdf565b604051610410919061399d565b60405180910390f35b34801561042557600080fd5b50610439610434366004613a28565b610c71565b6040519015158152602001610410565b34801561045557600080fd5b50610439610464366004613a54565b60216020526000908152604090205460ff1681565b34801561048557600080fd5b506104ad7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610410565b3480156104d157600080fd5b5060145461043990610100900460ff1681565b3480156104f057600080fd5b506003545b604051908152602001610410565b34801561050f57600080fd5b5061052361051e366004613a54565b610c8f565b005b34801561053157600080fd5b506104f560105481565b34801561054757600080fd5b506104f5600c5481565b34801561055d57600080fd5b506104f5601e5481565b34801561057357600080fd5b506104f5601d5481565b34801561058957600080fd5b50610523610598366004613a71565b610d6e565b3480156105a957600080fd5b506104396105b8366004613a8a565b610e95565b3480156105c957600080fd5b506104f5600e5481565b3480156105df57600080fd5b50600d546104399060ff1681565b3480156105f957600080fd5b5060405160128152602001610410565b34801561061557600080fd5b50610439610624366004613a28565b610f1c565b34801561063557600080fd5b506104ad7f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa70181565b34801561066957600080fd5b506012546104399060ff1681565b34801561068357600080fd5b50610439610692366004613a54565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156106bb57600080fd5b506105236106ca366004613adb565b610f6a565b3480156106db57600080fd5b506104f560195481565b3480156106f157600080fd5b506012546104399062010000900460ff1681565b34801561071157600080fd5b506104f5610720366004613a54565b6001600160a01b031660009081526001602052604090205490565b34801561074757600080fd5b506105236110b9565b34801561075c57600080fd5b5061052361076b366004613b5f565b6111bf565b34801561077c57600080fd5b5061043961133a565b34801561079157600080fd5b506105236107a0366004613b8b565b6113b1565b3480156107b157600080fd5b506007546104ad906001600160a01b031681565b3480156107d157600080fd5b506104f560165481565b3480156107e757600080fd5b506105236107f6366004613a28565b611441565b34801561080757600080fd5b50610523610816366004613bc0565b6114e9565b34801561082757600080fd5b506105236115cc565b34801561083c57600080fd5b506006546001600160a01b03166104ad565b34801561085a57600080fd5b506008546104ad906001600160a01b031681565b34801561087a57600080fd5b506104f5601a5481565b34801561089057600080fd5b5061052361089f366004613bec565b611664565b3480156108b057600080fd5b50610403611701565b3480156108c557600080fd5b506105236108d4366004613b8b565b611710565b3480156108e557600080fd5b506104f560185481565b3480156108fb57600080fd5b506104f560115481565b34801561091157600080fd5b506104f5601f5481565b34801561092757600080fd5b506104f5601c5481565b34801561093d57600080fd5b5061043961094c366004613a28565b61182b565b34801561095d57600080fd5b506104f5600f5481565b34801561097357600080fd5b50610439610982366004613a28565b611893565b34801561099357600080fd5b506105236109a2366004613a54565b6118a7565b3480156109b357600080fd5b506104396109c2366004613a54565b60236020526000908152604090205460ff1681565b3480156109e357600080fd5b5060125461043990610100900460ff1681565b348015610a0257600080fd5b50610523610a11366004613b8b565b611981565b348015610a2257600080fd5b50610523610a31366004613bc0565b611a43565b348015610a4257600080fd5b50610523610a51366004613a71565b611b1f565b348015610a6257600080fd5b506014546104399060ff1681565b348015610a7c57600080fd5b506104f560095481565b348015610a9257600080fd5b50610439610aa1366004613a71565b611c45565b348015610ab257600080fd5b506104f560155481565b348015610ac857600080fd5b506104f5610ad7366004613c07565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610b0e57600080fd5b50610439610b1d366004613a54565b60226020526000908152604090205460ff1681565b348015610b3e57600080fd5b506104f5600a5481565b348015610b5457600080fd5b50610439611d51565b348015610b6957600080fd5b506104f560175481565b348015610b7f57600080fd5b50610523610b8e366004613a54565b611dc8565b348015610b9f57600080fd5b506104f5601b5481565b348015610bb557600080fd5b506104f5600b5481565b348015610bcb57600080fd5b50610439610bda366004613a71565b611f1d565b606060048054610bee90613c40565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1a90613c40565b8015610c675780601f10610c3c57610100808354040283529160200191610c67565b820191906000526020600020905b815481529060010190602001808311610c4a57829003601f168201915b5050505050905090565b6000610c85610c7e612272565b84846122bb565b5060015b92915050565b610c97612272565b6006546001600160a01b03908116911614610cf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610d76612272565b6006546001600160a01b03908116911614610dd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b670de0b6b3a7640000620f4240610de960035490565b610df4906001613cc3565b610dfe9190613d00565b610e089190613d00565b811015610e7d5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201527f6c6f776572207468616e20302e312500000000000000000000000000000000006064820152608401610cf0565b610e8f81670de0b6b3a7640000613cc3565b60095550565b6000610ea2848484612414565b610f1284610eae612272565b610f0d85604051806060016040528060288152602001613ece602891396001600160a01b038a16600090815260026020526040812090610eec612272565b6001600160a01b031681526020810191909152604001600020549190612f03565b6122bb565b5060019392505050565b6000610c85610f29612272565b84610f0d8560026000610f3a612272565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061220c565b610f72612272565b6006546001600160a01b03908116911614610fcf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b60005b828110156110b3576006546001600160a01b0316848483818110610ff857610ff8613d3b565b905060200201602081019061100d9190613a54565b6001600160a01b0316141561104d57601480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100841515021790555b816022600086868581811061106457611064613d3b565b90506020020160208101906110799190613a54565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806110ab81613d6a565b915050610fd2565b50505050565b6110c1612272565b6006546001600160a01b0390811691161461111e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6111c7612272565b6006546001600160a01b039081169116146112245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b61025883101561129c5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860448201527f616e206576657279203130206d696e75746573000000000000000000000000006064820152608401610cf0565b6103e882111580156112ac575060015b61131e5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201527f747765656e20302520616e6420313025000000000000000000000000000000006064820152608401610cf0565b600e92909255600c55600d805460ff1916911515919091179055565b6000611344612272565b6006546001600160a01b039081169116146113a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b506012805460ff19169055600190565b6113b9612272565b6006546001600160a01b039081169116146114165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b611449612272565b6006546001600160a01b039081169116146114a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b0382166000908152600160205260409020546114c9908261220c565b6001600160a01b0390921660009081526001602052604090209190915550565b6114f1612272565b6006546001600160a01b0390811691161461154e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601683905560178290556018819055806115688385613da3565b6115729190613da3565b6015819055601410156115c75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610cf0565b505050565b6115d4612272565b6006546001600160a01b039081169116146116315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff166201010017905542600f55565b61166c612272565b6006546001600160a01b039081169116146116c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6012805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b606060058054610bee90613c40565b611718612272565b6006546001600160a01b039081169116146117755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b7f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa7016001600160a01b0316826001600160a01b0316141561181d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cf0565b6118278282612f3d565b5050565b6000610c85611838612272565b84610f0d85604051806060016040528060258152602001613ef66025913960026000611862612272565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612f03565b6000610c856118a0612272565b8484612414565b6118af612272565b6006546001600160a01b0390811691161461190c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611989612272565b6006546001600160a01b039081169116146119e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611a4b612272565b6006546001600160a01b03908116911614611aa85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601a839055601b829055601c81905580611ac28385613da3565b611acc9190613da3565b601981815510156115c75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610cf0565b611b27612272565b6006546001600160a01b03908116911614611b845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b670de0b6b3a7640000620f4240611b9a60035490565b611ba5906001613cc3565b611baf9190613d00565b611bb99190613d00565b811015611c2d5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060448201527f302e3525000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b611c3f81670de0b6b3a7640000613cc3565b600b5550565b6000611c4f612272565b6006546001600160a01b03908116911614611cac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b620186a0611cb960035490565b611cc4906001613cc3565b611cce9190613d00565b821015611d435760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610cf0565b50600a81905560015b919050565b6000611d5b612272565b6006546001600160a01b03908116911614611db85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b506014805460ff19169055600190565b611dd0612272565b6006546001600160a01b03908116911614611e2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b6001600160a01b038116611ea95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cf0565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000611f27612272565b6006546001600160a01b03908116911614611f845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cf0565b601054601154611f949190613da3565b4211611fe25760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cf0565b6103e882111561205a5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201527f6b656e7320696e204c50000000000000000000000000000000000000000000006064820152608401610cf0565b426011556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa70116600482015260009030906370a082319060240160206040518083038186803b1580156120d957600080fd5b505afa1580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121119190613dbb565b9050600061212b6127106121258487612f91565b9061302c565b90508015612160576121607f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa70161dead8361306e565b60007f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa7019050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121c057600080fd5b505af11580156121d4573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6000806122198385613da3565b90508381101561226b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cf0565b9392505050565b6000805474010000000000000000000000000000000000000000900460ff16151560011480156122ac57506000546001600160a01b031633145b6122b557503390565b50600090565b6001600160a01b0383166123365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b0382166123b25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166124905760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b03821661250c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b8061251d576115c78383600061306e565b60125460ff1615612a41576006546001600160a01b0384811691161480159061255457506006546001600160a01b03838116911614155b801561256857506001600160a01b03821615155b801561257f57506001600160a01b03821661dead14155b80156125a6575060065474010000000000000000000000000000000000000000900460ff16155b15612a4157601254610100900460ff16612643576001600160a01b038316600090815260208052604090205460ff16806125f757506001600160a01b038216600090815260208052604090205460ff165b6126435760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610cf0565b60145460ff161561279e576006546001600160a01b0383811691161480159061269e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156126dc57507f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa7016001600160a01b0316826001600160a01b031614155b1561279e5732600090815260136020526040902054431161278b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60648201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000608482015260a401610cf0565b3260009081526013602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff1680156127df57506001600160a01b03821660009081526021602052604090205460ff16155b156128d55760095481111561285c5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006064820152608401610cf0565b600b546001600160a01b0383166000908152600160205260409020546128829083613da3565b11156128d05760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610cf0565b612a41565b6001600160a01b03821660009081526023602052604090205460ff16801561291657506001600160a01b03831660009081526021602052604090205460ff16155b156129ad5760145460ff61010090910416151560011461293557600080fd5b6009548111156128d05760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006064820152608401610cf0565b6001600160a01b03821660009081526021602052604090205460ff16612a4157600b546001600160a01b0383166000908152600160205260409020546129f39083613da3565b1115612a415760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610cf0565b30600090815260016020526040902054600a5481108015908190612a6d575060125462010000900460ff165b8015612a94575060065474010000000000000000000000000000000000000000900460ff16155b8015612ab957506001600160a01b03851660009081526023602052604090205460ff16155b8015612add57506001600160a01b038516600090815260208052604090205460ff16155b8015612b0157506001600160a01b038416600090815260208052604090205460ff16155b15612b7657600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055612b4d613226565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b60065474010000000000000000000000000000000000000000900460ff16158015612bb957506001600160a01b03841660009081526023602052604090205460ff165b8015612bc75750600d5460ff165b8015612be25750600e54600f54612bde9190613da3565b4210155b8015612c0657506001600160a01b038516600090815260208052604090205460ff16155b15612c1557612c13613460565b505b6006546001600160a01b038616600090815260208052604090205460ff74010000000000000000000000000000000000000000909204821615911680612c7257506001600160a01b038516600090815260208052604090205460ff165b15612c7b575060005b60008115612e60576001600160a01b03861660009081526023602052604090205460ff168015612cad57506000601954115b15612d6557612ccc606461212560195488612f9190919063ffffffff16565b9050601954601b5482612cdf9190613cc3565b612ce99190613d00565b601e6000828254612cfa9190613da3565b9091555050601954601c54612d0f9083613cc3565b612d199190613d00565b601f6000828254612d2a9190613da3565b9091555050601954601a54612d3f9083613cc3565b612d499190613d00565b601d6000828254612d5a9190613da3565b90915550612e429050565b6001600160a01b03871660009081526023602052604090205460ff168015612d8f57506000601554115b15612e4257612dae606461212560155488612f9190919063ffffffff16565b905060155460175482612dc19190613cc3565b612dcb9190613d00565b601e6000828254612ddc9190613da3565b9091555050601554601854612df19083613cc3565b612dfb9190613d00565b601f6000828254612e0c9190613da3565b9091555050601554601654612e219083613cc3565b612e2b9190613d00565b601d6000828254612e3c9190613da3565b90915550505b8015612e5357612e5387308361306e565b612e5d8186613dd4565b94505b6001600160a01b03871660009081526022602052604090205460ff1615612eef5760405162461bcd60e51b815260206004820152602360248201527f596f752063616e7420646f2074686973207472616e73616374696f6e2e20284260448201527f6c772900000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b612efa87878761306e565b50505050505050565b60008184841115612f275760405162461bcd60e51b8152600401610cf0919061399d565b506000612f348486613dd4565b95945050505050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600082612fa057506000610c89565b6000612fac8385613cc3565b905082612fb98583613d00565b1461226b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b600061226b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613618565b6001600160a01b0383166130ea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6001600160a01b0382166131665760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf0565b6131a381604051806060016040528060268152602001613ea8602691396001600160a01b0386166000908152600160205260409020549190612f03565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546131d2908261220c565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124079085815260200190565b3060009081526001602052604081205490506000601f54601d54601e5461324d9190613da3565b6132579190613da3565b90506000821580613266575081155b1561327057505050565b600a5461327e906014613cc3565b83111561329657600a54613293906014613cc3565b92505b6000600283601e54866132a99190613cc3565b6132b39190613d00565b6132bd9190613d00565b905060006132cb8583613646565b9050476132d782613688565b60006132e34783613646565b9050600061330087612125601d5485612f9190919063ffffffff16565b9050600061331d88612125601f5486612f9190919063ffffffff16565b905060008161332c8486613dd4565b6133369190613dd4565b6000601e819055601d819055601f8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114613393576040519150601f19603f3d011682016040523d82523d6000602084013e613398565b606091505b509098505086158015906133ac5750600081115b156133ff576133bb8782613870565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d806000811461344c576040519150601f19603f3d011682016040523d82523d6000602084013e613451565b606091505b50505050505050505050505050565b42600f556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa701166004820152600090819030906370a082319060240160206040518083038186803b1580156134e157600080fd5b505afa1580156134f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135199190613dbb565b90506000613538612710612125600c5485612f9190919063ffffffff16565b9050801561356d5761356d7f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa70161dead8361306e565b60007f0000000000000000000000003b8fccc5ff1b026c6379cce81828cfab74daa7019050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156135cd57600080fd5b505af11580156135e1573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b600081836136395760405162461bcd60e51b8152600401610cf0919061399d565b506000612f348486613d00565b600061226b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f03565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136bd576136bd613d3b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561373657600080fd5b505afa15801561374a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376e9190613deb565b8160018151811061378157613781613d3b565b60200260200101906001600160a01b031690816001600160a01b0316815250506137cc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122bb565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061383a908590600090869030904290600401613e08565b600060405180830381600087803b15801561385457600080fd5b505af1158015613868573d6000803e3d6000fd5b505050505050565b61389b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122bb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806138e26006546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561395d57600080fd5b505af1158015613971573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139969190613e79565b5050505050565b600060208083528351808285015260005b818110156139ca578581018301518582016040015282016139ae565b818111156139dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b0381168114613a2557600080fd5b50565b60008060408385031215613a3b57600080fd5b8235613a4681613a10565b946020939093013593505050565b600060208284031215613a6657600080fd5b813561226b81613a10565b600060208284031215613a8357600080fd5b5035919050565b600080600060608486031215613a9f57600080fd5b8335613aaa81613a10565b92506020840135613aba81613a10565b929592945050506040919091013590565b80358015158114611d4c57600080fd5b600080600060408486031215613af057600080fd5b833567ffffffffffffffff80821115613b0857600080fd5b818601915086601f830112613b1c57600080fd5b813581811115613b2b57600080fd5b8760208260051b8501011115613b4057600080fd5b602092830195509350613b569186019050613acb565b90509250925092565b600080600060608486031215613b7457600080fd5b8335925060208401359150613b5660408501613acb565b60008060408385031215613b9e57600080fd5b8235613ba981613a10565b9150613bb760208401613acb565b90509250929050565b600080600060608486031215613bd557600080fd5b505081359360208301359350604090920135919050565b600060208284031215613bfe57600080fd5b61226b82613acb565b60008060408385031215613c1a57600080fd5b8235613c2581613a10565b91506020830135613c3581613a10565b809150509250929050565b600181811c90821680613c5457607f821691505b60208210811415613c8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cfb57613cfb613c94565b500290565b600082613d36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9c57613d9c613c94565b5060010190565b60008219821115613db657613db6613c94565b500190565b600060208284031215613dcd57600080fd5b5051919050565b600082821015613de657613de6613c94565b500390565b600060208284031215613dfd57600080fd5b815161226b81613a10565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613e585784516001600160a01b031683529383019391830191600101613e33565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613e8e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220982152b58ea8d3ee21b4cb86b70ce6201794b816660e809c2f10e54408ff851b64736f6c63430008090033
Deployed Bytecode Sourcemap
28942:18939:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7826:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9993:169;;;;;;;;;;-1:-1:-1;9993:169:0;;;;;:::i;:::-;;:::i;:::-;;;1319:14:1;;1312:22;1294:41;;1282:2;1267:18;9993:169:0;1154:187:1;30580:64:0;;;;;;;;;;-1:-1:-1;30580:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29019:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1789:55:1;;;1771:74;;1759:2;1744:18;29019:51:0;1598:253:1;29984:21:0;;;;;;;;;;-1:-1:-1;29984:21:0;;;;;;;;;;;8946:108;;;;;;;;;;-1:-1:-1;9034:12:0;;8946:108;;;2002:25:1;;;1990:2;1975:18;8946:108:0;1856:177:1;37567:157:0;;;;;;;;;;-1:-1:-1;37567:157:0;;;;;:::i;:::-;;:::i;:::-;;29537:47;;;;;;;;;;;;;;;;29347:36;;;;;;;;;;;;;;;;30346:33;;;;;;;;;;;;;;;;30306;;;;;;;;;;;;;;;;35110:237;;;;;;;;;;-1:-1:-1;35110:237:0;;;;;:::i;:::-;;:::i;10644:355::-;;;;;;;;;;-1:-1:-1;10644:355:0;;;;;:::i;:::-;;:::i;29443:45::-;;;;;;;;;;;;;;;;29403:33;;;;;;;;;;-1:-1:-1;29403:33:0;;;;;;;;8788:93;;;;;;;;;;-1:-1:-1;8788:93:0;;8871:2;2826:36:1;;2814:2;2799:18;8788:93:0;2684:184:1;11408:218:0;;;;;;;;;;-1:-1:-1;11408:218:0;;;;;:::i;:::-;;:::i;29077:38::-;;;;;;;;;;;;;;;29635:33;;;;;;;;;;-1:-1:-1;29635:33:0;;;;;;;;37730:125;;;;;;;;;;-1:-1:-1;37730:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;37819:28:0;37795:4;37819:28;;;:19;:28;;;;;;;;;37730:125;45673:259;;;;;;;;;;-1:-1:-1;45673:259:0;;;;;:::i;:::-;;:::i;30157:28::-;;;;;;;;;;;;;;;;29715:31;;;;;;;;;;-1:-1:-1;29715:31:0;;;;;;;;;;;9117:127;;;;;;;;;;-1:-1:-1;9117:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9218:18:0;9191:7;9218:18;;;:9;:18;;;;;;;9117:127;21677:183;;;;;;;;;;;;;:::i;45220:447::-;;;;;;;;;;-1:-1:-1;45220:447:0;;;;;:::i;:::-;;:::i;34435:120::-;;;;;;;;;;;;;:::i;35585:144::-;;;;;;;;;;-1:-1:-1;35585:144:0;;;;;:::i;:::-;;:::i;29154:30::-;;;;;;;;;;-1:-1:-1;29154:30:0;;;;-1:-1:-1;;;;;29154:30:0;;;30046;;;;;;;;;;;;;;;;45938:104;;;;;;;;;;-1:-1:-1;45938:104:0;;;;;:::i;:::-;;:::i;35942:369::-;;;;;;;;;;-1:-1:-1;35942:369:0;;;;;:::i;:::-;;:::i;34224:155::-;;;;;;;;;;;;;:::i;21467:79::-;;;;;;;;;;-1:-1:-1;21532:6:0;;-1:-1:-1;;;;;21532:6:0;21467:79;;29191:24;;;;;;;;;;-1:-1:-1;29191:24:0;;;;-1:-1:-1;;;;;29191:24:0;;;30192:31;;;;;;;;;;;;;;;;35829:101;;;;;;;;;;-1:-1:-1;35829:101:0;;;;;:::i;:::-;;:::i;8045:104::-;;;;;;;;;;;;;:::i;36899:244::-;;;;;;;;;;-1:-1:-1;36899:244:0;;;;;:::i;:::-;;:::i;30120:24::-;;;;;;;;;;;;;;;;29591:35;;;;;;;;;;;;;;;;30386:27;;;;;;;;;;;;;;;;30268:25;;;;;;;;;;;;;;;;12129:269;;;;;;;;;;-1:-1:-1;12129:269:0;;;;;:::i;:::-;;:::i;29495:29::-;;;;;;;;;;;;;;;;9457:175;;;;;;;;;;-1:-1:-1;9457:175:0;;;;;:::i;:::-;;:::i;37347:208::-;;;;;;;;;;-1:-1:-1;37347:208:0;;;;;:::i;:::-;;:::i;30848:58::-;;;;;;;;;;-1:-1:-1;30848:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29675:33;;;;;;;;;;-1:-1:-1;29675:33:0;;;;;;;;;;;36709:182;;;;;;;;;;-1:-1:-1;36709:182:0;;;;;:::i;:::-;;:::i;36323:378::-;;;;;;;;;;-1:-1:-1;36323:378:0;;;;;:::i;:::-;;:::i;35355:218::-;;;;;;;;;;-1:-1:-1;35355:218:0;;;;;:::i;:::-;;:::i;29938:39::-;;;;;;;;;;-1:-1:-1;29938:39:0;;;;;;;;29228:35;;;;;;;;;;;;;;;;34829:269;;;;;;;;;;-1:-1:-1;34829:269:0;;;;;:::i;:::-;;:::i;30012:27::-;;;;;;;;;;;;;;;;9695:151;;;;;;;;;;-1:-1:-1;9695:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9811:18:0;;;9784:7;9811:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9695:151;30651:39;;;;;;;;;;-1:-1:-1;30651:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29270:33;;;;;;;;;;;;;;;;34620:134;;;;;;;;;;;;;:::i;30083:30::-;;;;;;;;;;;;;;;;21866:244;;;;;;;;;;-1:-1:-1;21866:244:0;;;;;:::i;:::-;;:::i;30230:31::-;;;;;;;;;;;;;;;;29310:24;;;;;;;;;;;;;;;;46860:1018;;;;;;;;;;-1:-1:-1;46860:1018:0;;;;;:::i;:::-;;:::i;7826:100::-;7880:13;7913:5;7906:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7826:100;:::o;9993:169::-;10076:4;10093:39;10102:12;:10;:12::i;:::-;10116:7;10125:6;10093:8;:39::i;:::-;-1:-1:-1;10150:4:0;9993:169;;;;;:::o;37567:157::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;;;;;;;;;37674:9:::1;::::0;37646:38:::1;::::0;-1:-1:-1;;;;;37674:9:0;;::::1;::::0;37646:38;::::1;::::0;::::1;::::0;37674:9:::1;::::0;37646:38:::1;37695:9;:21:::0;;;::::1;-1:-1:-1::0;;;;;37695:21:0;;;::::1;::::0;;;::::1;::::0;;37567:157::o;35110:237::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;35232:4:::1;35223:7;35203:13;9034:12:::0;;;8946:108;35203:13:::1;:17;::::0;35219:1:::1;35203:17;:::i;:::-;:27;;;;:::i;:::-;35202:34;;;;:::i;:::-;35192:6;:44;;35184:104;;;::::0;-1:-1:-1;;;35184:104:0;;7209:2:1;35184:104:0::1;::::0;::::1;7191:21:1::0;7248:2;7228:18;;;7221:30;7287:34;7267:18;;;7260:62;7358:17;7338:18;;;7331:45;7393:19;;35184:104:0::1;7007:411:1::0;35184:104:0::1;35322:17;:6:::0;35332::::1;35322:17;:::i;:::-;35299:20;:40:::0;-1:-1:-1;35110:237:0:o;10644:355::-;10784:4;10801:36;10811:6;10819:9;10830:6;10801:9;:36::i;:::-;10848:121;10857:6;10865:12;:10;:12::i;:::-;10879:89;10917:6;10879:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10879:19:0;;;;;;:11;:19;;;;;;10899:12;:10;:12::i;:::-;-1:-1:-1;;;;;10879:33:0;;;;;;;;;;;;-1:-1:-1;10879:33:0;;;:89;:37;:89::i;:::-;10848:8;:121::i;:::-;-1:-1:-1;10987:4:0;10644:355;;;;;:::o;11408:218::-;11496:4;11513:83;11522:12;:10;:12::i;:::-;11536:7;11545:50;11584:10;11545:11;:25;11557:12;:10;:12::i;:::-;-1:-1:-1;;;;;11545:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;11545:25:0;;;:34;;;;;;;;;;;:38;:50::i;45673:259::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;45751:6:::1;45747:178;45764:12:::0;;::::1;45747:178;;;21532:6:::0;;-1:-1:-1;;;;;21532:6:0;45809:1;;45811;45809:4;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45801:33:0::1;;45798:82;;;45855:2;:9:::0;;;::::1;;::::0;::::1;;;;::::0;;45798:82:::1;45909:4;45894:6;:12;45901:1;;45903;45901:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45894:12:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45894:12:0;:19;;-1:-1:-1;;45894:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45778:3;::::1;::::0;::::1;:::i;:::-;;;;45747:178;;;;45673:259:::0;;;:::o;21677:183::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;21768:6:::1;::::0;21747:40:::1;::::0;21784:1:::1;::::0;-1:-1:-1;;;;;21768:6:0::1;::::0;21747:40:::1;::::0;21784:1;;21747:40:::1;21798:17;:24:::0;;;::::1;::::0;::::1;::::0;;21833:6:::1;:19:::0;;;::::1;::::0;;21677:183::o;45220:447::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;45374:3:::1;45351:19;:26;;45343:90;;;::::0;-1:-1:-1;;;45343:90:0;;8014:2:1;45343:90:0::1;::::0;::::1;7996:21:1::0;8053:2;8033:18;;;8026:30;8092:34;8072:18;;;8065:62;8163:21;8143:18;;;8136:49;8202:19;;45343:90:0::1;7812:415:1::0;45343:90:0::1;45464:4;45452:8;:16;;:33;;;;-1:-1:-1::0;45472:13:0;45452:33:::1;45444:94;;;::::0;-1:-1:-1;;;45444:94:0;;8434:2:1;45444:94:0::1;::::0;::::1;8416:21:1::0;8473:2;8453:18;;;8446:30;8512:34;8492:18;;;8485:62;8583:18;8563;;;8556:46;8619:19;;45444:94:0::1;8232:412:1::0;45444:94:0::1;45549:15;:37:::0;;;;45597:16:::1;:27:::0;45635:13:::1;:24:::0;;-1:-1:-1;;45635:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45220:447::o;34435:120::-;34487:4;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;-1:-1:-1;34503:14:0::1;:22:::0;;-1:-1:-1;;34503:22:0::1;::::0;;;34435:120;:::o;35585:144::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;-1:-1:-1;;;;;35675:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35675:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35585:144::o;45938:104::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;-1:-1:-1;;;;;46015:12:0;::::1;;::::0;;;:9:::1;:12;::::0;;;;;:19:::1;::::0;46032:1;46015:16:::1;:19::i;:::-;-1:-1:-1::0;;;;;46000:12:0;;::::1;;::::0;;;:9:::1;:12;::::0;;;;:34;;;;-1:-1:-1;45938:104:0:o;35942:369::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;36058:15:::1;:31:::0;;;36100:15:::1;:31:::0;;;36142:9:::1;:19:::0;;;36154:7;36187:33:::1;36118:13:::0;36076;36187:33:::1;:::i;:::-;:45;;;;:::i;:::-;36172:12;:60:::0;;;36267:2:::1;-1:-1:-1::0;36251:18:0::1;36243:60;;;::::0;-1:-1:-1;;;36243:60:0;;8984:2:1;36243:60:0::1;::::0;::::1;8966:21:1::0;9023:2;9003:18;;;8996:30;9062:31;9042:18;;;9035:59;9111:18;;36243:60:0::1;8782:353:1::0;36243:60:0::1;35942:369:::0;;;:::o;34224:155::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;34279:13:::1;:20:::0;;34310:18;;;;;;34356:15:::1;34339:14;:32:::0;34224:155::o;35829:101::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;35901:11:::1;:21:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35829:101::o;8045:104::-;8101:13;8134:7;8127:14;;;;;:::i;36899:244::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;37006:13:::1;-1:-1:-1::0;;;;;36998:21:0::1;:4;-1:-1:-1::0;;;;;36998:21:0::1;;;36990:91;;;::::0;-1:-1:-1;;;36990:91:0;;9342:2:1;36990:91:0::1;::::0;::::1;9324:21:1::0;9381:2;9361:18;;;9354:30;9420:34;9400:18;;;9393:62;9491:27;9471:18;;;9464:55;9536:19;;36990:91:0::1;9140:421:1::0;36990:91:0::1;37094:41;37123:4;37129:5;37094:28;:41::i;:::-;36899:244:::0;;:::o;12129:269::-;12222:4;12239:129;12248:12;:10;:12::i;:::-;12262:7;12271:96;12310:15;12271:96;;;;;;;;;;;;;;;;;:11;:25;12283:12;:10;:12::i;:::-;-1:-1:-1;;;;;12271:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;12271:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;9457:175::-;9543:4;9560:42;9570:12;:10;:12::i;:::-;9584:9;9595:6;9560:9;:42::i;37347:208::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;37484:15:::1;::::0;37441:59:::1;::::0;-1:-1:-1;;;;;37484:15:0;;::::1;::::0;37441:59;::::1;::::0;::::1;::::0;37484:15:::1;::::0;37441:59:::1;37511:15;:36:::0;;;::::1;-1:-1:-1::0;;;;;37511:36:0;;;::::1;::::0;;;::::1;::::0;;37347:208::o;36709:182::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;-1:-1:-1;;;;;36794:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;36794:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36849:34;;1294:41:1;;;36849:34:0::1;::::0;1267:18:1;36849:34:0::1;;;;;;;36709:182:::0;;:::o;36323:378::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;36440:16:::1;:32:::0;;;36483:16:::1;:32:::0;;;36526:10:::1;:20:::0;;;36539:7;36573:35:::1;36502:13:::0;36459;36573:35:::1;:::i;:::-;:48;;;;:::i;:::-;36557:13;:64:::0;;;-1:-1:-1;36640:19:0::1;36632:61;;;::::0;-1:-1:-1;;;36632:61:0;;9768:2:1;36632:61:0::1;::::0;::::1;9750:21:1::0;9807:2;9787:18;;;9780:30;9846:31;9826:18;;;9819:59;9895:18;;36632:61:0::1;9566:353:1::0;35355:218:0;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;35480:4:::1;35471:7;35451:13;9034:12:::0;;;8946:108;35451:13:::1;:17;::::0;35467:1:::1;35451:17;:::i;:::-;:27;;;;:::i;:::-;35450:34;;;;:::i;:::-;35440:6;:44;;35432:93;;;::::0;-1:-1:-1;;;35432:93:0;;10126:2:1;35432:93:0::1;::::0;::::1;10108:21:1::0;10165:2;10145:18;;;10138:30;10204:34;10184:18;;;10177:62;10275:6;10255:18;;;10248:34;10299:19;;35432:93:0::1;9924:400:1::0;35432:93:0::1;35548:17;:6:::0;35558::::1;35548:17;:::i;:::-;35536:9;:29:::0;-1:-1:-1;35355:218:0:o;34829:269::-;34910:4;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;34966:6:::1;34946:13;9034:12:::0;;;8946:108;34946:13:::1;:17;::::0;34962:1:::1;34946:17;:::i;:::-;:26;;;;:::i;:::-;34933:9;:39;;34925:105;;;::::0;-1:-1:-1;;;34925:105:0;;10531:2:1;34925:105:0::1;::::0;::::1;10513:21:1::0;10570:2;10550:18;;;10543:30;10609:34;10589:18;;;10582:62;10680:23;10660:18;;;10653:51;10721:19;;34925:105:0::1;10329:417:1::0;34925:105:0::1;-1:-1:-1::0;35040:18:0::1;:30:::0;;;35087:4:::1;21662:1;34829:269:::0;;;:::o;34620:134::-;34680:4;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;-1:-1:-1;34696:20:0::1;:28:::0;;-1:-1:-1;;34696:28:0::1;::::0;;;34620:134;:::o;21866:244::-;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;-1:-1:-1;;;;;21955:22:0;::::1;21947:73;;;::::0;-1:-1:-1;;;21947:73:0;;10953:2:1;21947:73:0::1;::::0;::::1;10935:21:1::0;10992:2;10972:18;;;10965:30;11031:34;11011:18;;;11004:62;11102:8;11082:18;;;11075:36;11128:19;;21947:73:0::1;10751:402:1::0;21947:73:0::1;22057:6;::::0;22036:38:::1;::::0;-1:-1:-1;;;;;22036:38:0;;::::1;::::0;22057:6:::1;::::0;22036:38:::1;::::0;22057:6:::1;::::0;22036:38:::1;22085:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;22085:17:0;;;::::1;::::0;;;::::1;::::0;;21866:244::o;46860:1018::-;46944:4;21602:12;:10;:12::i;:::-;21592:6;;-1:-1:-1;;;;;21592:6:0;;;:22;;;21584:67;;;;-1:-1:-1;;;21584:67:0;;6147:2:1;21584:67:0;;;6129:21:1;;;6166:18;;;6159:30;6225:34;6205:18;;;6198:62;6277:18;;21584:67:0;5945:356:1;21584:67:0;47009:19:::1;;46986:20;;:42;;;;:::i;:::-;46968:15;:60;46960:106;;;::::0;-1:-1:-1;;;46960:106:0;;11360:2:1;46960:106:0::1;::::0;::::1;11342:21:1::0;;;11379:18;;;11372:30;11438:34;11418:18;;;11411:62;11490:18;;46960:106:0::1;11158:356:1::0;46960:106:0::1;47096:4;47085:7;:15;;47077:70;;;::::0;-1:-1:-1;;;47077:70:0;;11721:2:1;47077:70:0::1;::::0;::::1;11703:21:1::0;11760:2;11740:18;;;11733:30;11799:34;11779:18;;;11772:62;11870:12;11850:18;;;11843:40;11900:19;;47077:70:0::1;11519:406:1::0;47077:70:0::1;47181:15;47158:20;:38:::0;47290:29:::1;::::0;;;;-1:-1:-1;;;;;47305:13:0::1;1789:55:1::0;47290:29:0::1;::::0;::::1;1771:74:1::0;47259:28:0::1;::::0;47290:4:::1;::::0;:14:::1;::::0;1744:18:1;;47290:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47259:60:::0;-1:-1:-1;47377:20:0::1;47400:44;47438:5;47400:33;47259:60:::0;47425:7;47400:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;47377:67:::0;-1:-1:-1;47557:16:0;;47553:109:::1;;47589:61;47605:13;47628:6;47637:12;47589:15;:61::i;:::-;47745:19;47782:13;47745:51;;47807:4;-1:-1:-1::0;;;;;47807:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;47834:14:0::1;::::0;::::1;::::0;-1:-1:-1;47834:14:0;;-1:-1:-1;47834:14:0::1;-1:-1:-1::0;47866:4:0::1;::::0;46860:1018;-1:-1:-1;;;;46860:1018:0:o;16693:181::-;16751:7;;16783:5;16787:1;16783;:5;:::i;:::-;16771:17;;16812:1;16807;:6;;16799:46;;;;-1:-1:-1;;;16799:46:0;;12321:2:1;16799:46:0;;;12303:21:1;12360:2;12340:18;;;12333:30;12399:29;12379:18;;;12372:57;12446:18;;16799:46:0;12119:351:1;16799:46:0;16865:1;16693:181;-1:-1:-1;;;16693:181:0:o;6611:158::-;6664:7;6691:9;;;;;;;:17;;6704:4;6691:17;:43;;;;-1:-1:-1;6726:8:0;;-1:-1:-1;;;;;6726:8:0;6712:10;:22;6691:43;:69;;-1:-1:-1;6750:10:0;;6611:158::o;6691:69::-;-1:-1:-1;6745:1:0;;6611:158::o;15315:380::-;-1:-1:-1;;;;;15451:19:0;;15443:68;;;;-1:-1:-1;;;15443:68:0;;12677:2:1;15443:68:0;;;12659:21:1;12716:2;12696:18;;;12689:30;12755:34;12735:18;;;12728:62;12826:6;12806:18;;;12799:34;12850:19;;15443:68:0;12475:400:1;15443:68:0;-1:-1:-1;;;;;15530:21:0;;15522:68;;;;-1:-1:-1;;;15522:68:0;;13082:2:1;15522:68:0;;;13064:21:1;13121:2;13101:18;;;13094:30;13160:34;13140:18;;;13133:62;13231:4;13211:18;;;13204:32;13253:19;;15522:68:0;12880:398:1;15522:68:0;-1:-1:-1;;;;;15603:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15655:32;;2002:25:1;;;15655:32:0;;1975:18:1;15655:32:0;;;;;;;;15315:380;;;:::o;37917:4492::-;-1:-1:-1;;;;;38049:18:0;;38041:68;;;;-1:-1:-1;;;38041:68:0;;13485:2:1;38041:68:0;;;13467:21:1;13524:2;13504:18;;;13497:30;13563:34;13543:18;;;13536:62;13634:7;13614:18;;;13607:35;13659:19;;38041:68:0;13283:401:1;38041:68:0;-1:-1:-1;;;;;38128:16:0;;38120:64;;;;-1:-1:-1;;;38120:64:0;;13891:2:1;38120:64:0;;;13873:21:1;13930:2;13910:18;;;13903:30;13969:34;13949:18;;;13942:62;14040:5;14020:18;;;14013:33;14063:19;;38120:64:0;13689:399:1;38120:64:0;38200:11;38197:92;;38228:28;38244:4;38250:2;38254:1;38228:15;:28::i;38197:92::-;38312:14;;;;38309:1887;;;21532:6;;-1:-1:-1;;;;;38364:15:0;;;21532:6;;38364:15;;;;:49;;-1:-1:-1;21532:6:0;;-1:-1:-1;;;;;38400:13:0;;;21532:6;;38400:13;;38364:49;:86;;;;-1:-1:-1;;;;;;38434:16:0;;;;38364:86;:128;;;;-1:-1:-1;;;;;;38471:21:0;;38485:6;38471:21;;38364:128;:158;;;;-1:-1:-1;38514:8:0;;;;;;;38513:9;38364:158;38342:1843;;;38560:13;;;;;;;38556:148;;-1:-1:-1;;;;;38605:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38634:23:0;;;;;;:19;:23;;;;;;;;38605:52;38597:87;;;;-1:-1:-1;;;38597:87:0;;14295:2:1;38597:87:0;;;14277:21:1;14334:2;14314:18;;;14307:30;14373:24;14353:18;;;14346:52;14415:18;;38597:87:0;14093:346:1;38597:87:0;38862:20;;;;38858:423;;;21532:6;;-1:-1:-1;;;;;38910:13:0;;;21532:6;;38910:13;;;;:47;;;38941:15;-1:-1:-1;;;;;38927:30:0;:2;-1:-1:-1;;;;;38927:30:0;;;38910:47;:79;;;;;38975:13;-1:-1:-1;;;;;38961:28:0;:2;-1:-1:-1;;;;;38961:28:0;;;38910:79;38906:356;;;39054:9;39025:39;;;;:28;:39;;;;;;39067:12;-1:-1:-1;39017:140:0;;;;-1:-1:-1;;;39017:140:0;;14646:2:1;39017:140:0;;;14628:21:1;14685:2;14665:18;;;14658:30;14724:34;14704:18;;;14697:62;14795:34;14775:18;;;14768:62;14867:11;14846:19;;;14839:40;14896:19;;39017:140:0;14444:477:1;39017:140:0;39213:9;39184:39;;;;:28;:39;;;;;39226:12;39184:54;;38906:356;-1:-1:-1;;;;;39350:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;39386:35:0;;;;;;:31;:35;;;;;;;;39385:36;39350:71;39346:824;;;39468:20;;39458:6;:30;;39450:96;;;;-1:-1:-1;;;39450:96:0;;15128:2:1;39450:96:0;;;15110:21:1;15167:2;15147:18;;;15140:30;15206:34;15186:18;;;15179:62;15277:23;15257:18;;;15250:51;15318:19;;39450:96:0;14926:417:1;39450:96:0;39607:9;;-1:-1:-1;;;;;9218:18:0;;9191:7;9218:18;;;:9;:18;;;;;;39581:22;;:6;:22;:::i;:::-;:35;;39573:67;;;;-1:-1:-1;;;39573:67:0;;15550:2:1;39573:67:0;;;15532:21:1;15589:2;15569:18;;;15562:30;15628:21;15608:18;;;15601:49;15667:18;;39573:67:0;15348:343:1;39573:67:0;39346:824;;;-1:-1:-1;;;;;39734:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;39768:37:0;;;;;;:31;:37;;;;;;;;39767:38;39734:71;39730:440;;;39842:2;;;;;;;;:10;;:2;:10;39834:19;;;;;;39898:20;;39888:6;:30;;39880:97;;;;-1:-1:-1;;;39880:97:0;;15898:2:1;39880:97:0;;;15880:21:1;15937:2;15917:18;;;15910:30;15976:34;15956:18;;;15949:62;16047:24;16027:18;;;16020:52;16089:19;;39880:97:0;15696:418:1;39730:440:0;-1:-1:-1;;;;;40024:35:0;;;;;;:31;:35;;;;;;;;40020:150;;40117:9;;-1:-1:-1;;;;;9218:18:0;;9191:7;9218:18;;;:9;:18;;;;;;40091:22;;:6;:22;:::i;:::-;:35;;40083:67;;;;-1:-1:-1;;;40083:67:0;;15550:2:1;40083:67:0;;;15532:21:1;15589:2;15569:18;;;15562:30;15628:21;15608:18;;;15601:49;15667:18;;40083:67:0;15348:343:1;40083:67:0;40279:4;40230:28;9218:18;;;:9;:18;;;;;;40345;;40321:42;;;;;;;40394:35;;-1:-1:-1;40418:11:0;;;;;;;40394:35;:61;;;;-1:-1:-1;40447:8:0;;;;;;;40446:9;40394:61;:110;;;;-1:-1:-1;;;;;;40473:31:0;;;;;;:25;:31;;;;;;;;40472:32;40394:110;:153;;;;-1:-1:-1;;;;;;40522:25:0;;;;;;:19;:25;;;;;;;;40521:26;40394:153;:194;;;;-1:-1:-1;;;;;;40565:23:0;;;;;;:19;:23;;;;;;;;40564:24;40394:194;40376:338;;;40615:8;:15;;;;;;;;40659:10;:8;:10::i;:::-;40686:8;:16;;;;;;40376:338;40738:8;;;;;;;40737:9;:42;;;;-1:-1:-1;;;;;;40750:29:0;;;;;;:25;:29;;;;;;;;40737:42;:59;;;;-1:-1:-1;40783:13:0;;;;40737:59;:114;;;;;40836:15;;40819:14;;:32;;;;:::i;:::-;40800:15;:51;;40737:114;:144;;;;-1:-1:-1;;;;;;40856:25:0;;;;;;:19;:25;;;;;;;;40855:26;40737:144;40734:204;;;40897:29;:27;:29::i;:::-;;40734:204;40966:8;;-1:-1:-1;;;;;41083:25:0;;40950:12;41083:25;;;:19;:25;;;;;;40966:8;;;;;;;40965:9;;41083:25;;:52;;-1:-1:-1;;;;;;41112:23:0;;;;;;:19;:23;;;;;;;;41083:52;41080:99;;;-1:-1:-1;41162:5:0;41080:99;41199:12;41303:7;41300:967;;;-1:-1:-1;;;;;41354:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;41403:1;41387:13;;:17;41354:50;41350:748;;;41431:34;41461:3;41431:25;41442:13;;41431:6;:10;;:25;;;;:::i;:34::-;41424:41;;41532:13;;41513:16;;41506:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41484:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;41600:13:0;;41587:10;;41580:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;41564:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;41680:13:0;;41661:16;;41654:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;41632:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;41350:748:0;;-1:-1:-1;41350:748:0;;-1:-1:-1;;;;;41754:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;41804:1;41789:12;;:16;41754:51;41751:347;;;41830:33;41859:3;41830:24;41841:12;;41830:6;:10;;:24;;;;:::i;:33::-;41823:40;;41926:12;;41908:15;;41901:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41879:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;41992:12:0;;41980:9;;41973:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;41957:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;42070:12:0;;42052:15;;42045:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;42023:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;41751:347:0;42129:8;;42126:93;;42161:42;42177:4;42191;42198;42161:15;:42::i;:::-;42241:14;42251:4;42241:14;;:::i;:::-;;;41300:967;-1:-1:-1;;;;;42295:12:0;;;;;;:6;:12;;;;;;;;:21;42287:69;;;;-1:-1:-1;;;42287:69:0;;16451:2:1;42287:69:0;;;16433:21:1;16490:2;16470:18;;;16463:30;16529:34;16509:18;;;16502:62;16600:5;16580:18;;;16573:33;16623:19;;42287:69:0;16249:399:1;42287:69:0;42368:33;42384:4;42390:2;42394:6;42368:15;:33::i;:::-;38030:4379;;;;37917:4492;;;:::o;17596:192::-;17682:7;17718:12;17710:6;;;;17702:29;;;;-1:-1:-1;;;17702:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17742:9:0;17754:5;17758:1;17754;:5;:::i;:::-;17742:17;17596:192;-1:-1:-1;;;;;17596:192:0:o;37151:188::-;-1:-1:-1;;;;;37234:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37234:39:0;;;;;;;;;;37291:40;;37234:39;;:31;37291:40;;;37151:188;;:::o;18047:471::-;18105:7;18350:6;18346:47;;-1:-1:-1;18380:1:0;18373:8;;18346:47;18405:9;18417:5;18421:1;18417;:5;:::i;:::-;18405:17;-1:-1:-1;18450:1:0;18441:5;18445:1;18405:17;18441:5;:::i;:::-;:10;18433:56;;;;-1:-1:-1;;;18433:56:0;;16855:2:1;18433:56:0;;;16837:21:1;16894:2;16874:18;;;16867:30;16933:34;16913:18;;;16906:62;17004:3;16984:18;;;16977:31;17025:19;;18433:56:0;16653:397:1;18994:132:0;19052:7;19079:39;19083:1;19086;19079:39;;;;;;;;;;;;;;;;;:3;:39::i;12888:573::-;-1:-1:-1;;;;;13028:20:0;;13020:70;;;;-1:-1:-1;;;13020:70:0;;13485:2:1;13020:70:0;;;13467:21:1;13524:2;13504:18;;;13497:30;13563:34;13543:18;;;13536:62;13634:7;13614:18;;;13607:35;13659:19;;13020:70:0;13283:401:1;13020:70:0;-1:-1:-1;;;;;13109:23:0;;13101:71;;;;-1:-1:-1;;;13101:71:0;;13891:2:1;13101:71:0;;;13873:21:1;13930:2;13910:18;;;13903:30;13969:34;13949:18;;;13942:62;14040:5;14020:18;;;14013:33;14063:19;;13101:71:0;13689:399:1;13101:71:0;13265;13287:6;13265:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13265:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13245:17:0;;;;;;;:9;:17;;;;;;:91;;;;13370:20;;;;;;;:32;;13395:6;13370:24;:32::i;:::-;-1:-1:-1;;;;;13347:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13418:35;;;;;;;;;;13446:6;2002:25:1;;1990:2;1975:18;;1856:177;43542:1666:0;43625:4;43581:23;9218:18;;;:9;:18;;;;;;43581:50;;43642:25;43712:12;;43691:18;;43670;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43642:82;-1:-1:-1;43735:12:0;43771:20;;;:46;;-1:-1:-1;43795:22:0;;43771:46;43768:60;;;43820:7;;;43542:1666::o;43768:60::-;43861:18;;:23;;43882:2;43861:23;:::i;:::-;43843:15;:41;43840:111;;;43916:18;;:23;;43937:2;43916:23;:::i;:::-;43898:41;;43840:111;44020:23;44105:1;44085:17;44064:18;;44046:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44020:86;-1:-1:-1;44117:26:0;44146:36;:15;44020:86;44146:19;:36::i;:::-;44117:65;-1:-1:-1;44231:21:0;44265:36;44117:65;44265:16;:36::i;:::-;44323:18;44344:44;:21;44370:17;44344:25;:44::i;:::-;44323:65;;44409:23;44435:57;44474:17;44435:34;44450:18;;44435:10;:14;;:34;;;;:::i;:57::-;44409:83;;44503:17;44523:51;44556:17;44523:28;44538:12;;44523:10;:14;;:28;;;;:::i;:51::-;44503:71;-1:-1:-1;44605:23:0;44503:71;44631:28;44644:15;44631:10;:28;:::i;:::-;:40;;;;:::i;:::-;44723:1;44702:18;:22;;;44735:18;:22;;;44768:12;:16;;;44826:9;;44818:45;;44605:66;;-1:-1:-1;;;;;;44826:9:0;;44849;;44818:45;44723:1;44818:45;44849:9;44826;44818:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44805:58:0;;-1:-1:-1;;44887:19:0;;;;;:42;;;44928:1;44910:15;:19;44887:42;44884:210;;;44945:46;44958:15;44975;44945:12;:46::i;:::-;45063:18;;45011:71;;;17467:25:1;;;17523:2;17508:18;;17501:34;;;17551:18;;;17544:34;;;;45011:71:0;;;;;;17455:2:1;45011:71:0;;;44884:210;45145:15;;45137:63;;-1:-1:-1;;;;;45145:15:0;;;;45174:21;;45137:63;;;;45174:21;45145:15;45137:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;43542:1666:0:o;46048:804::-;46148:15;46131:14;:32;46257:29;;;;;-1:-1:-1;;;;;46272:13:0;1789:55:1;46257:29:0;;;1771:74:1;46105:4:0;;;;46257;;:14;;1744:18:1;;46257:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46226:60;;46344:20;46367:53;46414:5;46367:42;46392:16;;46367:20;:24;;:42;;;;:::i;:53::-;46344:76;-1:-1:-1;46533:16:0;;46529:109;;46565:61;46581:13;46604:6;46613:12;46565:15;:61::i;:::-;46721:19;46758:13;46721:51;;46783:4;-1:-1:-1;;;;;46783:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46810:12:0;;;;-1:-1:-1;46810:12:0;;-1:-1:-1;46810:12:0;46840:4;46833:11;;;;;46048:804;:::o;19622:278::-;19708:7;19743:12;19736:5;19728:28;;;;-1:-1:-1;;;19728:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19767:9:0;19779:5;19783:1;19779;:5;:::i;17157:136::-;17215:7;17242:43;17246:1;17249;17242:43;;;;;;;;;;;;;;;;;:3;:43::i;42417:591::-;42569:16;;;42583:1;42569:16;;;;;;;;42545:21;;42569:16;;;;;;;;;;-1:-1:-1;42569:16:0;42545:40;;42614:4;42596;42601:1;42596:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42596:23:0;;;-1:-1:-1;;;;;42596:23:0;;;;;42640:15;-1:-1:-1;;;;;42640:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42630:4;42635:1;42630:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;42630:32:0;;;-1:-1:-1;;;;;42630:32:0;;;;;42675:62;42692:4;42707:15;42725:11;42675:8;:62::i;:::-;42776:224;;;;;-1:-1:-1;;;;;42776:15:0;:66;;;;:224;;42857:11;;42883:1;;42927:4;;42954;;42974:15;;42776:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42472:536;42417:591;:::o;43019:513::-;43167:62;43184:4;43199:15;43217:11;43167:8;:62::i;:::-;43272:15;-1:-1:-1;;;;;43272:31:0;;43311:9;43344:4;43364:11;43390:1;43433;43476:7;21532:6;;-1:-1:-1;;;;;21532:6:0;;21467:79;43476:7;43272:252;;;;;;;;;;-1:-1:-1;;;;;19447:15:1;;;43272:252:0;;;19429:34:1;19479:18;;;19472:34;;;;19522:18;;;19515:34;;;;19565:18;;;19558:34;19629:15;;;19608:19;;;19601:44;43498:15:0;19661:19:1;;;19654:35;19340:19;;43272:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43019:513;;:::o;14:656: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:1;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:1:o;675:154::-;-1:-1:-1;;;;;754:5:1;750:54;743:5;740:65;730:93;;819:1;816;809:12;730:93;675:154;:::o;834:315::-;902:6;910;963:2;951:9;942:7;938:23;934:32;931:52;;;979:1;976;969:12;931:52;1018:9;1005:23;1037:31;1062:5;1037:31;:::i;:::-;1087:5;1139:2;1124:18;;;;1111:32;;-1:-1:-1;;;834:315:1:o;1346:247::-;1405:6;1458:2;1446:9;1437:7;1433:23;1429:32;1426:52;;;1474:1;1471;1464:12;1426:52;1513:9;1500:23;1532:31;1557:5;1532:31;:::i;2038:180::-;2097:6;2150:2;2138:9;2129:7;2125:23;2121:32;2118:52;;;2166:1;2163;2156:12;2118:52;-1:-1:-1;2189:23:1;;2038:180;-1:-1:-1;2038:180:1:o;2223:456::-;2300:6;2308;2316;2369:2;2357:9;2348:7;2344:23;2340:32;2337:52;;;2385:1;2382;2375:12;2337:52;2424:9;2411:23;2443:31;2468:5;2443:31;:::i;:::-;2493:5;-1:-1:-1;2550:2:1;2535:18;;2522:32;2563:33;2522:32;2563:33;:::i;:::-;2223:456;;2615:7;;-1:-1:-1;;;2669:2:1;2654:18;;;;2641:32;;2223:456::o;3104:160::-;3169:20;;3225:13;;3218:21;3208:32;;3198:60;;3254:1;3251;3244:12;3269:689;3361:6;3369;3377;3430:2;3418:9;3409:7;3405:23;3401:32;3398:52;;;3446:1;3443;3436:12;3398:52;3486:9;3473:23;3515:18;3556:2;3548:6;3545:14;3542:34;;;3572:1;3569;3562:12;3542:34;3610:6;3599:9;3595:22;3585:32;;3655:7;3648:4;3644:2;3640:13;3636:27;3626:55;;3677:1;3674;3667:12;3626:55;3717:2;3704:16;3743:2;3735:6;3732:14;3729:34;;;3759:1;3756;3749:12;3729:34;3814:7;3807:4;3797:6;3794:1;3790:14;3786:2;3782:23;3778:34;3775:47;3772:67;;;3835:1;3832;3825:12;3772:67;3866:4;3858:13;;;;-1:-1:-1;3890:6:1;-1:-1:-1;3915:37:1;;3931:20;;;-1:-1:-1;3915:37:1;:::i;:::-;3905:47;;3269:689;;;;;:::o;3963:316::-;4037:6;4045;4053;4106:2;4094:9;4085:7;4081:23;4077:32;4074:52;;;4122:1;4119;4112:12;4074:52;4158:9;4145:23;4135:33;;4215:2;4204:9;4200:18;4187:32;4177:42;;4238:35;4269:2;4258:9;4254:18;4238:35;:::i;4284:315::-;4349:6;4357;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;4465:9;4452:23;4484:31;4509:5;4484:31;:::i;:::-;4534:5;-1:-1:-1;4558:35:1;4589:2;4574:18;;4558:35;:::i;:::-;4548:45;;4284:315;;;;;:::o;4604:316::-;4681:6;4689;4697;4750:2;4738:9;4729:7;4725:23;4721:32;4718:52;;;4766:1;4763;4756:12;4718:52;-1:-1:-1;;4789:23:1;;;4859:2;4844:18;;4831:32;;-1:-1:-1;4910:2:1;4895:18;;;4882:32;;4604:316;-1:-1:-1;4604:316:1:o;4925:180::-;4981:6;5034:2;5022:9;5013:7;5009:23;5005:32;5002:52;;;5050:1;5047;5040:12;5002:52;5073:26;5089:9;5073:26;:::i;5110:388::-;5178:6;5186;5239:2;5227:9;5218:7;5214:23;5210:32;5207:52;;;5255:1;5252;5245:12;5207:52;5294:9;5281:23;5313:31;5338:5;5313:31;:::i;:::-;5363:5;-1:-1:-1;5420:2:1;5405:18;;5392:32;5433:33;5392:32;5433:33;:::i;:::-;5485:7;5475:17;;;5110:388;;;;;:::o;5503:437::-;5582:1;5578:12;;;;5625;;;5646:61;;5700:4;5692:6;5688:17;5678:27;;5646:61;5753:2;5745:6;5742:14;5722:18;5719:38;5716:218;;;5790:77;5787:1;5780:88;5891:4;5888:1;5881:15;5919:4;5916:1;5909:15;5716:218;;5503:437;;;:::o;6306:184::-;6358:77;6355:1;6348:88;6455:4;6452:1;6445:15;6479:4;6476:1;6469:15;6495:228;6535:7;6661:1;6593:66;6589:74;6586:1;6583:81;6578:1;6571:9;6564:17;6560:105;6557:131;;;6668:18;;:::i;:::-;-1:-1:-1;6708:9:1;;6495:228::o;6728:274::-;6768:1;6794;6784:189;;6829:77;6826:1;6819:88;6930:4;6927:1;6920:15;6958:4;6955:1;6948:15;6784:189;-1:-1:-1;6987:9:1;;6728:274::o;7423:184::-;7475:77;7472:1;7465:88;7572:4;7569:1;7562:15;7596:4;7593:1;7586:15;7612:195;7651:3;7682:66;7675:5;7672:77;7669:103;;;7752:18;;:::i;:::-;-1:-1:-1;7799:1:1;7788:13;;7612:195::o;8649:128::-;8689:3;8720:1;8716:6;8713:1;8710:13;8707:39;;;8726:18;;:::i;:::-;-1:-1:-1;8762:9:1;;8649:128::o;11930:184::-;12000:6;12053:2;12041:9;12032:7;12028:23;12024:32;12021:52;;;12069:1;12066;12059:12;12021:52;-1:-1:-1;12092:16:1;;11930:184;-1:-1:-1;11930:184:1:o;16119:125::-;16159:4;16187:1;16184;16181:8;16178:34;;;16192:18;;:::i;:::-;-1:-1:-1;16229:9:1;;16119:125::o;17778:251::-;17848:6;17901:2;17889:9;17880:7;17876:23;17872:32;17869:52;;;17917:1;17914;17907:12;17869:52;17949:9;17943:16;17968:31;17993:5;17968:31;:::i;18034:1026::-;18296:4;18344:3;18333:9;18329:19;18375:6;18364:9;18357:25;18401:2;18439:6;18434:2;18423:9;18419:18;18412:34;18482:3;18477:2;18466:9;18462:18;18455:31;18506:6;18541;18535:13;18572:6;18564;18557:22;18610:3;18599:9;18595:19;18588:26;;18649:2;18641:6;18637:15;18623:29;;18670:1;18680:218;18694:6;18691:1;18688:13;18680:218;;;18759:13;;-1:-1:-1;;;;;18755:62:1;18743:75;;18873:15;;;;18838:12;;;;18716:1;18709:9;18680:218;;;-1:-1:-1;;;;;;;18954:55:1;;;;18949:2;18934:18;;18927:83;-1:-1:-1;;;19041:3:1;19026:19;19019:35;18915:3;18034:1026;-1:-1:-1;;;18034:1026:1:o;19700:306::-;19788:6;19796;19804;19857:2;19845:9;19836:7;19832:23;19828:32;19825:52;;;19873:1;19870;19863:12;19825:52;19902:9;19896:16;19886:26;;19952:2;19941:9;19937:18;19931:25;19921:35;;19996:2;19985:9;19981:18;19975:25;19965:35;;19700:306;;;;;:::o
Swarm Source
ipfs://982152b58ea8d3ee21b4cb86b70ce6201794b816660e809c2f10e54408ff851b
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.