Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
500,000 MMM
Holders
112
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
MMM
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-14 */ // https://t.me/MiniMillionTokenHolders // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address lpPair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address lpPair); function allPairs(uint) external view returns (address lpPair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address lpPair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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 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 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; } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata, Ownable { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _liquidityHolders; mapping (address => bool) private _isBlacklisted; uint256 private _totalSupply; string private _name; string private _symbol; uint256 private startingSupply = 500_000; uint256 private _total = startingSupply * 10**18; // UNI ROUTER address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public burnAddress = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 public dexRouter; address private lpPair; // Max TX amount is 1% of the total supply. uint256 private maxTxPercent = 1; // Less fields to edit uint256 private maxTxDivisor = 100; uint256 private _maxTxAmount = (_total * maxTxPercent) / maxTxDivisor; uint256 private _previousMaxTxAmount = _maxTxAmount; uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor; // Actual amount for UI's // Maximum wallet size is 2% of the total supply. uint256 private maxWalletPercent = 2; // Less fields to edit uint256 private maxWalletDivisor = 100; uint256 private _maxWalletSize = (_total * maxWalletPercent) / maxWalletDivisor; uint256 private _previousMaxWalletSize = _maxWalletSize; uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor; // Actual amount for UI's bool private sniperProtection = true; bool public _hasLiqBeenAdded = false; uint256 private _liqAddBlock = 0; uint256 private _liqAddStamp = 0; uint256 public snipeBlockAmt; uint256 public snipersCaught = 0; event SniperCaught(address sniperAddress); /** * @dev Sets the values for {name} and {symbol}. * * The defaut 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_, uint256 initialSupply, address owner, uint256 _snipeBlockAmt) { _name = name_; _symbol = symbol_; _liquidityHolders[msg.sender] = true; snipeBlockAmt = _snipeBlockAmt; IUniswapV2Router02 _dexRouter = IUniswapV2Router02(_routerAddress); lpPair = IUniswapV2Factory(_dexRouter.factory()) .createPair(address(this), _dexRouter.WETH()); _totalSupply += initialSupply; _balances[owner] += initialSupply; emit Transfer(address(0), owner, initialSupply); } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); 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] + 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function _hasLimits(address from, address to) private view returns (bool) { return !_liquidityHolders[to] && !_liquidityHolders[from] && to != burnAddress && to != address(0); } function _checkLiquidityAdd(address from, address to) private { require(!_hasLiqBeenAdded, "Liquidity already added and marked."); if (!_hasLimits(from, to) && to == lpPair) { _hasLiqBeenAdded = true; _liqAddBlock = block.number; } } /** * @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"); if(_hasLimits(sender, recipient)) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if(_hasLimits(sender, recipient) && recipient != _routerAddress && recipient != lpPair ) { uint256 contractBalanceRecepient = balanceOf(recipient); require(contractBalanceRecepient + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize."); } _beforeTokenTransfer(sender, recipient); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, 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)); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= 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); } function isBlacklisted(address account) public view returns (bool) { return _isBlacklisted[account]; } function setBlacklist(address account, bool enabled) external onlyOwner() { require(_isBlacklisted[account] != enabled); _isBlacklisted[account] = enabled; } function setSniperProtectionEnabled(bool enabled) external onlyOwner() { require(enabled != sniperProtection, "Already set."); sniperProtection = enabled; } /** * @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 sender, address recipient) internal virtual { // Failsafe, disable the whole system if needed. if (sniperProtection){ // If sender is a sniper address, reject the transfer. if (isBlacklisted(sender) || isBlacklisted(recipient)) { revert("Sniper rejected."); } // Check if this is the liquidity adding tx to startup. if (!_hasLiqBeenAdded) { _checkLiquidityAdd(sender, recipient); if (!_hasLiqBeenAdded && _hasLimits(sender, recipient)) { revert("Only owner can transfer at this time."); } } else { if (_liqAddBlock > 0 && sender == lpPair && _hasLimits(sender, recipient) ) { if (block.number - _liqAddBlock < snipeBlockAmt) { _isBlacklisted[recipient] = true; snipersCaught ++; emit SniperCaught(recipient); } } } } } function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner() { require(divisor <= 10000); // Cannot set lower than 0.01% _maxTxAmount = _total.mul(percent).div( divisor // Division by divisor, makes it mutable. ); maxTxAmountUI = startingSupply.mul(percent).div(divisor); } function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner() { require(divisor <= 1000); // Cannot set lower than 0.1% _maxWalletSize = _total.mul(percent).div( divisor // Division by divisor, makes it mutable. ); maxWalletSizeUI = startingSupply.mul(percent).div(divisor); } } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } } // File: @openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol pragma solidity ^0.8.0; /** * @dev {ERC20} token, including: * * - Preminted initial supply * - Ability for holders to burn (destroy) their tokens * - No access control mechanism (for minting/pausing) and hence no governance * * This contract uses {ERC20Burnable} to include burn capabilities - head to * its documentation for details. * * _Available since v3.4._ */ contract ERC20PresetFixedSupply is ERC20Burnable { /** * @dev Mints `initialSupply` amount of token and transfers them to `owner`. * * See {ERC20-constructor}. */ constructor( string memory name, string memory symbol, uint256 initialSupply, address owner, uint256 snipeBlockAmt ) ERC20(name, symbol, initialSupply, owner, snipeBlockAmt) {} } // File: contracts/million.sol // Million token pragma solidity ^0.8.0; contract MMM is ERC20PresetFixedSupply { string private _name = "Mini Million"; string private _symbol = "MMM"; uint256 private initialSupply = 500_000; uint256 private _decMul = 18; uint256 _tTotal = initialSupply * 10 ** _decMul; constructor() ERC20PresetFixedSupply(_name, _symbol, _tTotal, msg.sender, 2) { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlockAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526207a120600855670de0b6b3a764000060085462000023919062000b7a565b600955737a250d5630b4cf539739df2c5dacb4c659f2488d600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e556064600f55600f54600e54600954620000dd919062000b7a565b620000e99190620009aa565b601055601054601155600f54600e5460085462000107919062000b7a565b620001139190620009aa565b6012556002601355606460145560145460135460095462000135919062000b7a565b620001419190620009aa565b6015556015546016556014546013546008546200015f919062000b7a565b6200016b9190620009aa565b6017556001601860006101000a81548160ff0219169083151502179055506000601860016101000a81548160ff02191690831515021790555060006019556000601a556000601c556040518060400160405280600c81526020017f4d696e69204d696c6c696f6e0000000000000000000000000000000000000000815250601d908051906020019062000200929190620007ee565b506040518060400160405280600381526020017f4d4d4d0000000000000000000000000000000000000000000000000000000000815250601e90805190602001906200024e929190620007ee565b506207a120601f556012602055602054600a6200026c919062000a3d565b601f546200027b919062000b7a565b6021553480156200028b57600080fd5b50601d80546200029b9062000c19565b80601f0160208091040260200160405190810160405280929190818152602001828054620002c99062000c19565b80156200031a5780601f10620002ee576101008083540402835291602001916200031a565b820191906000526020600020905b815481529060010190602001808311620002fc57829003601f168201915b5050505050601e80546200032e9062000c19565b80601f01602080910402602001604051908101604052809291908181526020018280546200035c9062000c19565b8015620003ad5780601f106200038157610100808354040283529160200191620003ad565b820191906000526020600020905b8154815290600101906020018083116200038f57829003601f168201915b505050505060215433600284848484846000620003cf620007e660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350846006908051906020019062000485929190620007ee565b5083600790805190602001906200049e929190620007ee565b506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601b819055506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200056c57600080fd5b505afa15801562000581573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005a79190620008b5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200060a57600080fd5b505afa1580156200061f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006459190620008b5565b6040518363ffffffff1660e01b81526004016200066492919062000903565b602060405180830381600087803b1580156200067f57600080fd5b505af115801562000694573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ba9190620008b5565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560008282546200070e91906200094d565b9250508190555083600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200076691906200094d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051620007cd919062000930565b60405180910390a3505050505050505050505062000d03565b600033905090565b828054620007fc9062000c19565b90600052602060002090601f0160209004810192826200082057600085556200086c565b82601f106200083b57805160ff19168380011785556200086c565b828001600101855582156200086c579182015b828111156200086b5782518255916020019190600101906200084e565b5b5090506200087b91906200087f565b5090565b5b808211156200089a57600081600090555060010162000880565b5090565b600081519050620008af8162000ce9565b92915050565b600060208284031215620008c857600080fd5b6000620008d8848285016200089e565b91505092915050565b620008ec8162000bdb565b82525050565b620008fd8162000c0f565b82525050565b60006040820190506200091a6000830185620008e1565b620009296020830184620008e1565b9392505050565b6000602082019050620009476000830184620008f2565b92915050565b60006200095a8262000c0f565b9150620009678362000c0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200099f576200099e62000c4f565b5b828201905092915050565b6000620009b78262000c0f565b9150620009c48362000c0f565b925082620009d757620009d662000c7e565b5b828204905092915050565b6000808291508390505b600185111562000a345780860481111562000a0c5762000a0b62000c4f565b5b600185161562000a1c5780820291505b808102905062000a2c8562000cdc565b9450620009ec565b94509492505050565b600062000a4a8262000c0f565b915062000a578362000c0f565b925062000a867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a8e565b905092915050565b60008262000aa0576001905062000b73565b8162000ab0576000905062000b73565b816001811462000ac9576002811462000ad45762000b0a565b600191505062000b73565b60ff84111562000ae95762000ae862000c4f565b5b8360020a91508482111562000b035762000b0262000c4f565b5b5062000b73565b5060208310610133831016604e8410600b841016171562000b445782820a90508381111562000b3e5762000b3d62000c4f565b5b62000b73565b62000b538484846001620009e2565b9250905081840481111562000b6d5762000b6c62000c4f565b5b81810290505b9392505050565b600062000b878262000c0f565b915062000b948362000c0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bd05762000bcf62000c4f565b5b828202905092915050565b600062000be88262000bef565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000c3257607f821691505b6020821081141562000c495762000c4862000cad565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b62000cf48162000bdb565b811462000d0057600080fd5b50565b6131738062000d136000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a9059cbb11610097578063e79d416011610071578063e79d4160146104f7578063f2fde38b14610515578063f6540ec714610531578063fe575a871461054f576101c4565b8063a9059cbb1461047b578063d7124d9f146104ab578063dd62ed3e146104c7576101c4565b806379cc6790116100d357806379cc6790146103f35780638da5cb5b1461040f57806395d89b411461042d578063a457c2d71461044b576101c4565b806370a082311461039b57806370d5ae05146103cb578063715018a6146103e9576101c4565b8063313ce5671161016657806342966c681161014057806342966c681461032557806350a8e01614610341578063570ce7a61461035f578063640384091461037d576101c4565b8063313ce567146102bb57806339509351146102d95780633f3cf56c14610309576101c4565b8063153b0d1e116101a2578063153b0d1e1461023557806318160ddd1461025157806323b872dd1461026f578063260039571461029f576101c4565b806306fdde03146101c95780630758d924146101e7578063095ea7b314610205575b600080fd5b6101d161057f565b6040516101de91906125df565b60405180910390f35b6101ef610611565b6040516101fc91906125c4565b60405180910390f35b61021f600480360381019061021a91906121a7565b610637565b60405161022c91906125a9565b60405180910390f35b61024f600480360381019061024a919061216b565b610655565b005b6102596107a2565b6040516102669190612861565b60405180910390f35b6102896004803603810190610284919061211c565b6107ac565b60405161029691906125a9565b60405180910390f35b6102b960048036038101906102b49190612235565b6108ad565b005b6102c36109af565b6040516102d0919061287c565b60405180910390f35b6102f360048036038101906102ee91906121a7565b6109b8565b60405161030091906125a9565b60405180910390f35b610323600480360381019061031e9190612235565b610a64565b005b61033f600480360381019061033a919061220c565b610b66565b005b610349610b7a565b60405161035691906125a9565b60405180910390f35b610367610b8d565b6040516103749190612861565b60405180910390f35b610385610b93565b6040516103929190612861565b60405180910390f35b6103b560048036038101906103b091906120b7565b610b99565b6040516103c29190612861565b60405180910390f35b6103d3610be2565b6040516103e0919061258e565b60405180910390f35b6103f1610c08565b005b61040d600480360381019061040891906121a7565b610d5b565b005b610417610ddf565b604051610424919061258e565b60405180910390f35b610435610e08565b60405161044291906125df565b60405180910390f35b610465600480360381019061046091906121a7565b610e9a565b60405161047291906125a9565b60405180910390f35b610495600480360381019061049091906121a7565b610f8e565b6040516104a291906125a9565b60405180910390f35b6104c560048036038101906104c091906121e3565b610fac565b005b6104e160048036038101906104dc91906120e0565b6110b4565b6040516104ee9190612861565b60405180910390f35b6104ff61113b565b60405161050c9190612861565b60405180910390f35b61052f600480360381019061052a91906120b7565b611141565b005b610539611303565b6040516105469190612861565b60405180910390f35b610569600480360381019061056491906120b7565b611309565b60405161057691906125a9565b60405180910390f35b60606006805461058e90612a74565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba90612a74565b80156106075780601f106105dc57610100808354040283529160200191610607565b820191906000526020600020905b8154815290600101906020018083116105ea57829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061064b61064461135f565b8484611367565b6001905092915050565b61065d61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e190612781565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561074757600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600554905090565b60006107b9848484611532565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061080461135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90612761565b60405180910390fd5b6108a18561089061135f565b858461089c9190612994565b611367565b60019150509392505050565b6108b561135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990612781565b60405180910390fd5b6103e881111561095157600080fd5b6109788161096a8460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b6015819055506109a5816109978460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6017819055505050565b60006012905090565b6000610a5a6109c561135f565b8484600260006109d361135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5591906128b3565b611367565b6001905092915050565b610a6c61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090612781565b60405180910390fd5b612710811115610b0857600080fd5b610b2f81610b218460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b601081905550610b5c81610b4e8460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6012819055505050565b610b77610b7161135f565b826119ef565b50565b601860019054906101000a900460ff1681565b601b5481565b60125481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1061135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d6e83610d6961135f565b6110b4565b905081811015610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906127a1565b60405180910390fd5b610dd083610dbf61135f565b8484610dcb9190612994565b611367565b610dda83836119ef565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e1790612a74565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4390612a74565b8015610e905780601f10610e6557610100808354040283529160200191610e90565b820191906000526020600020905b815481529060010190602001808311610e7357829003601f168201915b5050505050905090565b60008060026000610ea961135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612841565b60405180910390fd5b610f83610f7161135f565b858584610f7e9190612994565b611367565b600191505092915050565b6000610fa2610f9b61135f565b8484611532565b6001905092915050565b610fb461135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612781565b60405180910390fd5b601860009054906101000a900460ff1615158115151415611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90612641565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b61114961135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90612661565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90612821565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90612681565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115259190612861565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990612801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990612601565b60405180910390fd5b61161c8383611bc4565b1561166757601054811115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90612701565b60405180910390fd5b5b6116718383611bc4565b80156116cb5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117255750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561178957600061173583610b99565b9050601554828261174691906128b3565b1115611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90612721565b60405180910390fd5b505b6117938383611d05565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811906126e1565b60405180910390fd5b81816118269190612994565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118b891906128b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161191c9190612861565b60405180910390a350505050565b60008083141561193d576000905061199f565b6000828461194b919061293a565b905082848261195a9190612909565b1461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612741565b60405180910390fd5b809150505b92915050565b60006119e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906127e1565b60405180910390fd5b611a6a826000611d05565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612621565b60405180910390fd5b8181611afd9190612994565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160056000828254611b529190612994565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb79190612861565b60405180910390a3505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c6a5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611cc45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cfd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b601860009054906101000a900460ff1615611f3157611d2382611309565b80611d335750611d3281611309565b5b15611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906127c1565b60405180910390fd5b601860019054906101000a900460ff16611df957611d918282611f98565b601860019054906101000a900460ff16158015611db45750611db38282611bc4565b5b15611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906126c1565b60405180910390fd5b611f30565b6000601954118015611e585750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611e6a5750611e698282611bc4565b5b15611f2f57601b5460195443611e809190612994565b1015611f2e576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601c6000815480929190611ef190612aa6565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e581604051611f25919061258e565b60405180910390a15b5b5b5b5050565b60008083118290611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7391906125df565b60405180910390fd5b5060008385611f8b9190612909565b9050809150509392505050565b601860019054906101000a900460ff1615611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf906126a1565b60405180910390fd5b611ff28282611bc4565b15801561204c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612074576001601860016101000a81548160ff021916908315150217905550436019819055505b5050565b600081359050612087816130f8565b92915050565b60008135905061209c8161310f565b92915050565b6000813590506120b181613126565b92915050565b6000602082840312156120c957600080fd5b60006120d784828501612078565b91505092915050565b600080604083850312156120f357600080fd5b600061210185828601612078565b925050602061211285828601612078565b9150509250929050565b60008060006060848603121561213157600080fd5b600061213f86828701612078565b935050602061215086828701612078565b9250506040612161868287016120a2565b9150509250925092565b6000806040838503121561217e57600080fd5b600061218c85828601612078565b925050602061219d8582860161208d565b9150509250929050565b600080604083850312156121ba57600080fd5b60006121c885828601612078565b92505060206121d9858286016120a2565b9150509250929050565b6000602082840312156121f557600080fd5b60006122038482850161208d565b91505092915050565b60006020828403121561221e57600080fd5b600061222c848285016120a2565b91505092915050565b6000806040838503121561224857600080fd5b6000612256858286016120a2565b9250506020612267858286016120a2565b9150509250929050565b61227a816129c8565b82525050565b612289816129da565b82525050565b61229881612a1d565b82525050565b60006122a982612897565b6122b381856128a2565b93506122c3818560208601612a41565b6122cc81612b7c565b840191505092915050565b60006122e46023836128a2565b91506122ef82612b8d565b604082019050919050565b60006123076022836128a2565b915061231282612bdc565b604082019050919050565b600061232a600c836128a2565b915061233582612c2b565b602082019050919050565b600061234d6026836128a2565b915061235882612c54565b604082019050919050565b60006123706022836128a2565b915061237b82612ca3565b604082019050919050565b60006123936023836128a2565b915061239e82612cf2565b604082019050919050565b60006123b66025836128a2565b91506123c182612d41565b604082019050919050565b60006123d96026836128a2565b91506123e482612d90565b604082019050919050565b60006123fc6028836128a2565b915061240782612ddf565b604082019050919050565b600061241f602a836128a2565b915061242a82612e2e565b604082019050919050565b60006124426021836128a2565b915061244d82612e7d565b604082019050919050565b60006124656028836128a2565b915061247082612ecc565b604082019050919050565b60006124886020836128a2565b915061249382612f1b565b602082019050919050565b60006124ab6024836128a2565b91506124b682612f44565b604082019050919050565b60006124ce6010836128a2565b91506124d982612f93565b602082019050919050565b60006124f16021836128a2565b91506124fc82612fbc565b604082019050919050565b60006125146025836128a2565b915061251f8261300b565b604082019050919050565b60006125376024836128a2565b91506125428261305a565b604082019050919050565b600061255a6025836128a2565b9150612565826130a9565b604082019050919050565b61257981612a06565b82525050565b61258881612a10565b82525050565b60006020820190506125a36000830184612271565b92915050565b60006020820190506125be6000830184612280565b92915050565b60006020820190506125d9600083018461228f565b92915050565b600060208201905081810360008301526125f9818461229e565b905092915050565b6000602082019050818103600083015261261a816122d7565b9050919050565b6000602082019050818103600083015261263a816122fa565b9050919050565b6000602082019050818103600083015261265a8161231d565b9050919050565b6000602082019050818103600083015261267a81612340565b9050919050565b6000602082019050818103600083015261269a81612363565b9050919050565b600060208201905081810360008301526126ba81612386565b9050919050565b600060208201905081810360008301526126da816123a9565b9050919050565b600060208201905081810360008301526126fa816123cc565b9050919050565b6000602082019050818103600083015261271a816123ef565b9050919050565b6000602082019050818103600083015261273a81612412565b9050919050565b6000602082019050818103600083015261275a81612435565b9050919050565b6000602082019050818103600083015261277a81612458565b9050919050565b6000602082019050818103600083015261279a8161247b565b9050919050565b600060208201905081810360008301526127ba8161249e565b9050919050565b600060208201905081810360008301526127da816124c1565b9050919050565b600060208201905081810360008301526127fa816124e4565b9050919050565b6000602082019050818103600083015261281a81612507565b9050919050565b6000602082019050818103600083015261283a8161252a565b9050919050565b6000602082019050818103600083015261285a8161254d565b9050919050565b60006020820190506128766000830184612570565b92915050565b6000602082019050612891600083018461257f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006128be82612a06565b91506128c983612a06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128fe576128fd612aef565b5b828201905092915050565b600061291482612a06565b915061291f83612a06565b92508261292f5761292e612b1e565b5b828204905092915050565b600061294582612a06565b915061295083612a06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561298957612988612aef565b5b828202905092915050565b600061299f82612a06565b91506129aa83612a06565b9250828210156129bd576129bc612aef565b5b828203905092915050565b60006129d3826129e6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612a2882612a2f565b9050919050565b6000612a3a826129e6565b9050919050565b60005b83811015612a5f578082015181840152602081019050612a44565b83811115612a6e576000848401525b50505050565b60006002820490506001821680612a8c57607f821691505b60208210811415612aa057612a9f612b4d565b5b50919050565b6000612ab182612a06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ae457612ae3612aef565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479207365742e0000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785760008201527f616c6c657453697a652e00000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613101816129c8565b811461310c57600080fd5b50565b613118816129da565b811461312357600080fd5b50565b61312f81612a06565b811461313a57600080fd5b5056fea2646970667358221220f2819a9281ccff48cb79a970e2cfc1255591f8ae669d65b18df69fbe1b02b2a764736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a9059cbb11610097578063e79d416011610071578063e79d4160146104f7578063f2fde38b14610515578063f6540ec714610531578063fe575a871461054f576101c4565b8063a9059cbb1461047b578063d7124d9f146104ab578063dd62ed3e146104c7576101c4565b806379cc6790116100d357806379cc6790146103f35780638da5cb5b1461040f57806395d89b411461042d578063a457c2d71461044b576101c4565b806370a082311461039b57806370d5ae05146103cb578063715018a6146103e9576101c4565b8063313ce5671161016657806342966c681161014057806342966c681461032557806350a8e01614610341578063570ce7a61461035f578063640384091461037d576101c4565b8063313ce567146102bb57806339509351146102d95780633f3cf56c14610309576101c4565b8063153b0d1e116101a2578063153b0d1e1461023557806318160ddd1461025157806323b872dd1461026f578063260039571461029f576101c4565b806306fdde03146101c95780630758d924146101e7578063095ea7b314610205575b600080fd5b6101d161057f565b6040516101de91906125df565b60405180910390f35b6101ef610611565b6040516101fc91906125c4565b60405180910390f35b61021f600480360381019061021a91906121a7565b610637565b60405161022c91906125a9565b60405180910390f35b61024f600480360381019061024a919061216b565b610655565b005b6102596107a2565b6040516102669190612861565b60405180910390f35b6102896004803603810190610284919061211c565b6107ac565b60405161029691906125a9565b60405180910390f35b6102b960048036038101906102b49190612235565b6108ad565b005b6102c36109af565b6040516102d0919061287c565b60405180910390f35b6102f360048036038101906102ee91906121a7565b6109b8565b60405161030091906125a9565b60405180910390f35b610323600480360381019061031e9190612235565b610a64565b005b61033f600480360381019061033a919061220c565b610b66565b005b610349610b7a565b60405161035691906125a9565b60405180910390f35b610367610b8d565b6040516103749190612861565b60405180910390f35b610385610b93565b6040516103929190612861565b60405180910390f35b6103b560048036038101906103b091906120b7565b610b99565b6040516103c29190612861565b60405180910390f35b6103d3610be2565b6040516103e0919061258e565b60405180910390f35b6103f1610c08565b005b61040d600480360381019061040891906121a7565b610d5b565b005b610417610ddf565b604051610424919061258e565b60405180910390f35b610435610e08565b60405161044291906125df565b60405180910390f35b610465600480360381019061046091906121a7565b610e9a565b60405161047291906125a9565b60405180910390f35b610495600480360381019061049091906121a7565b610f8e565b6040516104a291906125a9565b60405180910390f35b6104c560048036038101906104c091906121e3565b610fac565b005b6104e160048036038101906104dc91906120e0565b6110b4565b6040516104ee9190612861565b60405180910390f35b6104ff61113b565b60405161050c9190612861565b60405180910390f35b61052f600480360381019061052a91906120b7565b611141565b005b610539611303565b6040516105469190612861565b60405180910390f35b610569600480360381019061056491906120b7565b611309565b60405161057691906125a9565b60405180910390f35b60606006805461058e90612a74565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba90612a74565b80156106075780601f106105dc57610100808354040283529160200191610607565b820191906000526020600020905b8154815290600101906020018083116105ea57829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061064b61064461135f565b8484611367565b6001905092915050565b61065d61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e190612781565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561074757600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600554905090565b60006107b9848484611532565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061080461135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90612761565b60405180910390fd5b6108a18561089061135f565b858461089c9190612994565b611367565b60019150509392505050565b6108b561135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990612781565b60405180910390fd5b6103e881111561095157600080fd5b6109788161096a8460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b6015819055506109a5816109978460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6017819055505050565b60006012905090565b6000610a5a6109c561135f565b8484600260006109d361135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5591906128b3565b611367565b6001905092915050565b610a6c61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090612781565b60405180910390fd5b612710811115610b0857600080fd5b610b2f81610b218460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b601081905550610b5c81610b4e8460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6012819055505050565b610b77610b7161135f565b826119ef565b50565b601860019054906101000a900460ff1681565b601b5481565b60125481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1061135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d6e83610d6961135f565b6110b4565b905081811015610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906127a1565b60405180910390fd5b610dd083610dbf61135f565b8484610dcb9190612994565b611367565b610dda83836119ef565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e1790612a74565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4390612a74565b8015610e905780601f10610e6557610100808354040283529160200191610e90565b820191906000526020600020905b815481529060010190602001808311610e7357829003601f168201915b5050505050905090565b60008060026000610ea961135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612841565b60405180910390fd5b610f83610f7161135f565b858584610f7e9190612994565b611367565b600191505092915050565b6000610fa2610f9b61135f565b8484611532565b6001905092915050565b610fb461135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612781565b60405180910390fd5b601860009054906101000a900460ff1615158115151415611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90612641565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b61114961135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90612661565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90612821565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90612681565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115259190612861565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990612801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990612601565b60405180910390fd5b61161c8383611bc4565b1561166757601054811115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90612701565b60405180910390fd5b5b6116718383611bc4565b80156116cb5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117255750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561178957600061173583610b99565b9050601554828261174691906128b3565b1115611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90612721565b60405180910390fd5b505b6117938383611d05565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811906126e1565b60405180910390fd5b81816118269190612994565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118b891906128b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161191c9190612861565b60405180910390a350505050565b60008083141561193d576000905061199f565b6000828461194b919061293a565b905082848261195a9190612909565b1461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612741565b60405180910390fd5b809150505b92915050565b60006119e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906127e1565b60405180910390fd5b611a6a826000611d05565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612621565b60405180910390fd5b8181611afd9190612994565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160056000828254611b529190612994565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb79190612861565b60405180910390a3505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c6a5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611cc45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cfd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b601860009054906101000a900460ff1615611f3157611d2382611309565b80611d335750611d3281611309565b5b15611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906127c1565b60405180910390fd5b601860019054906101000a900460ff16611df957611d918282611f98565b601860019054906101000a900460ff16158015611db45750611db38282611bc4565b5b15611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906126c1565b60405180910390fd5b611f30565b6000601954118015611e585750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611e6a5750611e698282611bc4565b5b15611f2f57601b5460195443611e809190612994565b1015611f2e576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601c6000815480929190611ef190612aa6565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e581604051611f25919061258e565b60405180910390a15b5b5b5b5050565b60008083118290611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7391906125df565b60405180910390fd5b5060008385611f8b9190612909565b9050809150509392505050565b601860019054906101000a900460ff1615611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf906126a1565b60405180910390fd5b611ff28282611bc4565b15801561204c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612074576001601860016101000a81548160ff021916908315150217905550436019819055505b5050565b600081359050612087816130f8565b92915050565b60008135905061209c8161310f565b92915050565b6000813590506120b181613126565b92915050565b6000602082840312156120c957600080fd5b60006120d784828501612078565b91505092915050565b600080604083850312156120f357600080fd5b600061210185828601612078565b925050602061211285828601612078565b9150509250929050565b60008060006060848603121561213157600080fd5b600061213f86828701612078565b935050602061215086828701612078565b9250506040612161868287016120a2565b9150509250925092565b6000806040838503121561217e57600080fd5b600061218c85828601612078565b925050602061219d8582860161208d565b9150509250929050565b600080604083850312156121ba57600080fd5b60006121c885828601612078565b92505060206121d9858286016120a2565b9150509250929050565b6000602082840312156121f557600080fd5b60006122038482850161208d565b91505092915050565b60006020828403121561221e57600080fd5b600061222c848285016120a2565b91505092915050565b6000806040838503121561224857600080fd5b6000612256858286016120a2565b9250506020612267858286016120a2565b9150509250929050565b61227a816129c8565b82525050565b612289816129da565b82525050565b61229881612a1d565b82525050565b60006122a982612897565b6122b381856128a2565b93506122c3818560208601612a41565b6122cc81612b7c565b840191505092915050565b60006122e46023836128a2565b91506122ef82612b8d565b604082019050919050565b60006123076022836128a2565b915061231282612bdc565b604082019050919050565b600061232a600c836128a2565b915061233582612c2b565b602082019050919050565b600061234d6026836128a2565b915061235882612c54565b604082019050919050565b60006123706022836128a2565b915061237b82612ca3565b604082019050919050565b60006123936023836128a2565b915061239e82612cf2565b604082019050919050565b60006123b66025836128a2565b91506123c182612d41565b604082019050919050565b60006123d96026836128a2565b91506123e482612d90565b604082019050919050565b60006123fc6028836128a2565b915061240782612ddf565b604082019050919050565b600061241f602a836128a2565b915061242a82612e2e565b604082019050919050565b60006124426021836128a2565b915061244d82612e7d565b604082019050919050565b60006124656028836128a2565b915061247082612ecc565b604082019050919050565b60006124886020836128a2565b915061249382612f1b565b602082019050919050565b60006124ab6024836128a2565b91506124b682612f44565b604082019050919050565b60006124ce6010836128a2565b91506124d982612f93565b602082019050919050565b60006124f16021836128a2565b91506124fc82612fbc565b604082019050919050565b60006125146025836128a2565b915061251f8261300b565b604082019050919050565b60006125376024836128a2565b91506125428261305a565b604082019050919050565b600061255a6025836128a2565b9150612565826130a9565b604082019050919050565b61257981612a06565b82525050565b61258881612a10565b82525050565b60006020820190506125a36000830184612271565b92915050565b60006020820190506125be6000830184612280565b92915050565b60006020820190506125d9600083018461228f565b92915050565b600060208201905081810360008301526125f9818461229e565b905092915050565b6000602082019050818103600083015261261a816122d7565b9050919050565b6000602082019050818103600083015261263a816122fa565b9050919050565b6000602082019050818103600083015261265a8161231d565b9050919050565b6000602082019050818103600083015261267a81612340565b9050919050565b6000602082019050818103600083015261269a81612363565b9050919050565b600060208201905081810360008301526126ba81612386565b9050919050565b600060208201905081810360008301526126da816123a9565b9050919050565b600060208201905081810360008301526126fa816123cc565b9050919050565b6000602082019050818103600083015261271a816123ef565b9050919050565b6000602082019050818103600083015261273a81612412565b9050919050565b6000602082019050818103600083015261275a81612435565b9050919050565b6000602082019050818103600083015261277a81612458565b9050919050565b6000602082019050818103600083015261279a8161247b565b9050919050565b600060208201905081810360008301526127ba8161249e565b9050919050565b600060208201905081810360008301526127da816124c1565b9050919050565b600060208201905081810360008301526127fa816124e4565b9050919050565b6000602082019050818103600083015261281a81612507565b9050919050565b6000602082019050818103600083015261283a8161252a565b9050919050565b6000602082019050818103600083015261285a8161254d565b9050919050565b60006020820190506128766000830184612570565b92915050565b6000602082019050612891600083018461257f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006128be82612a06565b91506128c983612a06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128fe576128fd612aef565b5b828201905092915050565b600061291482612a06565b915061291f83612a06565b92508261292f5761292e612b1e565b5b828204905092915050565b600061294582612a06565b915061295083612a06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561298957612988612aef565b5b828202905092915050565b600061299f82612a06565b91506129aa83612a06565b9250828210156129bd576129bc612aef565b5b828203905092915050565b60006129d3826129e6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612a2882612a2f565b9050919050565b6000612a3a826129e6565b9050919050565b60005b83811015612a5f578082015181840152602081019050612a44565b83811115612a6e576000848401525b50505050565b60006002820490506001821680612a8c57607f821691505b60208210811415612aa057612a9f612b4d565b5b50919050565b6000612ab182612a06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ae457612ae3612aef565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479207365742e0000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785760008201527f616c6c657453697a652e00000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613101816129c8565b811461310c57600080fd5b50565b613118816129da565b811461312357600080fd5b50565b61312f81612a06565b811461313a57600080fd5b5056fea2646970667358221220f2819a9281ccff48cb79a970e2cfc1255591f8ae669d65b18df69fbe1b02b2a764736f6c63430008040033
Deployed Bytecode Sourcemap
35902:354:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22214:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20028:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24381:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30787:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23334:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25032:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33314:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23176:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25863:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32960:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34159:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20976:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21097:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20387:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23505:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19948:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17604:148;;;:::i;:::-;;34569:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17390:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22433:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26581:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23845:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30975:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24083:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21132:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17760:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20811:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30663:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22214:100;22268:13;22301:5;22294:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22214:100;:::o;20028:35::-;;;;;;;;;;;;;:::o;24381:169::-;24464:4;24481:39;24490:12;:10;:12::i;:::-;24504:7;24513:6;24481:8;:39::i;:::-;24538:4;24531:11;;24381:169;;;;:::o;30787:180::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30907:7:::1;30880:34;;:14;:23;30895:7;30880:23;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;30872:43;;;::::0;::::1;;30952:7;30926:14;:23;30941:7;30926:23;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30787:180:::0;;:::o;23334:108::-;23395:7;23422:12;;23415:19;;23334:108;:::o;25032:422::-;25138:4;25155:36;25165:6;25173:9;25184:6;25155:9;:36::i;:::-;25204:24;25231:11;:19;25243:6;25231:19;;;;;;;;;;;;;;;:33;25251:12;:10;:12::i;:::-;25231:33;;;;;;;;;;;;;;;;25204:60;;25303:6;25283:16;:26;;25275:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25365:57;25374:6;25382:12;:10;:12::i;:::-;25415:6;25396:16;:25;;;;:::i;:::-;25365:8;:57::i;:::-;25442:4;25435:11;;;25032:422;;;;;:::o;33314:349::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33425:4:::1;33414:7;:15;;33406:24;;;::::0;::::1;;33488:98;33526:7;33488:19;33499:7;33488:6;;:10;;:19;;;;:::i;:::-;:23;;:98;;;;:::i;:::-;33471:14;:115;;;;33615:40;33647:7;33615:27;33634:7;33615:14;;:18;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;33597:15;:58;;;;33314:349:::0;;:::o;23176:93::-;23234:5;23259:2;23252:9;;23176:93;:::o;25863:215::-;25951:4;25968:80;25977:12;:10;:12::i;:::-;25991:7;26037:10;26000:11;:25;26012:12;:10;:12::i;:::-;26000:25;;;;;;;;;;;;;;;:34;26026:7;26000:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;25968:8;:80::i;:::-;26066:4;26059:11;;25863:215;;;;:::o;32960:346::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33070:5:::1;33059:7;:16;;33051:25;;;::::0;::::1;;33133:98;33171:7;33133:19;33144:7;33133:6;;:10;;:19;;;;:::i;:::-;:23;;:98;;;;:::i;:::-;33118:12;:113;;;;33258:40;33290:7;33258:27;33277:7;33258:14;;:18;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;33242:13;:56;;;;32960:346:::0;;:::o;34159:91::-;34215:27;34221:12;:10;:12::i;:::-;34235:6;34215:5;:27::i;:::-;34159:91;:::o;20976:36::-;;;;;;;;;;;;;:::o;21097:28::-;;;;:::o;20387:77::-;;;;:::o;23505:127::-;23579:7;23606:9;:18;23616:7;23606:18;;;;;;;;;;;;;;;;23599:25;;23505:127;;;:::o;19948:71::-;;;;;;;;;;;;;:::o;17604:148::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17711:1:::1;17674:40;;17695:6;::::0;::::1;;;;;;;;17674:40;;;;;;;;;;;;17742:1;17725:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17604:148::o:0;34569:332::-;34646:24;34673:32;34683:7;34692:12;:10;:12::i;:::-;34673:9;:32::i;:::-;34646:59;;34744:6;34724:16;:26;;34716:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34802:58;34811:7;34820:12;:10;:12::i;:::-;34853:6;34834:16;:25;;;;:::i;:::-;34802:8;:58::i;:::-;34871:22;34877:7;34886:6;34871:5;:22::i;:::-;34569:332;;;:::o;17390:79::-;17428:7;17455:6;;;;;;;;;;;17448:13;;17390:79;:::o;22433:104::-;22489:13;22522:7;22515:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22433:104;:::o;26581:377::-;26674:4;26691:24;26718:11;:25;26730:12;:10;:12::i;:::-;26718:25;;;;;;;;;;;;;;;:34;26744:7;26718:34;;;;;;;;;;;;;;;;26691:61;;26791:15;26771:16;:35;;26763:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26859:67;26868:12;:10;:12::i;:::-;26882:7;26910:15;26891:16;:34;;;;:::i;:::-;26859:8;:67::i;:::-;26946:4;26939:11;;;26581:377;;;;:::o;23845:175::-;23931:4;23948:42;23958:12;:10;:12::i;:::-;23972:9;23983:6;23948:9;:42::i;:::-;24008:4;24001:11;;23845:175;;;;:::o;30975:179::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31076:16:::1;;;;;;;;;;;31065:27;;:7;:27;;;;31057:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:7;31120:16;;:26;;;;;;;;;;;;;;;;;;30975:179:::0;:::o;24083:151::-;24172:7;24199:11;:18;24211:5;24199:18;;;;;;;;;;;;;;;:27;24218:7;24199:27;;;;;;;;;;;;;;;;24192:34;;24083:151;;;;:::o;21132:32::-;;;;:::o;17760:254::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17869:1:::1;17849:22;;:8;:22;;;;17841:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17969:8;17940:38;;17961:6;::::0;::::1;;;;;;;;17940:38;;;;;;;;;;;;17998:8;17989:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17760:254:::0;:::o;20811:87::-;;;;:::o;30663:116::-;30724:4;30748:14;:23;30763:7;30748:23;;;;;;;;;;;;;;;;;;;;;;;;;30741:30;;30663:116;;;:::o;698:98::-;751:7;778:10;771:17;;698:98;:::o;30309:346::-;30428:1;30411:19;;:5;:19;;;;30403:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30509:1;30490:21;;:7;:21;;;;30482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30593:6;30563:11;:18;30575:5;30563:18;;;;;;;;;;;;;;;:27;30582:7;30563:27;;;;;;;;;;;;;;;:36;;;;30631:7;30615:32;;30624:5;30615:32;;;30640:6;30615:32;;;;;;:::i;:::-;;;;;;;;30309:346;;;:::o;27985:1067::-;28109:1;28091:20;;:6;:20;;;;28083:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28193:1;28172:23;;:9;:23;;;;28164:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28249:29;28260:6;28268:9;28249:10;:29::i;:::-;28246:122;;;28311:12;;28301:6;:22;;28293:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28246:122;28382:29;28393:6;28401:9;28382:10;:29::i;:::-;:73;;;;;28441:14;;;;;;;;;;;28428:27;;:9;:27;;;;28382:73;:110;;;;;28486:6;;;;;;;;;;;28473:19;;:9;:19;;;;28382:110;28379:328;;;28519:32;28554:20;28564:9;28554;:20::i;:::-;28519:55;;28634:14;;28624:6;28597:24;:33;;;;:::i;:::-;:51;;28589:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;28379:328;;28719:39;28740:6;28748:9;28719:20;:39::i;:::-;28771:21;28795:9;:17;28805:6;28795:17;;;;;;;;;;;;;;;;28771:41;;28848:6;28831:13;:23;;28823:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:6;28928:13;:22;;;;:::i;:::-;28908:9;:17;28918:6;28908:17;;;;;;;;;;;;;;;:42;;;;28985:6;28961:9;:20;28971:9;28961:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;29026:9;29009:35;;29018:6;29009:35;;;29037:6;29009:35;;;;;;:::i;:::-;;;;;;;;27985:1067;;;;:::o;2663:471::-;2721:7;2971:1;2966;:6;2962:47;;;2996:1;2989:8;;;;2962:47;3021:9;3037:1;3033;:5;;;;:::i;:::-;3021:17;;3066:1;3061;3057;:5;;;;:::i;:::-;:10;3049:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3125:1;3118:8;;;2663:471;;;;;:::o;3610:132::-;3668:7;3695:39;3699:1;3702;3695:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3688:46;;3610:132;;;;:::o;29385:486::-;29488:1;29469:21;;:7;:21;;;;29461:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29541:41;29562:7;29579:1;29541:20;:41::i;:::-;29595:22;29620:9;:18;29630:7;29620:18;;;;;;;;;;;;;;;;29595:43;;29675:6;29657:14;:24;;29649:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29769:6;29752:14;:23;;;;:::i;:::-;29731:9;:18;29741:7;29731:18;;;;;;;;;;;;;;;:44;;;;29802:6;29786:12;;:22;;;;;;;:::i;:::-;;;;;;;;29852:1;29826:37;;29835:7;29826:37;;;29856:6;29826:37;;;;;;:::i;:::-;;;;;;;;29385:486;;;:::o;26966:230::-;27034:4;27059:17;:21;27077:2;27059:21;;;;;;;;;;;;;;;;;;;;;;;;;27058:22;:63;;;;;27098:17;:23;27116:4;27098:23;;;;;;;;;;;;;;;;;;;;;;;;;27097:24;27058:63;:97;;;;;27144:11;;;;;;;;;;;27138:17;;:2;:17;;;;27058:97;:130;;;;;27186:1;27172:16;;:2;:16;;;;27058:130;27051:137;;26966:230;;;;:::o;31757:1195::-;31913:16;;;;;;;;;;;31909:1036;;;32017:21;32031:6;32017:13;:21::i;:::-;:49;;;;32042:24;32056:9;32042:13;:24::i;:::-;32017:49;32013:116;;;32087:26;;;;;;;;;;:::i;:::-;;;;;;;;32013:116;32219:16;;;;;;;;;;;32214:720;;32256:37;32275:6;32283:9;32256:18;:37::i;:::-;32321:16;;;;;;;;;;;32320:17;:50;;;;;32341:29;32352:6;32360:9;32341:10;:29::i;:::-;32320:50;32316:154;;;32399:47;;;;;;;;;;:::i;:::-;;;;;;;;32316:154;32214:720;;;32529:1;32514:12;;:16;:58;;;;;32566:6;;;;;;;;;;;32556:16;;:6;:16;;;32514:58;:113;;;;;32598:29;32609:6;32617:9;32598:10;:29::i;:::-;32514:113;32510:409;;;32704:13;;32689:12;;32674;:27;;;;:::i;:::-;:43;32670:230;;;32774:4;32746:14;:25;32761:9;32746:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32805:13;;:16;;;;;;;;;:::i;:::-;;;;;;32853:23;32866:9;32853:23;;;;;;:::i;:::-;;;;;;;;32670:230;32510:409;32214:720;31909:1036;31757:1195;;:::o;4238:278::-;4324:7;4356:1;4352;:5;4359:12;4344:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4383:9;4399:1;4395;:5;;;;:::i;:::-;4383:17;;4507:1;4500:8;;;4238:278;;;;;:::o;27204:291::-;27286:16;;;;;;;;;;;27285:17;27277:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27358:20;27369:4;27375:2;27358:10;:20::i;:::-;27357:21;:37;;;;;27388:6;;;;;;;;;;;27382:12;;:2;:12;;;27357:37;27353:135;;;27430:4;27411:16;;:23;;;;;;;;;;;;;;;;;;27464:12;27449;:27;;;;27353:135;27204:291;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;495:6;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;772:6;780;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;1194:6;1202;1210;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:401::-;1740:6;1748;1797:2;1785:9;1776:7;1772:23;1768:32;1765:2;;;1813:1;1810;1803:12;1765:2;1856:1;1881:53;1926:7;1917:6;1906:9;1902:22;1881:53;:::i;:::-;1871:63;;1827:117;1983:2;2009:50;2051:7;2042:6;2031:9;2027:22;2009:50;:::i;:::-;1999:60;;1954:115;1755:321;;;;;:::o;2082:407::-;2150:6;2158;2207:2;2195:9;2186:7;2182:23;2178:32;2175:2;;;2223:1;2220;2213:12;2175:2;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2393:2;2419:53;2464:7;2455:6;2444:9;2440:22;2419:53;:::i;:::-;2409:63;;2364:118;2165:324;;;;;:::o;2495:256::-;2551:6;2600:2;2588:9;2579:7;2575:23;2571:32;2568:2;;;2616:1;2613;2606:12;2568:2;2659:1;2684:50;2726:7;2717:6;2706:9;2702:22;2684:50;:::i;:::-;2674:60;;2630:114;2558:193;;;;:::o;2757:262::-;2816:6;2865:2;2853:9;2844:7;2840:23;2836:32;2833:2;;;2881:1;2878;2871:12;2833:2;2924:1;2949:53;2994:7;2985:6;2974:9;2970:22;2949:53;:::i;:::-;2939:63;;2895:117;2823:196;;;;:::o;3025:407::-;3093:6;3101;3150:2;3138:9;3129:7;3125:23;3121:32;3118:2;;;3166:1;3163;3156:12;3118:2;3209:1;3234:53;3279:7;3270:6;3259:9;3255:22;3234:53;:::i;:::-;3224:63;;3180:117;3336:2;3362:53;3407:7;3398:6;3387:9;3383:22;3362:53;:::i;:::-;3352:63;;3307:118;3108:324;;;;;:::o;3438:118::-;3525:24;3543:5;3525:24;:::i;:::-;3520:3;3513:37;3503:53;;:::o;3562:109::-;3643:21;3658:5;3643:21;:::i;:::-;3638:3;3631:34;3621:50;;:::o;3677:183::-;3790:63;3847:5;3790:63;:::i;:::-;3785:3;3778:76;3768:92;;:::o;3866:364::-;3954:3;3982:39;4015:5;3982:39;:::i;:::-;4037:71;4101:6;4096:3;4037:71;:::i;:::-;4030:78;;4117:52;4162:6;4157:3;4150:4;4143:5;4139:16;4117:52;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3958:272;;;;;:::o;4236:366::-;4378:3;4399:67;4463:2;4458:3;4399:67;:::i;:::-;4392:74;;4475:93;4564:3;4475:93;:::i;:::-;4593:2;4588:3;4584:12;4577:19;;4382:220;;;:::o;4608:366::-;4750:3;4771:67;4835:2;4830:3;4771:67;:::i;:::-;4764:74;;4847:93;4936:3;4847:93;:::i;:::-;4965:2;4960:3;4956:12;4949:19;;4754:220;;;:::o;4980:366::-;5122:3;5143:67;5207:2;5202:3;5143:67;:::i;:::-;5136:74;;5219:93;5308:3;5219:93;:::i;:::-;5337:2;5332:3;5328:12;5321:19;;5126:220;;;:::o;5352:366::-;5494:3;5515:67;5579:2;5574:3;5515:67;:::i;:::-;5508:74;;5591:93;5680:3;5591:93;:::i;:::-;5709:2;5704:3;5700:12;5693:19;;5498:220;;;:::o;5724:366::-;5866:3;5887:67;5951:2;5946:3;5887:67;:::i;:::-;5880:74;;5963:93;6052:3;5963:93;:::i;:::-;6081:2;6076:3;6072:12;6065:19;;5870:220;;;:::o;6096:366::-;6238:3;6259:67;6323:2;6318:3;6259:67;:::i;:::-;6252:74;;6335:93;6424:3;6335:93;:::i;:::-;6453:2;6448:3;6444:12;6437:19;;6242:220;;;:::o;6468:366::-;6610:3;6631:67;6695:2;6690:3;6631:67;:::i;:::-;6624:74;;6707:93;6796:3;6707:93;:::i;:::-;6825:2;6820:3;6816:12;6809:19;;6614:220;;;:::o;6840:366::-;6982:3;7003:67;7067:2;7062:3;7003:67;:::i;:::-;6996:74;;7079:93;7168:3;7079:93;:::i;:::-;7197:2;7192:3;7188:12;7181:19;;6986:220;;;:::o;7212:366::-;7354:3;7375:67;7439:2;7434:3;7375:67;:::i;:::-;7368:74;;7451:93;7540:3;7451:93;:::i;:::-;7569:2;7564:3;7560:12;7553:19;;7358:220;;;:::o;7584:366::-;7726:3;7747:67;7811:2;7806:3;7747:67;:::i;:::-;7740:74;;7823:93;7912:3;7823:93;:::i;:::-;7941:2;7936:3;7932:12;7925:19;;7730:220;;;:::o;7956:366::-;8098:3;8119:67;8183:2;8178:3;8119:67;:::i;:::-;8112:74;;8195:93;8284:3;8195:93;:::i;:::-;8313:2;8308:3;8304:12;8297:19;;8102:220;;;:::o;8328:366::-;8470:3;8491:67;8555:2;8550:3;8491:67;:::i;:::-;8484:74;;8567:93;8656:3;8567:93;:::i;:::-;8685:2;8680:3;8676:12;8669:19;;8474:220;;;:::o;8700:366::-;8842:3;8863:67;8927:2;8922:3;8863:67;:::i;:::-;8856:74;;8939:93;9028:3;8939:93;:::i;:::-;9057:2;9052:3;9048:12;9041:19;;8846:220;;;:::o;9072:366::-;9214:3;9235:67;9299:2;9294:3;9235:67;:::i;:::-;9228:74;;9311:93;9400:3;9311:93;:::i;:::-;9429:2;9424:3;9420:12;9413:19;;9218:220;;;:::o;9444:366::-;9586:3;9607:67;9671:2;9666:3;9607:67;:::i;:::-;9600:74;;9683:93;9772:3;9683:93;:::i;:::-;9801:2;9796:3;9792:12;9785:19;;9590:220;;;:::o;9816:366::-;9958:3;9979:67;10043:2;10038:3;9979:67;:::i;:::-;9972:74;;10055:93;10144:3;10055:93;:::i;:::-;10173:2;10168:3;10164:12;10157:19;;9962:220;;;:::o;10188:366::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10334:220;;;:::o;10560:366::-;10702:3;10723:67;10787:2;10782:3;10723:67;:::i;:::-;10716:74;;10799:93;10888:3;10799:93;:::i;:::-;10917:2;10912:3;10908:12;10901:19;;10706:220;;;:::o;10932:366::-;11074:3;11095:67;11159:2;11154:3;11095:67;:::i;:::-;11088:74;;11171:93;11260:3;11171:93;:::i;:::-;11289:2;11284:3;11280:12;11273:19;;11078:220;;;:::o;11304:118::-;11391:24;11409:5;11391:24;:::i;:::-;11386:3;11379:37;11369:53;;:::o;11428:112::-;11511:22;11527:5;11511:22;:::i;:::-;11506:3;11499:35;11489:51;;:::o;11546:222::-;11639:4;11677:2;11666:9;11662:18;11654:26;;11690:71;11758:1;11747:9;11743:17;11734:6;11690:71;:::i;:::-;11644:124;;;;:::o;11774:210::-;11861:4;11899:2;11888:9;11884:18;11876:26;;11912:65;11974:1;11963:9;11959:17;11950:6;11912:65;:::i;:::-;11866:118;;;;:::o;11990:274::-;12109:4;12147:2;12136:9;12132:18;12124:26;;12160:97;12254:1;12243:9;12239:17;12230:6;12160:97;:::i;:::-;12114:150;;;;:::o;12270:313::-;12383:4;12421:2;12410:9;12406:18;12398:26;;12470:9;12464:4;12460:20;12456:1;12445:9;12441:17;12434:47;12498:78;12571:4;12562:6;12498:78;:::i;:::-;12490:86;;12388:195;;;;:::o;12589:419::-;12755:4;12793:2;12782:9;12778:18;12770:26;;12842:9;12836:4;12832:20;12828:1;12817:9;12813:17;12806:47;12870:131;12996:4;12870:131;:::i;:::-;12862:139;;12760:248;;;:::o;13014:419::-;13180:4;13218:2;13207:9;13203:18;13195:26;;13267:9;13261:4;13257:20;13253:1;13242:9;13238:17;13231:47;13295:131;13421:4;13295:131;:::i;:::-;13287:139;;13185:248;;;:::o;13439:419::-;13605:4;13643:2;13632:9;13628:18;13620:26;;13692:9;13686:4;13682:20;13678:1;13667:9;13663:17;13656:47;13720:131;13846:4;13720:131;:::i;:::-;13712:139;;13610:248;;;:::o;13864:419::-;14030:4;14068:2;14057:9;14053:18;14045:26;;14117:9;14111:4;14107:20;14103:1;14092:9;14088:17;14081:47;14145:131;14271:4;14145:131;:::i;:::-;14137:139;;14035:248;;;:::o;14289:419::-;14455:4;14493:2;14482:9;14478:18;14470:26;;14542:9;14536:4;14532:20;14528:1;14517:9;14513:17;14506:47;14570:131;14696:4;14570:131;:::i;:::-;14562:139;;14460:248;;;:::o;14714:419::-;14880:4;14918:2;14907:9;14903:18;14895:26;;14967:9;14961:4;14957:20;14953:1;14942:9;14938:17;14931:47;14995:131;15121:4;14995:131;:::i;:::-;14987:139;;14885:248;;;:::o;15139:419::-;15305:4;15343:2;15332:9;15328:18;15320:26;;15392:9;15386:4;15382:20;15378:1;15367:9;15363:17;15356:47;15420:131;15546:4;15420:131;:::i;:::-;15412:139;;15310:248;;;:::o;15564:419::-;15730:4;15768:2;15757:9;15753:18;15745:26;;15817:9;15811:4;15807:20;15803:1;15792:9;15788:17;15781:47;15845:131;15971:4;15845:131;:::i;:::-;15837:139;;15735:248;;;:::o;15989:419::-;16155:4;16193:2;16182:9;16178:18;16170:26;;16242:9;16236:4;16232:20;16228:1;16217:9;16213:17;16206:47;16270:131;16396:4;16270:131;:::i;:::-;16262:139;;16160:248;;;:::o;16414:419::-;16580:4;16618:2;16607:9;16603:18;16595:26;;16667:9;16661:4;16657:20;16653:1;16642:9;16638:17;16631:47;16695:131;16821:4;16695:131;:::i;:::-;16687:139;;16585:248;;;:::o;16839:419::-;17005:4;17043:2;17032:9;17028:18;17020:26;;17092:9;17086:4;17082:20;17078:1;17067:9;17063:17;17056:47;17120:131;17246:4;17120:131;:::i;:::-;17112:139;;17010:248;;;:::o;17264:419::-;17430:4;17468:2;17457:9;17453:18;17445:26;;17517:9;17511:4;17507:20;17503:1;17492:9;17488:17;17481:47;17545:131;17671:4;17545:131;:::i;:::-;17537:139;;17435:248;;;:::o;17689:419::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17942:9;17936:4;17932:20;17928:1;17917:9;17913:17;17906:47;17970:131;18096:4;17970:131;:::i;:::-;17962:139;;17860:248;;;:::o;18114:419::-;18280:4;18318:2;18307:9;18303:18;18295:26;;18367:9;18361:4;18357:20;18353:1;18342:9;18338:17;18331:47;18395:131;18521:4;18395:131;:::i;:::-;18387:139;;18285:248;;;:::o;18539:419::-;18705:4;18743:2;18732:9;18728:18;18720:26;;18792:9;18786:4;18782:20;18778:1;18767:9;18763:17;18756:47;18820:131;18946:4;18820:131;:::i;:::-;18812:139;;18710:248;;;:::o;18964:419::-;19130:4;19168:2;19157:9;19153:18;19145:26;;19217:9;19211:4;19207:20;19203:1;19192:9;19188:17;19181:47;19245:131;19371:4;19245:131;:::i;:::-;19237:139;;19135:248;;;:::o;19389:419::-;19555:4;19593:2;19582:9;19578:18;19570:26;;19642:9;19636:4;19632:20;19628:1;19617:9;19613:17;19606:47;19670:131;19796:4;19670:131;:::i;:::-;19662:139;;19560:248;;;:::o;19814:419::-;19980:4;20018:2;20007:9;20003:18;19995:26;;20067:9;20061:4;20057:20;20053:1;20042:9;20038:17;20031:47;20095:131;20221:4;20095:131;:::i;:::-;20087:139;;19985:248;;;:::o;20239:419::-;20405:4;20443:2;20432:9;20428:18;20420:26;;20492:9;20486:4;20482:20;20478:1;20467:9;20463:17;20456:47;20520:131;20646:4;20520:131;:::i;:::-;20512:139;;20410:248;;;:::o;20664:222::-;20757:4;20795:2;20784:9;20780:18;20772:26;;20808:71;20876:1;20865:9;20861:17;20852:6;20808:71;:::i;:::-;20762:124;;;;:::o;20892:214::-;20981:4;21019:2;21008:9;21004:18;20996:26;;21032:67;21096:1;21085:9;21081:17;21072:6;21032:67;:::i;:::-;20986:120;;;;:::o;21112:99::-;21164:6;21198:5;21192:12;21182:22;;21171:40;;;:::o;21217:169::-;21301:11;21335:6;21330:3;21323:19;21375:4;21370:3;21366:14;21351:29;;21313:73;;;;:::o;21392:305::-;21432:3;21451:20;21469:1;21451:20;:::i;:::-;21446:25;;21485:20;21503:1;21485:20;:::i;:::-;21480:25;;21639:1;21571:66;21567:74;21564:1;21561:81;21558:2;;;21645:18;;:::i;:::-;21558:2;21689:1;21686;21682:9;21675:16;;21436:261;;;;:::o;21703:185::-;21743:1;21760:20;21778:1;21760:20;:::i;:::-;21755:25;;21794:20;21812:1;21794:20;:::i;:::-;21789:25;;21833:1;21823:2;;21838:18;;:::i;:::-;21823:2;21880:1;21877;21873:9;21868:14;;21745:143;;;;:::o;21894:348::-;21934:7;21957:20;21975:1;21957:20;:::i;:::-;21952:25;;21991:20;22009:1;21991:20;:::i;:::-;21986:25;;22179:1;22111:66;22107:74;22104:1;22101:81;22096:1;22089:9;22082:17;22078:105;22075:2;;;22186:18;;:::i;:::-;22075:2;22234:1;22231;22227:9;22216:20;;21942:300;;;;:::o;22248:191::-;22288:4;22308:20;22326:1;22308:20;:::i;:::-;22303:25;;22342:20;22360:1;22342:20;:::i;:::-;22337:25;;22381:1;22378;22375:8;22372:2;;;22386:18;;:::i;:::-;22372:2;22431:1;22428;22424:9;22416:17;;22293:146;;;;:::o;22445:96::-;22482:7;22511:24;22529:5;22511:24;:::i;:::-;22500:35;;22490:51;;;:::o;22547:90::-;22581:7;22624:5;22617:13;22610:21;22599:32;;22589:48;;;:::o;22643:126::-;22680:7;22720:42;22713:5;22709:54;22698:65;;22688:81;;;:::o;22775:77::-;22812:7;22841:5;22830:16;;22820:32;;;:::o;22858:86::-;22893:7;22933:4;22926:5;22922:16;22911:27;;22901:43;;;:::o;22950:178::-;23026:9;23059:63;23116:5;23059:63;:::i;:::-;23046:76;;23036:92;;;:::o;23134:139::-;23210:9;23243:24;23261:5;23243:24;:::i;:::-;23230:37;;23220:53;;;:::o;23279:307::-;23347:1;23357:113;23371:6;23368:1;23365:13;23357:113;;;23456:1;23451:3;23447:11;23441:18;23437:1;23432:3;23428:11;23421:39;23393:2;23390:1;23386:10;23381:15;;23357:113;;;23488:6;23485:1;23482:13;23479:2;;;23568:1;23559:6;23554:3;23550:16;23543:27;23479:2;23328:258;;;;:::o;23592:320::-;23636:6;23673:1;23667:4;23663:12;23653:22;;23720:1;23714:4;23710:12;23741:18;23731:2;;23797:4;23789:6;23785:17;23775:27;;23731:2;23859;23851:6;23848:14;23828:18;23825:38;23822:2;;;23878:18;;:::i;:::-;23822:2;23643:269;;;;:::o;23918:233::-;23957:3;23980:24;23998:5;23980:24;:::i;:::-;23971:33;;24026:66;24019:5;24016:77;24013:2;;;24096:18;;:::i;:::-;24013:2;24143:1;24136:5;24132:13;24125:20;;23961:190;;;:::o;24157:180::-;24205:77;24202:1;24195:88;24302:4;24299:1;24292:15;24326:4;24323:1;24316:15;24343:180;24391:77;24388:1;24381:88;24488:4;24485:1;24478:15;24512:4;24509:1;24502:15;24529:180;24577:77;24574:1;24567:88;24674:4;24671:1;24664:15;24698:4;24695:1;24688:15;24715:102;24756:6;24807:2;24803:7;24798:2;24791:5;24787:14;24783:28;24773:38;;24763:54;;;:::o;24823:222::-;24963:34;24959:1;24951:6;24947:14;24940:58;25032:5;25027:2;25019:6;25015:15;25008:30;24929:116;:::o;25051:221::-;25191:34;25187:1;25179:6;25175:14;25168:58;25260:4;25255:2;25247:6;25243:15;25236:29;25157:115;:::o;25278:162::-;25418:14;25414:1;25406:6;25402:14;25395:38;25384:56;:::o;25446:225::-;25586:34;25582:1;25574:6;25570:14;25563:58;25655:8;25650:2;25642:6;25638:15;25631:33;25552:119;:::o;25677:221::-;25817:34;25813:1;25805:6;25801:14;25794:58;25886:4;25881:2;25873:6;25869:15;25862:29;25783:115;:::o;25904:222::-;26044:34;26040:1;26032:6;26028:14;26021:58;26113:5;26108:2;26100:6;26096:15;26089:30;26010:116;:::o;26132:224::-;26272:34;26268:1;26260:6;26256:14;26249:58;26341:7;26336:2;26328:6;26324:15;26317:32;26238:118;:::o;26362:225::-;26502:34;26498:1;26490:6;26486:14;26479:58;26571:8;26566:2;26558:6;26554:15;26547:33;26468:119;:::o;26593:227::-;26733:34;26729:1;26721:6;26717:14;26710:58;26802:10;26797:2;26789:6;26785:15;26778:35;26699:121;:::o;26826:229::-;26966:34;26962:1;26954:6;26950:14;26943:58;27035:12;27030:2;27022:6;27018:15;27011:37;26932:123;:::o;27061:220::-;27201:34;27197:1;27189:6;27185:14;27178:58;27270:3;27265:2;27257:6;27253:15;27246:28;27167:114;:::o;27287:227::-;27427:34;27423:1;27415:6;27411:14;27404:58;27496:10;27491:2;27483:6;27479:15;27472:35;27393:121;:::o;27520:182::-;27660:34;27656:1;27648:6;27644:14;27637:58;27626:76;:::o;27708:223::-;27848:34;27844:1;27836:6;27832:14;27825:58;27917:6;27912:2;27904:6;27900:15;27893:31;27814:117;:::o;27937:166::-;28077:18;28073:1;28065:6;28061:14;28054:42;28043:60;:::o;28109:220::-;28249:34;28245:1;28237:6;28233:14;28226:58;28318:3;28313:2;28305:6;28301:15;28294:28;28215:114;:::o;28335:224::-;28475:34;28471:1;28463:6;28459:14;28452:58;28544:7;28539:2;28531:6;28527:15;28520:32;28441:118;:::o;28565:223::-;28705:34;28701:1;28693:6;28689:14;28682:58;28774:6;28769:2;28761:6;28757:15;28750:31;28671:117;:::o;28794:224::-;28934:34;28930:1;28922:6;28918:14;28911:58;29003:7;28998:2;28990:6;28986:15;28979:32;28900:118;:::o;29024:122::-;29097:24;29115:5;29097:24;:::i;:::-;29090:5;29087:35;29077:2;;29136:1;29133;29126:12;29077:2;29067:79;:::o;29152:116::-;29222:21;29237:5;29222:21;:::i;:::-;29215:5;29212:32;29202:2;;29258:1;29255;29248:12;29202:2;29192:76;:::o;29274:122::-;29347:24;29365:5;29347:24;:::i;:::-;29340:5;29337:35;29327:2;;29386:1;29383;29376:12;29327:2;29317:79;:::o
Swarm Source
ipfs://f2819a9281ccff48cb79a970e2cfc1255591f8ae669d65b18df69fbe1b02b2a7
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.