ERC-20
Overview
Max Total Supply
420,690,000,000,000 CROAK
Holders
155
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CroakToken
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-11 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; pragma experimental ABIEncoderV2; // 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; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // pragma solidity ^0.8.0; // import "../utils/Context.sol"; /** * @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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } } // 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); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) // pragma solidity ^0.8.0; // import "../IERC20.sol"; /** * @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); } // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) // pragma solidity ^0.8.0; // import "./IERC20.sol"; // import "./extensions/IERC20Metadata.sol"; // import "../../utils/Context.sol"; /** * @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]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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}. * * 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 default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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 {} } // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) // 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; } } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address uniswapV2Pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address uniswapV2Pair); function allPairs(uint256) external view returns (address uniswapV2Pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address uniswapV2Pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; // import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } library Address { function sendValue(address payable recipient, uint256 amount) internal returns (bool) { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); return success; } } contract CroakToken is ERC20, Ownable { using Address for address payable; IUniswapV2Router02 public uniswapV2Router02; address public uniswapV2Pair; bool private swapping; bool public swapEnabled = true; bool public tradingEnabled; uint256 public startTradingBlock; address public constant DEAD = 0x000000000000000000000000000000000000dEaD; address public constant PEPE = 0x6982508145454Ce325dDbE47a25d4ec3d2311933; address public marketingWallet = 0xDfE70519047CFD730DAA1E792e5B233738c9baa3; address public PEPEBurnAddress = 0x000000000000000000000000000000000000dEaD; uint8 private constant _decimals = 18; uint256 public constant _tTotal = 420690000000000 * 10**_decimals; uint256 public swapTokensAtAmount = ((_tTotal * 2) / 1e3); uint256 public maxWalletBalance = (_tTotal / 1e2); uint256 public maxBuyAmount = (_tTotal / 1e2); uint256 public maxSellAmount = (_tTotal / 1e2); uint256 public pepeBurned; /////////////// // Fees // /////////////// struct Taxes { uint256 marketing; uint256 liquidity; uint256 burn; uint256 pepeburn; } Taxes public buyTaxes = Taxes(14, 0, 0, 1); Taxes public sellTaxes = Taxes(23, 0, 0, 1); //////////////// // Anti Bot // //////////////// mapping(address => bool) public _isBot; mapping(address => uint256) public lastSell; uint256 private antiBotBlocks = 1; uint256 public coolDownTime = 0; uint256 private launchtax = 49; uint256 public coolDownBalance = _tTotal; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; /////////////// // Events // /////////////// event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPair( address indexed uniswapV2Pair, bool indexed value ); event BuyAndBurnPEPE(uint256 pepeburn); constructor() ERC20("Croak", "CROAK") { IUniswapV2Router02 _uniswapV2Router02 = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswapV2Pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router02.factory()) .createPair(address(this), _uniswapV2Router02.WETH()); uniswapV2Router02 = _uniswapV2Router02; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(DEAD, true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), _tTotal); } receive() external payable {} /// @notice Withdraw tokens sent by mistake. /// @param tokenAddress The address of the token to withdraw function rescueERC20Tokens(address tokenAddress) external onlyOwner { IERC20(tokenAddress).transfer( msg.sender, IERC20(tokenAddress).balanceOf(address(this)) ); } function forceSend() external { uint256 ETHbalance = address(this).balance; payable(owner()).sendValue(ETHbalance); } function updateRouter(address newRouter) external onlyOwner { uniswapV2Router02 = IUniswapV2Router02(newRouter); } ///////////////////////////////// // Exclude / Include functions // ///////////////////////////////// function excludeFromFees(address account, bool excluded) public onlyOwner { require( _isExcludedFromFees[account] != excluded, "PEPEburn: Account is already the value of 'excluded'" ); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeMultipleAccountsFromFees( address[] calldata accounts, bool excluded ) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } /////////////////////// // Setter Functions // /////////////////////// function setMarketingWallet(address newWallet) external onlyOwner { marketingWallet = newWallet; } /// @notice Update the threshold to swap tokens function setSwapTokensAtAmount(uint256 amount) external onlyOwner { swapTokensAtAmount = amount * 10**9; } function setBuyTaxes( uint256 _marketing, uint256 _liquidity, uint256 _burn, uint256 _pepeburn ) external onlyOwner { require( (_marketing + _liquidity + _burn + _pepeburn) <= 25, "Must keep fees at 25% or less" ); buyTaxes = Taxes(_marketing, _liquidity, _burn, _pepeburn); } function setSellTaxes( uint256 _marketing, uint256 _liquidity, uint256 _burn, uint256 _pepeburn ) external onlyOwner { require( (_marketing + _liquidity + _burn + _pepeburn) <= 50, "Must keep fees at 50% or less" ); sellTaxes = Taxes(_marketing, _liquidity, _burn, _pepeburn); } function setMaxBuyLimits(uint256 maxBuy) external onlyOwner { require(maxBuy >= 1e7, "Cannot set max buy amount lower than 0.1%"); maxBuyAmount = maxBuy * 10**decimals(); } function setMaxSellLimits(uint256 maxSell) external onlyOwner { require(maxSell >= 1e7, "Cannot set max sell amount lower than 0.1%"); maxSellAmount = maxSell * 10**decimals(); } function setMaxWallet(uint256 maxWallet) external onlyOwner { require( maxWallet >= 1e7, "Cannot set max wallet amount lower than 0.1%" ); maxWalletBalance = maxWallet * 10**9; } function SetMaxTxLimit( uint256 maxBuy, uint256 maxSell, uint256 maxWallet ) external onlyOwner { require(maxBuy >= 1e7, "Cannot set max buy amount lower than 0.1%"); require(maxSell >= 1e7, "Cannot set max sell amount lower than 0.1%"); require( maxWallet >= 1e7, "Cannot set max wallet amount lower than 0.1%" ); maxBuyAmount = maxBuy * 10**decimals(); maxSellAmount = maxSell * 10**decimals(); maxWalletBalance = maxWallet * 10**9; } /// @notice Enable or disable internal swaps /// @dev Set "true" to enable internal swaps function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; } function setCooldownTime(uint256 timeInSeconds, uint256 balance) external onlyOwner { coolDownTime = timeInSeconds; coolDownBalance = balance * 10**decimals(); require(timeInSeconds <= 60, "cooldown timer cannot exceed 1 minutes"); } function enableTrading() external onlyOwner { require(!tradingEnabled, "Trading is already enabled"); tradingEnabled = true; startTradingBlock = block.number; } function setAntiBotBlocks(uint256 numberOfBlocks) external onlyOwner { require(!tradingEnabled, "Can't change when trading has started"); antiBotBlocks = numberOfBlocks; } /// @param bot The bot address /// @param value "true" to blacklist, "false" to unblacklist function setBot(address bot, bool value) external onlyOwner { require(_isBot[bot] != value); _isBot[bot] = value; } function setBulkBot(address[] memory bots, bool value) external onlyOwner { for (uint256 i; i < bots.length; i++) { _isBot[bots[i]] = value; } } /// @dev Set new pairs created due to listing in new DEX function setAutomatedMarketMakerPair(address newPair, bool value) external onlyOwner { _setAutomatedMarketMakerPair(newPair, value); } function _setAutomatedMarketMakerPair(address newPair, bool value) private { require( automatedMarketMakerPairs[newPair] != value, "PEPEburn: Automated market maker uniswapV2Pair is already set to that value" ); automatedMarketMakerPairs[newPair] = value; emit SetAutomatedMarketMakerPair(newPair, value); } ////////////////////// // Getter Functions // ////////////////////// function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } //////////////////////// // Transfer Functions // //////////////////////// function airdropTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner { require( accounts.length == amounts.length, "Arrays must have same size" ); for (uint256 i; i < accounts.length; i++) { super._transfer(msg.sender, accounts[i], amounts[i]); } } 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( !_isBot[from] && !_isBot[to], "C:\\<windows95\\system32> kill bot" ); if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(tradingEnabled, "Trading no active"); if (!automatedMarketMakerPairs[to]) { require( balanceOf(to) + (amount) <= maxWalletBalance, "Balance is exceeding maxWalletBalance" ); } if ( !automatedMarketMakerPairs[from] && balanceOf(from) >= coolDownBalance ) { uint256 timePassed = block.timestamp - lastSell[from]; require( timePassed > coolDownTime, "Cooldown is active. Please wait" ); lastSell[from] = block.timestamp; } if (automatedMarketMakerPairs[from]) { require( amount <= maxBuyAmount, "You are exceeding maxBuyAmount" ); } if (!automatedMarketMakerPairs[from]) { require( amount <= maxSellAmount, "You are exceeding maxSellAmount" ); } } if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; uint256 swapTax = sellTaxes.marketing + sellTaxes.liquidity + sellTaxes.pepeburn; if ( canSwap && !swapping && swapEnabled && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; if (swapTax > 0) { swapAndLiquify(swapTokensAtAmount, swapTax); } swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } if (takeFee) { bool beforeTradingFee = block.number <= startTradingBlock + antiBotBlocks; uint256 swapAmt; uint256 burnAmt; if (automatedMarketMakerPairs[to] && !beforeTradingFee) { swapAmt = (amount * swapTax) / 100; burnAmt = (amount * sellTaxes.burn) / 100; } else if (automatedMarketMakerPairs[from] && !beforeTradingFee) { swapAmt = (amount * (buyTaxes.marketing + buyTaxes.liquidity + buyTaxes.pepeburn)) / 100; burnAmt = (amount * buyTaxes.burn) / 100; } else if (beforeTradingFee) { swapAmt = (amount * launchtax) / 100; } amount = amount - (swapAmt + burnAmt); super._transfer(from, address(this), swapAmt); if (burnAmt > 0) { super._transfer(from, DEAD, burnAmt); } } super._transfer(from, to, amount); } function swapAndLiquify(uint256 tokens, uint256 swapTax) private { // Split the contract balance into halves uint256 denominator = swapTax * 2; uint256 tokensToAddLiquidityWith = (tokens * sellTaxes.liquidity) / denominator; uint256 toSwap = tokens - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance = deltaBalance / (denominator - sellTaxes.liquidity); uint256 ethToAddLiquidityWith = unitBalance * sellTaxes.liquidity; if (ethToAddLiquidityWith > 0) { // Add liquidity to pancake addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith); } // Send ETH to marketingWallet uint256 marketingWalletAmt = unitBalance * 2 * sellTaxes.marketing; if (marketingWalletAmt > 0) { payable(marketingWallet).sendValue(marketingWalletAmt); } uint256 pepeburnAmt = unitBalance * 2 * sellTaxes.pepeburn; if (pepeburnAmt > 0) { swapAndBurnPEPE(pepeburnAmt); } } function swapAndBurnPEPE(uint256 ethAmount) private { address[] memory path = new address[](2); path[0] = uniswapV2Router02.WETH(); path[1] = PEPE; uint256 balBefore = IERC20(PEPE).balanceOf(PEPEBurnAddress); uniswapV2Router02.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ethAmount }( 0, // accept any amount of Tokens path, PEPEBurnAddress, // Burn address block.timestamp ); uint256 burned = IERC20(PEPE).balanceOf(PEPEBurnAddress) - balBefore; pepeBurned += burned; emit BuyAndBurnPEPE(burned); } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router02.WETH(); _approve(address(this), address(uniswapV2Router02), tokenAmount); // make the swap uniswapV2Router02.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(uniswapV2Router02), tokenAmount); // add the liquidity uniswapV2Router02.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pepeburn","type":"uint256"}],"name":"BuyAndBurnPEPE","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":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":"uniswapV2Pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEPE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEPEBurnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"SetMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"pepeburn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","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":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","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":"pepeBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"pepeburn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocks","type":"uint256"}],"name":"setAntiBotBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBulkBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_pepeburn","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"setCooldownTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setMaxBuyLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSellLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_pepeburn","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":[{"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":"uniswapV2Router02","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526007805460ff60a81b1916600160a81b179055600980546001600160a01b031990811673dfe70519047cfd730daa1e792e5b233738c9baa317909155600a805490911661dead1781556103e8906200005f90601290620008f5565b620000729066017e9d8602b4006200090c565b6200007f9060026200090c565b6200008b919062000926565b600b5560646200009e6012600a620008f5565b620000b19066017e9d8602b4006200090c565b620000bd919062000926565b600c556064620000d06012600a620008f5565b620000e39066017e9d8602b4006200090c565b620000ef919062000926565b600d556064620001026012600a620008f5565b620001159066017e9d8602b4006200090c565b62000121919062000926565b600e90815560408051608080820183528382525f60208084018290528385018290526001606094850181905260109690965560118290556012828155601387905585519384018652601780855291840183905294830182905291909201849052601481905560158290556016829055839055601a92909255601b919091556031601c55620001b190600a620008f5565b620001c49066017e9d8602b4006200090c565b601d55348015620001d3575f80fd5b506040518060400160405280600581526020016443726f616b60d81b8152506040518060400160405280600581526020016443524f414b60d81b8152508160039081620002219190620009e5565b506004620002308282620009e5565b5050506200024d620002476200046c60201b60201c565b62000470565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c9919062000aad565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200033b919062000aad565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000386573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003ac919062000aad565b600680546001600160a01b038086166001600160a01b03199283161790925560078054928416929091169190911790559050620003eb816001620004c1565b6200040a620004026005546001600160a01b031690565b6001620005c3565b62000417306001620005c3565b6200042661dead6001620005c3565b620004646200043d6005546001600160a01b031690565b6200044b6012600a620008f5565b6200045e9066017e9d8602b4006200090c565b620006c2565b505062000aeb565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152601f602052604090205481151560ff909116151503620005705760405162461bcd60e51b815260206004820152604b60248201527f504550456275726e3a204175746f6d61746564206d61726b6574206d616b657260448201527f20756e697377617056325061697220697320616c72656164792073657420746f60648201526a20746861742076616c756560a81b608482015260a4015b60405180910390fd5b6001600160a01b0382165f818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b620005cd62000783565b6001600160a01b0382165f908152601e602052604090205481151560ff909116151503620006645760405162461bcd60e51b815260206004820152603460248201527f504550456275726e3a204163636f756e7420697320616c72656164792074686560448201527f2076616c7565206f6620276578636c7564656427000000000000000000000000606482015260840162000567565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200071a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000567565b8060025f8282546200072d919062000ad5565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620007df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000567565b565b505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200083a57815f19048211156200081e576200081e620007e6565b808516156200082c57918102915b93841c9390800290620007ff565b509250929050565b5f826200085257506001620008ef565b816200086057505f620008ef565b81600181146200087957600281146200088457620008a4565b6001915050620008ef565b60ff841115620008985762000898620007e6565b50506001821b620008ef565b5060208310610133831016604e8410600b8410161715620008c9575081810a620008ef565b620008d58383620007fa565b805f1904821115620008eb57620008eb620007e6565b0290505b92915050565b5f6200090560ff84168362000842565b9392505050565b8082028115828204841417620008ef57620008ef620007e6565b5f826200094157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200096f57607f821691505b6020821081036200098e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007e1575f81815260208120601f850160051c81016020861015620009bc5750805b601f850160051c820191505b81811015620009dd57828155600101620009c8565b505050505050565b81516001600160401b0381111562000a015762000a0162000946565b62000a198162000a1284546200095a565b8462000994565b602080601f83116001811462000a4f575f841562000a375750858301515b5f19600386901b1c1916600185901b178555620009dd565b5f85815260208120601f198616915b8281101562000a7f5788860151825594840194600190910190840162000a5e565b508582101562000a9d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000abe575f80fd5b81516001600160a01b038116811462000905575f80fd5b80820180821115620008ef57620008ef620007e6565b6131008062000af95f395ff3fe608060405260043610610374575f3560e01c80638a0bc8e3116101c8578063bbde77c1116100fd578063dd62ed3e1161009d578063e4fbaecb1161006d578063e4fbaecb14610a1e578063f2fde38b14610a45578063f480fec214610a64578063f66895a314610a83575f80fd5b8063dd62ed3e146109ac578063e01af92c146109cb578063e2f45605146109ea578063e4bf1bed146109ff575f80fd5b8063c3e0f5cf116100d8578063c3e0f5cf1461093a578063c492f04614610959578063c851cc3214610978578063d2ce0db214610997575f80fd5b8063bbde77c1146108e7578063c0246668146108fc578063c2c3e4a41461091b575f80fd5b8063a9059cbb11610168578063af465a2711610143578063af465a2714610867578063afa4f3b21461087b578063b62496f51461089a578063b83b297f146108c8575f80fd5b8063a9059cbb146107fb578063abb810521461081a578063ad797d3614610848575f80fd5b806395d89b41116101a357806395d89b411461078a5780639a7a23d61461079e578063a457c2d7146107bd578063a7c6402c146107dc575f80fd5b80638a0bc8e31461073a5780638a8c523c146107595780638da5cb5b1461076d575f80fd5b80634ada218b116102a9578063706f6937116102495780637602a8ce116102195780637602a8ce146106b957806376be96f3146106ce578063864701a5146106e357806388e765ff14610725575f80fd5b8063706f69371461063357806370a0823114610652578063715018a61461068657806375f0a8741461069a575f80fd5b80635d098b38116102845780635d098b38146105b457806366d602ae146105d35780636ddd1713146105e85780636f4ce42814610608575f80fd5b80634ada218b1461053e5780634fbee1931461055e5780635d0044ca14610595575f80fd5b8063300dc4ae1161031457806339509351116102ef57806339509351146104c2578063397843c7146104e1578063475ad0d61461050057806349bd5a5e1461051f575f80fd5b8063300dc4ae14610469578063313ce56714610488578063342aa8b5146104a3575f80fd5b806312b77e8a1161034f57806312b77e8a1461040157806318160ddd14610417578063218257da1461043557806323b872dd1461044a575f80fd5b806303fd2a451461037f57806306fdde03146103b1578063095ea7b3146103d2575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5061039461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103bc575f80fd5b506103c5610aa5565b6040516103a891906127cc565b3480156103dd575f80fd5b506103f16103ec36600461282b565b610b35565b60405190151581526020016103a8565b34801561040c575f80fd5b50610415610b4e565b005b348015610422575f80fd5b506002545b6040519081526020016103a8565b348015610440575f80fd5b50610427601d5481565b348015610455575f80fd5b506103f1610464366004612855565b610b78565b348015610474575f80fd5b50610415610483366004612893565b610b9b565b348015610493575f80fd5b50604051601281526020016103a8565b3480156104ae575f80fd5b506104156104bd3660046128b7565b610beb565b3480156104cd575f80fd5b506103f16104dc36600461282b565b610c48565b3480156104ec575f80fd5b506104156104fb3660046128ee565b610c69565b34801561050b575f80fd5b5061041561051a36600461290e565b610cef565b34801561052a575f80fd5b50600754610394906001600160a01b031681565b348015610549575f80fd5b506007546103f190600160b01b900460ff1681565b348015610569575f80fd5b506103f1610578366004612937565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105a0575f80fd5b506104156105af366004612893565b610da8565b3480156105bf575f80fd5b506104156105ce366004612937565b610de7565b3480156105de575f80fd5b50610427600e5481565b3480156105f3575f80fd5b506007546103f190600160a81b900460ff1681565b348015610613575f80fd5b50610427610622366004612937565b60196020525f908152604090205481565b34801561063e575f80fd5b5061041561064d366004612a32565b610e11565b34801561065d575f80fd5b5061042761066c366004612937565b6001600160a01b03165f9081526020819052604090205490565b348015610691575f80fd5b50610415610ec9565b3480156106a5575f80fd5b50600954610394906001600160a01b031681565b3480156106c4575f80fd5b50610427600f5481565b3480156106d9575f80fd5b5061042760085481565b3480156106ee575f80fd5b506010546011546012546013546107059392919084565b6040805194855260208501939093529183015260608201526080016103a8565b348015610730575f80fd5b50610427600d5481565b348015610745575f80fd5b50610415610754366004612893565b610edc565b348015610764575f80fd5b50610415610f51565b348015610778575f80fd5b506005546001600160a01b0316610394565b348015610795575f80fd5b506103c5610fcc565b3480156107a9575f80fd5b506104156107b83660046128b7565b610fdb565b3480156107c8575f80fd5b506103f16107d736600461282b565b610fed565b3480156107e7575f80fd5b50600654610394906001600160a01b031681565b348015610806575f80fd5b506103f161081536600461282b565b611067565b348015610825575f80fd5b506103f1610834366004612937565b60186020525f908152604090205460ff1681565b348015610853575f80fd5b50600a54610394906001600160a01b031681565b348015610872575f80fd5b50610427611074565b348015610886575f80fd5b50610415610895366004612893565b611094565b3480156108a5575f80fd5b506103f16108b4366004612937565b601f6020525f908152604090205460ff1681565b3480156108d3575f80fd5b506104156108e2366004612ae7565b6110b0565b3480156108f2575f80fd5b50610427600c5481565b348015610907575f80fd5b506104156109163660046128b7565b61111c565b348015610926575f80fd5b50610415610935366004612893565b61120e565b348015610945575f80fd5b50610415610954366004612937565b611255565b348015610964575f80fd5b50610415610973366004612b2b565b611339565b348015610983575f80fd5b50610415610992366004612937565b6113f0565b3480156109a2575f80fd5b50610427601b5481565b3480156109b7575f80fd5b506104276109c6366004612baa565b61141a565b3480156109d6575f80fd5b506104156109e5366004612bd6565b611444565b3480156109f5575f80fd5b50610427600b5481565b348015610a0a575f80fd5b50610415610a19366004612bf1565b61146a565b348015610a29575f80fd5b50610394736982508145454ce325ddbe47a25d4ec3d231193381565b348015610a50575f80fd5b50610415610a5f366004612937565b611516565b348015610a6f575f80fd5b50610415610a7e366004612bf1565b61158f565b348015610a8e575f80fd5b506014546015546016546017546107059392919084565b606060038054610ab490612c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090612c20565b8015610b2b5780601f10610b0257610100808354040283529160200191610b2b565b820191905f5260205f20905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b5f33610b4281858561163b565b60019150505b92915050565b47610b7481610b656005546001600160a01b031690565b6001600160a01b03169061175e565b5050565b5f33610b85858285611808565b610b90858585611880565b506001949350505050565b610ba3611f1f565b62989680811015610bcf5760405162461bcd60e51b8152600401610bc690612c58565b60405180910390fd5b610bdb6012600a612d95565b610be59082612da3565b600d5550565b610bf3611f1f565b6001600160a01b0382165f9081526018602052604090205481151560ff909116151503610c1e575f80fd5b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b5f33610b42818585610c5a838361141a565b610c649190612dba565b61163b565b610c71611f1f565b601b829055610c826012600a612d95565b610c8c9082612da3565b601d55603c821115610b745760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610bc6565b610cf7611f1f565b62989680831015610d1a5760405162461bcd60e51b8152600401610bc690612c58565b62989680821015610d3d5760405162461bcd60e51b8152600401610bc690612dcd565b62989680811015610d605760405162461bcd60e51b8152600401610bc690612e17565b610d6c6012600a612d95565b610d769084612da3565b600d55610d856012600a612d95565b610d8f9083612da3565b600e55610da081633b9aca00612da3565b600c55505050565b610db0611f1f565b62989680811015610dd35760405162461bcd60e51b8152600401610bc690612e17565b610de181633b9aca00612da3565b600c5550565b610def611f1f565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610e19611f1f565b8051825114610e6a5760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610bc6565b5f5b8251811015610ec457610eb233848381518110610e8b57610e8b612e63565b6020026020010151848481518110610ea557610ea5612e63565b6020026020010151611f79565b80610ebc81612e77565b915050610e6c565b505050565b610ed1611f1f565b610eda5f6120a1565b565b610ee4611f1f565b600754600160b01b900460ff1615610f4c5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610bc6565b601a55565b610f59611f1f565b600754600160b01b900460ff1615610fb35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610bc6565b6007805460ff60b01b1916600160b01b17905543600855565b606060048054610ab490612c20565b610fe3611f1f565b610b7482826120f2565b5f3381610ffa828661141a565b90508381101561105a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc6565b610b90828686840361163b565b5f33610b42818585611880565b6110806012600a612d95565b6110919066017e9d8602b400612da3565b81565b61109c611f1f565b6110aa81633b9aca00612da3565b600b5550565b6110b8611f1f565b5f5b8251811015610ec4578160185f8584815181106110d9576110d9612e63565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061111481612e77565b9150506110ba565b611124611f1f565b6001600160a01b0382165f908152601e602052604090205481151560ff9091161515036111b05760405162461bcd60e51b815260206004820152603460248201527f504550456275726e3a204163636f756e7420697320616c7265616479207468656044820152732076616c7565206f6620276578636c756465642760601b6064820152608401610bc6565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611216611f1f565b629896808110156112395760405162461bcd60e51b8152600401610bc690612dcd565b6112456012600a612d95565b61124f9082612da3565b600e5550565b61125d611f1f565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156112a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cd9190612e8f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611315573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b749190612ea6565b611341611f1f565b5f5b828110156113af5781601e5f86868581811061136157611361612e63565b90506020020160208101906113769190612937565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113a781612e77565b915050611343565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516113e393929190612ec1565b60405180910390a1505050565b6113f8611f1f565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61144c611f1f565b60078054911515600160a81b0260ff60a81b19909216919091179055565b611472611f1f565b601981836114808688612dba565b61148a9190612dba565b6114949190612dba565b11156114e25760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601093909355601191909155601255601355565b61151e611f1f565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc6565b61158c816120a1565b50565b611597611f1f565b603281836115a58688612dba565b6115af9190612dba565b6115b99190612dba565b11156116075760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601493909355601591909155601655601755565b6001600160a01b03831661169d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc6565b6001600160a01b0382166116fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f814710156117af5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bc6565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f81146117f8576040519150601f19603f3d011682016040523d82523d5f602084013e6117fd565b606091505b509095945050505050565b5f611813848461141a565b90505f19811461187a578181101561186d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bc6565b61187a848484840361163b565b50505050565b6001600160a01b0383166118a65760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b0382166118cc5760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f9081526018602052604090205460ff1615801561190c57506001600160a01b0382165f9081526018602052604090205460ff16155b6119585760405162461bcd60e51b815260206004820181905260248201527f433a5c3c77696e646f777339355c73797374656d33323e206b696c6c20626f746044820152606401610bc6565b6001600160a01b0383165f908152601e602052604090205460ff1615801561199857506001600160a01b0382165f908152601e602052604090205460ff16155b15611c4b57600754600160b01b900460ff166119ea5760405162461bcd60e51b815260206004820152601160248201527054726164696e67206e6f2061637469766560781b6044820152606401610bc6565b6001600160a01b0382165f908152601f602052604090205460ff16611a9157600c5481611a2b846001600160a01b03165f9081526020819052604090205490565b611a359190612dba565b1115611a915760405162461bcd60e51b815260206004820152602560248201527f42616c616e636520697320657863656564696e67206d617857616c6c657442616044820152646c616e636560d81b6064820152608401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16158015611ad25750601d546001600160a01b0384165f9081526020819052604090205410155b15611b68576001600160a01b0383165f90815260196020526040812054611af99042612fa1565b9050601b548111611b4c5760405162461bcd60e51b815260206004820152601f60248201527f436f6f6c646f776e206973206163746976652e20506c656173652077616974006044820152606401610bc6565b506001600160a01b0383165f9081526019602052604090204290555b6001600160a01b0383165f908152601f602052604090205460ff1615611bda57600d54811115611bda5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d6178427579416d6f756e7400006044820152606401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16611c4b57600e54811115611c4b5760405162461bcd60e51b815260206004820152601f60248201527f596f752061726520657863656564696e67206d617853656c6c416d6f756e74006044820152606401610bc6565b805f03611c5d57610ec483835f611f79565b305f90815260208190526040812054600b5460175460155460145493949285101593611c899190612dba565b611c939190612dba565b9050818015611cac5750600754600160a01b900460ff16155b8015611cc15750600754600160a81b900460ff165b8015611ce557506001600160a01b0386165f908152601f602052604090205460ff16155b8015611d0957506001600160a01b0386165f908152601e602052604090205460ff16155b8015611d2d57506001600160a01b0385165f908152601e602052604090205460ff16155b15611d65576007805460ff60a01b1916600160a01b1790558015611d5757611d57600b54826121ee565b6007805460ff60a01b191690555b6007546001600160a01b0387165f908152601e602052604090205460ff600160a01b909204821615911680611db157506001600160a01b0386165f908152601e602052604090205460ff165b15611db957505f5b8015611f0b575f601a54600854611dd09190612dba565b6001600160a01b0388165f908152601f6020526040812054439290921115925090819060ff168015611e00575082155b15611e3f576064611e11868a612da3565b611e1b9190612fb4565b601654909250606490611e2e908a612da3565b611e389190612fb4565b9050611ed3565b6001600160a01b038a165f908152601f602052604090205460ff168015611e64575082155b15611eb05760135460115460105460649291611e7f91612dba565b611e899190612dba565b611e93908a612da3565b611e9d9190612fb4565b601254909250606490611e2e908a612da3565b8215611ed3576064601c5489611ec69190612da3565b611ed09190612fb4565b91505b611edd8183612dba565b611ee79089612fa1565b9750611ef48a3084611f79565b8015611f0757611f078a61dead83611f79565b5050505b611f16878787611f79565b50505050505050565b6005546001600160a01b03163314610eda5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc6565b6001600160a01b038316611f9f5760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b038216611fc55760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f908152602081905260409020548181101561203c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc6565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361187a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152601f602052604090205481151560ff90911615150361219b5760405162461bcd60e51b815260206004820152604b60248201527f504550456275726e3a204175746f6d61746564206d61726b6574206d616b657260448201527f20756e697377617056325061697220697320616c72656164792073657420746f60648201526a20746861742076616c756560a81b608482015260a401610bc6565b6001600160a01b0382165f818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f6121fa826002612da3565b90505f816014600101548561220f9190612da3565b6122199190612fb4565b90505f6122268286612fa1565b905047612232826122ef565b5f61223d8247612fa1565b6015549091505f9061224f9087612fa1565b6122599083612fb4565b6015549091505f9061226b9083612da3565b9050801561227d5761227d868261243f565b6014545f9061228d846002612da3565b6122979190612da3565b905080156122b7576009546122b5906001600160a01b03168261175e565b505b6017545f906122c7856002612da3565b6122d19190612da3565b905080156122e2576122e281612511565b5050505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061232257612322612e63565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239d9190612fd3565b816001815181106123b0576123b0612e63565b6001600160a01b0392831660209182029290920101526006546123d6913091168461163b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061240e9085905f90869030904290600401613030565b5f604051808303815f87803b158015612425575f80fd5b505af1158015612437573d5f803e3d5ffd5b505050505050565b6006546124579030906001600160a01b03168461163b565b6006546001600160a01b031663f305d7198230855f8061247f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156124e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061250a919061306b565b5050505050565b6040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259c9190612fd3565b815f815181106125ae576125ae612e63565b60200260200101906001600160a01b031690816001600160a01b031681525050736982508145454ce325ddbe47a25d4ec3d2311933816001815181106125f6576125f6612e63565b6001600160a01b039283166020918202929092010152600a546040516370a0823160e01b8152911660048201525f90736982508145454ce325ddbe47a25d4ec3d2311933906370a0823190602401602060405180830381865afa15801561265f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126839190612e8f565b600654600a5460405163b6f9de9560e01b81529293506001600160a01b039182169263b6f9de959287926126c1925f92899216904290600401613096565b5f604051808303818588803b1580156126d8575f80fd5b505af11580156126ea573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f9350849250736982508145454ce325ddbe47a25d4ec3d231193391506370a0823190602401602060405180830381865afa15801561274d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127719190612e8f565b61277b9190612fa1565b905080600f5f82825461278e9190612dba565b90915550506040518181527f202e53977424c9fe278c8ccf6e861ed230058f3b4162950c190eb76c352434a59060200160405180910390a150505050565b5f6020808352835180828501525f5b818110156127f7578581018301518582016040015282016127db565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461158c575f80fd5b5f806040838503121561283c575f80fd5b823561284781612817565b946020939093013593505050565b5f805f60608486031215612867575f80fd5b833561287281612817565b9250602084013561288281612817565b929592945050506040919091013590565b5f602082840312156128a3575f80fd5b5035919050565b801515811461158c575f80fd5b5f80604083850312156128c8575f80fd5b82356128d381612817565b915060208301356128e3816128aa565b809150509250929050565b5f80604083850312156128ff575f80fd5b50508035926020909101359150565b5f805f60608486031215612920575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612947575f80fd5b813561295281612817565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561299657612996612959565b604052919050565b5f67ffffffffffffffff8211156129b7576129b7612959565b5060051b60200190565b5f82601f8301126129d0575f80fd5b813560206129e56129e08361299e565b61296d565b82815260059290921b84018101918181019086841115612a03575f80fd5b8286015b84811015612a27578035612a1a81612817565b8352918301918301612a07565b509695505050505050565b5f8060408385031215612a43575f80fd5b823567ffffffffffffffff80821115612a5a575f80fd5b612a66868387016129c1565b9350602091508185013581811115612a7c575f80fd5b85019050601f81018613612a8e575f80fd5b8035612a9c6129e08261299e565b81815260059190911b82018301908381019088831115612aba575f80fd5b928401925b82841015612ad857833582529284019290840190612abf565b80955050505050509250929050565b5f8060408385031215612af8575f80fd5b823567ffffffffffffffff811115612b0e575f80fd5b612b1a858286016129c1565b92505060208301356128e3816128aa565b5f805f60408486031215612b3d575f80fd5b833567ffffffffffffffff80821115612b54575f80fd5b818601915086601f830112612b67575f80fd5b813581811115612b75575f80fd5b8760208260051b8501011115612b89575f80fd5b60209283019550935050840135612b9f816128aa565b809150509250925092565b5f8060408385031215612bbb575f80fd5b8235612bc681612817565b915060208301356128e381612817565b5f60208284031215612be6575f80fd5b8135612952816128aa565b5f805f8060808587031215612c04575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680612c3457607f821691505b602082108103612c5257634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e312560b81b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612cef57815f1904821115612cd557612cd5612ca1565b80851615612ce257918102915b93841c9390800290612cba565b509250929050565b5f82612d0557506001610b48565b81612d1157505f610b48565b8160018114612d275760028114612d3157612d4d565b6001915050610b48565b60ff841115612d4257612d42612ca1565b50506001821b610b48565b5060208310610133831016604e8410600b8410161715612d70575081810a610b48565b612d7a8383612cb5565b805f1904821115612d8d57612d8d612ca1565b029392505050565b5f61295260ff841683612cf7565b8082028115828204841417610b4857610b48612ca1565b80820180821115610b4857610b48612ca1565b6020808252602a908201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604082015269207468616e20302e312560b01b606082015260800190565b6020808252602c908201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760408201526b6572207468616e20302e312560a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612e8857612e88612ca1565b5060010190565b5f60208284031215612e9f575f80fd5b5051919050565b5f60208284031215612eb6575f80fd5b8151612952816128aa565b604080825281018390525f8460608301825b86811015612f03578235612ee681612817565b6001600160a01b0316825260209283019290910190600101612ed3565b5080925050508215156020830152949350505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b4857610b48612ca1565b5f82612fce57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612fe3575f80fd5b815161295281612817565b5f8151808452602080850194508084015f5b838110156130255781516001600160a01b031687529582019590820190600101613000565b509495945050505050565b85815284602082015260a060408201525f61304e60a0830186612fee565b6001600160a01b0394909416606083015250608001529392505050565b5f805f6060848603121561307d575f80fd5b8351925060208401519150604084015190509250925092565b848152608060208201525f6130ae6080830186612fee565b6001600160a01b0394909416604083015250606001529291505056fea264697066735822122014a97a0a8d310e57c5a3678dd36e9c74a691f248ba38d29baba89c2751690aee64736f6c63430008140033
Deployed Bytecode
0x608060405260043610610374575f3560e01c80638a0bc8e3116101c8578063bbde77c1116100fd578063dd62ed3e1161009d578063e4fbaecb1161006d578063e4fbaecb14610a1e578063f2fde38b14610a45578063f480fec214610a64578063f66895a314610a83575f80fd5b8063dd62ed3e146109ac578063e01af92c146109cb578063e2f45605146109ea578063e4bf1bed146109ff575f80fd5b8063c3e0f5cf116100d8578063c3e0f5cf1461093a578063c492f04614610959578063c851cc3214610978578063d2ce0db214610997575f80fd5b8063bbde77c1146108e7578063c0246668146108fc578063c2c3e4a41461091b575f80fd5b8063a9059cbb11610168578063af465a2711610143578063af465a2714610867578063afa4f3b21461087b578063b62496f51461089a578063b83b297f146108c8575f80fd5b8063a9059cbb146107fb578063abb810521461081a578063ad797d3614610848575f80fd5b806395d89b41116101a357806395d89b411461078a5780639a7a23d61461079e578063a457c2d7146107bd578063a7c6402c146107dc575f80fd5b80638a0bc8e31461073a5780638a8c523c146107595780638da5cb5b1461076d575f80fd5b80634ada218b116102a9578063706f6937116102495780637602a8ce116102195780637602a8ce146106b957806376be96f3146106ce578063864701a5146106e357806388e765ff14610725575f80fd5b8063706f69371461063357806370a0823114610652578063715018a61461068657806375f0a8741461069a575f80fd5b80635d098b38116102845780635d098b38146105b457806366d602ae146105d35780636ddd1713146105e85780636f4ce42814610608575f80fd5b80634ada218b1461053e5780634fbee1931461055e5780635d0044ca14610595575f80fd5b8063300dc4ae1161031457806339509351116102ef57806339509351146104c2578063397843c7146104e1578063475ad0d61461050057806349bd5a5e1461051f575f80fd5b8063300dc4ae14610469578063313ce56714610488578063342aa8b5146104a3575f80fd5b806312b77e8a1161034f57806312b77e8a1461040157806318160ddd14610417578063218257da1461043557806323b872dd1461044a575f80fd5b806303fd2a451461037f57806306fdde03146103b1578063095ea7b3146103d2575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5061039461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103bc575f80fd5b506103c5610aa5565b6040516103a891906127cc565b3480156103dd575f80fd5b506103f16103ec36600461282b565b610b35565b60405190151581526020016103a8565b34801561040c575f80fd5b50610415610b4e565b005b348015610422575f80fd5b506002545b6040519081526020016103a8565b348015610440575f80fd5b50610427601d5481565b348015610455575f80fd5b506103f1610464366004612855565b610b78565b348015610474575f80fd5b50610415610483366004612893565b610b9b565b348015610493575f80fd5b50604051601281526020016103a8565b3480156104ae575f80fd5b506104156104bd3660046128b7565b610beb565b3480156104cd575f80fd5b506103f16104dc36600461282b565b610c48565b3480156104ec575f80fd5b506104156104fb3660046128ee565b610c69565b34801561050b575f80fd5b5061041561051a36600461290e565b610cef565b34801561052a575f80fd5b50600754610394906001600160a01b031681565b348015610549575f80fd5b506007546103f190600160b01b900460ff1681565b348015610569575f80fd5b506103f1610578366004612937565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105a0575f80fd5b506104156105af366004612893565b610da8565b3480156105bf575f80fd5b506104156105ce366004612937565b610de7565b3480156105de575f80fd5b50610427600e5481565b3480156105f3575f80fd5b506007546103f190600160a81b900460ff1681565b348015610613575f80fd5b50610427610622366004612937565b60196020525f908152604090205481565b34801561063e575f80fd5b5061041561064d366004612a32565b610e11565b34801561065d575f80fd5b5061042761066c366004612937565b6001600160a01b03165f9081526020819052604090205490565b348015610691575f80fd5b50610415610ec9565b3480156106a5575f80fd5b50600954610394906001600160a01b031681565b3480156106c4575f80fd5b50610427600f5481565b3480156106d9575f80fd5b5061042760085481565b3480156106ee575f80fd5b506010546011546012546013546107059392919084565b6040805194855260208501939093529183015260608201526080016103a8565b348015610730575f80fd5b50610427600d5481565b348015610745575f80fd5b50610415610754366004612893565b610edc565b348015610764575f80fd5b50610415610f51565b348015610778575f80fd5b506005546001600160a01b0316610394565b348015610795575f80fd5b506103c5610fcc565b3480156107a9575f80fd5b506104156107b83660046128b7565b610fdb565b3480156107c8575f80fd5b506103f16107d736600461282b565b610fed565b3480156107e7575f80fd5b50600654610394906001600160a01b031681565b348015610806575f80fd5b506103f161081536600461282b565b611067565b348015610825575f80fd5b506103f1610834366004612937565b60186020525f908152604090205460ff1681565b348015610853575f80fd5b50600a54610394906001600160a01b031681565b348015610872575f80fd5b50610427611074565b348015610886575f80fd5b50610415610895366004612893565b611094565b3480156108a5575f80fd5b506103f16108b4366004612937565b601f6020525f908152604090205460ff1681565b3480156108d3575f80fd5b506104156108e2366004612ae7565b6110b0565b3480156108f2575f80fd5b50610427600c5481565b348015610907575f80fd5b506104156109163660046128b7565b61111c565b348015610926575f80fd5b50610415610935366004612893565b61120e565b348015610945575f80fd5b50610415610954366004612937565b611255565b348015610964575f80fd5b50610415610973366004612b2b565b611339565b348015610983575f80fd5b50610415610992366004612937565b6113f0565b3480156109a2575f80fd5b50610427601b5481565b3480156109b7575f80fd5b506104276109c6366004612baa565b61141a565b3480156109d6575f80fd5b506104156109e5366004612bd6565b611444565b3480156109f5575f80fd5b50610427600b5481565b348015610a0a575f80fd5b50610415610a19366004612bf1565b61146a565b348015610a29575f80fd5b50610394736982508145454ce325ddbe47a25d4ec3d231193381565b348015610a50575f80fd5b50610415610a5f366004612937565b611516565b348015610a6f575f80fd5b50610415610a7e366004612bf1565b61158f565b348015610a8e575f80fd5b506014546015546016546017546107059392919084565b606060038054610ab490612c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090612c20565b8015610b2b5780601f10610b0257610100808354040283529160200191610b2b565b820191905f5260205f20905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b5f33610b4281858561163b565b60019150505b92915050565b47610b7481610b656005546001600160a01b031690565b6001600160a01b03169061175e565b5050565b5f33610b85858285611808565b610b90858585611880565b506001949350505050565b610ba3611f1f565b62989680811015610bcf5760405162461bcd60e51b8152600401610bc690612c58565b60405180910390fd5b610bdb6012600a612d95565b610be59082612da3565b600d5550565b610bf3611f1f565b6001600160a01b0382165f9081526018602052604090205481151560ff909116151503610c1e575f80fd5b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b5f33610b42818585610c5a838361141a565b610c649190612dba565b61163b565b610c71611f1f565b601b829055610c826012600a612d95565b610c8c9082612da3565b601d55603c821115610b745760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610bc6565b610cf7611f1f565b62989680831015610d1a5760405162461bcd60e51b8152600401610bc690612c58565b62989680821015610d3d5760405162461bcd60e51b8152600401610bc690612dcd565b62989680811015610d605760405162461bcd60e51b8152600401610bc690612e17565b610d6c6012600a612d95565b610d769084612da3565b600d55610d856012600a612d95565b610d8f9083612da3565b600e55610da081633b9aca00612da3565b600c55505050565b610db0611f1f565b62989680811015610dd35760405162461bcd60e51b8152600401610bc690612e17565b610de181633b9aca00612da3565b600c5550565b610def611f1f565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610e19611f1f565b8051825114610e6a5760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610bc6565b5f5b8251811015610ec457610eb233848381518110610e8b57610e8b612e63565b6020026020010151848481518110610ea557610ea5612e63565b6020026020010151611f79565b80610ebc81612e77565b915050610e6c565b505050565b610ed1611f1f565b610eda5f6120a1565b565b610ee4611f1f565b600754600160b01b900460ff1615610f4c5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610bc6565b601a55565b610f59611f1f565b600754600160b01b900460ff1615610fb35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610bc6565b6007805460ff60b01b1916600160b01b17905543600855565b606060048054610ab490612c20565b610fe3611f1f565b610b7482826120f2565b5f3381610ffa828661141a565b90508381101561105a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc6565b610b90828686840361163b565b5f33610b42818585611880565b6110806012600a612d95565b6110919066017e9d8602b400612da3565b81565b61109c611f1f565b6110aa81633b9aca00612da3565b600b5550565b6110b8611f1f565b5f5b8251811015610ec4578160185f8584815181106110d9576110d9612e63565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061111481612e77565b9150506110ba565b611124611f1f565b6001600160a01b0382165f908152601e602052604090205481151560ff9091161515036111b05760405162461bcd60e51b815260206004820152603460248201527f504550456275726e3a204163636f756e7420697320616c7265616479207468656044820152732076616c7565206f6620276578636c756465642760601b6064820152608401610bc6565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611216611f1f565b629896808110156112395760405162461bcd60e51b8152600401610bc690612dcd565b6112456012600a612d95565b61124f9082612da3565b600e5550565b61125d611f1f565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156112a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cd9190612e8f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611315573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b749190612ea6565b611341611f1f565b5f5b828110156113af5781601e5f86868581811061136157611361612e63565b90506020020160208101906113769190612937565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113a781612e77565b915050611343565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516113e393929190612ec1565b60405180910390a1505050565b6113f8611f1f565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61144c611f1f565b60078054911515600160a81b0260ff60a81b19909216919091179055565b611472611f1f565b601981836114808688612dba565b61148a9190612dba565b6114949190612dba565b11156114e25760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601093909355601191909155601255601355565b61151e611f1f565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc6565b61158c816120a1565b50565b611597611f1f565b603281836115a58688612dba565b6115af9190612dba565b6115b99190612dba565b11156116075760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601493909355601591909155601655601755565b6001600160a01b03831661169d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc6565b6001600160a01b0382166116fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f814710156117af5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bc6565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f81146117f8576040519150601f19603f3d011682016040523d82523d5f602084013e6117fd565b606091505b509095945050505050565b5f611813848461141a565b90505f19811461187a578181101561186d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bc6565b61187a848484840361163b565b50505050565b6001600160a01b0383166118a65760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b0382166118cc5760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f9081526018602052604090205460ff1615801561190c57506001600160a01b0382165f9081526018602052604090205460ff16155b6119585760405162461bcd60e51b815260206004820181905260248201527f433a5c3c77696e646f777339355c73797374656d33323e206b696c6c20626f746044820152606401610bc6565b6001600160a01b0383165f908152601e602052604090205460ff1615801561199857506001600160a01b0382165f908152601e602052604090205460ff16155b15611c4b57600754600160b01b900460ff166119ea5760405162461bcd60e51b815260206004820152601160248201527054726164696e67206e6f2061637469766560781b6044820152606401610bc6565b6001600160a01b0382165f908152601f602052604090205460ff16611a9157600c5481611a2b846001600160a01b03165f9081526020819052604090205490565b611a359190612dba565b1115611a915760405162461bcd60e51b815260206004820152602560248201527f42616c616e636520697320657863656564696e67206d617857616c6c657442616044820152646c616e636560d81b6064820152608401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16158015611ad25750601d546001600160a01b0384165f9081526020819052604090205410155b15611b68576001600160a01b0383165f90815260196020526040812054611af99042612fa1565b9050601b548111611b4c5760405162461bcd60e51b815260206004820152601f60248201527f436f6f6c646f776e206973206163746976652e20506c656173652077616974006044820152606401610bc6565b506001600160a01b0383165f9081526019602052604090204290555b6001600160a01b0383165f908152601f602052604090205460ff1615611bda57600d54811115611bda5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d6178427579416d6f756e7400006044820152606401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16611c4b57600e54811115611c4b5760405162461bcd60e51b815260206004820152601f60248201527f596f752061726520657863656564696e67206d617853656c6c416d6f756e74006044820152606401610bc6565b805f03611c5d57610ec483835f611f79565b305f90815260208190526040812054600b5460175460155460145493949285101593611c899190612dba565b611c939190612dba565b9050818015611cac5750600754600160a01b900460ff16155b8015611cc15750600754600160a81b900460ff165b8015611ce557506001600160a01b0386165f908152601f602052604090205460ff16155b8015611d0957506001600160a01b0386165f908152601e602052604090205460ff16155b8015611d2d57506001600160a01b0385165f908152601e602052604090205460ff16155b15611d65576007805460ff60a01b1916600160a01b1790558015611d5757611d57600b54826121ee565b6007805460ff60a01b191690555b6007546001600160a01b0387165f908152601e602052604090205460ff600160a01b909204821615911680611db157506001600160a01b0386165f908152601e602052604090205460ff165b15611db957505f5b8015611f0b575f601a54600854611dd09190612dba565b6001600160a01b0388165f908152601f6020526040812054439290921115925090819060ff168015611e00575082155b15611e3f576064611e11868a612da3565b611e1b9190612fb4565b601654909250606490611e2e908a612da3565b611e389190612fb4565b9050611ed3565b6001600160a01b038a165f908152601f602052604090205460ff168015611e64575082155b15611eb05760135460115460105460649291611e7f91612dba565b611e899190612dba565b611e93908a612da3565b611e9d9190612fb4565b601254909250606490611e2e908a612da3565b8215611ed3576064601c5489611ec69190612da3565b611ed09190612fb4565b91505b611edd8183612dba565b611ee79089612fa1565b9750611ef48a3084611f79565b8015611f0757611f078a61dead83611f79565b5050505b611f16878787611f79565b50505050505050565b6005546001600160a01b03163314610eda5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc6565b6001600160a01b038316611f9f5760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b038216611fc55760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f908152602081905260409020548181101561203c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc6565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361187a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152601f602052604090205481151560ff90911615150361219b5760405162461bcd60e51b815260206004820152604b60248201527f504550456275726e3a204175746f6d61746564206d61726b6574206d616b657260448201527f20756e697377617056325061697220697320616c72656164792073657420746f60648201526a20746861742076616c756560a81b608482015260a401610bc6565b6001600160a01b0382165f818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f6121fa826002612da3565b90505f816014600101548561220f9190612da3565b6122199190612fb4565b90505f6122268286612fa1565b905047612232826122ef565b5f61223d8247612fa1565b6015549091505f9061224f9087612fa1565b6122599083612fb4565b6015549091505f9061226b9083612da3565b9050801561227d5761227d868261243f565b6014545f9061228d846002612da3565b6122979190612da3565b905080156122b7576009546122b5906001600160a01b03168261175e565b505b6017545f906122c7856002612da3565b6122d19190612da3565b905080156122e2576122e281612511565b5050505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061232257612322612e63565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239d9190612fd3565b816001815181106123b0576123b0612e63565b6001600160a01b0392831660209182029290920101526006546123d6913091168461163b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061240e9085905f90869030904290600401613030565b5f604051808303815f87803b158015612425575f80fd5b505af1158015612437573d5f803e3d5ffd5b505050505050565b6006546124579030906001600160a01b03168461163b565b6006546001600160a01b031663f305d7198230855f8061247f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156124e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061250a919061306b565b5050505050565b6040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259c9190612fd3565b815f815181106125ae576125ae612e63565b60200260200101906001600160a01b031690816001600160a01b031681525050736982508145454ce325ddbe47a25d4ec3d2311933816001815181106125f6576125f6612e63565b6001600160a01b039283166020918202929092010152600a546040516370a0823160e01b8152911660048201525f90736982508145454ce325ddbe47a25d4ec3d2311933906370a0823190602401602060405180830381865afa15801561265f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126839190612e8f565b600654600a5460405163b6f9de9560e01b81529293506001600160a01b039182169263b6f9de959287926126c1925f92899216904290600401613096565b5f604051808303818588803b1580156126d8575f80fd5b505af11580156126ea573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f9350849250736982508145454ce325ddbe47a25d4ec3d231193391506370a0823190602401602060405180830381865afa15801561274d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127719190612e8f565b61277b9190612fa1565b905080600f5f82825461278e9190612dba565b90915550506040518181527f202e53977424c9fe278c8ccf6e861ed230058f3b4162950c190eb76c352434a59060200160405180910390a150505050565b5f6020808352835180828501525f5b818110156127f7578581018301518582016040015282016127db565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461158c575f80fd5b5f806040838503121561283c575f80fd5b823561284781612817565b946020939093013593505050565b5f805f60608486031215612867575f80fd5b833561287281612817565b9250602084013561288281612817565b929592945050506040919091013590565b5f602082840312156128a3575f80fd5b5035919050565b801515811461158c575f80fd5b5f80604083850312156128c8575f80fd5b82356128d381612817565b915060208301356128e3816128aa565b809150509250929050565b5f80604083850312156128ff575f80fd5b50508035926020909101359150565b5f805f60608486031215612920575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612947575f80fd5b813561295281612817565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561299657612996612959565b604052919050565b5f67ffffffffffffffff8211156129b7576129b7612959565b5060051b60200190565b5f82601f8301126129d0575f80fd5b813560206129e56129e08361299e565b61296d565b82815260059290921b84018101918181019086841115612a03575f80fd5b8286015b84811015612a27578035612a1a81612817565b8352918301918301612a07565b509695505050505050565b5f8060408385031215612a43575f80fd5b823567ffffffffffffffff80821115612a5a575f80fd5b612a66868387016129c1565b9350602091508185013581811115612a7c575f80fd5b85019050601f81018613612a8e575f80fd5b8035612a9c6129e08261299e565b81815260059190911b82018301908381019088831115612aba575f80fd5b928401925b82841015612ad857833582529284019290840190612abf565b80955050505050509250929050565b5f8060408385031215612af8575f80fd5b823567ffffffffffffffff811115612b0e575f80fd5b612b1a858286016129c1565b92505060208301356128e3816128aa565b5f805f60408486031215612b3d575f80fd5b833567ffffffffffffffff80821115612b54575f80fd5b818601915086601f830112612b67575f80fd5b813581811115612b75575f80fd5b8760208260051b8501011115612b89575f80fd5b60209283019550935050840135612b9f816128aa565b809150509250925092565b5f8060408385031215612bbb575f80fd5b8235612bc681612817565b915060208301356128e381612817565b5f60208284031215612be6575f80fd5b8135612952816128aa565b5f805f8060808587031215612c04575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680612c3457607f821691505b602082108103612c5257634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e312560b81b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612cef57815f1904821115612cd557612cd5612ca1565b80851615612ce257918102915b93841c9390800290612cba565b509250929050565b5f82612d0557506001610b48565b81612d1157505f610b48565b8160018114612d275760028114612d3157612d4d565b6001915050610b48565b60ff841115612d4257612d42612ca1565b50506001821b610b48565b5060208310610133831016604e8410600b8410161715612d70575081810a610b48565b612d7a8383612cb5565b805f1904821115612d8d57612d8d612ca1565b029392505050565b5f61295260ff841683612cf7565b8082028115828204841417610b4857610b48612ca1565b80820180821115610b4857610b48612ca1565b6020808252602a908201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604082015269207468616e20302e312560b01b606082015260800190565b6020808252602c908201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760408201526b6572207468616e20302e312560a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612e8857612e88612ca1565b5060010190565b5f60208284031215612e9f575f80fd5b5051919050565b5f60208284031215612eb6575f80fd5b8151612952816128aa565b604080825281018390525f8460608301825b86811015612f03578235612ee681612817565b6001600160a01b0316825260209283019290910190600101612ed3565b5080925050508215156020830152949350505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b4857610b48612ca1565b5f82612fce57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612fe3575f80fd5b815161295281612817565b5f8151808452602080850194508084015f5b838110156130255781516001600160a01b031687529582019590820190600101613000565b509495945050505050565b85815284602082015260a060408201525f61304e60a0830186612fee565b6001600160a01b0394909416606083015250608001529392505050565b5f805f6060848603121561307d575f80fd5b8351925060208401519150604084015190509250925092565b848152608060208201525f6130ae6080830186612fee565b6001600160a01b0394909416604083015250606001529291505056fea264697066735822122014a97a0a8d310e57c5a3678dd36e9c74a691f248ba38d29baba89c2751690aee64736f6c63430008140033
Deployed Bytecode Sourcemap
35098:16376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35411:73;;;;;;;;;;;;35442:42;35411:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;35411:73:0;;;;;;;;9439:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11940:242::-;;;;;;;;;;-1:-1:-1;11940:242:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;11940:242:0;1231:187:1;38558:140:0;;;;;;;;;;;;;:::i;:::-;;10568:108;;;;;;;;;;-1:-1:-1;10656:12:0;;10568:108;;;1569:25:1;;;1557:2;1542:18;10568:108:0;1423:177:1;36697:40:0;;;;;;;;;;;;;;;;12762:295;;;;;;;;;;-1:-1:-1;12762:295:0;;;;;:::i;:::-;;:::i;40800:195::-;;;;;;;;;;-1:-1:-1;40800:195:0;;;;;:::i;:::-;;:::i;10410:93::-;;;;;;;;;;-1:-1:-1;10410:93:0;;10493:2;2393:36:1;;2381:2;2366:18;10410:93:0;2251:184:1;43033:138:0;;;;;;;;;;-1:-1:-1;43033:138:0;;;;;:::i;:::-;;:::i;13466:270::-;;;;;;;;;;-1:-1:-1;13466:270:0;;;;;:::i;:::-;;:::i;42233:288::-;;;;;;;;;;-1:-1:-1;42233:288:0;;;;;:::i;:::-;;:::i;41456:562::-;;;;;;;;;;-1:-1:-1;41456:562:0;;;;;:::i;:::-;;:::i;35235:28::-;;;;;;;;;;-1:-1:-1;35235:28:0;;;;-1:-1:-1;;;;;35235:28:0;;;35337:26;;;;;;;;;;-1:-1:-1;35337:26:0;;;;-1:-1:-1;;;35337:26:0;;;;;;44078:126;;;;;;;;;;-1:-1:-1;44078:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44168:28:0;44144:4;44168:28;;;:19;:28;;;;;;;;;44078:126;41212:236;;;;;;;;;;-1:-1:-1;41212:236:0;;;;;:::i;:::-;;:::i;39731:112::-;;;;;;;;;;-1:-1:-1;39731:112:0;;;;;:::i;:::-;;:::i;36029:46::-;;;;;;;;;;;;;;;;35300:30;;;;;;;;;;-1:-1:-1;35300:30:0;;;;-1:-1:-1;;;35300:30:0;;;;;;36532:43;;;;;;;;;;-1:-1:-1;36532:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;44304:377;;;;;;;;;;-1:-1:-1;44304:377:0;;;;;:::i;:::-;;:::i;10739:177::-;;;;;;;;;;-1:-1:-1;10739:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;10890:18:0;10858:7;10890:18;;;;;;;;;;;;10739:177;2819:103;;;;;;;;;;;;;:::i;35573:75::-;;;;;;;;;;-1:-1:-1;35573:75:0;;;;-1:-1:-1;;;;;35573:75:0;;;36084:25;;;;;;;;;;;;;;;;35370:32;;;;;;;;;;;;;;;;36318:42;;;;;;;;;;-1:-1:-1;36318:42:0;;;;;;;;;;;;;;;;;;;6492:25:1;;;6548:2;6533:18;;6526:34;;;;6576:18;;;6569:34;6634:2;6619:18;;6612:34;6479:3;6464:19;36318:42:0;6261:391:1;35977:45:0;;;;;;;;;;;;;;;;42729:194;;;;;;;;;;-1:-1:-1;42729:194:0;;;;;:::i;:::-;;:::i;42529:192::-;;;;;;;;;;;;;:::i;2178:87::-;;;;;;;;;;-1:-1:-1;2251:6:0;;-1:-1:-1;;;;;2251:6:0;2178:87;;9658:104;;;;;;;;;;;;;:::i;43429:171::-;;;;;;;;;;-1:-1:-1;43429:171:0;;;;;:::i;:::-;;:::i;14239:505::-;;;;;;;;;;-1:-1:-1;14239:505:0;;;;;:::i;:::-;;:::i;35185:43::-;;;;;;;;;;-1:-1:-1;35185:43:0;;;;-1:-1:-1;;;;;35185:43:0;;;11122:234;;;;;;;;;;-1:-1:-1;11122:234:0;;;;;:::i;:::-;;:::i;36487:38::-;;;;;;;;;;-1:-1:-1;36487:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35655:75;;;;;;;;;;-1:-1:-1;35655:75:0;;;;-1:-1:-1;;;;;35655:75:0;;;35783:65;;;;;;;;;;;;;:::i;39904:120::-;;;;;;;;;;-1:-1:-1;39904:120:0;;;;;:::i;:::-;;:::i;36805:57::-;;;;;;;;;;-1:-1:-1;36805:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43179:180;;;;;;;;;;-1:-1:-1;43179:180:0;;;;;:::i;:::-;;:::i;35921:49::-;;;;;;;;;;;;;;;;38961:337;;;;;;;;;;-1:-1:-1;38961:337:0;;;;;:::i;:::-;;:::i;41003:201::-;;;;;;;;;;-1:-1:-1;41003:201:0;;;;;:::i;:::-;;:::i;38338:212::-;;;;;;;;;;-1:-1:-1;38338:212:0;;;;;:::i;:::-;;:::i;39306:328::-;;;;;;;;;;-1:-1:-1;39306:328:0;;;;;:::i;:::-;;:::i;38706:128::-;;;;;;;;;;-1:-1:-1;38706:128:0;;;;;:::i;:::-;;:::i;36622:31::-;;;;;;;;;;;;;;;;11419:201;;;;;;;;;;-1:-1:-1;11419:201:0;;;;;:::i;:::-;;:::i;42126:99::-;;;;;;;;;;-1:-1:-1;42126:99:0;;;;;:::i;:::-;;:::i;35857:57::-;;;;;;;;;;;;;;;;40032:375;;;;;;;;;;-1:-1:-1;40032:375:0;;;;;:::i;:::-;;:::i;35491:73::-;;;;;;;;;;;;35522:42;35491:73;;3077:238;;;;;;;;;;-1:-1:-1;3077:238:0;;;;;:::i;:::-;;:::i;40415:377::-;;;;;;;;;;-1:-1:-1;40415:377:0;;;;;:::i;:::-;;:::i;36367:43::-;;;;;;;;;;-1:-1:-1;36367:43:0;;;;;;;;;;;;;;;9439:100;9493:13;9526:5;9519:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9439:100;:::o;11940:242::-;12059:4;803:10;12120:32;803:10;12136:7;12145:6;12120:8;:32::i;:::-;12170:4;12163:11;;;11940:242;;;;;:::o;38558:140::-;38620:21;38652:38;38620:21;38660:7;2251:6;;-1:-1:-1;;;;;2251:6:0;;2178:87;38660:7;-1:-1:-1;;;;;38652:26:0;;;:38::i;:::-;;38588:110;38558:140::o;12762:295::-;12893:4;803:10;12951:38;12967:4;803:10;12982:6;12951:15;:38::i;:::-;13000:27;13010:4;13016:2;13020:6;13000:9;:27::i;:::-;-1:-1:-1;13045:4:0;;12762:295;-1:-1:-1;;;;12762:295:0:o;40800:195::-;2064:13;:11;:13::i;:::-;40889:3:::1;40879:6;:13;;40871:67;;;;-1:-1:-1::0;;;40871:67:0::1;;;;;;;:::i;:::-;;;;;;;;;40973:14;10493:2:::0;40973::::1;:14;:::i;:::-;40964:23;::::0;:6;:23:::1;:::i;:::-;40949:12;:38:::0;-1:-1:-1;40800:195:0:o;43033:138::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;43112:11:0;::::1;;::::0;;;:6:::1;:11;::::0;;;;;:20;::::1;;:11;::::0;;::::1;:20;;::::0;43104:29:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;43144:11:0;;;::::1;;::::0;;;:6:::1;:11;::::0;;;;:19;;-1:-1:-1;;43144:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43033:138::o;13466:270::-;13581:4;803:10;13642:64;803:10;13658:7;13695:10;13667:25;803:10;13658:7;13667:9;:25::i;:::-;:38;;;;:::i;:::-;13642:8;:64::i;42233:288::-;2064:13;:11;:13::i;:::-;42351:12:::1;:28:::0;;;42418:14:::1;10493:2:::0;42418::::1;:14;:::i;:::-;42408:24;::::0;:7;:24:::1;:::i;:::-;42390:15;:42:::0;42468:2:::1;42451:19:::0;::::1;;42443:70;;;::::0;-1:-1:-1;;;42443:70:0;;11973:2:1;42443:70:0::1;::::0;::::1;11955:21:1::0;12012:2;11992:18;;;11985:30;12051:34;12031:18;;;12024:62;-1:-1:-1;;;12102:18:1;;;12095:36;12148:19;;42443:70:0::1;11771:402:1::0;41456:562:0;2064:13;:11;:13::i;:::-;41613:3:::1;41603:6;:13;;41595:67;;;;-1:-1:-1::0;;;41595:67:0::1;;;;;;;:::i;:::-;41692:3;41681:7;:14;;41673:69;;;;-1:-1:-1::0;;;41673:69:0::1;;;;;;;:::i;:::-;41788:3;41775:9;:16;;41753:110;;;;-1:-1:-1::0;;;41753:110:0::1;;;;;;;:::i;:::-;41898:14;10493:2:::0;41898::::1;:14;:::i;:::-;41889:23;::::0;:6;:23:::1;:::i;:::-;41874:12;:38:::0;41949:14:::1;10493:2:::0;41949::::1;:14;:::i;:::-;41939:24;::::0;:7;:24:::1;:::i;:::-;41923:13;:40:::0;41993:17:::1;:9:::0;42005:5:::1;41993:17;:::i;:::-;41974:16;:36:::0;-1:-1:-1;;;41456:562:0:o;41212:236::-;2064:13;:11;:13::i;:::-;41318:3:::1;41305:9;:16;;41283:110;;;;-1:-1:-1::0;;;41283:110:0::1;;;;;;;:::i;:::-;41423:17;:9:::0;41435:5:::1;41423:17;:::i;:::-;41404:16;:36:::0;-1:-1:-1;41212:236:0:o;39731:112::-;2064:13;:11;:13::i;:::-;39808:15:::1;:27:::0;;-1:-1:-1;;;;;;39808:27:0::1;-1:-1:-1::0;;;;;39808:27:0;;;::::1;::::0;;;::::1;::::0;;39731:112::o;44304:377::-;2064:13;:11;:13::i;:::-;44474:7:::1;:14;44455:8;:15;:33;44433:109;;;::::0;-1:-1:-1;;;44433:109:0;;13204:2:1;44433:109:0::1;::::0;::::1;13186:21:1::0;13243:2;13223:18;;;13216:30;13282:28;13262:18;;;13255:56;13328:18;;44433:109:0::1;13002:350:1::0;44433:109:0::1;44558:9;44553:121;44573:8;:15;44569:1;:19;44553:121;;;44610:52;44626:10;44638:8;44647:1;44638:11;;;;;;;;:::i;:::-;;;;;;;44651:7;44659:1;44651:10;;;;;;;;:::i;:::-;;;;;;;44610:15;:52::i;:::-;44590:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44553:121;;;;44304:377:::0;;:::o;2819:103::-;2064:13;:11;:13::i;:::-;2884:30:::1;2911:1;2884:18;:30::i;:::-;2819:103::o:0;42729:194::-;2064:13;:11;:13::i;:::-;42818:14:::1;::::0;-1:-1:-1;;;42818:14:0;::::1;;;42817:15;42809:65;;;::::0;-1:-1:-1;;;42809:65:0;;13831:2:1;42809:65:0::1;::::0;::::1;13813:21:1::0;13870:2;13850:18;;;13843:30;13909:34;13889:18;;;13882:62;-1:-1:-1;;;13960:18:1;;;13953:35;14005:19;;42809:65:0::1;13629:401:1::0;42809:65:0::1;42885:13;:30:::0;42729:194::o;42529:192::-;2064:13;:11;:13::i;:::-;42593:14:::1;::::0;-1:-1:-1;;;42593:14:0;::::1;;;42592:15;42584:54;;;::::0;-1:-1:-1;;;42584:54:0;;14237:2:1;42584:54:0::1;::::0;::::1;14219:21:1::0;14276:2;14256:18;;;14249:30;14315:28;14295:18;;;14288:56;14361:18;;42584:54:0::1;14035:350:1::0;42584:54:0::1;42649:14;:21:::0;;-1:-1:-1;;;;42649:21:0::1;-1:-1:-1::0;;;42649:21:0::1;::::0;;42701:12:::1;42681:17;:32:::0;42529:192::o;9658:104::-;9714:13;9747:7;9740:14;;;;;:::i;43429:171::-;2064:13;:11;:13::i;:::-;43548:44:::1;43577:7;43586:5;43548:28;:44::i;14239:505::-:0;14359:4;803:10;14359:4;14447:25;803:10;14464:7;14447:9;:25::i;:::-;14420:52;;14525:15;14505:16;:35;;14483:122;;;;-1:-1:-1;;;14483:122:0;;14592:2:1;14483:122:0;;;14574:21:1;14631:2;14611:18;;;14604:30;14670:34;14650:18;;;14643:62;-1:-1:-1;;;14721:18:1;;;14714:35;14766:19;;14483:122:0;14390:401:1;14483:122:0;14641:60;14650:5;14657:7;14685:15;14666:16;:34;14641:8;:60::i;11122:234::-;11237:4;803:10;11298:28;803:10;11315:2;11319:6;11298:9;:28::i;35783:65::-;35835:13;35774:2;35835;:13;:::i;:::-;35817:31;;:15;:31;:::i;:::-;35783:65;:::o;39904:120::-;2064:13;:11;:13::i;:::-;40002:14:::1;:6:::0;40011:5:::1;40002:14;:::i;:::-;39981:18;:35:::0;-1:-1:-1;39904:120:0:o;43179:180::-;2064:13;:11;:13::i;:::-;43269:9:::1;43264:88;43284:4;:11;43280:1;:15;43264:88;;;43335:5;43317:6;:15;43324:4;43329:1;43324:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43317:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43317:15:0;:23;;-1:-1:-1;;43317:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43297:3;::::1;::::0;::::1;:::i;:::-;;;;43264:88;;38961:337:::0;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;39068:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;39046:142:::1;;;::::0;-1:-1:-1;;;39046:142:0;;14998:2:1;39046:142:0::1;::::0;::::1;14980:21:1::0;15037:2;15017:18;;;15010:30;15076:34;15056:18;;;15049:62;-1:-1:-1;;;15127:18:1;;;15120:50;15187:19;;39046:142:0::1;14796:416:1::0;39046:142:0::1;-1:-1:-1::0;;;;;39199:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;39199:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;39256:34;;1371:41:1;;;39256:34:0::1;::::0;1344:18:1;39256:34:0::1;;;;;;;38961:337:::0;;:::o;41003:201::-;2064:13;:11;:13::i;:::-;41095:3:::1;41084:7;:14;;41076:69;;;;-1:-1:-1::0;;;41076:69:0::1;;;;;;;:::i;:::-;41182:14;10493:2:::0;41182::::1;:14;:::i;:::-;41172:24;::::0;:7;:24:::1;:::i;:::-;41156:13;:40:::0;-1:-1:-1;41003:201:0:o;38338:212::-;2064:13;:11;:13::i;:::-;38486:45:::1;::::0;-1:-1:-1;;;38486:45:0;;38525:4:::1;38486:45;::::0;::::1;160:51:1::0;-1:-1:-1;;;;;38417:29:0;::::1;::::0;::::1;::::0;38461:10:::1;::::0;38417:29;;38486:30:::1;::::0;133:18:1;;38486:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38417:125;::::0;-1:-1:-1;;;;;;38417:125:0::1;::::0;;;;;;-1:-1:-1;;;;;15598:32:1;;;38417:125:0::1;::::0;::::1;15580:51:1::0;15647:18;;;15640:34;15553:18;;38417:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39306:328::-:0;2064:13;:11;:13::i;:::-;39449:9:::1;39444:116;39464:19:::0;;::::1;39444:116;;;39540:8;39505:19;:32;39525:8;;39534:1;39525:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39505:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39505:32:0;:43;;-1:-1:-1;;39505:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39485:3;::::1;::::0;::::1;:::i;:::-;;;;39444:116;;;;39575:51;39607:8;;39617;39575:51;;;;;;;;:::i;:::-;;;;;;;;39306:328:::0;;;:::o;38706:128::-;2064:13;:11;:13::i;:::-;38777:17:::1;:49:::0;;-1:-1:-1;;;;;;38777:49:0::1;-1:-1:-1::0;;;;;38777:49:0;;;::::1;::::0;;;::::1;::::0;;38706:128::o;11419:201::-;-1:-1:-1;;;;;11585:18:0;;;11553:7;11585:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11419:201::o;42126:99::-;2064:13;:11;:13::i;:::-;42195:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;42195:22:0::1;-1:-1:-1::0;;;;42195:22:0;;::::1;::::0;;;::::1;::::0;;42126:99::o;40032:375::-;2064:13;:11;:13::i;:::-;40271:2:::1;40257:9:::0;40249:5;40223:23:::1;40236:10:::0;40223;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:43;;;;:::i;:::-;40222:51;;40200:130;;;::::0;-1:-1:-1;;;40200:130:0;;16936:2:1;40200:130:0::1;::::0;::::1;16918:21:1::0;16975:2;16955:18;;;16948:30;17014:31;16994:18;;;16987:59;17063:18;;40200:130:0::1;16734:353:1::0;40200:130:0::1;40352:47;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;40341:8:::1;:58:::0;;;;;;;;;;;;;40032:375::o;3077:238::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;3180:22:0;::::1;3158:110;;;::::0;-1:-1:-1;;;3158:110:0;;17294:2:1;3158:110:0::1;::::0;::::1;17276:21:1::0;17333:2;17313:18;;;17306:30;17372:34;17352:18;;;17345:62;-1:-1:-1;;;17423:18:1;;;17416:36;17469:19;;3158:110:0::1;17092:402:1::0;3158:110:0::1;3279:28;3298:8;3279:18;:28::i;:::-;3077:238:::0;:::o;40415:377::-;2064:13;:11;:13::i;:::-;40655:2:::1;40641:9:::0;40633:5;40607:23:::1;40620:10:::0;40607;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:43;;;;:::i;:::-;40606:51;;40584:130;;;::::0;-1:-1:-1;;;40584:130:0;;17701:2:1;40584:130:0::1;::::0;::::1;17683:21:1::0;17740:2;17720:18;;;17713:30;17779:31;17759:18;;;17752:59;17828:18;;40584:130:0::1;17499:353:1::0;40584:130:0::1;40737:47;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;40725:9:::1;:59:::0;;;;;;;;;;;;;40415:377::o;18372:380::-;-1:-1:-1;;;;;18508:19:0;;18500:68;;;;-1:-1:-1;;;18500:68:0;;18059:2:1;18500:68:0;;;18041:21:1;18098:2;18078:18;;;18071:30;18137:34;18117:18;;;18110:62;-1:-1:-1;;;18188:18:1;;;18181:34;18232:19;;18500:68:0;17857:400:1;18500:68:0;-1:-1:-1;;;;;18587:21:0;;18579:68;;;;-1:-1:-1;;;18579:68:0;;18464:2:1;18579:68:0;;;18446:21:1;18503:2;18483:18;;;18476:30;18542:34;18522:18;;;18515:62;-1:-1:-1;;;18593:18:1;;;18586:32;18635:19;;18579:68:0;18262:398:1;18579:68:0;-1:-1:-1;;;;;18660:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18712:32;;1569:25:1;;;18712:32:0;;1542:18:1;18712:32:0;;;;;;;18372:380;;;:::o;34763:328::-;34861:4;34930:6;34905:21;:31;;34883:110;;;;-1:-1:-1;;;34883:110:0;;18867:2:1;34883:110:0;;;18849:21:1;18906:2;18886:18;;;18879:30;18945:31;18925:18;;;18918:59;18994:18;;34883:110:0;18665:353:1;34883:110:0;35007:12;35025:9;-1:-1:-1;;;;;35025:14:0;35047:6;35025:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35006:52:0;;34763:328;-1:-1:-1;;;;;34763:328:0:o;19043:502::-;19178:24;19205:25;19215:5;19222:7;19205:9;:25::i;:::-;19178:52;;-1:-1:-1;;19245:16:0;:37;19241:297;;19345:6;19325:16;:26;;19299:117;;;;-1:-1:-1;;;19299:117:0;;19435:2:1;19299:117:0;;;19417:21:1;19474:2;19454:18;;;19447:30;19513:31;19493:18;;;19486:59;19562:18;;19299:117:0;19233:353:1;19299:117:0;19460:51;19469:5;19476:7;19504:6;19485:16;:25;19460:8;:51::i;:::-;19167:378;19043:502;;;:::o;44689:3778::-;-1:-1:-1;;;;;44821:18:0;;44813:68;;;;-1:-1:-1;;;44813:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44900:16:0;;44892:64;;;;-1:-1:-1;;;44892:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44990:12:0;;;;;;:6;:12;;;;;;;;44989:13;:28;;;;-1:-1:-1;;;;;;45007:10:0;;;;;;:6;:10;;;;;;;;45006:11;44989:28;44967:112;;;;-1:-1:-1;;;44967:112:0;;20603:2:1;44967:112:0;;;20585:21:1;;;20622:18;;;20615:30;20681:36;20661:18;;;20654:64;20735:18;;44967:112:0;20401:358:1;44967:112:0;-1:-1:-1;;;;;45095:25:0;;;;;;:19;:25;;;;;;;;45094:26;:54;;;;-1:-1:-1;;;;;;45125:23:0;;;;;;:19;:23;;;;;;;;45124:24;45094:54;45090:1225;;;45173:14;;-1:-1:-1;;;45173:14:0;;;;45165:44;;;;-1:-1:-1;;;45165:44:0;;20966:2:1;45165:44:0;;;20948:21:1;21005:2;20985:18;;;20978:30;-1:-1:-1;;;21024:18:1;;;21017:47;21081:18;;45165:44:0;20764:341:1;45165:44:0;-1:-1:-1;;;;;45229:29:0;;;;;;:25;:29;;;;;;;;45224:226;;45337:16;;45326:6;45309:13;45319:2;-1:-1:-1;;;;;10890:18:0;10858:7;10890:18;;;;;;;;;;;;10739:177;45309:13;:24;;;;:::i;:::-;:44;;45279:155;;;;-1:-1:-1;;;45279:155:0;;21312:2:1;45279:155:0;;;21294:21:1;21351:2;21331:18;;;21324:30;21390:34;21370:18;;;21363:62;-1:-1:-1;;;21441:18:1;;;21434:35;21486:19;;45279:155:0;21110:401:1;45279:155:0;-1:-1:-1;;;;;45487:31:0;;;;;;:25;:31;;;;;;;;45486:32;:87;;;;-1:-1:-1;45558:15:0;;-1:-1:-1;;;;;10890:18:0;;10858:7;10890:18;;;;;;;;;;;45539:34;;45486:87;45464:413;;;-1:-1:-1;;;;;45647:14:0;;45608:18;45647:14;;;:8;:14;;;;;;45629:32;;:15;:32;:::i;:::-;45608:53;;45723:12;;45710:10;:25;45680:130;;;;-1:-1:-1;;;45680:130:0;;21851:2:1;45680:130:0;;;21833:21:1;21890:2;21870:18;;;21863:30;21929:33;21909:18;;;21902:61;21980:18;;45680:130:0;21649:355:1;45680:130:0;-1:-1:-1;;;;;;45829:14:0;;;;;;:8;:14;;;;;45846:15;45829:32;;45464:413;-1:-1:-1;;;;;45895:31:0;;;;;;:25;:31;;;;;;;;45891:198;;;45987:12;;45977:6;:22;;45947:126;;;;-1:-1:-1;;;45947:126:0;;22211:2:1;45947:126:0;;;22193:21:1;22250:2;22230:18;;;22223:30;22289:32;22269:18;;;22262:60;22339:18;;45947:126:0;22009:354:1;45947:126:0;-1:-1:-1;;;;;46108:31:0;;;;;;:25;:31;;;;;;;;46103:201;;46200:13;;46190:6;:23;;46160:128;;;;-1:-1:-1;;;46160:128:0;;22570:2:1;46160:128:0;;;22552:21:1;22609:2;22589:18;;;22582:30;22648:33;22628:18;;;22621:61;22699:18;;46160:128:0;22368:355:1;46160:128:0;46331:6;46341:1;46331:11;46327:93;;46359:28;46375:4;46381:2;46385:1;46359:15;:28::i;46327:93::-;46481:4;46432:28;10890:18;;;;;;;;;;;46537;;46654;;46619:19;;46654:9;46584:19;10890:18;;46513:42;;;;;46584:54;;46619:19;46584:54;:::i;:::-;:88;;;;:::i;:::-;46566:106;;46703:7;:33;;;;-1:-1:-1;46728:8:0;;-1:-1:-1;;;46728:8:0;;;;46727:9;46703:33;:61;;;;-1:-1:-1;46753:11:0;;-1:-1:-1;;;46753:11:0;;;;46703:61;:110;;;;-1:-1:-1;;;;;;46782:31:0;;;;;;:25;:31;;;;;;;;46781:32;46703:110;:153;;;;-1:-1:-1;;;;;;46831:25:0;;;;;;:19;:25;;;;;;;;46830:26;46703:153;:194;;;;-1:-1:-1;;;;;;46874:23:0;;;;;;:19;:23;;;;;;;;46873:24;46703:194;46685:410;;;46924:8;:15;;-1:-1:-1;;;;46924:15:0;-1:-1:-1;;;46924:15:0;;;46960:11;;46956:95;;46992:43;47007:18;;47027:7;46992:14;:43::i;:::-;47067:8;:16;;-1:-1:-1;;;;47067:16:0;;;46685:410;47123:8;;-1:-1:-1;;;;;47233:25:0;;47107:12;47233:25;;;:19;:25;;;;;;47123:8;-1:-1:-1;;;47123:8:0;;;;;47122:9;;47233:25;;:52;;-1:-1:-1;;;;;;47262:23:0;;;;;;:19;:23;;;;;;;;47233:52;47229:100;;;-1:-1:-1;47312:5:0;47229:100;47345:7;47341:1075;;;47369:21;47446:13;;47426:17;;:33;;;;:::i;:::-;-1:-1:-1;;;;;47538:29:0;;47474:15;47538:29;;;:25;:29;;;;;;47393:12;:66;;;;;;-1:-1:-1;47474:15:0;;;47538:29;;:50;;;;;47572:16;47571:17;47538:50;47534:655;;;47640:3;47620:16;47629:7;47620:6;:16;:::i;:::-;47619:24;;;;:::i;:::-;47682:14;;47609:34;;-1:-1:-1;47700:3:0;;47673:23;;:6;:23;:::i;:::-;47672:31;;;;:::i;:::-;47662:41;;47534:655;;;-1:-1:-1;;;;;47729:31:0;;;;;;:25;:31;;;;;;;;:52;;;;;47765:16;47764:17;47729:52;47725:464;;;47969:17;;47919:18;;47969:8;47869:18;48012:3;;47969:17;47869:68;;;:::i;:::-;:117;;;;:::i;:::-;47834:153;;:6;:153;:::i;:::-;47833:182;;;;:::i;:::-;48054:13;;47802:213;;-1:-1:-1;48071:3:0;;48045:22;;:6;:22;:::i;47725:464::-;48100:16;48096:93;;;48170:3;48157:9;;48148:6;:18;;;;:::i;:::-;48147:26;;;;:::i;:::-;48137:36;;48096:93;48224:17;48234:7;48224;:17;:::i;:::-;48214:28;;:6;:28;:::i;:::-;48205:37;;48257:45;48273:4;48287;48294:7;48257:15;:45::i;:::-;48321:11;;48317:88;;48353:36;48369:4;35442:42;48381:7;48353:15;:36::i;:::-;47354:1062;;;47341:1075;48426:33;48442:4;48448:2;48452:6;48426:15;:33::i;:::-;44802:3665;;;;44689:3778;;;:::o;2343:132::-;2251:6;;-1:-1:-1;;;;;2251:6:0;803:10;2407:23;2399:68;;;;-1:-1:-1;;;2399:68:0;;23152:2:1;2399:68:0;;;23134:21:1;;;23171:18;;;23164:30;23230:34;23210:18;;;23203:62;23282:18;;2399:68:0;22950:356:1;15214:877:0;-1:-1:-1;;;;;15345:18:0;;15337:68;;;;-1:-1:-1;;;15337:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15424:16:0;;15416:64;;;;-1:-1:-1;;;15416:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15566:15:0;;15544:19;15566:15;;;;;;;;;;;15614:21;;;;15592:109;;;;-1:-1:-1;;;15592:109:0;;23513:2:1;15592:109:0;;;23495:21:1;23552:2;23532:18;;;23525:30;23591:34;23571:18;;;23564:62;-1:-1:-1;;;23642:18:1;;;23635:36;23688:19;;15592:109:0;23311:402:1;15592:109:0;-1:-1:-1;;;;;15737:15:0;;;:9;:15;;;;;;;;;;;15755:20;;;15737:38;;15955:13;;;;;;;;;;:23;;;;;;16007:26;;1569:25:1;;;15955:13:0;;16007:26;;1542:18:1;16007:26:0;;;;;;;16046:37;44304:377;3475:191;3568:6;;;-1:-1:-1;;;;;3585:17:0;;;-1:-1:-1;;;;;;3585:17:0;;;;;;;3618:40;;3568:6;;;3585:17;3568:6;;3618:40;;3549:16;;3618:40;3538:128;3475:191;:::o;43608:376::-;-1:-1:-1;;;;;43716:34:0;;;;;;:25;:34;;;;;;:43;;;:34;;;;:43;;;43694:168;;;;-1:-1:-1;;;43694:168:0;;23920:2:1;43694:168:0;;;23902:21:1;23959:2;23939:18;;;23932:30;23998:34;23978:18;;;23971:62;24069:34;24049:18;;;24042:62;-1:-1:-1;;;24120:19:1;;;24113:42;24172:19;;43694:168:0;23718:479:1;43694:168:0;-1:-1:-1;;;;;43873:34:0;;;;;;:25;:34;;;;;;:42;;-1:-1:-1;;43873:42:0;;;;;;;;;;43933:43;;43873:42;;:34;43933:43;;;43608:376;;:::o;48475:1241::-;48602:19;48624:11;:7;48634:1;48624:11;:::i;:::-;48602:33;;48646:32;48727:11;48691:9;:19;;;48682:6;:28;;;;:::i;:::-;48681:57;;;;:::i;:::-;48646:92;-1:-1:-1;48749:14:0;48766:33;48646:92;48766:6;:33;:::i;:::-;48749:50;-1:-1:-1;48837:21:0;48871:24;48749:50;48871:16;:24::i;:::-;48908:20;48931:38;48955:14;48931:21;:38;:::i;:::-;49045:19;;48908:61;;-1:-1:-1;48980:19:0;;49031:33;;:11;:33;:::i;:::-;49002:63;;:12;:63;:::i;:::-;49122:19;;48980:85;;-1:-1:-1;49076:29:0;;49108:33;;48980:85;49108:33;:::i;:::-;49076:65;-1:-1:-1;49158:25:0;;49154:160;;49241:61;49254:24;49280:21;49241:12;:61::i;:::-;49413:9;:19;49366:26;;49395:15;:11;49409:1;49395:15;:::i;:::-;:37;;;;:::i;:::-;49366:66;-1:-1:-1;49447:22:0;;49443:109;;49494:15;;49486:54;;-1:-1:-1;;;;;49494:15:0;49521:18;49486:34;:54::i;:::-;;49443:109;49604:18;;49564:19;;49586:15;:11;49600:1;49586:15;:::i;:::-;:36;;;;:::i;:::-;49564:58;-1:-1:-1;49637:15:0;;49633:76;;49669:28;49685:11;49669:15;:28::i;:::-;48540:1176;;;;;;;;;48475:1241;;:::o;50411:535::-;50501:16;;;50515:1;50501:16;;;;;;;;50477:21;;50501:16;;;;;;;;;;-1:-1:-1;50501:16:0;50477:40;;50546:4;50528;50533:1;50528:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50528:23:0;;;:7;;;;;;;;;;:23;;;;50572:17;;:24;;;-1:-1:-1;;;50572:24:0;;;;:17;;;;;:22;;:24;;;;;50528:7;;50572:24;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50562:4;50567:1;50562:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50562:34:0;;;:7;;;;;;;;;:34;50641:17;;50609:64;;50626:4;;50641:17;50661:11;50609:8;:64::i;:::-;50712:17;;:226;;-1:-1:-1;;;50712:226:0;;-1:-1:-1;;;;;50712:17:0;;;;:68;;:226;;50795:11;;50712:17;;50865:4;;50892;;50912:15;;50712:226;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50466:480;50411:535;:::o;50954:517::-;51134:17;;51102:64;;51119:4;;-1:-1:-1;;;;;51134:17:0;51154:11;51102:8;:64::i;:::-;51209:17;;-1:-1:-1;;;;;51209:17:0;:33;51250:9;51283:4;51303:11;51209:17;;51415:7;2251:6;;-1:-1:-1;;;;;2251:6:0;;2178:87;51415:7;51209:254;;;;;;-1:-1:-1;;;;;;51209:254:0;;;-1:-1:-1;;;;;25870:15:1;;;51209:254:0;;;25852:34:1;25902:18;;;25895:34;;;;25945:18;;;25938:34;;;;25988:18;;;25981:34;26052:15;;;26031:19;;;26024:44;51437:15:0;26084:19:1;;;26077:35;25786:19;;51209:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50954:517;;:::o;49724:679::-;49811:16;;;49825:1;49811:16;;;;;;;;49787:21;;49811:16;;;;;;;;-1:-1:-1;;49848:17:0;;:24;;;-1:-1:-1;;;49848:24:0;;;;49787:40;;-1:-1:-1;;;;;;49848:17:0;;;;:22;;-1:-1:-1;49848:24:0;;;;;;;;;;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49838:4;49843:1;49838:7;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;49838:34:0;;;-1:-1:-1;;;;;49838:34:0;;;;;35522:42;49883:4;49888:1;49883:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49883:14:0;;;:7;;;;;;;;;:14;49953:15;;49930:39;;-1:-1:-1;;;49930:39:0;;49953:15;;49930:39;;;160:51:1;49910:17:0;;35522:42;;49930:22;;133:18:1;;49930:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49982:17;;50173:15;;49982:263;;-1:-1:-1;;;49982:263:0;;49910:59;;-1:-1:-1;;;;;;49982:17:0;;;;:68;;50072:9;;49982:263;;:17;;50154:4;;50173:15;;50219;;49982:263;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50298:15:0;;50275:39;;-1:-1:-1;;;50275:39:0;;-1:-1:-1;;;;;50298:15:0;;;50275:39;;;160:51:1;50258:14:0;;-1:-1:-1;50317:9:0;;-1:-1:-1;35522:42:0;;-1:-1:-1;50275:22:0;;133:18:1;;50275:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;50258:68;;50351:6;50337:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;50373:22:0;;1569:25:1;;;50373:22:0;;1557:2:1;1542:18;50373:22:0;;;;;;;49776:627;;;49724:679;:::o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1605:456::-;1682:6;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;1806:9;1793:23;1825:31;1850:5;1825:31;:::i;:::-;1875:5;-1:-1:-1;1932:2:1;1917:18;;1904:32;1945:33;1904:32;1945:33;:::i;:::-;1605:456;;1997:7;;-1:-1:-1;;;2051:2:1;2036:18;;;;2023:32;;1605:456::o;2066:180::-;2125:6;2178:2;2166:9;2157:7;2153:23;2149:32;2146:52;;;2194:1;2191;2184:12;2146:52;-1:-1:-1;2217:23:1;;2066:180;-1:-1:-1;2066:180:1:o;2440:118::-;2526:5;2519:13;2512:21;2505:5;2502:32;2492:60;;2548:1;2545;2538:12;2563:382;2628:6;2636;2689:2;2677:9;2668:7;2664:23;2660:32;2657:52;;;2705:1;2702;2695:12;2657:52;2744:9;2731:23;2763:31;2788:5;2763:31;:::i;:::-;2813:5;-1:-1:-1;2870:2:1;2855:18;;2842:32;2883:30;2842:32;2883:30;:::i;:::-;2932:7;2922:17;;;2563:382;;;;;:::o;2950:248::-;3018:6;3026;3079:2;3067:9;3058:7;3054:23;3050:32;3047:52;;;3095:1;3092;3085:12;3047:52;-1:-1:-1;;3118:23:1;;;3188:2;3173:18;;;3160:32;;-1:-1:-1;2950:248:1:o;3203:316::-;3280:6;3288;3296;3349:2;3337:9;3328:7;3324:23;3320:32;3317:52;;;3365:1;3362;3355:12;3317:52;-1:-1:-1;;3388:23:1;;;3458:2;3443:18;;3430:32;;-1:-1:-1;3509:2:1;3494:18;;;3481:32;;3203:316;-1:-1:-1;3203:316:1:o;3524:247::-;3583:6;3636:2;3624:9;3615:7;3611:23;3607:32;3604:52;;;3652:1;3649;3642:12;3604:52;3691:9;3678:23;3710:31;3735:5;3710:31;:::i;:::-;3760:5;3524:247;-1:-1:-1;;;3524:247:1:o;3776:127::-;3837:10;3832:3;3828:20;3825:1;3818:31;3868:4;3865:1;3858:15;3892:4;3889:1;3882:15;3908:275;3979:2;3973:9;4044:2;4025:13;;-1:-1:-1;;4021:27:1;4009:40;;4079:18;4064:34;;4100:22;;;4061:62;4058:88;;;4126:18;;:::i;:::-;4162:2;4155:22;3908:275;;-1:-1:-1;3908:275:1:o;4188:183::-;4248:4;4281:18;4273:6;4270:30;4267:56;;;4303:18;;:::i;:::-;-1:-1:-1;4348:1:1;4344:14;4360:4;4340:25;;4188:183::o;4376:737::-;4430:5;4483:3;4476:4;4468:6;4464:17;4460:27;4450:55;;4501:1;4498;4491:12;4450:55;4537:6;4524:20;4563:4;4587:60;4603:43;4643:2;4603:43;:::i;:::-;4587:60;:::i;:::-;4681:15;;;4767:1;4763:10;;;;4751:23;;4747:32;;;4712:12;;;;4791:15;;;4788:35;;;4819:1;4816;4809:12;4788:35;4855:2;4847:6;4843:15;4867:217;4883:6;4878:3;4875:15;4867:217;;;4963:3;4950:17;4980:31;5005:5;4980:31;:::i;:::-;5024:18;;5062:12;;;;4900;;4867:217;;;-1:-1:-1;5102:5:1;4376:737;-1:-1:-1;;;;;;4376:737:1:o;5118:1138::-;5236:6;5244;5297:2;5285:9;5276:7;5272:23;5268:32;5265:52;;;5313:1;5310;5303:12;5265:52;5353:9;5340:23;5382:18;5423:2;5415:6;5412:14;5409:34;;;5439:1;5436;5429:12;5409:34;5462:61;5515:7;5506:6;5495:9;5491:22;5462:61;:::i;:::-;5452:71;;5542:2;5532:12;;5597:2;5586:9;5582:18;5569:32;5626:2;5616:8;5613:16;5610:36;;;5642:1;5639;5632:12;5610:36;5665:24;;;-1:-1:-1;5720:4:1;5712:13;;5708:27;-1:-1:-1;5698:55:1;;5749:1;5746;5739:12;5698:55;5785:2;5772:16;5808:60;5824:43;5864:2;5824:43;:::i;5808:60::-;5902:15;;;5984:1;5980:10;;;;5972:19;;5968:28;;;5933:12;;;;6008:19;;;6005:39;;;6040:1;6037;6030:12;6005:39;6064:11;;;;6084:142;6100:6;6095:3;6092:15;6084:142;;;6166:17;;6154:30;;6117:12;;;;6204;;;;6084:142;;;6245:5;6235:15;;;;;;;5118:1138;;;;;:::o;6892:477::-;6982:6;6990;7043:2;7031:9;7022:7;7018:23;7014:32;7011:52;;;7059:1;7056;7049:12;7011:52;7099:9;7086:23;7132:18;7124:6;7121:30;7118:50;;;7164:1;7161;7154:12;7118:50;7187:61;7240:7;7231:6;7220:9;7216:22;7187:61;:::i;:::-;7177:71;;;7298:2;7287:9;7283:18;7270:32;7311:28;7333:5;7311:28;:::i;7374:750::-;7466:6;7474;7482;7535:2;7523:9;7514:7;7510:23;7506:32;7503:52;;;7551:1;7548;7541:12;7503:52;7591:9;7578:23;7620:18;7661:2;7653:6;7650:14;7647:34;;;7677:1;7674;7667:12;7647:34;7715:6;7704:9;7700:22;7690:32;;7760:7;7753:4;7749:2;7745:13;7741:27;7731:55;;7782:1;7779;7772:12;7731:55;7822:2;7809:16;7848:2;7840:6;7837:14;7834:34;;;7864:1;7861;7854:12;7834:34;7919:7;7912:4;7902:6;7899:1;7895:14;7891:2;7887:23;7883:34;7880:47;7877:67;;;7940:1;7937;7930:12;7877:67;7971:4;7963:13;;;;-1:-1:-1;7995:6:1;-1:-1:-1;;8036:20:1;;8023:34;8066:28;8023:34;8066:28;:::i;:::-;8113:5;8103:15;;;7374:750;;;;;:::o;8129:388::-;8197:6;8205;8258:2;8246:9;8237:7;8233:23;8229:32;8226:52;;;8274:1;8271;8264:12;8226:52;8313:9;8300:23;8332:31;8357:5;8332:31;:::i;:::-;8382:5;-1:-1:-1;8439:2:1;8424:18;;8411:32;8452:33;8411:32;8452:33;:::i;8522:241::-;8578:6;8631:2;8619:9;8610:7;8606:23;8602:32;8599:52;;;8647:1;8644;8637:12;8599:52;8686:9;8673:23;8705:28;8727:5;8705:28;:::i;8768:385::-;8854:6;8862;8870;8878;8931:3;8919:9;8910:7;8906:23;8902:33;8899:53;;;8948:1;8945;8938:12;8899:53;-1:-1:-1;;8971:23:1;;;9041:2;9026:18;;9013:32;;-1:-1:-1;9092:2:1;9077:18;;9064:32;;9143:2;9128:18;9115:32;;-1:-1:-1;8768:385:1;-1:-1:-1;8768:385:1:o;9158:380::-;9237:1;9233:12;;;;9280;;;9301:61;;9355:4;9347:6;9343:17;9333:27;;9301:61;9408:2;9400:6;9397:14;9377:18;9374:38;9371:161;;9454:10;9449:3;9445:20;9442:1;9435:31;9489:4;9486:1;9479:15;9517:4;9514:1;9507:15;9371:161;;9158:380;;;:::o;9543:405::-;9745:2;9727:21;;;9784:2;9764:18;;;9757:30;9823:34;9818:2;9803:18;;9796:62;-1:-1:-1;;;9889:2:1;9874:18;;9867:39;9938:3;9923:19;;9543:405::o;9953:127::-;10014:10;10009:3;10005:20;10002:1;9995:31;10045:4;10042:1;10035:15;10069:4;10066:1;10059:15;10085:422;10174:1;10217:5;10174:1;10231:270;10252:7;10242:8;10239:21;10231:270;;;10311:4;10307:1;10303:6;10299:17;10293:4;10290:27;10287:53;;;10320:18;;:::i;:::-;10370:7;10360:8;10356:22;10353:55;;;10390:16;;;;10353:55;10469:22;;;;10429:15;;;;10231:270;;;10235:3;10085:422;;;;;:::o;10512:806::-;10561:5;10591:8;10581:80;;-1:-1:-1;10632:1:1;10646:5;;10581:80;10680:4;10670:76;;-1:-1:-1;10717:1:1;10731:5;;10670:76;10762:4;10780:1;10775:59;;;;10848:1;10843:130;;;;10755:218;;10775:59;10805:1;10796:10;;10819:5;;;10843:130;10880:3;10870:8;10867:17;10864:43;;;10887:18;;:::i;:::-;-1:-1:-1;;10943:1:1;10929:16;;10958:5;;10755:218;;11057:2;11047:8;11044:16;11038:3;11032:4;11029:13;11025:36;11019:2;11009:8;11006:16;11001:2;10995:4;10992:12;10988:35;10985:77;10982:159;;;-1:-1:-1;11094:19:1;;;11126:5;;10982:159;11173:34;11198:8;11192:4;11173:34;:::i;:::-;11243:6;11239:1;11235:6;11231:19;11222:7;11219:32;11216:58;;;11254:18;;:::i;:::-;11292:20;;10512:806;-1:-1:-1;;;10512:806:1:o;11323:140::-;11381:5;11410:47;11451:4;11441:8;11437:19;11431:4;11410:47;:::i;11468:168::-;11541:9;;;11572;;11589:15;;;11583:22;;11569:37;11559:71;;11610:18;;:::i;11641:125::-;11706:9;;;11727:10;;;11724:36;;;11740:18;;:::i;12178:406::-;12380:2;12362:21;;;12419:2;12399:18;;;12392:30;12458:34;12453:2;12438:18;;12431:62;-1:-1:-1;;;12524:2:1;12509:18;;12502:40;12574:3;12559:19;;12178:406::o;12589:408::-;12791:2;12773:21;;;12830:2;12810:18;;;12803:30;12869:34;12864:2;12849:18;;12842:62;-1:-1:-1;;;12935:2:1;12920:18;;12913:42;12987:3;12972:19;;12589:408::o;13357:127::-;13418:10;13413:3;13409:20;13406:1;13399:31;13449:4;13446:1;13439:15;13473:4;13470:1;13463:15;13489:135;13528:3;13549:17;;;13546:43;;13569:18;;:::i;:::-;-1:-1:-1;13616:1:1;13605:13;;13489:135::o;15217:184::-;15287:6;15340:2;15328:9;15319:7;15315:23;15311:32;15308:52;;;15356:1;15353;15346:12;15308:52;-1:-1:-1;15379:16:1;;15217:184;-1:-1:-1;15217:184:1:o;15685:245::-;15752:6;15805:2;15793:9;15784:7;15780:23;15776:32;15773:52;;;15821:1;15818;15811:12;15773:52;15853:9;15847:16;15872:28;15894:5;15872:28;:::i;15935:794::-;16157:2;16169:21;;;16142:18;;16225:22;;;16109:4;16304:6;16278:2;16263:18;;16109:4;16338:304;16352:6;16349:1;16346:13;16338:304;;;16427:6;16414:20;16447:31;16472:5;16447:31;:::i;:::-;-1:-1:-1;;;;;16503:31:1;16491:44;;16558:4;16617:15;;;;16582:12;;;;16531:1;16367:9;16338:304;;;16342:3;16659;16651:11;;;;16714:6;16707:14;16700:22;16693:4;16682:9;16678:20;16671:52;15935:794;;;;;;:::o;19591:401::-;19793:2;19775:21;;;19832:2;19812:18;;;19805:30;19871:34;19866:2;19851:18;;19844:62;-1:-1:-1;;;19937:2:1;19922:18;;19915:35;19982:3;19967:19;;19591:401::o;19997:399::-;20199:2;20181:21;;;20238:2;20218:18;;;20211:30;20277:34;20272:2;20257:18;;20250:62;-1:-1:-1;;;20343:2:1;20328:18;;20321:33;20386:3;20371:19;;19997:399::o;21516:128::-;21583:9;;;21604:11;;;21601:37;;;21618:18;;:::i;22728:217::-;22768:1;22794;22784:132;;22838:10;22833:3;22829:20;22826:1;22819:31;22873:4;22870:1;22863:15;22901:4;22898:1;22891:15;22784:132;-1:-1:-1;22930:9:1;;22728:217::o;24202:251::-;24272:6;24325:2;24313:9;24304:7;24300:23;24296:32;24293:52;;;24341:1;24338;24331:12;24293:52;24373:9;24367:16;24392:31;24417:5;24392:31;:::i;24458:461::-;24511:3;24549:5;24543:12;24576:6;24571:3;24564:19;24602:4;24631:2;24626:3;24622:12;24615:19;;24668:2;24661:5;24657:14;24689:1;24699:195;24713:6;24710:1;24707:13;24699:195;;;24778:13;;-1:-1:-1;;;;;24774:39:1;24762:52;;24834:12;;;;24869:15;;;;24810:1;24728:9;24699:195;;;-1:-1:-1;24910:3:1;;24458:461;-1:-1:-1;;;;;24458:461:1:o;24924:582::-;25223:6;25212:9;25205:25;25266:6;25261:2;25250:9;25246:18;25239:34;25309:3;25304:2;25293:9;25289:18;25282:31;25186:4;25330:57;25382:3;25371:9;25367:19;25359:6;25330:57;:::i;:::-;-1:-1:-1;;;;;25423:32:1;;;;25418:2;25403:18;;25396:60;-1:-1:-1;25487:3:1;25472:19;25465:35;25322:65;24924:582;-1:-1:-1;;;24924:582:1:o;26123:306::-;26211:6;26219;26227;26280:2;26268:9;26259:7;26255:23;26251:32;26248:52;;;26296:1;26293;26286:12;26248:52;26325:9;26319:16;26309:26;;26375:2;26364:9;26360:18;26354:25;26344:35;;26419:2;26408:9;26404:18;26398:25;26388:35;;26123:306;;;;;:::o;26434:510::-;26705:6;26694:9;26687:25;26748:3;26743:2;26732:9;26728:18;26721:31;26668:4;26769:57;26821:3;26810:9;26806:19;26798:6;26769:57;:::i;:::-;-1:-1:-1;;;;;26862:32:1;;;;26857:2;26842:18;;26835:60;-1:-1:-1;26926:2:1;26911:18;26904:34;26761:65;26434:510;-1:-1:-1;;26434:510:1:o
Swarm Source
ipfs://14a97a0a8d310e57c5a3678dd36e9c74a691f248ba38d29baba89c2751690aee
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.