ERC-20
Overview
Max Total Supply
69,472,024 $EWT
Holders
358
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ELONWIFTRUMP
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-07 */ /* _____ _ _____ _ _ _ _ _____ ______ _____ ______ _ _ ___ _________ | ___|| | | _ || \ | || | | ||_ _|| ___||_ _|| ___ \| | | || \/ || ___ \ | |__ | | | | | || \| || | | | | | | |_ | | | |_/ /| | | || . . || |_/ / | __| | | | | | || . ` || |/\| | | | | _| | | | / | | | || |\/| || __/ | |___ | |____\ \_/ /| |\ |\ /\ / _| |_ | | | | | |\ \ | |_| || | | || | \____/ \_____/ \___/ \_| \_/ \/ \/ \___/ \_| \_/ \_| \_| \___/ \_| |_/\_| Join The Revolution! Let’s Make America Great Again! Website: https://http://elonwiftrump.us/ Twitter: https://x.com/ElonWifTrump Telegram: https://t.me/ElonWifTrumpeth */ // SPDX-License-Identifier: MIT // File: contracts/interfaces/IUniswapV2Factory.sol pragma solidity 0.8.23; interface IUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // File: contracts/interfaces/IUniswapV2Router.sol pragma solidity 0.8.23; interface IUniswapV2Router { function factory() external pure returns (address); function WETH() external pure returns (address); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETHSupportingFeeOnTransferTokens( 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; } // File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; /** * @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}. * * 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. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual 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 `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` 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 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); 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 `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` 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. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal virtual { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // File: contracts/ELONWIFTRUMP.sol /* _____ _ _____ _ _ _ _ _____ ______ _____ ______ _ _ ___ _________ | ___|| | | _ || \ | || | | ||_ _|| ___||_ _|| ___ \| | | || \/ || ___ \ | |__ | | | | | || \| || | | | | | | |_ | | | |_/ /| | | || . . || |_/ / | __| | | | | | || . ` || |/\| | | | | _| | | | / | | | || |\/| || __/ | |___ | |____\ \_/ /| |\ |\ /\ / _| |_ | | | | | |\ \ | |_| || | | || | \____/ \_____/ \___/ \_| \_/ \/ \/ \___/ \_| \_/ \_| \_| \___/ \_| |_/\_| Join The Revolution! Let’s Make America Great Again! Website: https://http://elonwiftrump.us/ Twitter: https://x.com/ElonWifTrump Telegram: https://t.me/ElonWifTrumpeth */ pragma solidity 0.8.23; contract ELONWIFTRUMP is ERC20, Ownable { address public marketingWallet; uint16 public buyFee = 0; uint16 public sellFee = 0; uint256 public swapTokensAtAmount = 34_736 * 1e18; // 0.05% bool private _distributingFees; mapping(address => bool) private _excludedFromFees; bool public limitsInEffect = true; uint256 public maxWalletBalance = 1_389_440 * 1e18; // 2% mapping(address => bool) private _excludedFromMaxWalletBalance; address public immutable uniV2Pair; IUniswapV2Router public constant uniV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); bool public tradingEnabled; event LimitsRemoved(); event TradingEnabled(); event BuyFeeSet(uint16 newBuyFee); event SellFeeSet(uint16 newSellFee); event MarketingWalletUpdated(address newAddress); event SwapTokensAtAmountSet(uint256 newSwapTokensAtAmount); event FeesDistributed(uint256 totalTokensDistributed); /** * @notice Constructor function for the ELONWIFTRUMP contract. * It initializes the contract by setting the token name and symbol, * creates a Uniswap V2 pair for the token, sets initial values for marketing and operations wallets and * mints total token supply. * It also approves the Uniswap V2 router to spend an unlimited amount of tokens on behalf of the contract. */ constructor() ERC20("ELONWIFTRUMP", "$EWT") Ownable(msg.sender) { uniV2Pair = IUniswapV2Factory(uniV2Router.factory()).createPair(address(this), uniV2Router.WETH()); _excludedFromMaxWalletBalance[uniV2Pair] = true; _excludedFromFees[owner()] = true; marketingWallet = owner(); _mint(owner(), 69_472_024 * 1e18); _approve(address(this), address(uniV2Router), type(uint256).max); } receive() external payable {} /** * @notice This function is used to transfer tokens internally within the contract. * It performs various checks such as trading enablement, maximum transaction and balance limits, * fee distribution, and fee deduction. * It then calls the _transfer function from the parent contract to perform the actual token transfer. * @param from The address to transfer tokens from. * @param to The address to transfer tokens to. * @param amount The amount of tokens to transfer. */ function _transfer(address from, address to, uint256 amount) internal override { require(amount > 0, "ELONWIFTRUMP: transfer amount must be greater than 0"); // Check if trading has been enabled if (!tradingEnabled) { require(from == owner() || to == owner(), "ELONWIFTRUMP: trading has not been enabled yet"); } // Max TX and Max Balance Limits if (limitsInEffect) { if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_distributingFees) { // On Buys if (from == uniV2Pair && !_excludedFromMaxWalletBalance[to]) { require( amount + balanceOf(to) <= maxWalletBalance, "ELONWIFTRUMP: balance would NEVER exceed max wallet balance" ); } // On Transfers to non-excluded "to" address else if (!_excludedFromMaxWalletBalance[to]) { require( amount + balanceOf(to) <= maxWalletBalance, "ELONWIFTRUMP: balance would NEVER exceed max wallet balance" ); } } } // Swap any tokens held as fees for ETH and distribute bool shouldSwap = balanceOf(address(this)) >= swapTokensAtAmount; if (shouldSwap && !_distributingFees && from != uniV2Pair && !_excludedFromFees[from] && !_excludedFromFees[to]) { _distributingFees = true; _distributeFees(); _distributingFees = false; } // Determine if we should take fees bool takeFees = !_distributingFees; if (_excludedFromFees[from] || _excludedFromFees[to]) { takeFees = false; } uint256 fees = 0; // Take Fees if necessary if (takeFees) { // Fees on buys if (from == uniV2Pair && buyFee > 0) { fees = (amount * buyFee) / 1_000; } // Fees on sells else if (to == uniV2Pair && sellFee > 0) { fees = (amount * sellFee) / 1_000; } // If there are fees to be taken, transfer and substract from amount if (fees > 0) { super._transfer(from, address(this), fees); amount -= fees; } } // Make final transfer super._transfer(from, to, amount); } /** * @notice Distributes fees collected by the contract. * The function calculates the amount of fees to distribute based on the * balance of the contract and a max threshold of 20 times the swapTokensAtAmount. * @dev Emits a `FeesDistributed` event with the amount distributed. */ function _distributeFees() private { // Determine amount of held fees to distribute uint256 tokensToDistribute = balanceOf(address(this)); if (tokensToDistribute > swapTokensAtAmount * 20) { tokensToDistribute = swapTokensAtAmount * 20; } // Swap tokens for ETH address[] memory path = new address[](2); path[0] = address(this); path[1] = uniV2Router.WETH(); try uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokensToDistribute, 0, path, address(this), block.timestamp ) {} catch {} // Send ETH to Marketing uint256 ethBalance = address(this).balance; if (ethBalance > 0) { (bool success,) = marketingWallet.call{value: ethBalance}(""); if (success) { emit FeesDistributed(tokensToDistribute); } } } /** * @notice Returns whether the specified account is excluded from fees. * @param account The address to check. * @return A boolean indicating whether the account is excluded from fees. */ function isExcludedFromFees(address account) public view returns (bool) { return _excludedFromFees[account]; } /** * @notice Returns whether the specified account is excluded from the maximum wallet balance limit. * @param account The address to check. * @return A boolean indicating whether the account is excluded from the maximum wallet balance limit. */ function isExcludedFromMaxWalletBalance(address account) public view returns (bool) { return _excludedFromMaxWalletBalance[account]; } /** * @notice Enables trading of the token. * @dev Can only be called by the contract owner. * @dev Emits a `TradingEnabled` event. */ function enableTrading() external onlyOwner { tradingEnabled = true; emit TradingEnabled(); } /** * @notice Updates the marketing wallet address. * @param newAddress The new address for the marketing wallet. * @dev Can only be called by the contract owner. * @dev `newAddress` cannot be the zero address. * @dev Emits a `MarketingWalletUpdated` event. */ function updateMarketingWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "ELONWIFTRUMP: address cannot be 0 address"); marketingWallet = newAddress; emit MarketingWalletUpdated(newAddress); } /** * @notice Removes the max transcation and max wallet balance limits on the token. * @dev Can only be called by the contract owner. * @dev Once turned off, the limits cannot be turned back on. * @dev Emits a `LimitsRemoved` event. */ function removeLimits() external onlyOwner { limitsInEffect = false; emit LimitsRemoved(); } /** * @notice Sets the amount of tokens required for a fee tokens swap. * @param newSwapTokensAtAmount The new amount of tokens required for a swap. * @dev Can only be called by the contract owner. * @dev The newSwapTokensAtAmount must be greater than or equal to 0.001% of the total supply, * and less than or equal to 0.5% of the total supply. * @dev Emits a `SwapTokensAtAmountSet` event. */ function setSwapTokensAtAmount(uint256 newSwapTokensAtAmount) external onlyOwner { require( newSwapTokensAtAmount >= totalSupply() / 100_000, "ELONWIFTRUMP: swap tokens at amount cannot be lower than 0.001% of total supply" ); require( newSwapTokensAtAmount <= (totalSupply() * 5) / 1_000, "ELONWIFTRUMP: swap tokens at amount cannot be higher than 0.5% of total supply" ); swapTokensAtAmount = newSwapTokensAtAmount; emit SwapTokensAtAmountSet(newSwapTokensAtAmount); } /** * @notice Sets the buy fee for ELONWIFTRUMP. * @param newBuyFee The new buy fee to be set. * @dev Can only be called by the contract owner. * @dev The new buy fee cannot be greater than 400 (40%). * @dev Emits a `BuyFeeSet` event. */ function setBuyFee(uint16 newBuyFee) external onlyOwner { require(newBuyFee <= 400, "ELONWIFTRUMP: fee cannot be greater than 40%"); buyFee = newBuyFee; emit BuyFeeSet(newBuyFee); } /** * @notice Sets the sell fee for ELONWIFTRUMP. * @param newSellFee The new sell fee to be set. * @dev Can only be called by the contract owner. * @dev The new sell fee cannot be greater than 400 (40%). * @dev Emits a `SellFeeSet` event. */ function setSellFee(uint16 newSellFee) external onlyOwner { require(newSellFee <= 400, "ELONWIFTRUMP: fee cannot be greater than 40%"); sellFee = newSellFee; emit SellFeeSet(newSellFee); } /** * @notice Sets the excluded status of an account from fees. * @param account The address of the account. * @param excluded The excluded status to be set. * @dev Only the contract owner can call this function. */ function setExcludedFromFees(address account, bool excluded) external onlyOwner { _excludedFromFees[account] = excluded; } /** * @notice Sets whether an account is excluded from the maximum wallet balance limit. * @param account The address of the account to be excluded or included. * @param excluded A boolean indicating whether the account should be excluded or included. * @dev Only the contract owner can call this function. */ function setExcludedFromMaxWalletBalance(address account, bool excluded) external onlyOwner { _excludedFromMaxWalletBalance[account] = excluded; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"uint16","name":"newBuyFee","type":"uint16"}],"name":"BuyFeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalTokensDistributed","type":"uint256"}],"name":"FeesDistributed","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellFee","type":"uint16"}],"name":"SellFeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountSet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":[{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"account","type":"address"}],"name":"isExcludedFromMaxWalletBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"newBuyFee","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxWalletBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newSellFee","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTokensAtAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":"value","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":"value","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":"uniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040525f600660146101000a81548161ffff021916908361ffff1602179055505f600660166101000a81548161ffff021916908361ffff16021790555069075b0ad658c8d0c000006007556001600a5f6101000a81548160ff0219169083151502179055506a012639b17ddf609e000000600b5534801562000081575f80fd5b50336040518060400160405280600c81526020017f454c4f4e5749465452554d5000000000000000000000000000000000000000008152506040518060400160405280600481526020017f2445575400000000000000000000000000000000000000000000000000000000815250816003908162000100919062000cc5565b50806004908162000112919062000cc5565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000188575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200017f919062000dec565b60405180910390fd5b6200019981620004d660201b60201c565b50737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021e919062000e3a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000298573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002be919062000e3a565b6040518363ffffffff1660e01b8152600401620002dd92919062000e6a565b6020604051808303815f875af1158015620002fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000320919062000e3a565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600c5f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f620003bf6200059960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200041e6200059960201b60201c565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000489620004716200059960201b60201c565b6a397745f7a6c1b68d600000620005c160201b60201c565b620004d030737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200064b60201b60201c565b62000f63565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000634575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200062b919062000dec565b60405180910390fd5b620006475f83836200066560201b60201c565b5050565b6200066083838360016200088960201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006b9578060025f828254620006ac919062000ec2565b925050819055506200078a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562000745578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200073c9392919062000f0d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d3578060025f82825403925050819055506200081d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200087c919062000f48565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620008fc575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401620008f3919062000dec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200096f575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000966919062000dec565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000a5b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000a52919062000f48565b60405180910390a35b50505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000add57607f821691505b60208210810362000af35762000af262000a98565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b1a565b62000b63868362000b1a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000bad62000ba762000ba18462000b7b565b62000b84565b62000b7b565b9050919050565b5f819050919050565b62000bc88362000b8d565b62000be062000bd78262000bb4565b84845462000b26565b825550505050565b5f90565b62000bf662000be8565b62000c0381848462000bbd565b505050565b5b8181101562000c2a5762000c1e5f8262000bec565b60018101905062000c09565b5050565b601f82111562000c795762000c438162000af9565b62000c4e8462000b0b565b8101602085101562000c5e578190505b62000c7662000c6d8562000b0b565b83018262000c08565b50505b505050565b5f82821c905092915050565b5f62000c9b5f198460080262000c7e565b1980831691505092915050565b5f62000cb5838362000c8a565b9150826002028217905092915050565b62000cd08262000a61565b67ffffffffffffffff81111562000cec5762000ceb62000a6b565b5b62000cf8825462000ac5565b62000d0582828562000c2e565b5f60209050601f83116001811462000d3b575f841562000d26578287015190505b62000d32858262000ca8565b86555062000da1565b601f19841662000d4b8662000af9565b5f5b8281101562000d745784890151825560018201915060208501945060208101905062000d4d565b8683101562000d94578489015162000d90601f89168262000c8a565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000dd48262000da9565b9050919050565b62000de68162000dc8565b82525050565b5f60208201905062000e015f83018462000ddb565b92915050565b5f80fd5b62000e168162000dc8565b811462000e21575f80fd5b50565b5f8151905062000e348162000e0b565b92915050565b5f6020828403121562000e525762000e5162000e07565b5b5f62000e618482850162000e24565b91505092915050565b5f60408201905062000e7f5f83018562000ddb565b62000e8e602083018462000ddb565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ece8262000b7b565b915062000edb8362000b7b565b925082820190508082111562000ef65762000ef562000e95565b5b92915050565b62000f078162000b7b565b82525050565b5f60608201905062000f225f83018662000ddb565b62000f31602083018562000efc565b62000f40604083018462000efc565b949350505050565b5f60208201905062000f5d5f83018462000efc565b92915050565b608051612e5662000f985f395f8181610b370152818161132701528181611506015281816116fc01526117a30152612e565ff3fe6080604052600436106101db575f3560e01c8063751039fc11610101578063a9059cbb11610094578063dd62ed3e11610063578063dd62ed3e1461067a578063e064648a146106b6578063e2f45605146106de578063f2fde38b14610708576101e2565b8063a9059cbb146105c4578063aacebbe314610600578063afa4f3b214610628578063bbde77c114610650576101e2565b80638da5cb5b116100d05780638da5cb5b1461051e57806394a9839014610548578063958c2e521461057057806395d89b411461059a576101e2565b8063751039fc1461049e57806375f0a874146104b45780638a8c523c146104de5780638bcea939146104f4576101e2565b80634a62bb6511610179578063686d83c311610148578063686d83c3146103e857806370a082311461042457806370c4767114610460578063715018a614610488576101e2565b80634a62bb65146103305780634ada218b1461035a5780634fbee19314610384578063590ffdce146103c0576101e2565b806323b872dd116101b557806323b872dd146102765780632b14ca56146102b2578063313ce567146102dc5780634706240214610306576101e2565b806306fdde03146101e6578063095ea7b31461021057806318160ddd1461024c576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b506101fa610730565b604051610207919061221d565b60405180910390f35b34801561021b575f80fd5b50610236600480360381019061023191906122ce565b6107c0565b6040516102439190612326565b60405180910390f35b348015610257575f80fd5b506102606107e2565b60405161026d919061234e565b60405180910390f35b348015610281575f80fd5b5061029c60048036038101906102979190612367565b6107eb565b6040516102a99190612326565b60405180910390f35b3480156102bd575f80fd5b506102c6610819565b6040516102d391906123d3565b60405180910390f35b3480156102e7575f80fd5b506102f061082d565b6040516102fd9190612407565b60405180910390f35b348015610311575f80fd5b5061031a610835565b60405161032791906123d3565b60405180910390f35b34801561033b575f80fd5b50610344610849565b6040516103519190612326565b60405180910390f35b348015610365575f80fd5b5061036e61085b565b60405161037b9190612326565b60405180910390f35b34801561038f575f80fd5b506103aa60048036038101906103a59190612420565b61086d565b6040516103b79190612326565b60405180910390f35b3480156103cb575f80fd5b506103e660048036038101906103e19190612475565b6108bf565b005b3480156103f3575f80fd5b5061040e60048036038101906104099190612420565b61091f565b60405161041b9190612326565b60405180910390f35b34801561042f575f80fd5b5061044a60048036038101906104459190612420565b610971565b604051610457919061234e565b60405180910390f35b34801561046b575f80fd5b50610486600480360381019061048191906124dd565b6109b6565b005b348015610493575f80fd5b5061049c610a5e565b005b3480156104a9575f80fd5b506104b2610a71565b005b3480156104bf575f80fd5b506104c8610ac0565b6040516104d59190612517565b60405180910390f35b3480156104e9575f80fd5b506104f2610ae5565b005b3480156104ff575f80fd5b50610508610b35565b6040516105159190612517565b60405180910390f35b348015610529575f80fd5b50610532610b59565b60405161053f9190612517565b60405180910390f35b348015610553575f80fd5b5061056e60048036038101906105699190612475565b610b81565b005b34801561057b575f80fd5b50610584610be1565b604051610591919061258b565b60405180910390f35b3480156105a5575f80fd5b506105ae610bf9565b6040516105bb919061221d565b60405180910390f35b3480156105cf575f80fd5b506105ea60048036038101906105e591906122ce565b610c89565b6040516105f79190612326565b60405180910390f35b34801561060b575f80fd5b5061062660048036038101906106219190612420565b610cab565b005b348015610633575f80fd5b5061064e600480360381019061064991906125a4565b610d9b565b005b34801561065b575f80fd5b50610664610e9f565b604051610671919061234e565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b91906125cf565b610ea5565b6040516106ad919061234e565b60405180910390f35b3480156106c1575f80fd5b506106dc60048036038101906106d791906124dd565b610f27565b005b3480156106e9575f80fd5b506106f2610fcf565b6040516106ff919061234e565b60405180910390f35b348015610713575f80fd5b5061072e60048036038101906107299190612420565b610fd5565b005b60606003805461073f9061263a565b80601f016020809104026020016040519081016040528092919081815260200182805461076b9061263a565b80156107b65780601f1061078d576101008083540402835291602001916107b6565b820191905f5260205f20905b81548152906001019060200180831161079957829003601f168201915b5050505050905090565b5f806107ca611059565b90506107d7818585611060565b600191505092915050565b5f600254905090565b5f806107f5611059565b9050610802858285611072565b61080d858585611104565b60019150509392505050565b600660169054906101000a900461ffff1681565b5f6012905090565b600660149054906101000a900461ffff1681565b600a5f9054906101000a900460ff1681565b600d5f9054906101000a900460ff1681565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6108c761187b565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109be61187b565b6101908161ffff161115610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906126da565b60405180910390fd5b80600660146101000a81548161ffff021916908361ffff1602179055507f36fa651f7bdbb8a6a7289ed4df5a6e3efb1fdcaef87c1f88dfd66b08d2007dc281604051610a5391906123d3565b60405180910390a150565b610a6661187b565b610a6f5f611902565b565b610a7961187b565b5f600a5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a1565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aed61187b565b6001600d5f6101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b8961187b565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b606060048054610c089061263a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c349061263a565b8015610c7f5780601f10610c5657610100808354040283529160200191610c7f565b820191905f5260205f20905b815481529060010190602001808311610c6257829003601f168201915b5050505050905090565b5f80610c93611059565b9050610ca0818585611104565b600191505092915050565b610cb361187b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612768565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fbf86feedee5b30c30a8243bd21deebb704d141478d39b1be04fe5ee739f214e781604051610d909190612517565b60405180910390a150565b610da361187b565b620186a0610daf6107e2565b610db991906127e0565b811015610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df2906128a6565b60405180910390fd5b6103e86005610e086107e2565b610e1291906128c4565b610e1c91906127e0565b811115610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e559061299b565b60405180910390fd5b806007819055507f9efd5e66ee602c629f311865749d9af922866664ad3ff96bbfaf8035f5d24b2681604051610e94919061234e565b60405180910390a150565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610f2f61187b565b6101908161ffff161115610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906126da565b60405180910390fd5b80600660166101000a81548161ffff021916908361ffff1602179055507f625428ca3cfddf32cf909a4d7ae5a8b942d838319ae2a8055f271ad78033c2f681604051610fc491906123d3565b60405180910390a150565b60075481565b610fdd61187b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361104d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110449190612517565b60405180910390fd5b61105681611902565b50565b5f33905090565b61106d83838360016119c5565b505050565b5f61107d8484610ea5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110fe57818110156110ef578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016110e6939291906129b9565b60405180910390fd5b6110fd84848484035f6119c5565b5b50505050565b5f8111611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d90612a5e565b60405180910390fd5b600d5f9054906101000a900460ff1661120c57611161610b59565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111cc575061119d610b59565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290612aec565b60405180910390fd5b5b600a5f9054906101000a900460ff16156114d357611228610b59565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112965750611266610b59565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112ce57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611308575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611320575060085f9054906101000a900460ff16155b156114d2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156113c75750600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561142957600b546113d883610971565b826113e39190612b0a565b1115611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90612bad565b60405180910390fd5b6114d1565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114d057600b5461148383610971565b8261148e9190612b0a565b11156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690612bad565b60405180910390fd5b5b5b5b5b5f6007546114e030610971565b101590508080156114fd575060085f9054906101000a900460ff16155b801561155557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156115a8575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156115fb575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561163c57600160085f6101000a81548160ff021916908315150217905550611622611b94565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806116ea575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156116f3575f90505b5f8115611868577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561176857505f600660149054906101000a900461ffff1661ffff16115b156117a1576103e8600660149054906101000a900461ffff1661ffff168561179091906128c4565b61179a91906127e0565b9050611845565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561180f57505f600660169054906101000a900461ffff1661ffff16115b15611844576103e8600660169054906101000a900461ffff1661ffff168561183791906128c4565b61184191906127e0565b90505b5b5f81111561186757611858863083611e8a565b80846118649190612bcb565b93505b5b611873868686611e8a565b505050505050565b611883611059565b73ffffffffffffffffffffffffffffffffffffffff166118a1610b59565b73ffffffffffffffffffffffffffffffffffffffff1614611900576118c4611059565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118f79190612517565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a35575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a2c9190612517565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa5575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a9c9190612517565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b8e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b85919061234e565b60405180910390a35b50505050565b5f611b9e30610971565b90506014600754611baf91906128c4565b811115611bc8576014600754611bc591906128c4565b90505b5f600267ffffffffffffffff811115611be457611be3612bfe565b5b604051908082528060200260200182016040528015611c125781602001602082028036833780820191505090505b50905030815f81518110611c2957611c28612c2b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce49190612c6c565b81600181518110611cf857611cf7612c2b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611d87959493929190612d87565b5f604051808303815f87803b158015611d9e575f80fd5b505af1925050508015611daf575060015b505f4790505f811115611e85575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611e0290612e0c565b5f6040518083038185875af1925050503d805f8114611e3c576040519150601f19603f3d011682016040523d82523d5f602084013e611e41565b606091505b505090508015611e83577f8959421a1320789a49eeec01a4750caf8a30733c3db14f000d84484df89300f984604051611e7a919061234e565b60405180910390a15b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efa575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ef19190612517565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f6a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611f619190612517565b60405180910390fd5b611f75838383611f7a565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fca578060025f828254611fbe9190612b0a565b92505081905550612098565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612053578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161204a939291906129b9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120df578060025f8282540392505081905550612129565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612186919061234e565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156121ca5780820151818401526020810190506121af565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121ef82612193565b6121f9818561219d565b93506122098185602086016121ad565b612212816121d5565b840191505092915050565b5f6020820190508181035f83015261223581846121e5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61226a82612241565b9050919050565b61227a81612260565b8114612284575f80fd5b50565b5f8135905061229581612271565b92915050565b5f819050919050565b6122ad8161229b565b81146122b7575f80fd5b50565b5f813590506122c8816122a4565b92915050565b5f80604083850312156122e4576122e361223d565b5b5f6122f185828601612287565b9250506020612302858286016122ba565b9150509250929050565b5f8115159050919050565b6123208161230c565b82525050565b5f6020820190506123395f830184612317565b92915050565b6123488161229b565b82525050565b5f6020820190506123615f83018461233f565b92915050565b5f805f6060848603121561237e5761237d61223d565b5b5f61238b86828701612287565b935050602061239c86828701612287565b92505060406123ad868287016122ba565b9150509250925092565b5f61ffff82169050919050565b6123cd816123b7565b82525050565b5f6020820190506123e65f8301846123c4565b92915050565b5f60ff82169050919050565b612401816123ec565b82525050565b5f60208201905061241a5f8301846123f8565b92915050565b5f602082840312156124355761243461223d565b5b5f61244284828501612287565b91505092915050565b6124548161230c565b811461245e575f80fd5b50565b5f8135905061246f8161244b565b92915050565b5f806040838503121561248b5761248a61223d565b5b5f61249885828601612287565b92505060206124a985828601612461565b9150509250929050565b6124bc816123b7565b81146124c6575f80fd5b50565b5f813590506124d7816124b3565b92915050565b5f602082840312156124f2576124f161223d565b5b5f6124ff848285016124c9565b91505092915050565b61251181612260565b82525050565b5f60208201905061252a5f830184612508565b92915050565b5f819050919050565b5f61255361254e61254984612241565b612530565b612241565b9050919050565b5f61256482612539565b9050919050565b5f6125758261255a565b9050919050565b6125858161256b565b82525050565b5f60208201905061259e5f83018461257c565b92915050565b5f602082840312156125b9576125b861223d565b5b5f6125c6848285016122ba565b91505092915050565b5f80604083850312156125e5576125e461223d565b5b5f6125f285828601612287565b925050602061260385828601612287565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061265157607f821691505b6020821081036126645761266361260d565b5b50919050565b7f454c4f4e5749465452554d503a206665652063616e6e6f7420626520677265615f8201527f746572207468616e203430250000000000000000000000000000000000000000602082015250565b5f6126c4602c8361219d565b91506126cf8261266a565b604082019050919050565b5f6020820190508181035f8301526126f1816126b8565b9050919050565b7f454c4f4e5749465452554d503a20616464726573732063616e6e6f74206265205f8201527f3020616464726573730000000000000000000000000000000000000000000000602082015250565b5f61275260298361219d565b915061275d826126f8565b604082019050919050565b5f6020820190508181035f83015261277f81612746565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127ea8261229b565b91506127f58361229b565b92508261280557612804612786565b5b828204905092915050565b7f454c4f4e5749465452554d503a207377617020746f6b656e7320617420616d6f5f8201527f756e742063616e6e6f74206265206c6f776572207468616e20302e303031252060208201527f6f6620746f74616c20737570706c790000000000000000000000000000000000604082015250565b5f612890604f8361219d565b915061289b82612810565b606082019050919050565b5f6020820190508181035f8301526128bd81612884565b9050919050565b5f6128ce8261229b565b91506128d98361229b565b92508282026128e78161229b565b915082820484148315176128fe576128fd6127b3565b5b5092915050565b7f454c4f4e5749465452554d503a207377617020746f6b656e7320617420616d6f5f8201527f756e742063616e6e6f7420626520686967686572207468616e20302e3525206f60208201527f6620746f74616c20737570706c79000000000000000000000000000000000000604082015250565b5f612985604e8361219d565b915061299082612905565b606082019050919050565b5f6020820190508181035f8301526129b281612979565b9050919050565b5f6060820190506129cc5f830186612508565b6129d9602083018561233f565b6129e6604083018461233f565b949350505050565b7f454c4f4e5749465452554d503a207472616e7366657220616d6f756e74206d755f8201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b5f612a4860348361219d565b9150612a53826129ee565b604082019050919050565b5f6020820190508181035f830152612a7581612a3c565b9050919050565b7f454c4f4e5749465452554d503a2074726164696e6720686173206e6f742062655f8201527f656e20656e61626c656420796574000000000000000000000000000000000000602082015250565b5f612ad6602e8361219d565b9150612ae182612a7c565b604082019050919050565b5f6020820190508181035f830152612b0381612aca565b9050919050565b5f612b148261229b565b9150612b1f8361229b565b9250828201905080821115612b3757612b366127b3565b5b92915050565b7f454c4f4e5749465452554d503a2062616c616e636520776f756c64204e4556455f8201527f5220657863656564206d61782077616c6c65742062616c616e63650000000000602082015250565b5f612b97603b8361219d565b9150612ba282612b3d565b604082019050919050565b5f6020820190508181035f830152612bc481612b8b565b9050919050565b5f612bd58261229b565b9150612be08361229b565b9250828203905081811115612bf857612bf76127b3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050612c6681612271565b92915050565b5f60208284031215612c8157612c8061223d565b5b5f612c8e84828501612c58565b91505092915050565b5f819050919050565b5f612cba612cb5612cb084612c97565b612530565b61229b565b9050919050565b612cca81612ca0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d0281612260565b82525050565b5f612d138383612cf9565b60208301905092915050565b5f602082019050919050565b5f612d3582612cd0565b612d3f8185612cda565b9350612d4a83612cea565b805f5b83811015612d7a578151612d618882612d08565b9750612d6c83612d1f565b925050600181019050612d4d565b5085935050505092915050565b5f60a082019050612d9a5f83018861233f565b612da76020830187612cc1565b8181036040830152612db98186612d2b565b9050612dc86060830185612508565b612dd5608083018461233f565b9695505050505050565b5f81905092915050565b50565b5f612df75f83612ddf565b9150612e0282612de9565b5f82019050919050565b5f612e1682612dec565b915081905091905056fea2646970667358221220376de9dde7b9b2a41cf73a8fc24560989582ffb0b6b3ae268eafd77422718fc564736f6c63430008170033
Deployed Bytecode
0x6080604052600436106101db575f3560e01c8063751039fc11610101578063a9059cbb11610094578063dd62ed3e11610063578063dd62ed3e1461067a578063e064648a146106b6578063e2f45605146106de578063f2fde38b14610708576101e2565b8063a9059cbb146105c4578063aacebbe314610600578063afa4f3b214610628578063bbde77c114610650576101e2565b80638da5cb5b116100d05780638da5cb5b1461051e57806394a9839014610548578063958c2e521461057057806395d89b411461059a576101e2565b8063751039fc1461049e57806375f0a874146104b45780638a8c523c146104de5780638bcea939146104f4576101e2565b80634a62bb6511610179578063686d83c311610148578063686d83c3146103e857806370a082311461042457806370c4767114610460578063715018a614610488576101e2565b80634a62bb65146103305780634ada218b1461035a5780634fbee19314610384578063590ffdce146103c0576101e2565b806323b872dd116101b557806323b872dd146102765780632b14ca56146102b2578063313ce567146102dc5780634706240214610306576101e2565b806306fdde03146101e6578063095ea7b31461021057806318160ddd1461024c576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b506101fa610730565b604051610207919061221d565b60405180910390f35b34801561021b575f80fd5b50610236600480360381019061023191906122ce565b6107c0565b6040516102439190612326565b60405180910390f35b348015610257575f80fd5b506102606107e2565b60405161026d919061234e565b60405180910390f35b348015610281575f80fd5b5061029c60048036038101906102979190612367565b6107eb565b6040516102a99190612326565b60405180910390f35b3480156102bd575f80fd5b506102c6610819565b6040516102d391906123d3565b60405180910390f35b3480156102e7575f80fd5b506102f061082d565b6040516102fd9190612407565b60405180910390f35b348015610311575f80fd5b5061031a610835565b60405161032791906123d3565b60405180910390f35b34801561033b575f80fd5b50610344610849565b6040516103519190612326565b60405180910390f35b348015610365575f80fd5b5061036e61085b565b60405161037b9190612326565b60405180910390f35b34801561038f575f80fd5b506103aa60048036038101906103a59190612420565b61086d565b6040516103b79190612326565b60405180910390f35b3480156103cb575f80fd5b506103e660048036038101906103e19190612475565b6108bf565b005b3480156103f3575f80fd5b5061040e60048036038101906104099190612420565b61091f565b60405161041b9190612326565b60405180910390f35b34801561042f575f80fd5b5061044a60048036038101906104459190612420565b610971565b604051610457919061234e565b60405180910390f35b34801561046b575f80fd5b50610486600480360381019061048191906124dd565b6109b6565b005b348015610493575f80fd5b5061049c610a5e565b005b3480156104a9575f80fd5b506104b2610a71565b005b3480156104bf575f80fd5b506104c8610ac0565b6040516104d59190612517565b60405180910390f35b3480156104e9575f80fd5b506104f2610ae5565b005b3480156104ff575f80fd5b50610508610b35565b6040516105159190612517565b60405180910390f35b348015610529575f80fd5b50610532610b59565b60405161053f9190612517565b60405180910390f35b348015610553575f80fd5b5061056e60048036038101906105699190612475565b610b81565b005b34801561057b575f80fd5b50610584610be1565b604051610591919061258b565b60405180910390f35b3480156105a5575f80fd5b506105ae610bf9565b6040516105bb919061221d565b60405180910390f35b3480156105cf575f80fd5b506105ea60048036038101906105e591906122ce565b610c89565b6040516105f79190612326565b60405180910390f35b34801561060b575f80fd5b5061062660048036038101906106219190612420565b610cab565b005b348015610633575f80fd5b5061064e600480360381019061064991906125a4565b610d9b565b005b34801561065b575f80fd5b50610664610e9f565b604051610671919061234e565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b91906125cf565b610ea5565b6040516106ad919061234e565b60405180910390f35b3480156106c1575f80fd5b506106dc60048036038101906106d791906124dd565b610f27565b005b3480156106e9575f80fd5b506106f2610fcf565b6040516106ff919061234e565b60405180910390f35b348015610713575f80fd5b5061072e60048036038101906107299190612420565b610fd5565b005b60606003805461073f9061263a565b80601f016020809104026020016040519081016040528092919081815260200182805461076b9061263a565b80156107b65780601f1061078d576101008083540402835291602001916107b6565b820191905f5260205f20905b81548152906001019060200180831161079957829003601f168201915b5050505050905090565b5f806107ca611059565b90506107d7818585611060565b600191505092915050565b5f600254905090565b5f806107f5611059565b9050610802858285611072565b61080d858585611104565b60019150509392505050565b600660169054906101000a900461ffff1681565b5f6012905090565b600660149054906101000a900461ffff1681565b600a5f9054906101000a900460ff1681565b600d5f9054906101000a900460ff1681565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6108c761187b565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109be61187b565b6101908161ffff161115610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906126da565b60405180910390fd5b80600660146101000a81548161ffff021916908361ffff1602179055507f36fa651f7bdbb8a6a7289ed4df5a6e3efb1fdcaef87c1f88dfd66b08d2007dc281604051610a5391906123d3565b60405180910390a150565b610a6661187b565b610a6f5f611902565b565b610a7961187b565b5f600a5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a1565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aed61187b565b6001600d5f6101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b7f000000000000000000000000ad7f7c34895c74d80917443ecf0139e6f2de44ff81565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b8961187b565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b606060048054610c089061263a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c349061263a565b8015610c7f5780601f10610c5657610100808354040283529160200191610c7f565b820191905f5260205f20905b815481529060010190602001808311610c6257829003601f168201915b5050505050905090565b5f80610c93611059565b9050610ca0818585611104565b600191505092915050565b610cb361187b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612768565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fbf86feedee5b30c30a8243bd21deebb704d141478d39b1be04fe5ee739f214e781604051610d909190612517565b60405180910390a150565b610da361187b565b620186a0610daf6107e2565b610db991906127e0565b811015610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df2906128a6565b60405180910390fd5b6103e86005610e086107e2565b610e1291906128c4565b610e1c91906127e0565b811115610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e559061299b565b60405180910390fd5b806007819055507f9efd5e66ee602c629f311865749d9af922866664ad3ff96bbfaf8035f5d24b2681604051610e94919061234e565b60405180910390a150565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610f2f61187b565b6101908161ffff161115610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906126da565b60405180910390fd5b80600660166101000a81548161ffff021916908361ffff1602179055507f625428ca3cfddf32cf909a4d7ae5a8b942d838319ae2a8055f271ad78033c2f681604051610fc491906123d3565b60405180910390a150565b60075481565b610fdd61187b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361104d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110449190612517565b60405180910390fd5b61105681611902565b50565b5f33905090565b61106d83838360016119c5565b505050565b5f61107d8484610ea5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110fe57818110156110ef578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016110e6939291906129b9565b60405180910390fd5b6110fd84848484035f6119c5565b5b50505050565b5f8111611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d90612a5e565b60405180910390fd5b600d5f9054906101000a900460ff1661120c57611161610b59565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111cc575061119d610b59565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290612aec565b60405180910390fd5b5b600a5f9054906101000a900460ff16156114d357611228610b59565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112965750611266610b59565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112ce57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611308575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611320575060085f9054906101000a900460ff16155b156114d2577f000000000000000000000000ad7f7c34895c74d80917443ecf0139e6f2de44ff73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156113c75750600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561142957600b546113d883610971565b826113e39190612b0a565b1115611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90612bad565b60405180910390fd5b6114d1565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114d057600b5461148383610971565b8261148e9190612b0a565b11156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690612bad565b60405180910390fd5b5b5b5b5b5f6007546114e030610971565b101590508080156114fd575060085f9054906101000a900460ff16155b801561155557507f000000000000000000000000ad7f7c34895c74d80917443ecf0139e6f2de44ff73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156115a8575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156115fb575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561163c57600160085f6101000a81548160ff021916908315150217905550611622611b94565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806116ea575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156116f3575f90505b5f8115611868577f000000000000000000000000ad7f7c34895c74d80917443ecf0139e6f2de44ff73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561176857505f600660149054906101000a900461ffff1661ffff16115b156117a1576103e8600660149054906101000a900461ffff1661ffff168561179091906128c4565b61179a91906127e0565b9050611845565b7f000000000000000000000000ad7f7c34895c74d80917443ecf0139e6f2de44ff73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561180f57505f600660169054906101000a900461ffff1661ffff16115b15611844576103e8600660169054906101000a900461ffff1661ffff168561183791906128c4565b61184191906127e0565b90505b5b5f81111561186757611858863083611e8a565b80846118649190612bcb565b93505b5b611873868686611e8a565b505050505050565b611883611059565b73ffffffffffffffffffffffffffffffffffffffff166118a1610b59565b73ffffffffffffffffffffffffffffffffffffffff1614611900576118c4611059565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118f79190612517565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a35575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a2c9190612517565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa5575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a9c9190612517565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b8e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b85919061234e565b60405180910390a35b50505050565b5f611b9e30610971565b90506014600754611baf91906128c4565b811115611bc8576014600754611bc591906128c4565b90505b5f600267ffffffffffffffff811115611be457611be3612bfe565b5b604051908082528060200260200182016040528015611c125781602001602082028036833780820191505090505b50905030815f81518110611c2957611c28612c2b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce49190612c6c565b81600181518110611cf857611cf7612c2b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611d87959493929190612d87565b5f604051808303815f87803b158015611d9e575f80fd5b505af1925050508015611daf575060015b505f4790505f811115611e85575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611e0290612e0c565b5f6040518083038185875af1925050503d805f8114611e3c576040519150601f19603f3d011682016040523d82523d5f602084013e611e41565b606091505b505090508015611e83577f8959421a1320789a49eeec01a4750caf8a30733c3db14f000d84484df89300f984604051611e7a919061234e565b60405180910390a15b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efa575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ef19190612517565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f6a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611f619190612517565b60405180910390fd5b611f75838383611f7a565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fca578060025f828254611fbe9190612b0a565b92505081905550612098565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612053578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161204a939291906129b9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120df578060025f8282540392505081905550612129565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612186919061234e565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156121ca5780820151818401526020810190506121af565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121ef82612193565b6121f9818561219d565b93506122098185602086016121ad565b612212816121d5565b840191505092915050565b5f6020820190508181035f83015261223581846121e5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61226a82612241565b9050919050565b61227a81612260565b8114612284575f80fd5b50565b5f8135905061229581612271565b92915050565b5f819050919050565b6122ad8161229b565b81146122b7575f80fd5b50565b5f813590506122c8816122a4565b92915050565b5f80604083850312156122e4576122e361223d565b5b5f6122f185828601612287565b9250506020612302858286016122ba565b9150509250929050565b5f8115159050919050565b6123208161230c565b82525050565b5f6020820190506123395f830184612317565b92915050565b6123488161229b565b82525050565b5f6020820190506123615f83018461233f565b92915050565b5f805f6060848603121561237e5761237d61223d565b5b5f61238b86828701612287565b935050602061239c86828701612287565b92505060406123ad868287016122ba565b9150509250925092565b5f61ffff82169050919050565b6123cd816123b7565b82525050565b5f6020820190506123e65f8301846123c4565b92915050565b5f60ff82169050919050565b612401816123ec565b82525050565b5f60208201905061241a5f8301846123f8565b92915050565b5f602082840312156124355761243461223d565b5b5f61244284828501612287565b91505092915050565b6124548161230c565b811461245e575f80fd5b50565b5f8135905061246f8161244b565b92915050565b5f806040838503121561248b5761248a61223d565b5b5f61249885828601612287565b92505060206124a985828601612461565b9150509250929050565b6124bc816123b7565b81146124c6575f80fd5b50565b5f813590506124d7816124b3565b92915050565b5f602082840312156124f2576124f161223d565b5b5f6124ff848285016124c9565b91505092915050565b61251181612260565b82525050565b5f60208201905061252a5f830184612508565b92915050565b5f819050919050565b5f61255361254e61254984612241565b612530565b612241565b9050919050565b5f61256482612539565b9050919050565b5f6125758261255a565b9050919050565b6125858161256b565b82525050565b5f60208201905061259e5f83018461257c565b92915050565b5f602082840312156125b9576125b861223d565b5b5f6125c6848285016122ba565b91505092915050565b5f80604083850312156125e5576125e461223d565b5b5f6125f285828601612287565b925050602061260385828601612287565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061265157607f821691505b6020821081036126645761266361260d565b5b50919050565b7f454c4f4e5749465452554d503a206665652063616e6e6f7420626520677265615f8201527f746572207468616e203430250000000000000000000000000000000000000000602082015250565b5f6126c4602c8361219d565b91506126cf8261266a565b604082019050919050565b5f6020820190508181035f8301526126f1816126b8565b9050919050565b7f454c4f4e5749465452554d503a20616464726573732063616e6e6f74206265205f8201527f3020616464726573730000000000000000000000000000000000000000000000602082015250565b5f61275260298361219d565b915061275d826126f8565b604082019050919050565b5f6020820190508181035f83015261277f81612746565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127ea8261229b565b91506127f58361229b565b92508261280557612804612786565b5b828204905092915050565b7f454c4f4e5749465452554d503a207377617020746f6b656e7320617420616d6f5f8201527f756e742063616e6e6f74206265206c6f776572207468616e20302e303031252060208201527f6f6620746f74616c20737570706c790000000000000000000000000000000000604082015250565b5f612890604f8361219d565b915061289b82612810565b606082019050919050565b5f6020820190508181035f8301526128bd81612884565b9050919050565b5f6128ce8261229b565b91506128d98361229b565b92508282026128e78161229b565b915082820484148315176128fe576128fd6127b3565b5b5092915050565b7f454c4f4e5749465452554d503a207377617020746f6b656e7320617420616d6f5f8201527f756e742063616e6e6f7420626520686967686572207468616e20302e3525206f60208201527f6620746f74616c20737570706c79000000000000000000000000000000000000604082015250565b5f612985604e8361219d565b915061299082612905565b606082019050919050565b5f6020820190508181035f8301526129b281612979565b9050919050565b5f6060820190506129cc5f830186612508565b6129d9602083018561233f565b6129e6604083018461233f565b949350505050565b7f454c4f4e5749465452554d503a207472616e7366657220616d6f756e74206d755f8201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b5f612a4860348361219d565b9150612a53826129ee565b604082019050919050565b5f6020820190508181035f830152612a7581612a3c565b9050919050565b7f454c4f4e5749465452554d503a2074726164696e6720686173206e6f742062655f8201527f656e20656e61626c656420796574000000000000000000000000000000000000602082015250565b5f612ad6602e8361219d565b9150612ae182612a7c565b604082019050919050565b5f6020820190508181035f830152612b0381612aca565b9050919050565b5f612b148261229b565b9150612b1f8361229b565b9250828201905080821115612b3757612b366127b3565b5b92915050565b7f454c4f4e5749465452554d503a2062616c616e636520776f756c64204e4556455f8201527f5220657863656564206d61782077616c6c65742062616c616e63650000000000602082015250565b5f612b97603b8361219d565b9150612ba282612b3d565b604082019050919050565b5f6020820190508181035f830152612bc481612b8b565b9050919050565b5f612bd58261229b565b9150612be08361229b565b9250828203905081811115612bf857612bf76127b3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050612c6681612271565b92915050565b5f60208284031215612c8157612c8061223d565b5b5f612c8e84828501612c58565b91505092915050565b5f819050919050565b5f612cba612cb5612cb084612c97565b612530565b61229b565b9050919050565b612cca81612ca0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d0281612260565b82525050565b5f612d138383612cf9565b60208301905092915050565b5f602082019050919050565b5f612d3582612cd0565b612d3f8185612cda565b9350612d4a83612cea565b805f5b83811015612d7a578151612d618882612d08565b9750612d6c83612d1f565b925050600181019050612d4d565b5085935050505092915050565b5f60a082019050612d9a5f83018861233f565b612da76020830187612cc1565b8181036040830152612db98186612d2b565b9050612dc86060830185612508565b612dd5608083018461233f565b9695505050505050565b5f81905092915050565b50565b5f612df75f83612ddf565b9150612e0282612de9565b5f82019050919050565b5f612e1682612dec565b915081905091905056fea2646970667358221220376de9dde7b9b2a41cf73a8fc24560989582ffb0b6b3ae268eafd77422718fc564736f6c63430008170033
Deployed Bytecode Sourcemap
29647:11209:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19196:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21489:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20298:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22257:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29762:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20149:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29731:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29958:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30290:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36097:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40204:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36505:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20460:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39220:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12809:103;;;;;;;;;;;;;:::i;:::-;;37787:115;;;;;;;;;;;;;:::i;:::-;;29694:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36825:116;;;;;;;;;;;;;:::i;:::-;;30133:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12134:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40693:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30174:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19406:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20783:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37251:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38352:581;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29998:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21028:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39725:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29794:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13067:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19196:91;19241:13;19274:5;19267:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19196:91;:::o;21489:190::-;21562:4;21579:13;21595:12;:10;:12::i;:::-;21579:28;;21618:31;21627:5;21634:7;21643:5;21618:8;:31::i;:::-;21667:4;21660:11;;;21489:190;;;;:::o;20298:99::-;20350:7;20377:12;;20370:19;;20298:99;:::o;22257:249::-;22344:4;22361:15;22379:12;:10;:12::i;:::-;22361:30;;22402:37;22418:4;22424:7;22433:5;22402:15;:37::i;:::-;22450:26;22460:4;22466:2;22470:5;22450:9;:26::i;:::-;22494:4;22487:11;;;22257:249;;;;;:::o;29762:25::-;;;;;;;;;;;;;:::o;20149:84::-;20198:5;20223:2;20216:9;;20149:84;:::o;29731:24::-;;;;;;;;;;;;;:::o;29958:33::-;;;;;;;;;;;;;:::o;30290:26::-;;;;;;;;;;;;;:::o;36097:124::-;36163:4;36187:17;:26;36205:7;36187:26;;;;;;;;;;;;;;;;;;;;;;;;;36180:33;;36097:124;;;:::o;40204:136::-;12020:13;:11;:13::i;:::-;40324:8:::1;40295:17;:26;40313:7;40295:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;40204:136:::0;;:::o;36505:148::-;36583:4;36607:29;:38;36637:7;36607:38;;;;;;;;;;;;;;;;;;;;;;;;;36600:45;;36505:148;;;:::o;20460:118::-;20525:7;20552:9;:18;20562:7;20552:18;;;;;;;;;;;;;;;;20545:25;;20460:118;;;:::o;39220:213::-;12020:13;:11;:13::i;:::-;39308:3:::1;39295:9;:16;;;;39287:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39380:9;39371:6;;:18;;;;;;;;;;;;;;;;;;39405:20;39415:9;39405:20;;;;;;:::i;:::-;;;;;;;;39220:213:::0;:::o;12809:103::-;12020:13;:11;:13::i;:::-;12874:30:::1;12901:1;12874:18;:30::i;:::-;12809:103::o:0;37787:115::-;12020:13;:11;:13::i;:::-;37858:5:::1;37841:14;;:22;;;;;;;;;;;;;;;;;;37879:15;;;;;;;;;;37787:115::o:0;29694:30::-;;;;;;;;;;;;;:::o;36825:116::-;12020:13;:11;:13::i;:::-;36897:4:::1;36880:14;;:21;;;;;;;;;;;;;;;;;;36917:16;;;;;;;;;;36825:116::o:0;30133:34::-;;;:::o;12134:87::-;12180:7;12207:6;;;;;;;;;;;12200:13;;12134:87;:::o;40693:160::-;12020:13;:11;:13::i;:::-;40837:8:::1;40796:29;:38;40826:7;40796:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;40693:160:::0;;:::o;30174:107::-;30238:42;30174:107;:::o;19406:95::-;19453:13;19486:7;19479:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19406:95;:::o;20783:182::-;20852:4;20869:13;20885:12;:10;:12::i;:::-;20869:28;;20908:27;20918:5;20925:2;20929:5;20908:9;:27::i;:::-;20953:4;20946:11;;;20783:182;;;;:::o;37251:256::-;12020:13;:11;:13::i;:::-;37362:1:::1;37340:24;;:10;:24;;::::0;37332:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37439:10;37421:15;;:28;;;;;;;;;;;;;;;;;;37465:34;37488:10;37465:34;;;;;;:::i;:::-;;;;;;;;37251:256:::0;:::o;38352:581::-;12020:13;:11;:13::i;:::-;38507:7:::1;38491:13;:11;:13::i;:::-;:23;;;;:::i;:::-;38466:21;:48;;38444:177;;;;;;;;;;;;:::i;:::-;;;;;;;;;38701:5;38696:1;38680:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38679:27;;;;:::i;:::-;38654:21;:52;;38632:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;38844:21;38823:18;:42;;;;38881:44;38903:21;38881:44;;;;;;:::i;:::-;;;;;;;;38352:581:::0;:::o;29998:50::-;;;;:::o;21028:142::-;21108:7;21135:11;:18;21147:5;21135:18;;;;;;;;;;;;;;;:27;21154:7;21135:27;;;;;;;;;;;;;;;;21128:34;;21028:142;;;;:::o;39725:220::-;12020:13;:11;:13::i;:::-;39816:3:::1;39802:10;:17;;;;39794:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;39889:10;39879:7;;:20;;;;;;;;;;;;;;;;;;39915:22;39926:10;39915:22;;;;;;:::i;:::-;;;;;;;;39725:220:::0;:::o;29794:49::-;;;;:::o;13067:220::-;12020:13;:11;:13::i;:::-;13172:1:::1;13152:22;;:8;:22;;::::0;13148:93:::1;;13226:1;13198:31;;;;;;;;;;;:::i;:::-;;;;;;;;13148:93;13251:28;13270:8;13251:18;:28::i;:::-;13067:220:::0;:::o;10143:98::-;10196:7;10223:10;10216:17;;10143:98;:::o;26324:130::-;26409:37;26418:5;26425:7;26434:5;26441:4;26409:8;:37::i;:::-;26324:130;;;:::o;28040:487::-;28140:24;28167:25;28177:5;28184:7;28167:9;:25::i;:::-;28140:52;;28227:17;28207:16;:37;28203:317;;28284:5;28265:16;:24;28261:132;;;28344:7;28353:16;28371:5;28317:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;28261:132;28436:57;28445:5;28452:7;28480:5;28461:16;:24;28487:5;28436:8;:57::i;:::-;28203:317;28129:398;28040:487;;;:::o;32081:2528::-;32188:1;32179:6;:10;32171:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;32310:14;;;;;;;;;;;32305:139;;32357:7;:5;:7::i;:::-;32349:15;;:4;:15;;;:32;;;;32374:7;:5;:7::i;:::-;32368:13;;:2;:13;;;32349:32;32341:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;32305:139;32502:14;;;;;;;;;;;32498:809;;;32545:7;:5;:7::i;:::-;32537:15;;:4;:15;;;;:32;;;;;32562:7;:5;:7::i;:::-;32556:13;;:2;:13;;;;32537:32;:52;;;;;32587:1;32573:16;;:2;:16;;;;32537:52;:77;;;;;32607:6;32593:21;;:2;:21;;;;32537:77;:99;;;;;32619:17;;;;;;;;;;;32618:18;32537:99;32533:763;;;32697:9;32689:17;;:4;:17;;;:55;;;;;32711:29;:33;32741:2;32711:33;;;;;;;;;;;;;;;;;;;;;;;;;32710:34;32689:55;32685:596;;;32829:16;;32812:13;32822:2;32812:9;:13::i;:::-;32803:6;:22;;;;:::i;:::-;:42;;32769:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;32685:596;;;33041:29;:33;33071:2;33041:33;;;;;;;;;;;;;;;;;;;;;;;;;33036:245;;33159:16;;33142:13;33152:2;33142:9;:13::i;:::-;33133:6;:22;;;;:::i;:::-;:42;;33099:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;33036:245;32685:596;32533:763;32498:809;33383:15;33429:18;;33401:24;33419:4;33401:9;:24::i;:::-;:46;;33383:64;;33462:10;:32;;;;;33477:17;;;;;;;;;;;33476:18;33462:32;:53;;;;;33506:9;33498:17;;:4;:17;;;;33462:53;:81;;;;;33520:17;:23;33538:4;33520:23;;;;;;;;;;;;;;;;;;;;;;;;;33519:24;33462:81;:107;;;;;33548:17;:21;33566:2;33548:21;;;;;;;;;;;;;;;;;;;;;;;;;33547:22;33462:107;33458:245;;;33615:4;33595:17;;:24;;;;;;;;;;;;;;;;;;33634:17;:15;:17::i;:::-;33686:5;33666:17;;:25;;;;;;;;;;;;;;;;;;33458:245;33760:13;33777:17;;;;;;;;;;;33776:18;33760:34;;33809:17;:23;33827:4;33809:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;33836:17;:21;33854:2;33836:21;;;;;;;;;;;;;;;;;;;;;;;;;33809:48;33805:97;;;33885:5;33874:16;;33805:97;33914:12;33980:8;33976:548;;;34046:9;34038:17;;:4;:17;;;:31;;;;;34068:1;34059:6;;;;;;;;;;;:10;;;34038:31;34034:257;;;34117:5;34107:6;;;;;;;;;;;34098:15;;:6;:15;;;;:::i;:::-;34097:25;;;;:::i;:::-;34090:32;;34034:257;;;34197:9;34191:15;;:2;:15;;;:30;;;;;34220:1;34210:7;;;;;;;;;;;:11;;;34191:30;34187:104;;;34270:5;34259:7;;;;;;;;;;;34250:16;;:6;:16;;;;:::i;:::-;34249:26;;;;:::i;:::-;34242:33;;34187:104;34034:257;34400:1;34393:4;:8;34389:124;;;34422:42;34438:4;34452;34459;34422:15;:42::i;:::-;34493:4;34483:14;;;;;:::i;:::-;;;34389:124;33976:548;34568:33;34584:4;34590:2;34594:6;34568:15;:33::i;:::-;32160:2449;;;32081:2528;;;:::o;12299:166::-;12370:12;:10;:12::i;:::-;12359:23;;:7;:5;:7::i;:::-;:23;;;12355:103;;12433:12;:10;:12::i;:::-;12406:40;;;;;;;;;;;:::i;:::-;;;;;;;;12355:103;12299:166::o;13447:191::-;13521:16;13540:6;;;;;;;;;;;13521:25;;13566:8;13557:6;;:17;;;;;;;;;;;;;;;;;;13621:8;13590:40;;13611:8;13590:40;;;;;;;;;;;;13510:128;13447:191;:::o;27305:443::-;27435:1;27418:19;;:5;:19;;;27414:91;;27490:1;27461:32;;;;;;;;;;;:::i;:::-;;;;;;;;27414:91;27538:1;27519:21;;:7;:21;;;27515:92;;27592:1;27564:31;;;;;;;;;;;:::i;:::-;;;;;;;;27515:92;27647:5;27617:11;:18;27629:5;27617:18;;;;;;;;;;;;;;;:27;27636:7;27617:27;;;;;;;;;;;;;;;:35;;;;27667:9;27663:78;;;27714:7;27698:31;;27707:5;27698:31;;;27723:5;27698:31;;;;;;:::i;:::-;;;;;;;;27663:78;27305:443;;;;:::o;34935:934::-;35037:26;35066:24;35084:4;35066:9;:24::i;:::-;35037:53;;35147:2;35126:18;;:23;;;;:::i;:::-;35105:18;:44;35101:121;;;35208:2;35187:18;;:23;;;;:::i;:::-;35166:44;;35101:121;35266:21;35304:1;35290:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35266:40;;35335:4;35317;35322:1;35317:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30238:42;35361:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35351:4;35356:1;35351:7;;;;;;;;:::i;:::-;;;;;;;:28;;;;;;;;;;;30238:42;35394:62;;;35471:18;35491:1;35494:4;35508;35515:15;35394:147;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35390:163;35599:18;35620:21;35599:42;;35669:1;35656:10;:14;35652:210;;;35688:12;35705:15;;;;;;;;;;;:20;;35733:10;35705:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35687:61;;;35767:7;35763:88;;;35800:35;35816:18;35800:35;;;;;;:::i;:::-;;;;;;;;35763:88;35672:190;35652:210;34970:899;;;34935:934::o;22891:316::-;22999:1;22983:18;;:4;:18;;;22979:88;;23052:1;23025:30;;;;;;;;;;;:::i;:::-;;;;;;;;22979:88;23095:1;23081:16;;:2;:16;;;23077:88;;23150:1;23121:32;;;;;;;;;;;:::i;:::-;;;;;;;;23077:88;23175:24;23183:4;23189:2;23193:5;23175:7;:24::i;:::-;22891:316;;;:::o;23531:1135::-;23637:1;23621:18;;:4;:18;;;23617:552;;23775:5;23759:12;;:21;;;;;;;:::i;:::-;;;;;;;;23617:552;;;23813:19;23835:9;:15;23845:4;23835:15;;;;;;;;;;;;;;;;23813:37;;23883:5;23869:11;:19;23865:117;;;23941:4;23947:11;23960:5;23916:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;23865:117;24137:5;24123:11;:19;24105:9;:15;24115:4;24105:15;;;;;;;;;;;;;;;:37;;;;23798:371;23617:552;24199:1;24185:16;;:2;:16;;;24181:435;;24367:5;24351:12;;:21;;;;;;;;;;;24181:435;;;24584:5;24567:9;:13;24577:2;24567:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;24181:435;24648:2;24633:25;;24642:4;24633:25;;;24652:5;24633:25;;;;;;:::i;:::-;;;;;;;;23531:1135;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:89::-;4459:7;4499:6;4492:5;4488:18;4477:29;;4423:89;;;:::o;4518:115::-;4603:23;4620:5;4603:23;:::i;:::-;4598:3;4591:36;4518:115;;:::o;4639:218::-;4730:4;4768:2;4757:9;4753:18;4745:26;;4781:69;4847:1;4836:9;4832:17;4823:6;4781:69;:::i;:::-;4639:218;;;;:::o;4863:86::-;4898:7;4938:4;4931:5;4927:16;4916:27;;4863:86;;;:::o;4955:112::-;5038:22;5054:5;5038:22;:::i;:::-;5033:3;5026:35;4955:112;;:::o;5073:214::-;5162:4;5200:2;5189:9;5185:18;5177:26;;5213:67;5277:1;5266:9;5262:17;5253:6;5213:67;:::i;:::-;5073:214;;;;:::o;5293:329::-;5352:6;5401:2;5389:9;5380:7;5376:23;5372:32;5369:119;;;5407:79;;:::i;:::-;5369:119;5527:1;5552:53;5597:7;5588:6;5577:9;5573:22;5552:53;:::i;:::-;5542:63;;5498:117;5293:329;;;;:::o;5628:116::-;5698:21;5713:5;5698:21;:::i;:::-;5691:5;5688:32;5678:60;;5734:1;5731;5724:12;5678:60;5628:116;:::o;5750:133::-;5793:5;5831:6;5818:20;5809:29;;5847:30;5871:5;5847:30;:::i;:::-;5750:133;;;;:::o;5889:468::-;5954:6;5962;6011:2;5999:9;5990:7;5986:23;5982:32;5979:119;;;6017:79;;:::i;:::-;5979:119;6137:1;6162:53;6207:7;6198:6;6187:9;6183:22;6162:53;:::i;:::-;6152:63;;6108:117;6264:2;6290:50;6332:7;6323:6;6312:9;6308:22;6290:50;:::i;:::-;6280:60;;6235:115;5889:468;;;;;:::o;6363:120::-;6435:23;6452:5;6435:23;:::i;:::-;6428:5;6425:34;6415:62;;6473:1;6470;6463:12;6415:62;6363:120;:::o;6489:137::-;6534:5;6572:6;6559:20;6550:29;;6588:32;6614:5;6588:32;:::i;:::-;6489:137;;;;:::o;6632:327::-;6690:6;6739:2;6727:9;6718:7;6714:23;6710:32;6707:119;;;6745:79;;:::i;:::-;6707:119;6865:1;6890:52;6934:7;6925:6;6914:9;6910:22;6890:52;:::i;:::-;6880:62;;6836:116;6632:327;;;;:::o;6965:118::-;7052:24;7070:5;7052:24;:::i;:::-;7047:3;7040:37;6965:118;;:::o;7089:222::-;7182:4;7220:2;7209:9;7205:18;7197:26;;7233:71;7301:1;7290:9;7286:17;7277:6;7233:71;:::i;:::-;7089:222;;;;:::o;7317:60::-;7345:3;7366:5;7359:12;;7317:60;;;:::o;7383:142::-;7433:9;7466:53;7484:34;7493:24;7511:5;7493:24;:::i;:::-;7484:34;:::i;:::-;7466:53;:::i;:::-;7453:66;;7383:142;;;:::o;7531:126::-;7581:9;7614:37;7645:5;7614:37;:::i;:::-;7601:50;;7531:126;;;:::o;7663:150::-;7737:9;7770:37;7801:5;7770:37;:::i;:::-;7757:50;;7663:150;;;:::o;7819:179::-;7930:61;7985:5;7930:61;:::i;:::-;7925:3;7918:74;7819:179;;:::o;8004:270::-;8121:4;8159:2;8148:9;8144:18;8136:26;;8172:95;8264:1;8253:9;8249:17;8240:6;8172:95;:::i;:::-;8004:270;;;;:::o;8280:329::-;8339:6;8388:2;8376:9;8367:7;8363:23;8359:32;8356:119;;;8394:79;;:::i;:::-;8356:119;8514:1;8539:53;8584:7;8575:6;8564:9;8560:22;8539:53;:::i;:::-;8529:63;;8485:117;8280:329;;;;:::o;8615:474::-;8683:6;8691;8740:2;8728:9;8719:7;8715:23;8711:32;8708:119;;;8746:79;;:::i;:::-;8708:119;8866:1;8891:53;8936:7;8927:6;8916:9;8912:22;8891:53;:::i;:::-;8881:63;;8837:117;8993:2;9019:53;9064:7;9055:6;9044:9;9040:22;9019:53;:::i;:::-;9009:63;;8964:118;8615:474;;;;;:::o;9095:180::-;9143:77;9140:1;9133:88;9240:4;9237:1;9230:15;9264:4;9261:1;9254:15;9281:320;9325:6;9362:1;9356:4;9352:12;9342:22;;9409:1;9403:4;9399:12;9430:18;9420:81;;9486:4;9478:6;9474:17;9464:27;;9420:81;9548:2;9540:6;9537:14;9517:18;9514:38;9511:84;;9567:18;;:::i;:::-;9511:84;9332:269;9281:320;;;:::o;9607:231::-;9747:34;9743:1;9735:6;9731:14;9724:58;9816:14;9811:2;9803:6;9799:15;9792:39;9607:231;:::o;9844:366::-;9986:3;10007:67;10071:2;10066:3;10007:67;:::i;:::-;10000:74;;10083:93;10172:3;10083:93;:::i;:::-;10201:2;10196:3;10192:12;10185:19;;9844:366;;;:::o;10216:419::-;10382:4;10420:2;10409:9;10405:18;10397:26;;10469:9;10463:4;10459:20;10455:1;10444:9;10440:17;10433:47;10497:131;10623:4;10497:131;:::i;:::-;10489:139;;10216:419;;;:::o;10641:228::-;10781:34;10777:1;10769:6;10765:14;10758:58;10850:11;10845:2;10837:6;10833:15;10826:36;10641:228;:::o;10875:366::-;11017:3;11038:67;11102:2;11097:3;11038:67;:::i;:::-;11031:74;;11114:93;11203:3;11114:93;:::i;:::-;11232:2;11227:3;11223:12;11216:19;;10875:366;;;:::o;11247:419::-;11413:4;11451:2;11440:9;11436:18;11428:26;;11500:9;11494:4;11490:20;11486:1;11475:9;11471:17;11464:47;11528:131;11654:4;11528:131;:::i;:::-;11520:139;;11247:419;;;:::o;11672:180::-;11720:77;11717:1;11710:88;11817:4;11814:1;11807:15;11841:4;11838:1;11831:15;11858:180;11906:77;11903:1;11896:88;12003:4;12000:1;11993:15;12027:4;12024:1;12017:15;12044:185;12084:1;12101:20;12119:1;12101:20;:::i;:::-;12096:25;;12135:20;12153:1;12135:20;:::i;:::-;12130:25;;12174:1;12164:35;;12179:18;;:::i;:::-;12164:35;12221:1;12218;12214:9;12209:14;;12044:185;;;;:::o;12235:303::-;12375:34;12371:1;12363:6;12359:14;12352:58;12444:34;12439:2;12431:6;12427:15;12420:59;12513:17;12508:2;12500:6;12496:15;12489:42;12235:303;:::o;12544:366::-;12686:3;12707:67;12771:2;12766:3;12707:67;:::i;:::-;12700:74;;12783:93;12872:3;12783:93;:::i;:::-;12901:2;12896:3;12892:12;12885:19;;12544:366;;;:::o;12916:419::-;13082:4;13120:2;13109:9;13105:18;13097:26;;13169:9;13163:4;13159:20;13155:1;13144:9;13140:17;13133:47;13197:131;13323:4;13197:131;:::i;:::-;13189:139;;12916:419;;;:::o;13341:410::-;13381:7;13404:20;13422:1;13404:20;:::i;:::-;13399:25;;13438:20;13456:1;13438:20;:::i;:::-;13433:25;;13493:1;13490;13486:9;13515:30;13533:11;13515:30;:::i;:::-;13504:41;;13694:1;13685:7;13681:15;13678:1;13675:22;13655:1;13648:9;13628:83;13605:139;;13724:18;;:::i;:::-;13605:139;13389:362;13341:410;;;;:::o;13757:302::-;13897:34;13893:1;13885:6;13881:14;13874:58;13966:34;13961:2;13953:6;13949:15;13942:59;14035:16;14030:2;14022:6;14018:15;14011:41;13757:302;:::o;14065:366::-;14207:3;14228:67;14292:2;14287:3;14228:67;:::i;:::-;14221:74;;14304:93;14393:3;14304:93;:::i;:::-;14422:2;14417:3;14413:12;14406:19;;14065:366;;;:::o;14437:419::-;14603:4;14641:2;14630:9;14626:18;14618:26;;14690:9;14684:4;14680:20;14676:1;14665:9;14661:17;14654:47;14718:131;14844:4;14718:131;:::i;:::-;14710:139;;14437:419;;;:::o;14862:442::-;15011:4;15049:2;15038:9;15034:18;15026:26;;15062:71;15130:1;15119:9;15115:17;15106:6;15062:71;:::i;:::-;15143:72;15211:2;15200:9;15196:18;15187:6;15143:72;:::i;:::-;15225;15293:2;15282:9;15278:18;15269:6;15225:72;:::i;:::-;14862:442;;;;;;:::o;15310:239::-;15450:34;15446:1;15438:6;15434:14;15427:58;15519:22;15514:2;15506:6;15502:15;15495:47;15310:239;:::o;15555:366::-;15697:3;15718:67;15782:2;15777:3;15718:67;:::i;:::-;15711:74;;15794:93;15883:3;15794:93;:::i;:::-;15912:2;15907:3;15903:12;15896:19;;15555:366;;;:::o;15927:419::-;16093:4;16131:2;16120:9;16116:18;16108:26;;16180:9;16174:4;16170:20;16166:1;16155:9;16151:17;16144:47;16208:131;16334:4;16208:131;:::i;:::-;16200:139;;15927:419;;;:::o;16352:233::-;16492:34;16488:1;16480:6;16476:14;16469:58;16561:16;16556:2;16548:6;16544:15;16537:41;16352:233;:::o;16591:366::-;16733:3;16754:67;16818:2;16813:3;16754:67;:::i;:::-;16747:74;;16830:93;16919:3;16830:93;:::i;:::-;16948:2;16943:3;16939:12;16932:19;;16591:366;;;:::o;16963:419::-;17129:4;17167:2;17156:9;17152:18;17144:26;;17216:9;17210:4;17206:20;17202:1;17191:9;17187:17;17180:47;17244:131;17370:4;17244:131;:::i;:::-;17236:139;;16963:419;;;:::o;17388:191::-;17428:3;17447:20;17465:1;17447:20;:::i;:::-;17442:25;;17481:20;17499:1;17481:20;:::i;:::-;17476:25;;17524:1;17521;17517:9;17510:16;;17545:3;17542:1;17539:10;17536:36;;;17552:18;;:::i;:::-;17536:36;17388:191;;;;:::o;17585:246::-;17725:34;17721:1;17713:6;17709:14;17702:58;17794:29;17789:2;17781:6;17777:15;17770:54;17585:246;:::o;17837:366::-;17979:3;18000:67;18064:2;18059:3;18000:67;:::i;:::-;17993:74;;18076:93;18165:3;18076:93;:::i;:::-;18194:2;18189:3;18185:12;18178:19;;17837:366;;;:::o;18209:419::-;18375:4;18413:2;18402:9;18398:18;18390:26;;18462:9;18456:4;18452:20;18448:1;18437:9;18433:17;18426:47;18490:131;18616:4;18490:131;:::i;:::-;18482:139;;18209:419;;;:::o;18634:194::-;18674:4;18694:20;18712:1;18694:20;:::i;:::-;18689:25;;18728:20;18746:1;18728:20;:::i;:::-;18723:25;;18772:1;18769;18765:9;18757:17;;18796:1;18790:4;18787:11;18784:37;;;18801:18;;:::i;:::-;18784:37;18634:194;;;;:::o;18834:180::-;18882:77;18879:1;18872:88;18979:4;18976:1;18969:15;19003:4;19000:1;18993:15;19020:180;19068:77;19065:1;19058:88;19165:4;19162:1;19155:15;19189:4;19186:1;19179:15;19206:143;19263:5;19294:6;19288:13;19279:22;;19310:33;19337:5;19310:33;:::i;:::-;19206:143;;;;:::o;19355:351::-;19425:6;19474:2;19462:9;19453:7;19449:23;19445:32;19442:119;;;19480:79;;:::i;:::-;19442:119;19600:1;19625:64;19681:7;19672:6;19661:9;19657:22;19625:64;:::i;:::-;19615:74;;19571:128;19355:351;;;;:::o;19712:85::-;19757:7;19786:5;19775:16;;19712:85;;;:::o;19803:158::-;19861:9;19894:61;19912:42;19921:32;19947:5;19921:32;:::i;:::-;19912:42;:::i;:::-;19894:61;:::i;:::-;19881:74;;19803:158;;;:::o;19967:147::-;20062:45;20101:5;20062:45;:::i;:::-;20057:3;20050:58;19967:147;;:::o;20120:114::-;20187:6;20221:5;20215:12;20205:22;;20120:114;;;:::o;20240:184::-;20339:11;20373:6;20368:3;20361:19;20413:4;20408:3;20404:14;20389:29;;20240:184;;;;:::o;20430:132::-;20497:4;20520:3;20512:11;;20550:4;20545:3;20541:14;20533:22;;20430:132;;;:::o;20568:108::-;20645:24;20663:5;20645:24;:::i;:::-;20640:3;20633:37;20568:108;;:::o;20682:179::-;20751:10;20772:46;20814:3;20806:6;20772:46;:::i;:::-;20850:4;20845:3;20841:14;20827:28;;20682:179;;;;:::o;20867:113::-;20937:4;20969;20964:3;20960:14;20952:22;;20867:113;;;:::o;21016:732::-;21135:3;21164:54;21212:5;21164:54;:::i;:::-;21234:86;21313:6;21308:3;21234:86;:::i;:::-;21227:93;;21344:56;21394:5;21344:56;:::i;:::-;21423:7;21454:1;21439:284;21464:6;21461:1;21458:13;21439:284;;;21540:6;21534:13;21567:63;21626:3;21611:13;21567:63;:::i;:::-;21560:70;;21653:60;21706:6;21653:60;:::i;:::-;21643:70;;21499:224;21486:1;21483;21479:9;21474:14;;21439:284;;;21443:14;21739:3;21732:10;;21140:608;;;21016:732;;;;:::o;21754:831::-;22017:4;22055:3;22044:9;22040:19;22032:27;;22069:71;22137:1;22126:9;22122:17;22113:6;22069:71;:::i;:::-;22150:80;22226:2;22215:9;22211:18;22202:6;22150:80;:::i;:::-;22277:9;22271:4;22267:20;22262:2;22251:9;22247:18;22240:48;22305:108;22408:4;22399:6;22305:108;:::i;:::-;22297:116;;22423:72;22491:2;22480:9;22476:18;22467:6;22423:72;:::i;:::-;22505:73;22573:3;22562:9;22558:19;22549:6;22505:73;:::i;:::-;21754:831;;;;;;;;:::o;22591:147::-;22692:11;22729:3;22714:18;;22591:147;;;;:::o;22744:114::-;;:::o;22864:398::-;23023:3;23044:83;23125:1;23120:3;23044:83;:::i;:::-;23037:90;;23136:93;23225:3;23136:93;:::i;:::-;23254:1;23249:3;23245:11;23238:18;;22864:398;;;:::o;23268:379::-;23452:3;23474:147;23617:3;23474:147;:::i;:::-;23467:154;;23638:3;23631:10;;23268:379;;;:::o
Swarm Source
ipfs://376de9dde7b9b2a41cf73a8fc24560989582ffb0b6b3ae268eafd77422718fc5
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.