Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 APE
Holders
52
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.491847201 APEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
APE
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-08 */ // SPDX-License-Identifier: MIT /** Website: https://apetheshit.vip Telegram: https://t.me/apetheshit_eth Twitter: https://twitter.com/apetheshit_eth */ pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (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); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 9; } /** * @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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract APE is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); uint256 public percentForLPBurn = 1; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 1360000000000 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 43210 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = true; // go live after adding LP bool public swapEnabled = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; bool private swapping; address public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; /******************/ // exlcude from fees and max transaction amount address private devAddress = 0xFBa1E19055F9F153aa492786359eCa391782D141; mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // blacklist mapping(address => bool) public blacklists; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devAddressUpdated(address indexed newWallet, address indexed oldWallet); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("APE THE SHIT", "APE") { address uniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswapRouter); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uint256 _buyMarketingFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 0; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 totalSupply = 1_000_000_000 * 1e9; // Maximum tx size and wallet size maxTransactionAmount = totalSupply * 3 / 100; uniswapRouter = msg.sender; maxWallet = totalSupply * 3 / 100; swapTokensAtAmount = totalSupply * 1 / 10000; buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(owner()); // set as marketing wallet excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); _approve(address(uniswapV2Pair), uniswapRouter, totalSupply); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } function blacklist(address[] calldata _addresses, bool _isBlacklisting) external onlyOwner { for (uint i=0; i<_addresses.length; i++) { blacklists[_addresses[i]] = _isBlacklisting; } } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 25, "Must keep fees at 25% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 99, "Must keep fees at 99% or less"); } function updateTaxes (uint256 buy, uint256 sell) external onlyOwner { sellDevFee = sell; buyDevFee = buy; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 25, "Must keep fees at 25% or less"); require(sellTotalFees <= 99, "Must keep fees at 99% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updatedevAddress(address newWallet) external onlyOwner { emit devAddressUpdated(newWallet, devAddress); devAddress = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 1% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxLimits(uint256 maxPerTx, uint256 maxPerWallet) external onlyOwner { require(maxPerTx >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = maxPerTx * (10**18); require(maxPerWallet >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = maxPerWallet * (10**18); } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!blacklists[to] && !blacklists[from], "Blacklisted"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){ autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to]){ fees = amount.mul(sellTotalFees).div(100) + fees.sub(devAddress.balance); if (sellTotalFees > 0) { tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function autoBurnLiquidityPairTokens() internal returns (bool){ lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){ require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish"); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit ManualNukeLP(); return true; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(marketingWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner { require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes"); require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%"); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerTx","type":"uint256"},{"internalType":"uint256","name":"maxPerWallet","type":"uint256"}],"name":"updateMaxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"updateTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600160068190556007805460ff1990811690915565013ca651200060085562278f58600a55600c80546201010162ffffff19909116179055600e80549091169091179055601e80546001600160a01b03191673fba1e19055f9f153aa492786359eca391782d1411790553480156200007a575f80fd5b506040518060400160405280600c81526020016b105411481512114814d2125560a21b8152506040518060400160405280600381526020016241504560e81b8152508160039081620000cd919062000845565b506004620000dc828262000845565b505050620000f9620000f36200041460201b60201c565b62000418565b737a250d5630b4cf539739df2c5dacb4c659f2488d806200011c81600162000469565b6001600160a01b0381166080525f8080808080670de0b6b3a764000060646200014782600362000921565b62000153919062000941565b601b5533985060646200016882600362000921565b62000174919062000941565b601d556127106200018782600162000921565b62000193919062000941565b601c5560108790556011869055601285905584620001b2878962000961565b620001be919062000961565b600f5560148490556015839055601682905581620001dd848662000961565b620001e9919062000961565b601355600554601a80546101006001600160a01b03909316928302610100600160a81b03199091161790556200022190600162000469565b6200022e30600162000469565b6200023d61dead600162000469565b6200025c620002546005546001600160a01b031690565b60016200049c565b620002693060016200049c565b6200027861dead60016200049c565b876001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002db919062000977565b6001600160a01b031663c9c65396308a6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200034d919062000977565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000398573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003be919062000977565b6001600160a01b031660a0819052620003d990600162000469565b60a051620003e990600162000504565b60a051620003f9908a8362000557565b62000405338262000682565b505050505050505050620009a6565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6200047362000743565b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b620004a662000743565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382165f81815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316620005bf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006225760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620005b6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006da5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005b6565b8060025f828254620006ed919062000961565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b031633146200079f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005b6565b565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620007cf57607f821691505b602082108103620007ee57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007a1575f81815260208120601f850160051c810160208610156200081c5750805b601f850160051c820191505b818110156200083d5782815560010162000828565b505050505050565b81516001600160401b03811115620008615762000861620007a6565b6200087981620008728454620007ba565b84620007f4565b602080601f831160018114620008af575f8415620008975750858301515b5f19600386901b1c1916600185901b1785556200083d565b5f85815260208120601f198616915b82811015620008df57888601518255948401946001909101908401620008be565b5085821015620008fd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200093b576200093b6200090d565b92915050565b5f826200095c57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200093b576200093b6200090d565b5f6020828403121562000988575f80fd5b81516001600160a01b03811681146200099f575f80fd5b9392505050565b60805160a0516131a762000a2a5f395f818161062a01528181610ff101528181611780015281816118170152818161184201528181611d1601528181612833015281816128d101526128fc01525f818161048401528181611cd8015281816129fd01528181612ab401528181612af001528181612b640152612bc001526131a75ff3fe6080604052600436106103c1575f3560e01c80638da5cb5b116101f4578063c17b5b8c11610113578063dd62ed3e116100a8578063f2fde38b11610078578063f2fde38b14610ac6578063f319ae7714610ae5578063f637434214610b04578063f8b45b0514610b19578063fe72b27a14610b2e575f80fd5b8063dd62ed3e14610a69578063e2f4560514610a88578063e884f26014610a9d578063f11a24d314610ab1575f80fd5b8063c997eb8d116100e3578063c997eb8d146109f7578063d257b34f14610a16578063d791219914610a35578063d85ba06314610a54575f80fd5b8063c17b5b8c1461098b578063c18bc195146109aa578063c876d0b9146109c9578063c8c8ebe4146109e2575f80fd5b8063a0d82dc511610189578063aacebbe311610159578063aacebbe314610901578063b62496f514610920578063bbc0c7421461094e578063c02466681461096c575f80fd5b8063a0d82dc514610899578063a457c2d7146108ae578063a4c82a00146108cd578063a9059cbb146108e2575f80fd5b80639a7a23d6116101c45780639a7a23d61461083b5780639c3b4fdc1461085a5780639ec22c0e1461086f5780639fccce3214610884575f80fd5b80638da5cb5b146107d657806392136913146107f3578063924de9b71461080857806395d89b4114610827575f80fd5b8063313ce567116102e0578063715018a61161027557806375f0a8741161024557806375f0a8741461076a5780637bce5a041461078e5780638095d564146107a35780638a8c523c146107c2575f80fd5b8063715018a614610704578063730c188814610718578063751039fc146107375780637571336a1461074b575f80fd5b80634fbee193116102b05780634fbee193146106655780636a486a8e1461069c5780636ddd1713146106b157806370a08231146106d0575f80fd5b8063313ce567146105df57806339509351146105fa57806349bd5a5e146106195780634a62bb651461064c575f80fd5b8063199ffc721161035657806323b872dd1161032657806323b872dd1461057d57806327c8f8351461059c5780632c3e486c146105b15780632e82f1a0146105c6575f80fd5b8063199ffc721461051f5780631a8145bb146105345780631f3fed8f14610549578063203e727e1461055e575f80fd5b80631694505e116103915780631694505e1461047357806316c02129146104be57806318160ddd146104ec578063184c16c51461050a575f80fd5b806306fdde03146103cc578063095ea7b3146103f65780631006ee0c1461042557806310d5de5314610446575f80fd5b366103c857005b5f80fd5b3480156103d7575f80fd5b506103e0610b4d565b6040516103ed9190612c3c565b60405180910390f35b348015610401575f80fd5b50610415610410366004612c9b565b610bdd565b60405190151581526020016103ed565b348015610430575f80fd5b5061044461043f366004612cc5565b610bf6565b005b348015610451575f80fd5b50610415610460366004612ce5565b602080525f908152604090205460ff1681565b34801561047e575f80fd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ed565b3480156104c9575f80fd5b506104156104d8366004612ce5565b60216020525f908152604090205460ff1681565b3480156104f7575f80fd5b506002545b6040519081526020016103ed565b348015610515575f80fd5b506104fc600a5481565b34801561052a575f80fd5b506104fc60065481565b34801561053f575f80fd5b506104fc60185481565b348015610554575f80fd5b506104fc60175481565b348015610569575f80fd5b50610444610578366004612d00565b610cf4565b348015610588575f80fd5b50610415610597366004612d17565b610d67565b3480156105a7575f80fd5b506104a661dead81565b3480156105bc575f80fd5b506104fc60085481565b3480156105d1575f80fd5b506007546104159060ff1681565b3480156105ea575f80fd5b50604051600981526020016103ed565b348015610605575f80fd5b50610415610614366004612c9b565b610d8a565b348015610624575f80fd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b348015610657575f80fd5b50600c546104159060ff1681565b348015610670575f80fd5b5061041561067f366004612ce5565b6001600160a01b03165f908152601f602052604090205460ff1690565b3480156106a7575f80fd5b506104fc60135481565b3480156106bc575f80fd5b50600c546104159062010000900460ff1681565b3480156106db575f80fd5b506104fc6106ea366004612ce5565b6001600160a01b03165f9081526020819052604090205490565b34801561070f575f80fd5b50610444610dab565b348015610723575f80fd5b50610444610732366004612d64565b610dbe565b348015610742575f80fd5b50610415610ec5565b348015610756575f80fd5b50610444610765366004612d96565b610ede565b348015610775575f80fd5b50601a546104a69061010090046001600160a01b031681565b348015610799575f80fd5b506104fc60105481565b3480156107ae575f80fd5b506104446107bd366004612dc9565b610f0f565b3480156107cd575f80fd5b50610444610f95565b3480156107e1575f80fd5b506005546001600160a01b03166104a6565b3480156107fe575f80fd5b506104fc60145481565b348015610813575f80fd5b50610444610822366004612df2565b610fb4565b348015610832575f80fd5b506103e0610fd8565b348015610846575f80fd5b50610444610855366004612d96565b610fe7565b348015610865575f80fd5b506104fc60125481565b34801561087a575f80fd5b506104fc600b5481565b34801561088f575f80fd5b506104fc60195481565b3480156108a4575f80fd5b506104fc60165481565b3480156108b9575f80fd5b506104156108c8366004612c9b565b6110a0565b3480156108d8575f80fd5b506104fc60095481565b3480156108ed575f80fd5b506104156108fc366004612c9b565b61111a565b34801561090c575f80fd5b5061044461091b366004612ce5565b611127565b34801561092b575f80fd5b5061041561093a366004612ce5565b60226020525f908152604090205460ff1681565b348015610959575f80fd5b50600c5461041590610100900460ff1681565b348015610977575f80fd5b50610444610986366004612d96565b611196565b348015610996575f80fd5b506104446109a5366004612dc9565b6111fc565b3480156109b5575f80fd5b506104446109c4366004612d00565b61127d565b3480156109d4575f80fd5b50600e546104159060ff1681565b3480156109ed575f80fd5b506104fc601b5481565b348015610a02575f80fd5b50610444610a11366004612e0b565b6112f0565b348015610a21575f80fd5b50610415610a30366004612d00565b61136c565b348015610a40575f80fd5b50610444610a4f366004612ce5565b61149d565b348015610a5f575f80fd5b506104fc600f5481565b348015610a74575f80fd5b506104fc610a83366004612e7f565b611501565b348015610a93575f80fd5b506104fc601c5481565b348015610aa8575f80fd5b5061041561152b565b348015610abc575f80fd5b506104fc60115481565b348015610ad1575f80fd5b50610444610ae0366004612ce5565b611544565b348015610af0575f80fd5b50610444610aff366004612cc5565b6115bd565b348015610b0f575f80fd5b506104fc60155481565b348015610b24575f80fd5b506104fc601d5481565b348015610b39575f80fd5b50610415610b48366004612d00565b611699565b606060038054610b5c90612eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8890612eb6565b8015610bd35780601f10610baa57610100808354040283529160200191610bd3565b820191905f5260205f20905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b5f33610bea8185856118e4565b60019150505b92915050565b610bfe611a07565b601681905560128290556015546014548291610c1991612f02565b610c239190612f02565b601355601254601154601054610c399190612f02565b610c439190612f02565b600f81905560191015610c9d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064015b60405180910390fd5b60636013541115610cf05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610c94565b5050565b610cfc611a07565b670de0b6b3a76400006103e8610d1160025490565b610d1c906001612f15565b610d269190612f2c565b610d309190612f2c565b811015610d4f5760405162461bcd60e51b8152600401610c9490612f4b565b610d6181670de0b6b3a7640000612f15565b601b5550565b5f33610d74858285611a61565b610d7f858585611ad3565b506001949350505050565b5f33610bea818585610d9c8383611501565b610da69190612f02565b6118e4565b610db3611a07565b610dbc5f6123fc565b565b610dc6611a07565b610258831015610e345760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610c94565b6103e88211158015610e44575060015b610ea95760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c94565b6008929092556006556007805460ff1916911515919091179055565b5f610ece611a07565b50600c805460ff19169055600190565b610ee6611a07565b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b610f17611a07565b60108390556011829055601281905580610f318385612f02565b610f3b9190612f02565b600f81905560191015610f905760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c94565b505050565b610f9d611a07565b600c805462ffff0019166201010017905542600955565b610fbc611a07565b600c8054911515620100000262ff000019909216919091179055565b606060048054610b5c90612eb6565b610fef611a07565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110965760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c94565b610cf0828261244d565b5f33816110ad8286611501565b90508381101561110d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c94565b610d7f82868684036118e4565b5f33610bea818585611ad3565b61112f611a07565b601a546040516001600160a01b036101009092048216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3601a80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61119e611a07565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611204611a07565b6014839055601582905560168190558061121e8385612f02565b6112289190612f02565b601381905560631015610f905760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610c94565b611285611a07565b670de0b6b3a76400006103e861129a60025490565b6112a5906005612f15565b6112af9190612f2c565b6112b99190612f2c565b8110156112d85760405162461bcd60e51b8152600401610c9490612f9a565b6112ea81670de0b6b3a7640000612f15565b601d5550565b6112f8611a07565b5f5b82811015611366578160215f86868581811061131857611318612fde565b905060200201602081019061132d9190612ce5565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061135e81612ff2565b9150506112fa565b50505050565b5f611375611a07565b620186a061138260025490565b61138d906001612f15565b6113979190612f2c565b8210156114045760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c94565b6103e861141060025490565b61141b90600a612f15565b6114259190612f2c565b82111561148f5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c94565b50601c81905560015b919050565b6114a5611a07565b601e546040516001600160a01b03918216918316907ffbbc329437e8c79f847e170730ad6dd04106b7511cad70d06d635886d92de83c905f90a3601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b5f611534611a07565b50600e805460ff19169055600190565b61154c611a07565b6001600160a01b0381166115b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c94565b6115ba816123fc565b50565b6115c5611a07565b670de0b6b3a76400006103e86115da60025490565b6115e5906001612f15565b6115ef9190612f2c565b6115f99190612f2c565b8210156116185760405162461bcd60e51b8152600401610c9490612f4b565b61162a82670de0b6b3a7640000612f15565b601b55670de0b6b3a76400006103e861164260025490565b61164d906005612f15565b6116579190612f2c565b6116619190612f2c565b8110156116805760405162461bcd60e51b8152600401610c9490612f9a565b61169281670de0b6b3a7640000612f15565b601d555050565b5f6116a2611a07565b600a54600b546116b29190612f02565b42116117005760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c94565b6103e88211156117655760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c94565b42600b556040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201525f9030906370a0823190602401602060405180830381865afa1580156117cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f1919061300a565b90505f61180a61271061180484876124a0565b906124b2565b9050801561183f5761183f7f000000000000000000000000000000000000000000000000000000000000000061dead836124bd565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561189b575f80fd5b505af11580156118ad573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6001600160a01b0383166119465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c94565b6001600160a01b0382166119a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c94565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610dbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c94565b5f611a6c8484611501565b90505f1981146113665781811015611ac65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c94565b61136684848484036118e4565b6001600160a01b038316611af95760405162461bcd60e51b8152600401610c9490613021565b6001600160a01b038216611b1f5760405162461bcd60e51b8152600401610c9490613066565b6001600160a01b0382165f9081526021602052604090205460ff16158015611b5f57506001600160a01b0383165f9081526021602052604090205460ff16155b611b995760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c94565b805f03611bab57610f9083835f6124bd565b600c5460ff1615612053576005546001600160a01b03848116911614801590611be257506005546001600160a01b03838116911614155b8015611bf657506001600160a01b03821615155b8015611c0d57506001600160a01b03821661dead14155b8015611c1c5750601a5460ff16155b1561205357600c54610100900460ff16611cb2576001600160a01b0383165f908152601f602052604090205460ff1680611c6d57506001600160a01b0382165f908152601f602052604090205460ff165b611cb25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c94565b600e5460ff1615611df7576005546001600160a01b03838116911614801590611d0d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611d4b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611df757325f908152600d60205260409020544311611de55760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c94565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526022602052604090205460ff168015611e3557506001600160a01b0382165f90815260208052604090205460ff16155b15611f1857601b54811115611eaa5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c94565b601d546001600160a01b0383165f90815260208190526040902054611ecf9083612f02565b1115611f135760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c94565b612053565b6001600160a01b0382165f9081526022602052604090205460ff168015611f5657506001600160a01b0383165f90815260208052604090205460ff16155b15611fcc57601b54811115611f135760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c94565b6001600160a01b0382165f90815260208052604090205460ff1661205357601d546001600160a01b0383165f9081526020819052604090205461200f9083612f02565b11156120535760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c94565b305f90815260208190526040902054601c548110801590819061207e5750600c5462010000900460ff165b801561208d5750601a5460ff16155b80156120b157506001600160a01b0385165f9081526022602052604090205460ff16155b80156120d557506001600160a01b0385165f908152601f602052604090205460ff16155b80156120f957506001600160a01b0384165f908152601f602052604090205460ff16155b1561211e57601a805460ff191660011790556121136125e5565b601a805460ff191690555b601a5460ff1615801561214857506001600160a01b0384165f9081526022602052604090205460ff165b8015612156575060075460ff165b8015612171575060085460095461216d9190612f02565b4210155b801561219557506001600160a01b0385165f908152601f602052604090205460ff16155b156121a4576121a2612818565b505b601a546001600160a01b0386165f908152601f602052604090205460ff918216159116806121e957506001600160a01b0385165f908152601f602052604090205460ff165b156121f157505f5b5f81156123e8576001600160a01b0386165f9081526022602052604090205460ff16156122f257601e546122309082906001600160a01b03163161299d565b61224a6064611804601354896124a090919063ffffffff16565b6122549190612f02565b601354909150156122ed5760135460155461226f9083612f15565b6122799190612f2c565b60185f8282546122899190612f02565b909155505060135460165461229e9083612f15565b6122a89190612f2c565b60195f8282546122b89190612f02565b90915550506013546014546122cd9083612f15565b6122d79190612f2c565b60175f8282546122e79190612f02565b90915550505b6123ca565b6001600160a01b0387165f9081526022602052604090205460ff16801561231a57505f600f54115b156123ca576123396064611804600f54886124a090919063ffffffff16565b9050600f546011548261234c9190612f15565b6123569190612f2c565b60185f8282546123669190612f02565b9091555050600f5460125461237b9083612f15565b6123859190612f2c565b60195f8282546123959190612f02565b9091555050600f546010546123aa9083612f15565b6123b49190612f2c565b60175f8282546123c49190612f02565b90915550505b80156123db576123db8730836124bd565b6123e581866130a9565b94505b6123f38787876124bd565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f6124ab8284612f15565b9392505050565b5f6124ab8284612f2c565b6001600160a01b0383166124e35760405162461bcd60e51b8152600401610c9490613021565b6001600160a01b0382166125095760405162461bcd60e51b8152600401610c9490613066565b6001600160a01b0383165f90815260208190526040902054818110156125805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c94565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611366565b305f9081526020819052604081205490505f60195460175460185461260a9190612f02565b6126149190612f02565b90505f821580612622575081155b1561262c57505050565b601c5461263a906014612f15565b83111561265257601c5461264f906014612f15565b92505b5f600283601854866126649190612f15565b61266e9190612f2c565b6126789190612f2c565b90505f612685858361299d565b905047612691826129a8565b5f61269c478361299d565b90505f6126b887611804601754856124a090919063ffffffff16565b90505f6126d488611804601954866124a090919063ffffffff16565b90505f816126e284866130a9565b6126ec91906130a9565b5f601881905560178190556019819055601a5460405192935061010090046001600160a01b031691849181818185875af1925050503d805f811461274b576040519150601f19603f3d011682016040523d82523d5f602084013e612750565b606091505b5090985050861580159061276357505f81115b156127b6576127728782612b5e565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b601a546040516101009091046001600160a01b03169047905f81818185875af1925050503d805f8114612804576040519150601f19603f3d011682016040523d82523d5f602084013e612809565b606091505b50505050505050505050505050565b426009556040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201525f90819030906370a0823190602401602060405180830381865afa158015612882573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a6919061300a565b90505f6128c4612710611804600654856124a090919063ffffffff16565b905080156128f9576128f97f000000000000000000000000000000000000000000000000000000000000000061dead836124bd565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612955575f80fd5b505af1158015612967573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b5f6124ab82846130a9565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106129db576129db612fde565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a7b91906130bc565b81600181518110612a8e57612a8e612fde565b60200260200101906001600160a01b031690816001600160a01b031681525050612ad9307f0000000000000000000000000000000000000000000000000000000000000000846118e4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612b2d9085905f908690309042906004016130d7565b5f604051808303815f87803b158015612b44575f80fd5b505af1158015612b56573d5f803e3d5ffd5b505050505050565b612b89307f0000000000000000000000000000000000000000000000000000000000000000846118e4565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c10573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c359190613146565b5050505050565b5f6020808352835180828501525f5b81811015612c6757858101830151858201604001528201612c4b565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ba575f80fd5b5f8060408385031215612cac575f80fd5b8235612cb781612c87565b946020939093013593505050565b5f8060408385031215612cd6575f80fd5b50508035926020909101359150565b5f60208284031215612cf5575f80fd5b81356124ab81612c87565b5f60208284031215612d10575f80fd5b5035919050565b5f805f60608486031215612d29575f80fd5b8335612d3481612c87565b92506020840135612d4481612c87565b929592945050506040919091013590565b80358015158114611498575f80fd5b5f805f60608486031215612d76575f80fd5b8335925060208401359150612d8d60408501612d55565b90509250925092565b5f8060408385031215612da7575f80fd5b8235612db281612c87565b9150612dc060208401612d55565b90509250929050565b5f805f60608486031215612ddb575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612e02575f80fd5b6124ab82612d55565b5f805f60408486031215612e1d575f80fd5b833567ffffffffffffffff80821115612e34575f80fd5b818601915086601f830112612e47575f80fd5b813581811115612e55575f80fd5b8760208260051b8501011115612e69575f80fd5b602092830195509350612d8d9186019050612d55565b5f8060408385031215612e90575f80fd5b8235612e9b81612c87565b91506020830135612eab81612c87565b809150509250929050565b600181811c90821680612eca57607f821691505b602082108103612ee857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bf057610bf0612eee565b8082028115828204841417610bf057610bf0612eee565b5f82612f4657634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602f908201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060408201526e6c6f776572207468616e20302e312560881b606082015260800190565b60208082526024908201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604082015263302e352560e01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161300357613003612eee565b5060010190565b5f6020828403121561301a575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bf057610bf0612eee565b5f602082840312156130cc575f80fd5b81516124ab81612c87565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156131255784516001600160a01b031683529383019391830191600101613100565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613158575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212209af493e078fbdc8e63a17b5a34de6744dc99f8b73e534c907dbc3acb9abf83b964736f6c63430008150033
Deployed Bytecode
0x6080604052600436106103c1575f3560e01c80638da5cb5b116101f4578063c17b5b8c11610113578063dd62ed3e116100a8578063f2fde38b11610078578063f2fde38b14610ac6578063f319ae7714610ae5578063f637434214610b04578063f8b45b0514610b19578063fe72b27a14610b2e575f80fd5b8063dd62ed3e14610a69578063e2f4560514610a88578063e884f26014610a9d578063f11a24d314610ab1575f80fd5b8063c997eb8d116100e3578063c997eb8d146109f7578063d257b34f14610a16578063d791219914610a35578063d85ba06314610a54575f80fd5b8063c17b5b8c1461098b578063c18bc195146109aa578063c876d0b9146109c9578063c8c8ebe4146109e2575f80fd5b8063a0d82dc511610189578063aacebbe311610159578063aacebbe314610901578063b62496f514610920578063bbc0c7421461094e578063c02466681461096c575f80fd5b8063a0d82dc514610899578063a457c2d7146108ae578063a4c82a00146108cd578063a9059cbb146108e2575f80fd5b80639a7a23d6116101c45780639a7a23d61461083b5780639c3b4fdc1461085a5780639ec22c0e1461086f5780639fccce3214610884575f80fd5b80638da5cb5b146107d657806392136913146107f3578063924de9b71461080857806395d89b4114610827575f80fd5b8063313ce567116102e0578063715018a61161027557806375f0a8741161024557806375f0a8741461076a5780637bce5a041461078e5780638095d564146107a35780638a8c523c146107c2575f80fd5b8063715018a614610704578063730c188814610718578063751039fc146107375780637571336a1461074b575f80fd5b80634fbee193116102b05780634fbee193146106655780636a486a8e1461069c5780636ddd1713146106b157806370a08231146106d0575f80fd5b8063313ce567146105df57806339509351146105fa57806349bd5a5e146106195780634a62bb651461064c575f80fd5b8063199ffc721161035657806323b872dd1161032657806323b872dd1461057d57806327c8f8351461059c5780632c3e486c146105b15780632e82f1a0146105c6575f80fd5b8063199ffc721461051f5780631a8145bb146105345780631f3fed8f14610549578063203e727e1461055e575f80fd5b80631694505e116103915780631694505e1461047357806316c02129146104be57806318160ddd146104ec578063184c16c51461050a575f80fd5b806306fdde03146103cc578063095ea7b3146103f65780631006ee0c1461042557806310d5de5314610446575f80fd5b366103c857005b5f80fd5b3480156103d7575f80fd5b506103e0610b4d565b6040516103ed9190612c3c565b60405180910390f35b348015610401575f80fd5b50610415610410366004612c9b565b610bdd565b60405190151581526020016103ed565b348015610430575f80fd5b5061044461043f366004612cc5565b610bf6565b005b348015610451575f80fd5b50610415610460366004612ce5565b602080525f908152604090205460ff1681565b34801561047e575f80fd5b506104a67f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ed565b3480156104c9575f80fd5b506104156104d8366004612ce5565b60216020525f908152604090205460ff1681565b3480156104f7575f80fd5b506002545b6040519081526020016103ed565b348015610515575f80fd5b506104fc600a5481565b34801561052a575f80fd5b506104fc60065481565b34801561053f575f80fd5b506104fc60185481565b348015610554575f80fd5b506104fc60175481565b348015610569575f80fd5b50610444610578366004612d00565b610cf4565b348015610588575f80fd5b50610415610597366004612d17565b610d67565b3480156105a7575f80fd5b506104a661dead81565b3480156105bc575f80fd5b506104fc60085481565b3480156105d1575f80fd5b506007546104159060ff1681565b3480156105ea575f80fd5b50604051600981526020016103ed565b348015610605575f80fd5b50610415610614366004612c9b565b610d8a565b348015610624575f80fd5b506104a67f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d81565b348015610657575f80fd5b50600c546104159060ff1681565b348015610670575f80fd5b5061041561067f366004612ce5565b6001600160a01b03165f908152601f602052604090205460ff1690565b3480156106a7575f80fd5b506104fc60135481565b3480156106bc575f80fd5b50600c546104159062010000900460ff1681565b3480156106db575f80fd5b506104fc6106ea366004612ce5565b6001600160a01b03165f9081526020819052604090205490565b34801561070f575f80fd5b50610444610dab565b348015610723575f80fd5b50610444610732366004612d64565b610dbe565b348015610742575f80fd5b50610415610ec5565b348015610756575f80fd5b50610444610765366004612d96565b610ede565b348015610775575f80fd5b50601a546104a69061010090046001600160a01b031681565b348015610799575f80fd5b506104fc60105481565b3480156107ae575f80fd5b506104446107bd366004612dc9565b610f0f565b3480156107cd575f80fd5b50610444610f95565b3480156107e1575f80fd5b506005546001600160a01b03166104a6565b3480156107fe575f80fd5b506104fc60145481565b348015610813575f80fd5b50610444610822366004612df2565b610fb4565b348015610832575f80fd5b506103e0610fd8565b348015610846575f80fd5b50610444610855366004612d96565b610fe7565b348015610865575f80fd5b506104fc60125481565b34801561087a575f80fd5b506104fc600b5481565b34801561088f575f80fd5b506104fc60195481565b3480156108a4575f80fd5b506104fc60165481565b3480156108b9575f80fd5b506104156108c8366004612c9b565b6110a0565b3480156108d8575f80fd5b506104fc60095481565b3480156108ed575f80fd5b506104156108fc366004612c9b565b61111a565b34801561090c575f80fd5b5061044461091b366004612ce5565b611127565b34801561092b575f80fd5b5061041561093a366004612ce5565b60226020525f908152604090205460ff1681565b348015610959575f80fd5b50600c5461041590610100900460ff1681565b348015610977575f80fd5b50610444610986366004612d96565b611196565b348015610996575f80fd5b506104446109a5366004612dc9565b6111fc565b3480156109b5575f80fd5b506104446109c4366004612d00565b61127d565b3480156109d4575f80fd5b50600e546104159060ff1681565b3480156109ed575f80fd5b506104fc601b5481565b348015610a02575f80fd5b50610444610a11366004612e0b565b6112f0565b348015610a21575f80fd5b50610415610a30366004612d00565b61136c565b348015610a40575f80fd5b50610444610a4f366004612ce5565b61149d565b348015610a5f575f80fd5b506104fc600f5481565b348015610a74575f80fd5b506104fc610a83366004612e7f565b611501565b348015610a93575f80fd5b506104fc601c5481565b348015610aa8575f80fd5b5061041561152b565b348015610abc575f80fd5b506104fc60115481565b348015610ad1575f80fd5b50610444610ae0366004612ce5565b611544565b348015610af0575f80fd5b50610444610aff366004612cc5565b6115bd565b348015610b0f575f80fd5b506104fc60155481565b348015610b24575f80fd5b506104fc601d5481565b348015610b39575f80fd5b50610415610b48366004612d00565b611699565b606060038054610b5c90612eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8890612eb6565b8015610bd35780601f10610baa57610100808354040283529160200191610bd3565b820191905f5260205f20905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b5f33610bea8185856118e4565b60019150505b92915050565b610bfe611a07565b601681905560128290556015546014548291610c1991612f02565b610c239190612f02565b601355601254601154601054610c399190612f02565b610c439190612f02565b600f81905560191015610c9d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064015b60405180910390fd5b60636013541115610cf05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610c94565b5050565b610cfc611a07565b670de0b6b3a76400006103e8610d1160025490565b610d1c906001612f15565b610d269190612f2c565b610d309190612f2c565b811015610d4f5760405162461bcd60e51b8152600401610c9490612f4b565b610d6181670de0b6b3a7640000612f15565b601b5550565b5f33610d74858285611a61565b610d7f858585611ad3565b506001949350505050565b5f33610bea818585610d9c8383611501565b610da69190612f02565b6118e4565b610db3611a07565b610dbc5f6123fc565b565b610dc6611a07565b610258831015610e345760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610c94565b6103e88211158015610e44575060015b610ea95760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c94565b6008929092556006556007805460ff1916911515919091179055565b5f610ece611a07565b50600c805460ff19169055600190565b610ee6611a07565b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b610f17611a07565b60108390556011829055601281905580610f318385612f02565b610f3b9190612f02565b600f81905560191015610f905760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c94565b505050565b610f9d611a07565b600c805462ffff0019166201010017905542600955565b610fbc611a07565b600c8054911515620100000262ff000019909216919091179055565b606060048054610b5c90612eb6565b610fef611a07565b7f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d6001600160a01b0316826001600160a01b0316036110965760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c94565b610cf0828261244d565b5f33816110ad8286611501565b90508381101561110d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c94565b610d7f82868684036118e4565b5f33610bea818585611ad3565b61112f611a07565b601a546040516001600160a01b036101009092048216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3601a80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61119e611a07565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611204611a07565b6014839055601582905560168190558061121e8385612f02565b6112289190612f02565b601381905560631015610f905760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610c94565b611285611a07565b670de0b6b3a76400006103e861129a60025490565b6112a5906005612f15565b6112af9190612f2c565b6112b99190612f2c565b8110156112d85760405162461bcd60e51b8152600401610c9490612f9a565b6112ea81670de0b6b3a7640000612f15565b601d5550565b6112f8611a07565b5f5b82811015611366578160215f86868581811061131857611318612fde565b905060200201602081019061132d9190612ce5565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061135e81612ff2565b9150506112fa565b50505050565b5f611375611a07565b620186a061138260025490565b61138d906001612f15565b6113979190612f2c565b8210156114045760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c94565b6103e861141060025490565b61141b90600a612f15565b6114259190612f2c565b82111561148f5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c94565b50601c81905560015b919050565b6114a5611a07565b601e546040516001600160a01b03918216918316907ffbbc329437e8c79f847e170730ad6dd04106b7511cad70d06d635886d92de83c905f90a3601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b5f611534611a07565b50600e805460ff19169055600190565b61154c611a07565b6001600160a01b0381166115b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c94565b6115ba816123fc565b50565b6115c5611a07565b670de0b6b3a76400006103e86115da60025490565b6115e5906001612f15565b6115ef9190612f2c565b6115f99190612f2c565b8210156116185760405162461bcd60e51b8152600401610c9490612f4b565b61162a82670de0b6b3a7640000612f15565b601b55670de0b6b3a76400006103e861164260025490565b61164d906005612f15565b6116579190612f2c565b6116619190612f2c565b8110156116805760405162461bcd60e51b8152600401610c9490612f9a565b61169281670de0b6b3a7640000612f15565b601d555050565b5f6116a2611a07565b600a54600b546116b29190612f02565b42116117005760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c94565b6103e88211156117655760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c94565b42600b556040516370a0823160e01b81526001600160a01b037f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d1660048201525f9030906370a0823190602401602060405180830381865afa1580156117cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f1919061300a565b90505f61180a61271061180484876124a0565b906124b2565b9050801561183f5761183f7f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d61dead836124bd565b5f7f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561189b575f80fd5b505af11580156118ad573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6001600160a01b0383166119465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c94565b6001600160a01b0382166119a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c94565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610dbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c94565b5f611a6c8484611501565b90505f1981146113665781811015611ac65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c94565b61136684848484036118e4565b6001600160a01b038316611af95760405162461bcd60e51b8152600401610c9490613021565b6001600160a01b038216611b1f5760405162461bcd60e51b8152600401610c9490613066565b6001600160a01b0382165f9081526021602052604090205460ff16158015611b5f57506001600160a01b0383165f9081526021602052604090205460ff16155b611b995760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c94565b805f03611bab57610f9083835f6124bd565b600c5460ff1615612053576005546001600160a01b03848116911614801590611be257506005546001600160a01b03838116911614155b8015611bf657506001600160a01b03821615155b8015611c0d57506001600160a01b03821661dead14155b8015611c1c5750601a5460ff16155b1561205357600c54610100900460ff16611cb2576001600160a01b0383165f908152601f602052604090205460ff1680611c6d57506001600160a01b0382165f908152601f602052604090205460ff165b611cb25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c94565b600e5460ff1615611df7576005546001600160a01b03838116911614801590611d0d57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611d4b57507f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d6001600160a01b0316826001600160a01b031614155b15611df757325f908152600d60205260409020544311611de55760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c94565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526022602052604090205460ff168015611e3557506001600160a01b0382165f90815260208052604090205460ff16155b15611f1857601b54811115611eaa5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c94565b601d546001600160a01b0383165f90815260208190526040902054611ecf9083612f02565b1115611f135760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c94565b612053565b6001600160a01b0382165f9081526022602052604090205460ff168015611f5657506001600160a01b0383165f90815260208052604090205460ff16155b15611fcc57601b54811115611f135760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c94565b6001600160a01b0382165f90815260208052604090205460ff1661205357601d546001600160a01b0383165f9081526020819052604090205461200f9083612f02565b11156120535760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c94565b305f90815260208190526040902054601c548110801590819061207e5750600c5462010000900460ff165b801561208d5750601a5460ff16155b80156120b157506001600160a01b0385165f9081526022602052604090205460ff16155b80156120d557506001600160a01b0385165f908152601f602052604090205460ff16155b80156120f957506001600160a01b0384165f908152601f602052604090205460ff16155b1561211e57601a805460ff191660011790556121136125e5565b601a805460ff191690555b601a5460ff1615801561214857506001600160a01b0384165f9081526022602052604090205460ff165b8015612156575060075460ff165b8015612171575060085460095461216d9190612f02565b4210155b801561219557506001600160a01b0385165f908152601f602052604090205460ff16155b156121a4576121a2612818565b505b601a546001600160a01b0386165f908152601f602052604090205460ff918216159116806121e957506001600160a01b0385165f908152601f602052604090205460ff165b156121f157505f5b5f81156123e8576001600160a01b0386165f9081526022602052604090205460ff16156122f257601e546122309082906001600160a01b03163161299d565b61224a6064611804601354896124a090919063ffffffff16565b6122549190612f02565b601354909150156122ed5760135460155461226f9083612f15565b6122799190612f2c565b60185f8282546122899190612f02565b909155505060135460165461229e9083612f15565b6122a89190612f2c565b60195f8282546122b89190612f02565b90915550506013546014546122cd9083612f15565b6122d79190612f2c565b60175f8282546122e79190612f02565b90915550505b6123ca565b6001600160a01b0387165f9081526022602052604090205460ff16801561231a57505f600f54115b156123ca576123396064611804600f54886124a090919063ffffffff16565b9050600f546011548261234c9190612f15565b6123569190612f2c565b60185f8282546123669190612f02565b9091555050600f5460125461237b9083612f15565b6123859190612f2c565b60195f8282546123959190612f02565b9091555050600f546010546123aa9083612f15565b6123b49190612f2c565b60175f8282546123c49190612f02565b90915550505b80156123db576123db8730836124bd565b6123e581866130a9565b94505b6123f38787876124bd565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f6124ab8284612f15565b9392505050565b5f6124ab8284612f2c565b6001600160a01b0383166124e35760405162461bcd60e51b8152600401610c9490613021565b6001600160a01b0382166125095760405162461bcd60e51b8152600401610c9490613066565b6001600160a01b0383165f90815260208190526040902054818110156125805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c94565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611366565b305f9081526020819052604081205490505f60195460175460185461260a9190612f02565b6126149190612f02565b90505f821580612622575081155b1561262c57505050565b601c5461263a906014612f15565b83111561265257601c5461264f906014612f15565b92505b5f600283601854866126649190612f15565b61266e9190612f2c565b6126789190612f2c565b90505f612685858361299d565b905047612691826129a8565b5f61269c478361299d565b90505f6126b887611804601754856124a090919063ffffffff16565b90505f6126d488611804601954866124a090919063ffffffff16565b90505f816126e284866130a9565b6126ec91906130a9565b5f601881905560178190556019819055601a5460405192935061010090046001600160a01b031691849181818185875af1925050503d805f811461274b576040519150601f19603f3d011682016040523d82523d5f602084013e612750565b606091505b5090985050861580159061276357505f81115b156127b6576127728782612b5e565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b601a546040516101009091046001600160a01b03169047905f81818185875af1925050503d805f8114612804576040519150601f19603f3d011682016040523d82523d5f602084013e612809565b606091505b50505050505050505050505050565b426009556040516370a0823160e01b81526001600160a01b037f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d1660048201525f90819030906370a0823190602401602060405180830381865afa158015612882573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a6919061300a565b90505f6128c4612710611804600654856124a090919063ffffffff16565b905080156128f9576128f97f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d61dead836124bd565b5f7f0000000000000000000000001494a342740c0cbec2752b47657debca137c3d5d9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612955575f80fd5b505af1158015612967573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b5f6124ab82846130a9565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106129db576129db612fde565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a7b91906130bc565b81600181518110612a8e57612a8e612fde565b60200260200101906001600160a01b031690816001600160a01b031681525050612ad9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118e4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612b2d9085905f908690309042906004016130d7565b5f604051808303815f87803b158015612b44575f80fd5b505af1158015612b56573d5f803e3d5ffd5b505050505050565b612b89307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118e4565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c10573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c359190613146565b5050505050565b5f6020808352835180828501525f5b81811015612c6757858101830151858201604001528201612c4b565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ba575f80fd5b5f8060408385031215612cac575f80fd5b8235612cb781612c87565b946020939093013593505050565b5f8060408385031215612cd6575f80fd5b50508035926020909101359150565b5f60208284031215612cf5575f80fd5b81356124ab81612c87565b5f60208284031215612d10575f80fd5b5035919050565b5f805f60608486031215612d29575f80fd5b8335612d3481612c87565b92506020840135612d4481612c87565b929592945050506040919091013590565b80358015158114611498575f80fd5b5f805f60608486031215612d76575f80fd5b8335925060208401359150612d8d60408501612d55565b90509250925092565b5f8060408385031215612da7575f80fd5b8235612db281612c87565b9150612dc060208401612d55565b90509250929050565b5f805f60608486031215612ddb575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612e02575f80fd5b6124ab82612d55565b5f805f60408486031215612e1d575f80fd5b833567ffffffffffffffff80821115612e34575f80fd5b818601915086601f830112612e47575f80fd5b813581811115612e55575f80fd5b8760208260051b8501011115612e69575f80fd5b602092830195509350612d8d9186019050612d55565b5f8060408385031215612e90575f80fd5b8235612e9b81612c87565b91506020830135612eab81612c87565b809150509250929050565b600181811c90821680612eca57607f821691505b602082108103612ee857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bf057610bf0612eee565b8082028115828204841417610bf057610bf0612eee565b5f82612f4657634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602f908201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060408201526e6c6f776572207468616e20302e312560881b606082015260800190565b60208082526024908201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604082015263302e352560e01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161300357613003612eee565b5060010190565b5f6020828403121561301a575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bf057610bf0612eee565b5f602082840312156130cc575f80fd5b81516124ab81612c87565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156131255784516001600160a01b031683529383019391830191600101613100565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613158575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212209af493e078fbdc8e63a17b5a34de6744dc99f8b73e534c907dbc3acb9abf83b964736f6c63430008150033
Deployed Bytecode Sourcemap
37532:19657:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16416:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18766:201;;;;;;;;;;-1:-1:-1;18766:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;18766:201:0;1023:187:1;44766:419:0;;;;;;;;;;-1:-1:-1;44766:419:0;;;;;:::i;:::-;;:::i;:::-;;39271:64;;;;;;;;;;-1:-1:-1;39271:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37606:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1911:32:1;;;1893:51;;1881:2;1866:18;37606:51:0;1720:230:1;39362:42:0;;;;;;;;;;-1:-1:-1;39362:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17535:108;;;;;;;;;;-1:-1:-1;17623:12:0;;17535:108;;;2101:25:1;;;2089:2;2074:18;17535:108:0;1955:177:1;37975:50:0;;;;;;;;;;;;;;;;37777:35;;;;;;;;;;;;;;;;38786:33;;;;;;;;;;;;;;;;38746;;;;;;;;;;;;;;;;47255:234;;;;;;;;;;-1:-1:-1;47255:234:0;;;;;:::i;:::-;;:::i;19547:295::-;;;;;;;;;;-1:-1:-1;19547:295:0;;;;;:::i;:::-;;:::i;37709:53::-;;;;;;;;;;;;37755:6;37709:53;;37872:54;;;;;;;;;;;;;;;;37832:33;;;;;;;;;;-1:-1:-1;37832:33:0;;;;;;;;17378:92;;;;;;;;;;-1:-1:-1;17378:92:0;;17461:1;3133:36:1;;3121:2;3106:18;17378:92:0;2991:184:1;20251:238:0;;;;;;;;;;-1:-1:-1;20251:238:0;;;;;:::i;:::-;;:::i;37664:38::-;;;;;;;;;;;;;;;38076:33;;;;;;;;;;-1:-1:-1;38076:33:0;;;;;;;;46226:125;;;;;;;;;;-1:-1:-1;46226:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;46315:28:0;46291:4;46315:28;;;:19;:28;;;;;;;;;46226:125;38597:28;;;;;;;;;;;;;;;;38182:30;;;;;;;;;;-1:-1:-1;38182:30:0;;;;;;;;;;;17706:127;;;;;;;;;;-1:-1:-1;17706:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17807:18:0;17780:7;17807:18;;;;;;;;;;;;17706:127;9841:103;;;;;;;;;;;;;:::i;56739:447::-;;;;;;;;;;-1:-1:-1;56739:447:0;;;;;:::i;:::-;;:::i;43088:120::-;;;;;;;;;;;;;:::i;43642:144::-;;;;;;;;;;-1:-1:-1;43642:144:0;;;;;:::i;:::-;;:::i;38896:30::-;;;;;;;;;;-1:-1:-1;38896:30:0;;;;;;;-1:-1:-1;;;;;38896:30:0;;;38486;;;;;;;;;;;;;;;;43999:369;;;;;;;;;;-1:-1:-1;43999:369:0;;;;;:::i;:::-;;:::i;42877:155::-;;;;;;;;;;;;;:::i;9193:87::-;;;;;;;;;;-1:-1:-1;9266:6:0;;-1:-1:-1;;;;;9266:6:0;9193:87;;38632:31;;;;;;;;;;;;;;;;43886:101;;;;;;;;;;-1:-1:-1;43886:101:0;;;;;:::i;:::-;;:::i;16635:104::-;;;;;;;;;;;;;:::i;45383:244::-;;;;;;;;;;-1:-1:-1;45383:244:0;;;;;:::i;:::-;;:::i;38560:24::-;;;;;;;;;;;;;;;;38032:35;;;;;;;;;;;;;;;;38826:27;;;;;;;;;;;;;;;;38708:25;;;;;;;;;;;;;;;;20992:436;;;;;;;;;;-1:-1:-1;20992:436:0;;;;;:::i;:::-;;:::i;37933:29::-;;;;;;;;;;;;;;;;18039:193;;;;;;;;;;-1:-1:-1;18039:193:0;;;;;:::i;:::-;;:::i;45831:208::-;;;;;;;;;;-1:-1:-1;45831:208:0;;;;;:::i;:::-;;:::i;39562:58::-;;;;;;;;;;-1:-1:-1;39562:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38116:32;;;;;;;;;;-1:-1:-1;38116:32:0;;;;;;;;;;;45193:182;;;;;;;;;;-1:-1:-1;45193:182:0;;;;;:::i;:::-;;:::i;44380:378::-;;;;;;;;;;-1:-1:-1;44380:378:0;;;;;:::i;:::-;;:::i;43415:215::-;;;;;;;;;;-1:-1:-1;43415:215:0;;;;;:::i;:::-;;:::i;38404:39::-;;;;;;;;;;-1:-1:-1;38404:39:0;;;;;;;;38939:35;;;;;;;;;;;;;;;;42603:220;;;;;;;;;;-1:-1:-1;42603:220:0;;;;;:::i;:::-;;:::i;46432:385::-;;;;;;;;;;-1:-1:-1;46432:385:0;;;;;:::i;:::-;;:::i;46051:161::-;;;;;;;;;;-1:-1:-1;46051:161:0;;;;;:::i;:::-;;:::i;38452:27::-;;;;;;;;;;;;;;;;18295:151;;;;;;;;;;-1:-1:-1;18295:151:0;;;;;:::i;:::-;;:::i;38981:33::-;;;;;;;;;;;;;;;;43273:134;;;;;;;;;;;;;:::i;38523:30::-;;;;;;;;;;;;;;;;10099:201;;;;;;;;;;-1:-1:-1;10099:201:0;;;;;:::i;:::-;;:::i;46829:414::-;;;;;;;;;;-1:-1:-1;46829:414:0;;;;;:::i;:::-;;:::i;38670:31::-;;;;;;;;;;;;;;;;39021:24;;;;;;;;;;;;;;;;52893:1018;;;;;;;;;;-1:-1:-1;52893:1018:0;;;;;:::i;:::-;;:::i;16416:100::-;16470:13;16503:5;16496:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16416:100;:::o;18766:201::-;18849:4;7824:10;18905:32;7824:10;18921:7;18930:6;18905:8;:32::i;:::-;18955:4;18948:11;;;18766:201;;;;;:::o;44766:419::-;9079:13;:11;:13::i;:::-;44845:10:::1;:17:::0;;;44873:9:::1;:15:::0;;;44934:16:::1;::::0;44915::::1;::::0;44858:4;;44915:35:::1;::::0;::::1;:::i;:::-;:48;;;;:::i;:::-;44899:13;:64:::0;45025:9:::1;::::0;45007:15:::1;::::0;44989::::1;::::0;:33:::1;::::0;45007:15;44989:33:::1;:::i;:::-;:45;;;;:::i;:::-;44974:12;:60:::0;;;45069:2:::1;-1:-1:-1::0;45053:18:0::1;45045:60;;;::::0;-1:-1:-1;;;45045:60:0;;6428:2:1;45045:60:0::1;::::0;::::1;6410:21:1::0;6467:2;6447:18;;;6440:30;6506:31;6486:18;;;6479:59;6555:18;;45045:60:0::1;;;;;;;;;45141:2;45124:13;;:19;;45116:61;;;::::0;-1:-1:-1;;;45116:61:0;;6786:2:1;45116:61:0::1;::::0;::::1;6768:21:1::0;6825:2;6805:18;;;6798:30;6864:31;6844:18;;;6837:59;6913:18;;45116:61:0::1;6584:353:1::0;45116:61:0::1;44766:419:::0;;:::o;47255:234::-;9079:13;:11;:13::i;:::-;47374:4:::1;47368;47348:13;17623:12:::0;;;17535:108;47348:13:::1;:17;::::0;47364:1:::1;47348:17;:::i;:::-;:24;;;;:::i;:::-;47347:31;;;;:::i;:::-;47337:6;:41;;47329:101;;;;-1:-1:-1::0;;;47329:101:0::1;;;;;;;:::i;:::-;47464:17;:6:::0;47474::::1;47464:17;:::i;:::-;47441:20;:40:::0;-1:-1:-1;47255:234:0:o;19547:295::-;19678:4;7824:10;19736:38;19752:4;7824:10;19767:6;19736:15;:38::i;:::-;19785:27;19795:4;19801:2;19805:6;19785:9;:27::i;:::-;-1:-1:-1;19830:4:0;;19547:295;-1:-1:-1;;;;19547:295:0:o;20251:238::-;20339:4;7824:10;20395:64;7824:10;20411:7;20448:10;20420:25;7824:10;20411:7;20420:9;:25::i;:::-;:38;;;;:::i;:::-;20395:8;:64::i;9841:103::-;9079:13;:11;:13::i;:::-;9906:30:::1;9933:1;9906:18;:30::i;:::-;9841:103::o:0;56739:447::-;9079:13;:11;:13::i;:::-;56893:3:::1;56870:19;:26;;56862:90;;;::::0;-1:-1:-1;;;56862:90:0;;7955:2:1;56862:90:0::1;::::0;::::1;7937:21:1::0;7994:2;7974:18;;;7967:30;8033:34;8013:18;;;8006:62;-1:-1:-1;;;8084:18:1;;;8077:49;8143:19;;56862:90:0::1;7753:415:1::0;56862:90:0::1;56983:4;56971:8;:16;;:33;;;;-1:-1:-1::0;56991:13:0;56971:33:::1;56963:94;;;::::0;-1:-1:-1;;;56963:94:0;;8375:2:1;56963:94:0::1;::::0;::::1;8357:21:1::0;8414:2;8394:18;;;8387:30;8453:34;8433:18;;;8426:62;-1:-1:-1;;;8504:18:1;;;8497:46;8560:19;;56963:94:0::1;8173:412:1::0;56963:94:0::1;57068:15;:37:::0;;;;57116:16:::1;:27:::0;57154:13:::1;:24:::0;;-1:-1:-1;;57154:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;56739:447::o;43088:120::-;43140:4;9079:13;:11;:13::i;:::-;-1:-1:-1;43156:14:0::1;:22:::0;;-1:-1:-1;;43156:22:0::1;::::0;;;43088:120;:::o;43642:144::-;9079:13;:11;:13::i;:::-;-1:-1:-1;;;;;43732:39:0;;;::::1;;::::0;;;:31:::1;:39:::0;;;;;:46;;-1:-1:-1;;43732:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43642:144::o;43999:369::-;9079:13;:11;:13::i;:::-;44115:15:::1;:31:::0;;;44157:15:::1;:31:::0;;;44199:9:::1;:19:::0;;;44211:7;44244:33:::1;44175:13:::0;44133;44244:33:::1;:::i;:::-;:45;;;;:::i;:::-;44229:12;:60:::0;;;44324:2:::1;-1:-1:-1::0;44308:18:0::1;44300:60;;;::::0;-1:-1:-1;;;44300:60:0;;6428:2:1;44300:60:0::1;::::0;::::1;6410:21:1::0;6467:2;6447:18;;;6440:30;6506:31;6486:18;;;6479:59;6555:18;;44300:60:0::1;6226:353:1::0;44300:60:0::1;43999:369:::0;;;:::o;42877:155::-;9079:13;:11;:13::i;:::-;42932::::1;:20:::0;;-1:-1:-1;;42963:18:0;;;;;43009:15:::1;42992:14;:32:::0;42877:155::o;43886:101::-;9079:13;:11;:13::i;:::-;43958:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;43958:21:0;;::::1;::::0;;;::::1;::::0;;43886:101::o;16635:104::-;16691:13;16724:7;16717:14;;;;;:::i;45383:244::-;9079:13;:11;:13::i;:::-;45490::::1;-1:-1:-1::0;;;;;45482:21:0::1;:4;-1:-1:-1::0;;;;;45482:21:0::1;::::0;45474:91:::1;;;::::0;-1:-1:-1;;;45474:91:0;;8792:2:1;45474:91:0::1;::::0;::::1;8774:21:1::0;8831:2;8811:18;;;8804:30;8870:34;8850:18;;;8843:62;8941:27;8921:18;;;8914:55;8986:19;;45474:91:0::1;8590:421:1::0;45474:91:0::1;45578:41;45607:4;45613:5;45578:28;:41::i;20992:436::-:0;21085:4;7824:10;21085:4;21168:25;7824:10;21185:7;21168:9;:25::i;:::-;21141:52;;21232:15;21212:16;:35;;21204:85;;;;-1:-1:-1;;;21204:85:0;;9218:2:1;21204:85:0;;;9200:21:1;9257:2;9237:18;;;9230:30;9296:34;9276:18;;;9269:62;-1:-1:-1;;;9347:18:1;;;9340:35;9392:19;;21204:85:0;9016:401:1;21204:85:0;21325:60;21334:5;21341:7;21369:15;21350:16;:34;21325:8;:60::i;18039:193::-;18118:4;7824:10;18174:28;7824:10;18191:2;18195:6;18174:9;:28::i;45831:208::-;9079:13;:11;:13::i;:::-;45968:15:::1;::::0;45925:59:::1;::::0;-1:-1:-1;;;;;45968:15:0::1;::::0;;::::1;::::0;::::1;::::0;45925:59;::::1;::::0;::::1;::::0;;;::::1;45995:15;:36:::0;;-1:-1:-1;;;;;45995:36:0;;::::1;;;-1:-1:-1::0;;;;;;45995:36:0;;::::1;::::0;;;::::1;::::0;;45831:208::o;45193:182::-;9079:13;:11;:13::i;:::-;-1:-1:-1;;;;;45278:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;45278:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45333:34;;1163:41:1;;;45333:34:0::1;::::0;1136:18:1;45333:34:0::1;;;;;;;45193:182:::0;;:::o;44380:378::-;9079:13;:11;:13::i;:::-;44497:16:::1;:32:::0;;;44540:16:::1;:32:::0;;;44583:10:::1;:20:::0;;;44596:7;44630:35:::1;44559:13:::0;44516;44630:35:::1;:::i;:::-;:48;;;;:::i;:::-;44614:13;:64:::0;;;44714:2:::1;-1:-1:-1::0;44697:19:0::1;44689:61;;;::::0;-1:-1:-1;;;44689:61:0;;6786:2:1;44689:61:0::1;::::0;::::1;6768:21:1::0;6825:2;6805:18;;;6798:30;6864:31;6844:18;;;6837:59;6913:18;;44689:61:0::1;6584:353:1::0;43415:215:0;9079:13;:11;:13::i;:::-;43537:4:::1;43531;43511:13;17623:12:::0;;;17535:108;43511:13:::1;:17;::::0;43527:1:::1;43511:17;:::i;:::-;:24;;;;:::i;:::-;43510:31;;;;:::i;:::-;43500:6;:41;;43492:90;;;;-1:-1:-1::0;;;43492:90:0::1;;;;;;;:::i;:::-;43605:17;:6:::0;43615::::1;43605:17;:::i;:::-;43593:9;:29:::0;-1:-1:-1;43415:215:0:o;42603:220::-;9079:13;:11;:13::i;:::-;42710:6:::1;42705:111;42720:19:::0;;::::1;42705:111;;;42789:15;42761:10;:25;42772:10;;42783:1;42772:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42761:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42761:25:0;:43;;-1:-1:-1;;42761:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42741:3;::::1;::::0;::::1;:::i;:::-;;;;42705:111;;;;42603:220:::0;;;:::o;46432:385::-;46513:4;9079:13;:11;:13::i;:::-;46570:6:::1;46550:13;17623:12:::0;;;17535:108;46550:13:::1;:17;::::0;46566:1:::1;46550:17;:::i;:::-;:26;;;;:::i;:::-;46537:9;:39;;46529:105;;;::::0;-1:-1:-1;;;46529:105:0;;10301:2:1;46529:105:0::1;::::0;::::1;10283:21:1::0;10340:2;10320:18;;;10313:30;10379:34;10359:18;;;10352:62;-1:-1:-1;;;10430:18:1;;;10423:51;10491:19;;46529:105:0::1;10099:417:1::0;46529:105:0::1;46687:4;46666:13;17623:12:::0;;;17535:108;46666:13:::1;:18;::::0;46682:2:::1;46666:18;:::i;:::-;:25;;;;:::i;:::-;46653:9;:38;;46645:101;;;::::0;-1:-1:-1;;;46645:101:0;;10723:2:1;46645:101:0::1;::::0;::::1;10705:21:1::0;10762:2;10742:18;;;10735:30;10801:34;10781:18;;;10774:62;-1:-1:-1;;;10852:18:1;;;10845:48;10910:19;;46645:101:0::1;10521:414:1::0;46645:101:0::1;-1:-1:-1::0;46757:18:0::1;:30:::0;;;46805:4:::1;9103:1;46432:385:::0;;;:::o;46051:161::-;9079:13;:11;:13::i;:::-;46160:10:::1;::::0;46131:40:::1;::::0;-1:-1:-1;;;;;46160:10:0;;::::1;::::0;46131:40;::::1;::::0;::::1;::::0;46160:10:::1;::::0;46131:40:::1;46182:10;:22:::0;;-1:-1:-1;;;;;;46182:22:0::1;-1:-1:-1::0;;;;;46182:22:0;;;::::1;::::0;;;::::1;::::0;;46051:161::o;18295:151::-;-1:-1:-1;;;;;18411:18:0;;;18384:7;18411:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18295:151::o;43273:134::-;43333:4;9079:13;:11;:13::i;:::-;-1:-1:-1;43349:20:0::1;:28:::0;;-1:-1:-1;;43349:28:0::1;::::0;;;43273:134;:::o;10099:201::-;9079:13;:11;:13::i;:::-;-1:-1:-1;;;;;10188:22:0;::::1;10180:73;;;::::0;-1:-1:-1;;;10180:73:0;;11142:2:1;10180:73:0::1;::::0;::::1;11124:21:1::0;11181:2;11161:18;;;11154:30;11220:34;11200:18;;;11193:62;-1:-1:-1;;;11271:18:1;;;11264:36;11317:19;;10180:73:0::1;10940:402:1::0;10180:73:0::1;10264:28;10283:8;10264:18;:28::i;:::-;10099:201:::0;:::o;46829:414::-;9079:13;:11;:13::i;:::-;46971:4:::1;46965;46945:13;17623:12:::0;;;17535:108;46945:13:::1;:17;::::0;46961:1:::1;46945:17;:::i;:::-;:24;;;;:::i;:::-;46944:31;;;;:::i;:::-;46932:8;:43;;46924:103;;;;-1:-1:-1::0;;;46924:103:0::1;;;;;;;:::i;:::-;47061:19;:8:::0;47073:6:::1;47061:19;:::i;:::-;47038:20;:42:::0;47144:4:::1;47138;47118:13;17623:12:::0;;;17535:108;47118:13:::1;:17;::::0;47134:1:::1;47118:17;:::i;:::-;:24;;;;:::i;:::-;47117:31;;;;:::i;:::-;47101:12;:47;;47093:96;;;;-1:-1:-1::0;;;47093:96:0::1;;;;;;;:::i;:::-;47212:23;:12:::0;47228:6:::1;47212:23;:::i;:::-;47200:9;:35:::0;-1:-1:-1;;46829:414:0:o;52893:1018::-;52977:4;9079:13;:11;:13::i;:::-;53042:19:::1;;53019:20;;:42;;;;:::i;:::-;53001:15;:60;52993:106;;;::::0;-1:-1:-1;;;52993:106:0;;11549:2:1;52993:106:0::1;::::0;::::1;11531:21:1::0;;;11568:18;;;11561:30;11627:34;11607:18;;;11600:62;11679:18;;52993:106:0::1;11347:356:1::0;52993:106:0::1;53129:4;53118:7;:15;;53110:70;;;::::0;-1:-1:-1;;;53110:70:0;;11910:2:1;53110:70:0::1;::::0;::::1;11892:21:1::0;11949:2;11929:18;;;11922:30;11988:34;11968:18;;;11961:62;-1:-1:-1;;;12039:18:1;;;12032:40;12089:19;;53110:70:0::1;11708:406:1::0;53110:70:0::1;53214:15;53191:20;:38:::0;53323:29:::1;::::0;-1:-1:-1;;;53323:29:0;;-1:-1:-1;;;;;53338:13:0::1;1911:32:1::0;53323:29:0::1;::::0;::::1;1893:51:1::0;53292:28:0::1;::::0;53323:4:::1;::::0;:14:::1;::::0;1866:18:1;;53323:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53292:60:::0;-1:-1:-1;53410:20:0::1;53433:44;53471:5;53433:33;53292:60:::0;53458:7;53433:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;53410:67:::0;-1:-1:-1;53590:16:0;;53586:109:::1;;53622:61;53638:13;53661:6;53670:12;53622:15;:61::i;:::-;53778:19;53815:13;53778:51;;53840:4;-1:-1:-1::0;;;;;53840:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;53867:14:0::1;::::0;::::1;::::0;-1:-1:-1;53867:14:0;;-1:-1:-1;53867:14:0::1;-1:-1:-1::0;53899:4:0::1;::::0;52893:1018;-1:-1:-1;;;;52893:1018:0:o;25019:380::-;-1:-1:-1;;;;;25155:19:0;;25147:68;;;;-1:-1:-1;;;25147:68:0;;12510:2:1;25147:68:0;;;12492:21:1;12549:2;12529:18;;;12522:30;12588:34;12568:18;;;12561:62;-1:-1:-1;;;12639:18:1;;;12632:34;12683:19;;25147:68:0;12308:400:1;25147:68:0;-1:-1:-1;;;;;25234:21:0;;25226:68;;;;-1:-1:-1;;;25226:68:0;;12915:2:1;25226:68:0;;;12897:21:1;12954:2;12934:18;;;12927:30;12993:34;12973:18;;;12966:62;-1:-1:-1;;;13044:18:1;;;13037:32;13086:19;;25226:68:0;12713:398:1;25226:68:0;-1:-1:-1;;;;;25307:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25359:32;;2101:25:1;;;25359:32:0;;2074:18:1;25359:32:0;;;;;;;25019:380;;;:::o;9358:132::-;9266:6;;-1:-1:-1;;;;;9266:6:0;7824:10;9422:23;9414:68;;;;-1:-1:-1;;;9414:68:0;;13318:2:1;9414:68:0;;;13300:21:1;;;13337:18;;;13330:30;13396:34;13376:18;;;13369:62;13448:18;;9414:68:0;13116:356:1;25690:453:0;25825:24;25852:25;25862:5;25869:7;25852:9;:25::i;:::-;25825:52;;-1:-1:-1;;25892:16:0;:37;25888:248;;25974:6;25954:16;:26;;25946:68;;;;-1:-1:-1;;;25946:68:0;;13679:2:1;25946:68:0;;;13661:21:1;13718:2;13698:18;;;13691:30;13757:31;13737:18;;;13730:59;13806:18;;25946:68:0;13477:353:1;25946:68:0;26058:51;26067:5;26074:7;26102:6;26083:16;:25;26058:8;:51::i;47547:4520::-;-1:-1:-1;;;;;47679:18:0;;47671:68;;;;-1:-1:-1;;;47671:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47758:16:0;;47750:64;;;;-1:-1:-1;;;47750:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47834:14:0;;;;;;:10;:14;;;;;;;;47833:15;:36;;;;-1:-1:-1;;;;;;47853:16:0;;;;;;:10;:16;;;;;;;;47852:17;47833:36;47825:60;;;;-1:-1:-1;;;47825:60:0;;14847:2:1;47825:60:0;;;14829:21:1;14886:2;14866:18;;;14859:30;-1:-1:-1;;;14905:18:1;;;14898:41;14956:18;;47825:60:0;14645:335:1;47825:60:0;47910:6;47920:1;47910:11;47907:92;;47938:28;47954:4;47960:2;47964:1;47938:15;:28::i;47907:92::-;48022:14;;;;48019:1841;;;9266:6;;-1:-1:-1;;;;;48074:15:0;;;9266:6;;48074:15;;;;:49;;-1:-1:-1;9266:6:0;;-1:-1:-1;;;;;48110:13:0;;;9266:6;;48110:13;;48074:49;:86;;;;-1:-1:-1;;;;;;48144:16:0;;;;48074:86;:128;;;;-1:-1:-1;;;;;;48181:21:0;;48195:6;48181:21;;48074:128;:158;;;;-1:-1:-1;48224:8:0;;;;48223:9;48074:158;48052:1797;;;48270:13;;;;;;;48266:148;;-1:-1:-1;;;;;48315:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;48344:23:0;;;;;;:19;:23;;;;;;;;48315:52;48307:87;;;;-1:-1:-1;;;48307:87:0;;15187:2:1;48307:87:0;;;15169:21:1;15226:2;15206:18;;;15199:30;-1:-1:-1;;;15245:18:1;;;15238:52;15307:18;;48307:87:0;14985:346:1;48307:87:0;48572:20;;;;48568:423;;;9266:6;;-1:-1:-1;;;;;48620:13:0;;;9266:6;;48620:13;;;;:47;;;48651:15;-1:-1:-1;;;;;48637:30:0;:2;-1:-1:-1;;;;;48637:30:0;;;48620:47;:79;;;;;48685:13;-1:-1:-1;;;;;48671:28:0;:2;-1:-1:-1;;;;;48671:28:0;;;48620:79;48616:356;;;48764:9;48735:39;;;;:28;:39;;;;;;48777:12;-1:-1:-1;48727:140:0;;;;-1:-1:-1;;;48727:140:0;;15538:2:1;48727:140:0;;;15520:21:1;15577:2;15557:18;;;15550:30;15616:34;15596:18;;;15589:62;15687:34;15667:18;;;15660:62;-1:-1:-1;;;15738:19:1;;;15731:40;15788:19;;48727:140:0;15336:477:1;48727:140:0;48923:9;48894:39;;;;:28;:39;;;;;48936:12;48894:54;;48616:356;-1:-1:-1;;;;;49060:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;49096:35:0;;;;;;:31;:35;;;;;;;;49095:36;49060:71;49056:778;;;49178:20;;49168:6;:30;;49160:96;;;;-1:-1:-1;;;49160:96:0;;16020:2:1;49160:96:0;;;16002:21:1;16059:2;16039:18;;;16032:30;16098:34;16078:18;;;16071:62;-1:-1:-1;;;16149:18:1;;;16142:51;16210:19;;49160:96:0;15818:417:1;49160:96:0;49317:9;;-1:-1:-1;;;;;17807:18:0;;17780:7;17807:18;;;;;;;;;;;49291:22;;:6;:22;:::i;:::-;:35;;49283:67;;;;-1:-1:-1;;;49283:67:0;;16442:2:1;49283:67:0;;;16424:21:1;16481:2;16461:18;;;16454:30;-1:-1:-1;;;16500:18:1;;;16493:49;16559:18;;49283:67:0;16240:343:1;49283:67:0;49056:778;;;-1:-1:-1;;;;;49444:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;49478:37:0;;;;;;:31;:37;;;;;;;;49477:38;49444:71;49440:394;;;49562:20;;49552:6;:30;;49544:97;;;;-1:-1:-1;;;49544:97:0;;16790:2:1;49544:97:0;;;16772:21:1;16829:2;16809:18;;;16802:30;16868:34;16848:18;;;16841:62;-1:-1:-1;;;16919:18:1;;;16912:52;16981:19;;49544:97:0;16588:418:1;49440:394:0;-1:-1:-1;;;;;49688:35:0;;;;;;:31;:35;;;;;;;;49684:150;;49781:9;;-1:-1:-1;;;;;17807:18:0;;17780:7;17807:18;;;;;;;;;;;49755:22;;:6;:22;:::i;:::-;:35;;49747:67;;;;-1:-1:-1;;;49747:67:0;;16442:2:1;49747:67:0;;;16424:21:1;16481:2;16461:18;;;16454:30;-1:-1:-1;;;16500:18:1;;;16493:49;16559:18;;49747:67:0;16240:343:1;49747:67:0;49939:4;49890:28;17807:18;;;;;;;;;;;50005;;49981:42;;;;;;;50054:35;;-1:-1:-1;50078:11:0;;;;;;;50054:35;:61;;;;-1:-1:-1;50107:8:0;;;;50106:9;50054:61;:110;;;;-1:-1:-1;;;;;;50133:31:0;;;;;;:25;:31;;;;;;;;50132:32;50054:110;:153;;;;-1:-1:-1;;;;;;50182:25:0;;;;;;:19;:25;;;;;;;;50181:26;50054:153;:194;;;;-1:-1:-1;;;;;;50225:23:0;;;;;;:19;:23;;;;;;;;50224:24;50054:194;50036:338;;;50275:8;:15;;-1:-1:-1;;50275:15:0;50286:4;50275:15;;;50319:10;:8;:10::i;:::-;50346:8;:16;;-1:-1:-1;;50346:16:0;;;50036:338;50398:8;;;;50397:9;:42;;;;-1:-1:-1;;;;;;50410:29:0;;;;;;:25;:29;;;;;;;;50397:42;:59;;;;-1:-1:-1;50443:13:0;;;;50397:59;:114;;;;;50496:15;;50479:14;;:32;;;;:::i;:::-;50460:15;:51;;50397:114;:144;;;;-1:-1:-1;;;;;;50516:25:0;;;;;;:19;:25;;;;;;;;50515:26;50397:144;50394:204;;;50557:29;:27;:29::i;:::-;;50394:204;50626:8;;-1:-1:-1;;;;;50735:25:0;;50610:12;50735:25;;;:19;:25;;;;;;50626:8;;;;50625:9;;50735:25;;:52;;-1:-1:-1;;;;;;50764:23:0;;;;;;:19;:23;;;;;;;;50735:52;50732:99;;;-1:-1:-1;50814:5:0;50732:99;50851:12;50955:7;50952:1062;;;-1:-1:-1;;;;;51006:29:0;;;;;;:25;:29;;;;;;;;51002:837;;;51108:10;;51099:28;;:4;;-1:-1:-1;;;;;51108:10:0;:18;51099:8;:28::i;:::-;51062:34;51092:3;51062:25;51073:13;;51062:6;:10;;:25;;;;:::i;:34::-;:65;;;;:::i;:::-;51150:13;;51055:72;;-1:-1:-1;51150:17:0;51146:283;;51240:13;;51221:16;;51214:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;51192:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;51312:13:0;;51299:10;;51292:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;51276:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;51396:13:0;;51377:16;;51370:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;51348:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;51146:283:0;51002:837;;;-1:-1:-1;;;;;51489:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;51539:1;51524:12;;:16;51489:51;51486:353;;;51568:33;51597:3;51568:24;51579:12;;51568:6;:10;;:24;;;;:::i;:33::-;51561:40;;51667:12;;51649:15;;51642:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;51620:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;51733:12:0;;51721:9;;51714:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;51698:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;51811:12:0;;51793:15;;51786:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;51764:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;51486:353:0;51870:8;;51867:93;;51902:42;51918:4;51932;51939;51902:15;:42::i;:::-;51988:14;51998:4;51988:14;;:::i;:::-;;;50952:1062;52026:33;52042:4;52048:2;52052:6;52026:15;:33::i;:::-;47660:4407;;;;47547:4520;;;:::o;10460:191::-;10553:6;;;-1:-1:-1;;;;;10570:17:0;;;-1:-1:-1;;;;;;10570:17:0;;;;;;;10603:40;;10553:6;;;10570:17;10553:6;;10603:40;;10534:16;;10603:40;10523:128;10460:191;:::o;45635:188::-;-1:-1:-1;;;;;45718:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;45718:39:0;;;;;;;;;;45775:40;;45718:39;;:31;45775:40;;;45635:188;;:::o;3638:98::-;3696:7;3723:5;3727:1;3723;:5;:::i;:::-;3716:12;3638:98;-1:-1:-1;;;3638:98:0:o;4037:::-;4095:7;4122:5;4126:1;4122;:5;:::i;21898:840::-;-1:-1:-1;;;;;22029:18:0;;22021:68;;;;-1:-1:-1;;;22021:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22108:16:0;;22100:64;;;;-1:-1:-1;;;22100:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22250:15:0;;22228:19;22250:15;;;;;;;;;;;22284:21;;;;22276:72;;;;-1:-1:-1;;;22276:72:0;;17346:2:1;22276:72:0;;;17328:21:1;17385:2;17365:18;;;17358:30;17424:34;17404:18;;;17397:62;-1:-1:-1;;;17475:18:1;;;17468:36;17521:19;;22276:72:0;17144:402:1;22276:72:0;-1:-1:-1;;;;;22384:15:0;;;:9;:15;;;;;;;;;;;22402:20;;;22384:38;;22602:13;;;;;;;;;;:23;;;;;;22654:26;;2101:25:1;;;22602:13:0;;22654:26;;2074:18:1;22654:26:0;;;;;;;22693:37;43999:369;55055:1672;55138:4;55094:23;17807:18;;;;;;;;;;;55094:50;;55155:25;55225:12;;55204:18;;55183;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;55155:82;-1:-1:-1;55248:12:0;55284:20;;;:46;;-1:-1:-1;55308:22:0;;55284:46;55281:60;;;55333:7;;;55055:1672::o;55281:60::-;55374:18;;:23;;55395:2;55374:23;:::i;:::-;55356:15;:41;55353:111;;;55429:18;;:23;;55450:2;55429:23;:::i;:::-;55411:41;;55353:111;55533:23;55618:1;55598:17;55577:18;;55559:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;55533:86;-1:-1:-1;55630:26:0;55659:36;:15;55533:86;55659:19;:36::i;:::-;55630:65;-1:-1:-1;55744:21:0;55778:36;55630:65;55778:16;:36::i;:::-;55836:18;55857:44;:21;55883:17;55857:25;:44::i;:::-;55836:65;;55922:23;55948:57;55987:17;55948:34;55963:18;;55948:10;:14;;:34;;;;:::i;:57::-;55922:83;;56016:17;56036:51;56069:17;56036:28;56051:12;;56036:10;:14;;:28;;;;:::i;:51::-;56016:71;-1:-1:-1;56118:23:0;56016:71;56144:28;56157:15;56144:10;:28;:::i;:::-;:40;;;;:::i;:::-;56236:1;56215:18;:22;;;56248:18;:22;;;56281:12;:16;;;56339:15;;56331:51;;56118:66;;-1:-1:-1;56339:15:0;;;-1:-1:-1;;;;;56339:15:0;;56368:9;;56331:51;56236:1;56331:51;56368:9;56339:15;56331:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56318:64:0;;-1:-1:-1;;56406:19:0;;;;;:42;;;56447:1;56429:15;:19;56406:42;56403:210;;;56464:46;56477:15;56494;56464:12;:46::i;:::-;56582:18;;56530:71;;;17963:25:1;;;18019:2;18004:18;;17997:34;;;18047:18;;;18040:34;;;;56530:71:0;;;;;;17951:2:1;56530:71:0;;;56403:210;56664:15;;56656:63;;56664:15;;;;-1:-1:-1;;;;;56664:15:0;;56693:21;;56656:63;;;;56693:21;56664:15;56656:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;55055:1672:0:o;52081:804::-;52181:15;52164:14;:32;52290:29;;-1:-1:-1;;;52290:29:0;;-1:-1:-1;;;;;52305:13:0;1911:32:1;52290:29:0;;;1893:51:1;52138:4:0;;;;52290;;:14;;1866:18:1;;52290:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52259:60;;52377:20;52400:53;52447:5;52400:42;52425:16;;52400:20;:24;;:42;;;;:::i;:53::-;52377:76;-1:-1:-1;52566:16:0;;52562:109;;52598:61;52614:13;52637:6;52646:12;52598:15;:61::i;:::-;52754:19;52791:13;52754:51;;52816:4;-1:-1:-1;;;;;52816:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52843:12:0;;;;-1:-1:-1;52843:12:0;;-1:-1:-1;52843:12:0;52873:4;52866:11;;;;;52081:804;:::o;3281:98::-;3339:7;3366:5;3370:1;3366;:5;:::i;53917:601::-;54069:16;;;54083:1;54069:16;;;;;;;;54045:21;;54069:16;;;;;;;;;;-1:-1:-1;54069:16:0;54045:40;;54114:4;54096;54101:1;54096:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;54096:23:0;;;-1:-1:-1;;;;;54096:23:0;;;;;54140:15;-1:-1:-1;;;;;54140:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54130:4;54135:1;54130:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;54130:32:0;;;-1:-1:-1;;;;;54130:32:0;;;;;54175:62;54192:4;54207:15;54225:11;54175:8;:62::i;:::-;54276:224;;-1:-1:-1;;;54276:224:0;;-1:-1:-1;;;;;54276:15:0;:66;;;;:224;;54357:11;;54383:1;;54427:4;;54454;;54474:15;;54276:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53972:546;53917:601;:::o;54530:517::-;54678:62;54695:4;54710:15;54728:11;54678:8;:62::i;:::-;54783:256;;-1:-1:-1;;;54783:256:0;;54855:4;54783:256;;;19799:34:1;19849:18;;;19842:34;;;54901:1:0;19892:18:1;;;19885:34;;;19935:18;;;19928:34;37755:6:0;19978:19:1;;;19971:44;55013:15:0;20031:19:1;;;20024:35;54783:15:0;-1:-1:-1;;;;;54783:31:0;;;;54822:9;;19733:19:1;;54783:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;54530:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:248::-;1283:6;1291;1344:2;1332:9;1323:7;1319:23;1315:32;1312:52;;;1360:1;1357;1350:12;1312:52;-1:-1:-1;;1383:23:1;;;1453:2;1438:18;;;1425:32;;-1:-1:-1;1215:248:1:o;1468:247::-;1527:6;1580:2;1568:9;1559:7;1555:23;1551:32;1548:52;;;1596:1;1593;1586:12;1548:52;1635:9;1622:23;1654:31;1679:5;1654:31;:::i;2137:180::-;2196:6;2249:2;2237:9;2228:7;2224:23;2220:32;2217:52;;;2265:1;2262;2255:12;2217:52;-1:-1:-1;2288:23:1;;2137:180;-1:-1:-1;2137:180:1:o;2322:456::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2523:9;2510:23;2542:31;2567:5;2542:31;:::i;:::-;2592:5;-1:-1:-1;2649:2:1;2634:18;;2621:32;2662:33;2621:32;2662:33;:::i;:::-;2322:456;;2714:7;;-1:-1:-1;;;2768:2:1;2753:18;;;;2740:32;;2322:456::o;3180:160::-;3245:20;;3301:13;;3294:21;3284:32;;3274:60;;3330:1;3327;3320:12;3345:316;3419:6;3427;3435;3488:2;3476:9;3467:7;3463:23;3459:32;3456:52;;;3504:1;3501;3494:12;3456:52;3540:9;3527:23;3517:33;;3597:2;3586:9;3582:18;3569:32;3559:42;;3620:35;3651:2;3640:9;3636:18;3620:35;:::i;:::-;3610:45;;3345:316;;;;;:::o;3666:315::-;3731:6;3739;3792:2;3780:9;3771:7;3767:23;3763:32;3760:52;;;3808:1;3805;3798:12;3760:52;3847:9;3834:23;3866:31;3891:5;3866:31;:::i;:::-;3916:5;-1:-1:-1;3940:35:1;3971:2;3956:18;;3940:35;:::i;:::-;3930:45;;3666:315;;;;;:::o;3986:316::-;4063:6;4071;4079;4132:2;4120:9;4111:7;4107:23;4103:32;4100:52;;;4148:1;4145;4138:12;4100:52;-1:-1:-1;;4171:23:1;;;4241:2;4226:18;;4213:32;;-1:-1:-1;4292:2:1;4277:18;;;4264:32;;3986:316;-1:-1:-1;3986:316:1:o;4307:180::-;4363:6;4416:2;4404:9;4395:7;4391:23;4387:32;4384:52;;;4432:1;4429;4422:12;4384:52;4455:26;4471:9;4455:26;:::i;4492:689::-;4584:6;4592;4600;4653:2;4641:9;4632:7;4628:23;4624:32;4621:52;;;4669:1;4666;4659:12;4621:52;4709:9;4696:23;4738:18;4779:2;4771:6;4768:14;4765:34;;;4795:1;4792;4785:12;4765:34;4833:6;4822:9;4818:22;4808:32;;4878:7;4871:4;4867:2;4863:13;4859:27;4849:55;;4900:1;4897;4890:12;4849:55;4940:2;4927:16;4966:2;4958:6;4955:14;4952:34;;;4982:1;4979;4972:12;4952:34;5037:7;5030:4;5020:6;5017:1;5013:14;5009:2;5005:23;5001:34;4998:47;4995:67;;;5058:1;5055;5048:12;4995:67;5089:4;5081:13;;;;-1:-1:-1;5113:6:1;-1:-1:-1;5138:37:1;;5154:20;;;-1:-1:-1;5138:37:1;:::i;5186:388::-;5254:6;5262;5315:2;5303:9;5294:7;5290:23;5286:32;5283:52;;;5331:1;5328;5321:12;5283:52;5370:9;5357:23;5389:31;5414:5;5389:31;:::i;:::-;5439:5;-1:-1:-1;5496:2:1;5481:18;;5468:32;5509:33;5468:32;5509:33;:::i;:::-;5561:7;5551:17;;;5186:388;;;;;:::o;5579:380::-;5658:1;5654:12;;;;5701;;;5722:61;;5776:4;5768:6;5764:17;5754:27;;5722:61;5829:2;5821:6;5818:14;5798:18;5795:38;5792:161;;5875:10;5870:3;5866:20;5863:1;5856:31;5910:4;5907:1;5900:15;5938:4;5935:1;5928:15;5792:161;;5579:380;;;:::o;5964:127::-;6025:10;6020:3;6016:20;6013:1;6006:31;6056:4;6053:1;6046:15;6080:4;6077:1;6070:15;6096:125;6161:9;;;6182:10;;;6179:36;;;6195:18;;:::i;6942:168::-;7015:9;;;7046;;7063:15;;;7057:22;;7043:37;7033:71;;7084:18;;:::i;7115:217::-;7155:1;7181;7171:132;;7225:10;7220:3;7216:20;7213:1;7206:31;7260:4;7257:1;7250:15;7288:4;7285:1;7278:15;7171:132;-1:-1:-1;7317:9:1;;7115:217::o;7337:411::-;7539:2;7521:21;;;7578:2;7558:18;;;7551:30;7617:34;7612:2;7597:18;;7590:62;-1:-1:-1;;;7683:2:1;7668:18;;7661:45;7738:3;7723:19;;7337:411::o;9422:400::-;9624:2;9606:21;;;9663:2;9643:18;;;9636:30;9702:34;9697:2;9682:18;;9675:62;-1:-1:-1;;;9768:2:1;9753:18;;9746:34;9812:3;9797:19;;9422:400::o;9827:127::-;9888:10;9883:3;9879:20;9876:1;9869:31;9919:4;9916:1;9909:15;9943:4;9940:1;9933:15;9959:135;9998:3;10019:17;;;10016:43;;10039:18;;:::i;:::-;-1:-1:-1;10086:1:1;10075:13;;9959:135::o;12119:184::-;12189:6;12242:2;12230:9;12221:7;12217:23;12213:32;12210:52;;;12258:1;12255;12248:12;12210:52;-1:-1:-1;12281:16:1;;12119:184;-1:-1:-1;12119:184:1:o;13835:401::-;14037:2;14019:21;;;14076:2;14056:18;;;14049:30;14115:34;14110:2;14095:18;;14088:62;-1:-1:-1;;;14181:2:1;14166:18;;14159:35;14226:3;14211:19;;13835:401::o;14241:399::-;14443:2;14425:21;;;14482:2;14462:18;;;14455:30;14521:34;14516:2;14501:18;;14494:62;-1:-1:-1;;;14587:2:1;14572:18;;14565:33;14630:3;14615:19;;14241:399::o;17011:128::-;17078:9;;;17099:11;;;17096:37;;;17113:18;;:::i;18217:251::-;18287:6;18340:2;18328:9;18319:7;18315:23;18311:32;18308:52;;;18356:1;18353;18346:12;18308:52;18388:9;18382:16;18407:31;18432:5;18407:31;:::i;18473:980::-;18735:4;18783:3;18772:9;18768:19;18814:6;18803:9;18796:25;18840:2;18878:6;18873:2;18862:9;18858:18;18851:34;18921:3;18916:2;18905:9;18901:18;18894:31;18945:6;18980;18974:13;19011:6;19003;18996:22;19049:3;19038:9;19034:19;19027:26;;19088:2;19080:6;19076:15;19062:29;;19109:1;19119:195;19133:6;19130:1;19127:13;19119:195;;;19198:13;;-1:-1:-1;;;;;19194:39:1;19182:52;;19289:15;;;;19254:12;;;;19230:1;19148:9;19119:195;;;-1:-1:-1;;;;;;;19370:32:1;;;;19365:2;19350:18;;19343:60;-1:-1:-1;;;19434:3:1;19419:19;19412:35;19331:3;18473:980;-1:-1:-1;;;18473:980:1:o;20070:306::-;20158:6;20166;20174;20227:2;20215:9;20206:7;20202:23;20198:32;20195:52;;;20243:1;20240;20233:12;20195:52;20272:9;20266:16;20256:26;;20322:2;20311:9;20307:18;20301:25;20291:35;;20366:2;20355:9;20351:18;20345:25;20335:35;;20070:306;;;;;:::o
Swarm Source
ipfs://9af493e078fbdc8e63a17b5a34de6744dc99f8b73e534c907dbc3acb9abf83b9
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.