ERC-20
Overview
Max Total Supply
10,000,000,000 WPEPE
Holders
193
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WPEPE
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-06 */ // SPDX-License-Identifier: MIT // Twitter: https://twitter.com/WPEPE_ETH // Telegram group: https://t.me/wpepetoken // File: contracts/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: contracts/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } // File: contracts/wpepe.sol pragma solidity ^0.8.0; contract WPEPE is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable router; address public immutable uniswapV2Pair; // addresses address public devWallet; address private marketingWallet; // limits uint256 private maxBuyAmount; uint256 private maxSellAmount; uint256 private maxWalletAmount; uint256 private thresholdSwapAmount; // status flags bool private isTrading = false; bool public swapEnabled = false; bool public isSwapping; struct Fees { uint8 buyTotalFees; uint8 buyMarketingFee; uint8 buyDevFee; uint8 buyLiquidityFee; uint8 sellTotalFees; uint8 sellMarketingFee; uint8 sellDevFee; uint8 sellLiquidityFee; } Fees public _fees = Fees({ buyTotalFees: 0, buyMarketingFee: 0, buyDevFee: 0, buyLiquidityFee: 0, sellTotalFees: 0, sellMarketingFee: 0, sellDevFee: 0, sellLiquidityFee: 0 }); uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; uint256 private taxTill; // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedMaxWalletAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public marketPair; mapping(address => bool) public _isBlacklisted; event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived); constructor() ERC20("WPEPE", "WPEPE") { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH()); _isExcludedMaxTransactionAmount[address(router)] = true; _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; _isExcludedMaxWalletAmount[owner()] = true; _isExcludedMaxWalletAmount[address(this)] = true; _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true; marketPair[address(uniswapV2Pair)] = true; approve(address(router), type(uint256).max); uint256 totalSupply = 1e10 * 1e18; maxBuyAmount = totalSupply * 3 / 100; // 3% maxTransactionAmountTxn maxSellAmount = totalSupply * 3 / 100; // 3% maxTransactionAmountTxn maxWalletAmount = totalSupply * 3 / 100; // 3% maxWallet thresholdSwapAmount = totalSupply * 1 / 1000; // 0.01% swap wallet _fees.buyMarketingFee = 2; _fees.buyLiquidityFee = 0; _fees.buyDevFee = 1; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee; _fees.sellMarketingFee = 2; _fees.sellLiquidityFee = 0; _fees.sellDevFee = 1; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee; marketingWallet = address(0x33399DAB46D032b8c1bdF2dca861297E13Da93cE); devWallet = address(0x65B4C8221018a0D75Bf0F9649Dc0dDF0A0ab6cDB); _mint(msg.sender, totalSupply); } receive() external payable {} function startTrading() external onlyOwner { isTrading = true; swapEnabled = true; taxTill = block.number + 4; } function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns (bool) { thresholdSwapAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner { require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%"); require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%"); maxBuyAmount = (totalSupply() * newMaxBuy) / 1000; maxSellAmount = (totalSupply() * newMaxSell) / 1000; } function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner { require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%"); maxWalletAmount = (totalSupply() * newPercentage) / 1000; } function toggleSwapEnabled(bool enabled) external onlyOwner() { swapEnabled = enabled; } function blacklistAddress(address account, bool value) external onlyOwner { _isBlacklisted[account] = value; } function updateFees( uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy, uint8 _devFeeBuy, uint8 _marketingFeeSell, uint8 _liquidityFeeSell, uint8 _devFeeSell ) external onlyOwner { _fees.buyMarketingFee = _marketingFeeBuy; _fees.buyLiquidityFee = _liquidityFeeBuy; _fees.buyDevFee = _devFeeBuy; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee; _fees.sellMarketingFee = _marketingFeeSell; _fees.sellLiquidityFee = _liquidityFeeSell; _fees.sellDevFee = _devFeeSell; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee; require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less"); require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedMaxWalletAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function setMarketPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "Must keep uniswapV2Pair"); marketPair[pair] = value; } function setWallets(address _marketingWallet, address _devWallet) external onlyOwner { marketingWallet = _marketingWallet; devWallet = _devWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address sender, address recipient, uint256 amount ) internal override { if (amount == 0) { super._transfer(sender, recipient, 0); return; } if ( sender != owner() && recipient != owner() && !isSwapping ) { if (!isTrading) { require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active."); } if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) { require(amount <= maxBuyAmount, "buy transfer over max amount"); } else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) { require(amount <= maxSellAmount, "Sell transfer over max amount"); } if (!_isExcludedMaxWalletAmount[recipient]) { require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded"); } require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address"); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= thresholdSwapAmount; if ( canSwap && swapEnabled && !isSwapping && marketPair[recipient] && !_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient] ) { isSwapping = true; swapBack(); isSwapping = false; } bool takeFee = !isSwapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) { takeFee = false; } // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { uint256 fees = 0; if (block.number < taxTill) { fees = amount.mul(99).div(100); tokensForMarketing += (fees * 94) / 99; tokensForDev += (fees * 5) / 99; } else if (marketPair[recipient] && _fees.sellTotalFees > 0) { fees = amount.mul(_fees.sellTotalFees).div(100); tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees; tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees; tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees; } // on buy else if (marketPair[sender] && _fees.buyTotalFees > 0) { fees = amount.mul(_fees.buyTotalFees).div(100); tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees; tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees; tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees; } if (fees > 0) { super._transfer(sender, address(this), fees); } amount -= fees; } super._transfer(sender, recipient, amount); } function swapTokensForEth(uint256 tAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tAmount); // add the liquidity router.addLiquidityETH{value: ethAmount}( address(this), tAmount, 0, 0, address(this), block.timestamp ); } function swapBack() private { uint256 contractTokenBalance = balanceOf(address(this)); uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if (contractTokenBalance == 0 || toSwap == 0) { return; } if (contractTokenBalance > thresholdSwapAmount * 20) { contractTokenBalance = thresholdSwapAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2; uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 newBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap); uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap); uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev); tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity); } (success, ) = address(devWallet).call{value: (address(this).balance - ethForMarketing)}(""); (success, ) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600581526020017f57504550450000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f575045504500000000000000000000000000000000000000000000000000000081525081600390816200022b919062001202565b5080600490816200023d919062001202565b505050620002606200025462000b1560201b60201c565b62000b1d60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031c919062001353565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000386573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ac919062001353565b6040518363ffffffff1660e01b8152600401620003cb92919062001396565b6020604051808303816000875af1158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000411919062001353565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360006200050e62000be360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000620005cd62000be360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200068c62000be360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200081d6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c0d60201b60201c565b5060006b204fce5e3e2502611000000090506064600382620008409190620013f2565b6200084c91906200146c565b6008819055506064600382620008639190620013f2565b6200086f91906200146c565b6009819055506064600382620008869190620013f2565b6200089291906200146c565b600a819055506103e8600182620008aa9190620013f2565b620008b691906200146c565b600b819055506002600d60000160016101000a81548160ff021916908360ff1602179055506000600d60000160036101000a81548160ff021916908360ff1602179055506001600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff166200095e9190620014b1565b6200096a9190620014b1565b600d60000160006101000a81548160ff021916908360ff1602179055506002600d60000160056101000a81548160ff021916908360ff1602179055506000600d60000160076101000a81548160ff021916908360ff1602179055506001600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000a299190620014b1565b62000a359190620014b1565b600d60000160046101000a81548160ff021916908360ff1602179055507333399dab46d032b8c1bdf2dca861297e13da93ce600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507365b4c8221018a0d75bf0f9649dc0ddf0a0ab6cdb600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000b0e338262000c4060201b60201c565b5062001709565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008062000c2062000b1560201b60201c565b905062000c3581858562000dad60201b60201c565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ca9906200154e565b60405180910390fd5b62000cc66000838362000f7e60201b60201c565b806002600082825462000cda919062001570565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d8d9190620015bc565b60405180910390a362000da96000838362000f8360201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000e1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e16906200164f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e8890620016e7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000f719190620015bc565b60405180910390a3505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200100a57607f821691505b60208210810362001020576200101f62000fc2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200108a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200104b565b6200109686836200104b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620010e3620010dd620010d784620010ae565b620010b8565b620010ae565b9050919050565b6000819050919050565b620010ff83620010c2565b620011176200110e82620010ea565b84845462001058565b825550505050565b600090565b6200112e6200111f565b6200113b818484620010f4565b505050565b5b8181101562001163576200115760008262001124565b60018101905062001141565b5050565b601f821115620011b2576200117c8162001026565b62001187846200103b565b8101602085101562001197578190505b620011af620011a6856200103b565b83018262001140565b50505b505050565b600082821c905092915050565b6000620011d760001984600802620011b7565b1980831691505092915050565b6000620011f28383620011c4565b9150826002028217905092915050565b6200120d8262000f88565b67ffffffffffffffff81111562001229576200122862000f93565b5b62001235825462000ff1565b6200124282828562001167565b600060209050601f8311600181146200127a576000841562001265578287015190505b620012718582620011e4565b865550620012e1565b601f1984166200128a8662001026565b60005b82811015620012b4578489015182556001820191506020850194506020810190506200128d565b86831015620012d45784890151620012d0601f891682620011c4565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200131b82620012ee565b9050919050565b6200132d816200130e565b81146200133957600080fd5b50565b6000815190506200134d8162001322565b92915050565b6000602082840312156200136c576200136b620012e9565b5b60006200137c848285016200133c565b91505092915050565b62001390816200130e565b82525050565b6000604082019050620013ad600083018562001385565b620013bc602083018462001385565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620013ff82620010ae565b91506200140c83620010ae565b92508282026200141c81620010ae565b91508282048414831517620014365762001435620013c3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200147982620010ae565b91506200148683620010ae565b9250826200149957620014986200143d565b5b828204905092915050565b600060ff82169050919050565b6000620014be82620014a4565b9150620014cb83620014a4565b9250828201905060ff811115620014e757620014e6620013c3565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001536601f83620014ed565b91506200154382620014fe565b602082019050919050565b60006020820190508181036000830152620015698162001527565b9050919050565b60006200157d82620010ae565b91506200158a83620010ae565b9250828201905080821115620015a557620015a4620013c3565b5b92915050565b620015b681620010ae565b82525050565b6000602082019050620015d36000830184620015ab565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001637602483620014ed565b91506200164482620015d9565b604082019050919050565b600060208201905081810360008301526200166a8162001628565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620016cf602283620014ed565b9150620016dc8262001671565b604082019050919050565b600060208201905081810360008301526200170281620016c0565b9050919050565b60805160a05161441b6200175960003960008181610f99015261131f01526000818161176701528181612d3101528181612e1201528181612e3901528181612ed50152612efc015261441b6000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146108bf578063e16830a8146108fc578063f2fde38b14610925578063f5b3c3bf1461094e578063f887ea401461098b57610246565b8063c0246668146107e9578063c16dd4a414610812578063c18bc1951461083b578063d212a69a14610864578063d3f6a1571461089657610246565b806396880b17116100f257806396880b17146106dc5780639fccce3214610719578063a457c2d714610744578063a9059cbb14610781578063b8863115146107be57610246565b8063715018a61461061b5780637571336a146106325780638da5cb5b1461065b5780638ea5220f1461068657806395d89b41146106b157610246565b8063293230b8116101bc57806349bd5a5e1161018057806349bd5a5e1461050e5780634fbee19314610539578063555467a1146105765780636ddd1713146105b357806370a08231146105de57610246565b8063293230b81461043d578063313ce567146104545780633265e8461461047f57806339509351146104a8578063455a4396146104e557610246565b80631a8145bb116102035780631a8145bb146103445780631c6e8a751461036f5780631cdd3be3146103985780631f3fed8f146103d557806323b872dd1461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b357806311a582c3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109b6565b60405161026d9190613039565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906130f4565b610a48565b6040516102aa919061314f565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061316a565b610a6b565b6040516102e7919061314f565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613197565b610a8b565b005b34801561032557600080fd5b5061032e610bcd565b60405161033b91906131e6565b60405180910390f35b34801561035057600080fd5b50610359610bd7565b60405161036691906131e6565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061322d565b610bdd565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061316a565b610c02565b6040516103cc919061314f565b60405180910390f35b3480156103e157600080fd5b506103ea610c22565b6040516103f791906131e6565b60405180910390f35b34801561040c57600080fd5b506104276004803603810190610422919061325a565b610c28565b604051610434919061314f565b60405180910390f35b34801561044957600080fd5b50610452610c57565b005b34801561046057600080fd5b50610469610caa565b60405161047691906132c9565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190613310565b610cb3565b005b3480156104b457600080fd5b506104cf60048036038101906104ca91906130f4565b610efd565b6040516104dc919061314f565b60405180910390f35b3480156104f157600080fd5b5061050c6004803603810190610507919061339d565b610f34565b005b34801561051a57600080fd5b50610523610f97565b60405161053091906133ec565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b919061316a565b610fbb565b60405161056d919061314f565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613407565b611011565b6040516105aa919061314f565b60405180910390f35b3480156105bf57600080fd5b506105c861102b565b6040516105d5919061314f565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061316a565b61103e565b60405161061291906131e6565b60405180910390f35b34801561062757600080fd5b50610630611086565b005b34801561063e57600080fd5b506106596004803603810190610654919061339d565b61109a565b005b34801561066757600080fd5b506106706110fd565b60405161067d91906133ec565b60405180910390f35b34801561069257600080fd5b5061069b611127565b6040516106a891906133ec565b60405180910390f35b3480156106bd57600080fd5b506106c661114d565b6040516106d39190613039565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe919061316a565b6111df565b604051610710919061314f565b60405180910390f35b34801561072557600080fd5b5061072e6111ff565b60405161073b91906131e6565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906130f4565b611205565b604051610778919061314f565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a391906130f4565b61127c565b6040516107b5919061314f565b60405180910390f35b3480156107ca57600080fd5b506107d361129f565b6040516107e0919061314f565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b919061339d565b6112b2565b005b34801561081e57600080fd5b506108396004803603810190610834919061339d565b611315565b005b34801561084757600080fd5b50610862600480360381019061085d9190613407565b611406565b005b34801561087057600080fd5b506108796114ac565b60405161088d989796959493929190613434565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906134b2565b61154a565b005b3480156108cb57600080fd5b506108e660048036038101906108e191906134b2565b6115d8565b6040516108f391906131e6565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e919061339d565b61165f565b005b34801561093157600080fd5b5061094c6004803603810190610947919061316a565b6116c2565b005b34801561095a57600080fd5b506109756004803603810190610970919061316a565b611745565b604051610982919061314f565b60405180910390f35b34801561099757600080fd5b506109a0611765565b6040516109ad9190613551565b60405180910390f35b6060600380546109c59061359b565b80601f01602080910402602001604051908101604052809291908181526020018280546109f19061359b565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b600080610a53611789565b9050610a60818585611791565b600191505092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a9361195a565b6064610a9d610bcd565b610aa7919061362a565b6103e883610ab3610bcd565b610abd919061365b565b610ac7919061362a565b1015610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff9061370f565b60405180910390fd5b6064610b12610bcd565b610b1c919061362a565b6103e882610b28610bcd565b610b32919061365b565b610b3c919061362a565b1015610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b74906137a1565b60405180910390fd5b6103e882610b89610bcd565b610b93919061365b565b610b9d919061362a565b6008819055506103e881610baf610bcd565b610bb9919061365b565b610bc3919061362a565b6009819055505050565b6000600254905090565b600f5481565b610be561195a565b80600c60016101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600e5481565b600080610c33611789565b9050610c408582856119d8565b610c4b858585611a64565b60019150509392505050565b610c5f61195a565b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600443610ca291906137c1565b601181905550565b60006012905090565b610cbb61195a565b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610d5891906137f5565b610d6291906137f5565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610e1c91906137f5565b610e2691906137f5565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390613876565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec90613876565b60405180910390fd5b505050505050565b600080610f08611789565b9050610f29818585610f1a85896115d8565b610f2491906137c1565b611791565b600191505092915050565b610f3c61195a565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061101b61195a565b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108e61195a565b611098600061261c565b565b6110a261195a565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461115c9061359b565b80601f01602080910402602001604051908101604052809291908181526020018280546111889061359b565b80156111d55780601f106111aa576101008083540402835291602001916111d5565b820191906000526020600020905b8154815290600101906020018083116111b857829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b600080611210611789565b9050600061121e82866115d8565b905083811015611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90613908565b60405180910390fd5b6112708286868403611791565b60019250505092915050565b600080611287611789565b9050611294818585611a64565b600191505092915050565b600c60029054906101000a900460ff1681565b6112ba61195a565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61131d61195a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290613974565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61140e61195a565b6064611418610bcd565b611422919061362a565b6103e88261142e610bcd565b611438919061365b565b611442919061362a565b1015611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90613a06565b60405180910390fd5b6103e88161148f610bcd565b611499919061365b565b6114a3919061362a565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b61155261195a565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61166761195a565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6116ca61195a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090613a98565b60405180910390fd5b6117428161261c565b50565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790613b2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361186f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186690613bbc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161194d91906131e6565b60405180910390a3505050565b611962611789565b73ffffffffffffffffffffffffffffffffffffffff166119806110fd565b73ffffffffffffffffffffffffffffffffffffffff16146119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613c28565b60405180910390fd5b565b60006119e484846115d8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a5e5781811015611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790613c94565b60405180910390fd5b611a5d8484848403611791565b5b50505050565b60008103611a7d57611a78838360006126e2565b612617565b611a856110fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611af35750611ac36110fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b0c5750600c60029054906101000a900460ff16155b15611f7557600c60009054906101000a900460ff16611c0657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bc65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90613d00565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ca95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cf857600854811115611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea90613d6c565b60405180910390fd5b611de7565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d9b5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611de657600954811115611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90613dd8565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e9157600a54611e448361103e565b82611e4f91906137c1565b1115611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790613e44565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f355750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90613eb0565b60405180910390fd5b5b6000611f803061103e565b90506000600b548210159050808015611fa55750600c60019054906101000a900460ff165b8015611fbe5750600c60029054906101000a900460ff16155b80156120135750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156120695750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120bf5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612103576001600c60026101000a81548160ff0219169083151502179055506120e7612958565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121b95750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121c357600090505b8015612608576000601154431015612265576121fc60646121ee606388612c4690919063ffffffff16565b612c5c90919063ffffffff16565b90506063605e8261220d919061365b565b612217919061362a565b600e600082825461222891906137c1565b92505081905550606360058261223e919061365b565b612248919061362a565b6010600082825461225991906137c1565b925050819055506125e3565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122d357506000600d60000160049054906101000a900460ff1660ff16115b15612425576123136064612305600d60000160049054906101000a900460ff1660ff1688612c4690919063ffffffff16565b612c5c90919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff168261234c919061365b565b612356919061362a565b600f600082825461236791906137c1565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff16826123a5919061365b565b6123af919061362a565b600e60008282546123c091906137c1565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff16826123fe919061365b565b612408919061362a565b6010600082825461241991906137c1565b925050819055506125e2565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561249357506000600d60000160009054906101000a900460ff1660ff16115b156125e1576124d360646124c5600d60000160009054906101000a900460ff1660ff1688612c4690919063ffffffff16565b612c5c90919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff168261250c919061365b565b612516919061362a565b600f600082825461252791906137c1565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612565919061365b565b61256f919061362a565b600e600082825461258091906137c1565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff16826125be919061365b565b6125c8919061362a565b601060008282546125d991906137c1565b925050819055505b5b5b60008111156125f8576125f78730836126e2565b5b80856126049190613ed0565b9450505b6126138686866126e2565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274890613f76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614008565b60405180910390fd5b6127cb838383612c72565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128489061409a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161293f91906131e6565b60405180910390a3612952848484612c77565b50505050565b60006129633061103e565b90506000601054600e54600f5461297a91906137c1565b61298491906137c1565b90506000808314806129965750600082145b156129a357505050612c44565b6014600b546129b2919061365b565b8311156129cb576014600b546129c8919061365b565b92505b6000600283600f54866129de919061365b565b6129e8919061362a565b6129f2919061362a565b90506000612a098286612c7c90919063ffffffff16565b90506000479050612a1982612c92565b6000612a2e8247612c7c90919063ffffffff16565b90506000612a5987612a4b600e5485612c4690919063ffffffff16565b612c5c90919063ffffffff16565b90506000612a8488612a7660105486612c4690919063ffffffff16565b612c5c90919063ffffffff16565b905060008183612a9491906137c1565b84612a9f9190613ed0565b90506000600f819055506000600e819055506000601081905550600087118015612ac95750600081115b15612b1257612ad88782612ecf565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612b099291906140ba565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612b579190613ed0565b604051612b6390614114565b60006040518083038185875af1925050503d8060008114612ba0576040519150601f19603f3d011682016040523d82523d6000602084013e612ba5565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612bf190614114565b60006040518083038185875af1925050503d8060008114612c2e576040519150601f19603f3d011682016040523d82523d6000602084013e612c33565b606091505b505080985050505050505050505050505b565b60008183612c54919061365b565b905092915050565b60008183612c6a919061362a565b905092915050565b505050565b505050565b60008183612c8a9190613ed0565b905092915050565b6000600267ffffffffffffffff811115612caf57612cae614129565b5b604051908082528060200260200182016040528015612cdd5781602001602082028036833780820191505090505b5090503081600081518110612cf557612cf4614158565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe919061419c565b81600181518110612dd257612dd1614158565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e37307f000000000000000000000000000000000000000000000000000000000000000084611791565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e999594939291906142c2565b600060405180830381600087803b158015612eb357600080fd5b505af1158015612ec7573d6000803e3d6000fd5b505050505050565b612efa307f000000000000000000000000000000000000000000000000000000000000000084611791565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401612f5f9695949392919061431c565b60606040518083038185885af1158015612f7d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fa29190614392565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fe3578082015181840152602081019050612fc8565b60008484015250505050565b6000601f19601f8301169050919050565b600061300b82612fa9565b6130158185612fb4565b9350613025818560208601612fc5565b61302e81612fef565b840191505092915050565b600060208201905081810360008301526130538184613000565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061308b82613060565b9050919050565b61309b81613080565b81146130a657600080fd5b50565b6000813590506130b881613092565b92915050565b6000819050919050565b6130d1816130be565b81146130dc57600080fd5b50565b6000813590506130ee816130c8565b92915050565b6000806040838503121561310b5761310a61305b565b5b6000613119858286016130a9565b925050602061312a858286016130df565b9150509250929050565b60008115159050919050565b61314981613134565b82525050565b60006020820190506131646000830184613140565b92915050565b6000602082840312156131805761317f61305b565b5b600061318e848285016130a9565b91505092915050565b600080604083850312156131ae576131ad61305b565b5b60006131bc858286016130df565b92505060206131cd858286016130df565b9150509250929050565b6131e0816130be565b82525050565b60006020820190506131fb60008301846131d7565b92915050565b61320a81613134565b811461321557600080fd5b50565b60008135905061322781613201565b92915050565b6000602082840312156132435761324261305b565b5b600061325184828501613218565b91505092915050565b6000806000606084860312156132735761327261305b565b5b6000613281868287016130a9565b9350506020613292868287016130a9565b92505060406132a3868287016130df565b9150509250925092565b600060ff82169050919050565b6132c3816132ad565b82525050565b60006020820190506132de60008301846132ba565b92915050565b6132ed816132ad565b81146132f857600080fd5b50565b60008135905061330a816132e4565b92915050565b60008060008060008060c0878903121561332d5761332c61305b565b5b600061333b89828a016132fb565b965050602061334c89828a016132fb565b955050604061335d89828a016132fb565b945050606061336e89828a016132fb565b935050608061337f89828a016132fb565b92505060a061339089828a016132fb565b9150509295509295509295565b600080604083850312156133b4576133b361305b565b5b60006133c2858286016130a9565b92505060206133d385828601613218565b9150509250929050565b6133e681613080565b82525050565b600060208201905061340160008301846133dd565b92915050565b60006020828403121561341d5761341c61305b565b5b600061342b848285016130df565b91505092915050565b60006101008201905061344a600083018b6132ba565b613457602083018a6132ba565b61346460408301896132ba565b61347160608301886132ba565b61347e60808301876132ba565b61348b60a08301866132ba565b61349860c08301856132ba565b6134a560e08301846132ba565b9998505050505050505050565b600080604083850312156134c9576134c861305b565b5b60006134d7858286016130a9565b92505060206134e8858286016130a9565b9150509250929050565b6000819050919050565b600061351761351261350d84613060565b6134f2565b613060565b9050919050565b6000613529826134fc565b9050919050565b600061353b8261351e565b9050919050565b61354b81613530565b82525050565b60006020820190506135666000830184613542565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135b357607f821691505b6020821081036135c6576135c561356c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613635826130be565b9150613640836130be565b9250826136505761364f6135cc565b5b828204905092915050565b6000613666826130be565b9150613671836130be565b925082820261367f816130be565b91508282048414831517613696576136956135fb565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b60006136f9602383612fb4565b91506137048261369d565b604082019050919050565b60006020820190508181036000830152613728816136ec565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061378b602483612fb4565b91506137968261372f565b604082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b60006137cc826130be565b91506137d7836130be565b92508282019050808211156137ef576137ee6135fb565b5b92915050565b6000613800826132ad565b915061380b836132ad565b9250828201905060ff811115613824576138236135fb565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613860601d83612fb4565b915061386b8261382a565b602082019050919050565b6000602082019050818103600083015261388f81613853565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138f2602583612fb4565b91506138fd82613896565b604082019050919050565b60006020820190508181036000830152613921816138e5565b9050919050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061395e601783612fb4565b915061396982613928565b602082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006139f0602283612fb4565b91506139fb82613994565b604082019050919050565b60006020820190508181036000830152613a1f816139e3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a82602683612fb4565b9150613a8d82613a26565b604082019050919050565b60006020820190508181036000830152613ab181613a75565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b14602483612fb4565b9150613b1f82613ab8565b604082019050919050565b60006020820190508181036000830152613b4381613b07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ba6602283612fb4565b9150613bb182613b4a565b604082019050919050565b60006020820190508181036000830152613bd581613b99565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c12602083612fb4565b9150613c1d82613bdc565b602082019050919050565b60006020820190508181036000830152613c4181613c05565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613c7e601d83612fb4565b9150613c8982613c48565b602082019050919050565b60006020820190508181036000830152613cad81613c71565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613cea601683612fb4565b9150613cf582613cb4565b602082019050919050565b60006020820190508181036000830152613d1981613cdd565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000613d56601c83612fb4565b9150613d6182613d20565b602082019050919050565b60006020820190508181036000830152613d8581613d49565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000613dc2601d83612fb4565b9150613dcd82613d8c565b602082019050919050565b60006020820190508181036000830152613df181613db5565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613e2e601383612fb4565b9150613e3982613df8565b602082019050919050565b60006020820190508181036000830152613e5d81613e21565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000613e9a601383612fb4565b9150613ea582613e64565b602082019050919050565b60006020820190508181036000830152613ec981613e8d565b9050919050565b6000613edb826130be565b9150613ee6836130be565b9250828203905081811115613efe57613efd6135fb565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f60602583612fb4565b9150613f6b82613f04565b604082019050919050565b60006020820190508181036000830152613f8f81613f53565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff2602383612fb4565b9150613ffd82613f96565b604082019050919050565b6000602082019050818103600083015261402181613fe5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614084602683612fb4565b915061408f82614028565b604082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b60006040820190506140cf60008301856131d7565b6140dc60208301846131d7565b9392505050565b600081905092915050565b50565b60006140fe6000836140e3565b9150614109826140ee565b600082019050919050565b600061411f826140f1565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061419681613092565b92915050565b6000602082840312156141b2576141b161305b565b5b60006141c084828501614187565b91505092915050565b6000819050919050565b60006141ee6141e96141e4846141c9565b6134f2565b6130be565b9050919050565b6141fe816141d3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61423981613080565b82525050565b600061424b8383614230565b60208301905092915050565b6000602082019050919050565b600061426f82614204565b614279818561420f565b935061428483614220565b8060005b838110156142b557815161429c888261423f565b97506142a783614257565b925050600181019050614288565b5085935050505092915050565b600060a0820190506142d760008301886131d7565b6142e460208301876141f5565b81810360408301526142f68186614264565b905061430560608301856133dd565b61431260808301846131d7565b9695505050505050565b600060c08201905061433160008301896133dd565b61433e60208301886131d7565b61434b60408301876141f5565b61435860608301866141f5565b61436560808301856133dd565b61437260a08301846131d7565b979650505050505050565b60008151905061438c816130c8565b92915050565b6000806000606084860312156143ab576143aa61305b565b5b60006143b98682870161437d565b93505060206143ca8682870161437d565b92505060406143db8682870161437d565b915050925092509256fea2646970667358221220d067cc7e44f7d5d01a303a7d6151a867b164f3baf6cd291b2af4bffaa48cb26a64736f6c63430008120033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c8063715018a61161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146108bf578063e16830a8146108fc578063f2fde38b14610925578063f5b3c3bf1461094e578063f887ea401461098b57610246565b8063c0246668146107e9578063c16dd4a414610812578063c18bc1951461083b578063d212a69a14610864578063d3f6a1571461089657610246565b806396880b17116100f257806396880b17146106dc5780639fccce3214610719578063a457c2d714610744578063a9059cbb14610781578063b8863115146107be57610246565b8063715018a61461061b5780637571336a146106325780638da5cb5b1461065b5780638ea5220f1461068657806395d89b41146106b157610246565b8063293230b8116101bc57806349bd5a5e1161018057806349bd5a5e1461050e5780634fbee19314610539578063555467a1146105765780636ddd1713146105b357806370a08231146105de57610246565b8063293230b81461043d578063313ce567146104545780633265e8461461047f57806339509351146104a8578063455a4396146104e557610246565b80631a8145bb116102035780631a8145bb146103445780631c6e8a751461036f5780631cdd3be3146103985780631f3fed8f146103d557806323b872dd1461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b357806311a582c3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109b6565b60405161026d9190613039565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906130f4565b610a48565b6040516102aa919061314f565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061316a565b610a6b565b6040516102e7919061314f565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613197565b610a8b565b005b34801561032557600080fd5b5061032e610bcd565b60405161033b91906131e6565b60405180910390f35b34801561035057600080fd5b50610359610bd7565b60405161036691906131e6565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061322d565b610bdd565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061316a565b610c02565b6040516103cc919061314f565b60405180910390f35b3480156103e157600080fd5b506103ea610c22565b6040516103f791906131e6565b60405180910390f35b34801561040c57600080fd5b506104276004803603810190610422919061325a565b610c28565b604051610434919061314f565b60405180910390f35b34801561044957600080fd5b50610452610c57565b005b34801561046057600080fd5b50610469610caa565b60405161047691906132c9565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190613310565b610cb3565b005b3480156104b457600080fd5b506104cf60048036038101906104ca91906130f4565b610efd565b6040516104dc919061314f565b60405180910390f35b3480156104f157600080fd5b5061050c6004803603810190610507919061339d565b610f34565b005b34801561051a57600080fd5b50610523610f97565b60405161053091906133ec565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b919061316a565b610fbb565b60405161056d919061314f565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613407565b611011565b6040516105aa919061314f565b60405180910390f35b3480156105bf57600080fd5b506105c861102b565b6040516105d5919061314f565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061316a565b61103e565b60405161061291906131e6565b60405180910390f35b34801561062757600080fd5b50610630611086565b005b34801561063e57600080fd5b506106596004803603810190610654919061339d565b61109a565b005b34801561066757600080fd5b506106706110fd565b60405161067d91906133ec565b60405180910390f35b34801561069257600080fd5b5061069b611127565b6040516106a891906133ec565b60405180910390f35b3480156106bd57600080fd5b506106c661114d565b6040516106d39190613039565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe919061316a565b6111df565b604051610710919061314f565b60405180910390f35b34801561072557600080fd5b5061072e6111ff565b60405161073b91906131e6565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906130f4565b611205565b604051610778919061314f565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a391906130f4565b61127c565b6040516107b5919061314f565b60405180910390f35b3480156107ca57600080fd5b506107d361129f565b6040516107e0919061314f565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b919061339d565b6112b2565b005b34801561081e57600080fd5b506108396004803603810190610834919061339d565b611315565b005b34801561084757600080fd5b50610862600480360381019061085d9190613407565b611406565b005b34801561087057600080fd5b506108796114ac565b60405161088d989796959493929190613434565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906134b2565b61154a565b005b3480156108cb57600080fd5b506108e660048036038101906108e191906134b2565b6115d8565b6040516108f391906131e6565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e919061339d565b61165f565b005b34801561093157600080fd5b5061094c6004803603810190610947919061316a565b6116c2565b005b34801561095a57600080fd5b506109756004803603810190610970919061316a565b611745565b604051610982919061314f565b60405180910390f35b34801561099757600080fd5b506109a0611765565b6040516109ad9190613551565b60405180910390f35b6060600380546109c59061359b565b80601f01602080910402602001604051908101604052809291908181526020018280546109f19061359b565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b600080610a53611789565b9050610a60818585611791565b600191505092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a9361195a565b6064610a9d610bcd565b610aa7919061362a565b6103e883610ab3610bcd565b610abd919061365b565b610ac7919061362a565b1015610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff9061370f565b60405180910390fd5b6064610b12610bcd565b610b1c919061362a565b6103e882610b28610bcd565b610b32919061365b565b610b3c919061362a565b1015610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b74906137a1565b60405180910390fd5b6103e882610b89610bcd565b610b93919061365b565b610b9d919061362a565b6008819055506103e881610baf610bcd565b610bb9919061365b565b610bc3919061362a565b6009819055505050565b6000600254905090565b600f5481565b610be561195a565b80600c60016101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600e5481565b600080610c33611789565b9050610c408582856119d8565b610c4b858585611a64565b60019150509392505050565b610c5f61195a565b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600443610ca291906137c1565b601181905550565b60006012905090565b610cbb61195a565b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610d5891906137f5565b610d6291906137f5565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610e1c91906137f5565b610e2691906137f5565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390613876565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec90613876565b60405180910390fd5b505050505050565b600080610f08611789565b9050610f29818585610f1a85896115d8565b610f2491906137c1565b611791565b600191505092915050565b610f3c61195a565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000609d8dc6a1a39cd6eeb57482a9c5911ada1d07d781565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061101b61195a565b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108e61195a565b611098600061261c565b565b6110a261195a565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461115c9061359b565b80601f01602080910402602001604051908101604052809291908181526020018280546111889061359b565b80156111d55780601f106111aa576101008083540402835291602001916111d5565b820191906000526020600020905b8154815290600101906020018083116111b857829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b600080611210611789565b9050600061121e82866115d8565b905083811015611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90613908565b60405180910390fd5b6112708286868403611791565b60019250505092915050565b600080611287611789565b9050611294818585611a64565b600191505092915050565b600c60029054906101000a900460ff1681565b6112ba61195a565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61131d61195a565b7f000000000000000000000000609d8dc6a1a39cd6eeb57482a9c5911ada1d07d773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290613974565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61140e61195a565b6064611418610bcd565b611422919061362a565b6103e88261142e610bcd565b611438919061365b565b611442919061362a565b1015611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90613a06565b60405180910390fd5b6103e88161148f610bcd565b611499919061365b565b6114a3919061362a565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b61155261195a565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61166761195a565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6116ca61195a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090613a98565b60405180910390fd5b6117428161261c565b50565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790613b2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361186f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186690613bbc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161194d91906131e6565b60405180910390a3505050565b611962611789565b73ffffffffffffffffffffffffffffffffffffffff166119806110fd565b73ffffffffffffffffffffffffffffffffffffffff16146119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613c28565b60405180910390fd5b565b60006119e484846115d8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a5e5781811015611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790613c94565b60405180910390fd5b611a5d8484848403611791565b5b50505050565b60008103611a7d57611a78838360006126e2565b612617565b611a856110fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611af35750611ac36110fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b0c5750600c60029054906101000a900460ff16155b15611f7557600c60009054906101000a900460ff16611c0657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bc65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90613d00565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ca95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cf857600854811115611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea90613d6c565b60405180910390fd5b611de7565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d9b5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611de657600954811115611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90613dd8565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e9157600a54611e448361103e565b82611e4f91906137c1565b1115611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790613e44565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f355750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90613eb0565b60405180910390fd5b5b6000611f803061103e565b90506000600b548210159050808015611fa55750600c60019054906101000a900460ff165b8015611fbe5750600c60029054906101000a900460ff16155b80156120135750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156120695750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120bf5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612103576001600c60026101000a81548160ff0219169083151502179055506120e7612958565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121b95750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121c357600090505b8015612608576000601154431015612265576121fc60646121ee606388612c4690919063ffffffff16565b612c5c90919063ffffffff16565b90506063605e8261220d919061365b565b612217919061362a565b600e600082825461222891906137c1565b92505081905550606360058261223e919061365b565b612248919061362a565b6010600082825461225991906137c1565b925050819055506125e3565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122d357506000600d60000160049054906101000a900460ff1660ff16115b15612425576123136064612305600d60000160049054906101000a900460ff1660ff1688612c4690919063ffffffff16565b612c5c90919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff168261234c919061365b565b612356919061362a565b600f600082825461236791906137c1565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff16826123a5919061365b565b6123af919061362a565b600e60008282546123c091906137c1565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff16826123fe919061365b565b612408919061362a565b6010600082825461241991906137c1565b925050819055506125e2565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561249357506000600d60000160009054906101000a900460ff1660ff16115b156125e1576124d360646124c5600d60000160009054906101000a900460ff1660ff1688612c4690919063ffffffff16565b612c5c90919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff168261250c919061365b565b612516919061362a565b600f600082825461252791906137c1565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612565919061365b565b61256f919061362a565b600e600082825461258091906137c1565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff16826125be919061365b565b6125c8919061362a565b601060008282546125d991906137c1565b925050819055505b5b5b60008111156125f8576125f78730836126e2565b5b80856126049190613ed0565b9450505b6126138686866126e2565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274890613f76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614008565b60405180910390fd5b6127cb838383612c72565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128489061409a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161293f91906131e6565b60405180910390a3612952848484612c77565b50505050565b60006129633061103e565b90506000601054600e54600f5461297a91906137c1565b61298491906137c1565b90506000808314806129965750600082145b156129a357505050612c44565b6014600b546129b2919061365b565b8311156129cb576014600b546129c8919061365b565b92505b6000600283600f54866129de919061365b565b6129e8919061362a565b6129f2919061362a565b90506000612a098286612c7c90919063ffffffff16565b90506000479050612a1982612c92565b6000612a2e8247612c7c90919063ffffffff16565b90506000612a5987612a4b600e5485612c4690919063ffffffff16565b612c5c90919063ffffffff16565b90506000612a8488612a7660105486612c4690919063ffffffff16565b612c5c90919063ffffffff16565b905060008183612a9491906137c1565b84612a9f9190613ed0565b90506000600f819055506000600e819055506000601081905550600087118015612ac95750600081115b15612b1257612ad88782612ecf565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612b099291906140ba565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612b579190613ed0565b604051612b6390614114565b60006040518083038185875af1925050503d8060008114612ba0576040519150601f19603f3d011682016040523d82523d6000602084013e612ba5565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612bf190614114565b60006040518083038185875af1925050503d8060008114612c2e576040519150601f19603f3d011682016040523d82523d6000602084013e612c33565b606091505b505080985050505050505050505050505b565b60008183612c54919061365b565b905092915050565b60008183612c6a919061362a565b905092915050565b505050565b505050565b60008183612c8a9190613ed0565b905092915050565b6000600267ffffffffffffffff811115612caf57612cae614129565b5b604051908082528060200260200182016040528015612cdd5781602001602082028036833780820191505090505b5090503081600081518110612cf557612cf4614158565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe919061419c565b81600181518110612dd257612dd1614158565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e37307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611791565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e999594939291906142c2565b600060405180830381600087803b158015612eb357600080fd5b505af1158015612ec7573d6000803e3d6000fd5b505050505050565b612efa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611791565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401612f5f9695949392919061431c565b60606040518083038185885af1158015612f7d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fa29190614392565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fe3578082015181840152602081019050612fc8565b60008484015250505050565b6000601f19601f8301169050919050565b600061300b82612fa9565b6130158185612fb4565b9350613025818560208601612fc5565b61302e81612fef565b840191505092915050565b600060208201905081810360008301526130538184613000565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061308b82613060565b9050919050565b61309b81613080565b81146130a657600080fd5b50565b6000813590506130b881613092565b92915050565b6000819050919050565b6130d1816130be565b81146130dc57600080fd5b50565b6000813590506130ee816130c8565b92915050565b6000806040838503121561310b5761310a61305b565b5b6000613119858286016130a9565b925050602061312a858286016130df565b9150509250929050565b60008115159050919050565b61314981613134565b82525050565b60006020820190506131646000830184613140565b92915050565b6000602082840312156131805761317f61305b565b5b600061318e848285016130a9565b91505092915050565b600080604083850312156131ae576131ad61305b565b5b60006131bc858286016130df565b92505060206131cd858286016130df565b9150509250929050565b6131e0816130be565b82525050565b60006020820190506131fb60008301846131d7565b92915050565b61320a81613134565b811461321557600080fd5b50565b60008135905061322781613201565b92915050565b6000602082840312156132435761324261305b565b5b600061325184828501613218565b91505092915050565b6000806000606084860312156132735761327261305b565b5b6000613281868287016130a9565b9350506020613292868287016130a9565b92505060406132a3868287016130df565b9150509250925092565b600060ff82169050919050565b6132c3816132ad565b82525050565b60006020820190506132de60008301846132ba565b92915050565b6132ed816132ad565b81146132f857600080fd5b50565b60008135905061330a816132e4565b92915050565b60008060008060008060c0878903121561332d5761332c61305b565b5b600061333b89828a016132fb565b965050602061334c89828a016132fb565b955050604061335d89828a016132fb565b945050606061336e89828a016132fb565b935050608061337f89828a016132fb565b92505060a061339089828a016132fb565b9150509295509295509295565b600080604083850312156133b4576133b361305b565b5b60006133c2858286016130a9565b92505060206133d385828601613218565b9150509250929050565b6133e681613080565b82525050565b600060208201905061340160008301846133dd565b92915050565b60006020828403121561341d5761341c61305b565b5b600061342b848285016130df565b91505092915050565b60006101008201905061344a600083018b6132ba565b613457602083018a6132ba565b61346460408301896132ba565b61347160608301886132ba565b61347e60808301876132ba565b61348b60a08301866132ba565b61349860c08301856132ba565b6134a560e08301846132ba565b9998505050505050505050565b600080604083850312156134c9576134c861305b565b5b60006134d7858286016130a9565b92505060206134e8858286016130a9565b9150509250929050565b6000819050919050565b600061351761351261350d84613060565b6134f2565b613060565b9050919050565b6000613529826134fc565b9050919050565b600061353b8261351e565b9050919050565b61354b81613530565b82525050565b60006020820190506135666000830184613542565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135b357607f821691505b6020821081036135c6576135c561356c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613635826130be565b9150613640836130be565b9250826136505761364f6135cc565b5b828204905092915050565b6000613666826130be565b9150613671836130be565b925082820261367f816130be565b91508282048414831517613696576136956135fb565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b60006136f9602383612fb4565b91506137048261369d565b604082019050919050565b60006020820190508181036000830152613728816136ec565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061378b602483612fb4565b91506137968261372f565b604082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b60006137cc826130be565b91506137d7836130be565b92508282019050808211156137ef576137ee6135fb565b5b92915050565b6000613800826132ad565b915061380b836132ad565b9250828201905060ff811115613824576138236135fb565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613860601d83612fb4565b915061386b8261382a565b602082019050919050565b6000602082019050818103600083015261388f81613853565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138f2602583612fb4565b91506138fd82613896565b604082019050919050565b60006020820190508181036000830152613921816138e5565b9050919050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061395e601783612fb4565b915061396982613928565b602082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006139f0602283612fb4565b91506139fb82613994565b604082019050919050565b60006020820190508181036000830152613a1f816139e3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a82602683612fb4565b9150613a8d82613a26565b604082019050919050565b60006020820190508181036000830152613ab181613a75565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b14602483612fb4565b9150613b1f82613ab8565b604082019050919050565b60006020820190508181036000830152613b4381613b07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ba6602283612fb4565b9150613bb182613b4a565b604082019050919050565b60006020820190508181036000830152613bd581613b99565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c12602083612fb4565b9150613c1d82613bdc565b602082019050919050565b60006020820190508181036000830152613c4181613c05565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613c7e601d83612fb4565b9150613c8982613c48565b602082019050919050565b60006020820190508181036000830152613cad81613c71565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613cea601683612fb4565b9150613cf582613cb4565b602082019050919050565b60006020820190508181036000830152613d1981613cdd565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000613d56601c83612fb4565b9150613d6182613d20565b602082019050919050565b60006020820190508181036000830152613d8581613d49565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000613dc2601d83612fb4565b9150613dcd82613d8c565b602082019050919050565b60006020820190508181036000830152613df181613db5565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613e2e601383612fb4565b9150613e3982613df8565b602082019050919050565b60006020820190508181036000830152613e5d81613e21565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000613e9a601383612fb4565b9150613ea582613e64565b602082019050919050565b60006020820190508181036000830152613ec981613e8d565b9050919050565b6000613edb826130be565b9150613ee6836130be565b9250828203905081811115613efe57613efd6135fb565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f60602583612fb4565b9150613f6b82613f04565b604082019050919050565b60006020820190508181036000830152613f8f81613f53565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff2602383612fb4565b9150613ffd82613f96565b604082019050919050565b6000602082019050818103600083015261402181613fe5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614084602683612fb4565b915061408f82614028565b604082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b60006040820190506140cf60008301856131d7565b6140dc60208301846131d7565b9392505050565b600081905092915050565b50565b60006140fe6000836140e3565b9150614109826140ee565b600082019050919050565b600061411f826140f1565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061419681613092565b92915050565b6000602082840312156141b2576141b161305b565b5b60006141c084828501614187565b91505092915050565b6000819050919050565b60006141ee6141e96141e4846141c9565b6134f2565b6130be565b9050919050565b6141fe816141d3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61423981613080565b82525050565b600061424b8383614230565b60208301905092915050565b6000602082019050919050565b600061426f82614204565b614279818561420f565b935061428483614220565b8060005b838110156142b557815161429c888261423f565b97506142a783614257565b925050600181019050614288565b5085935050505092915050565b600060a0820190506142d760008301886131d7565b6142e460208301876141f5565b81810360408301526142f68186614264565b905061430560608301856133dd565b61431260808301846131d7565b9695505050505050565b600060c08201905061433160008301896133dd565b61433e60208301886131d7565b61434b60408301876141f5565b61435860608301866141f5565b61436560808301856133dd565b61437260a08301846131d7565b979650505050505050565b60008151905061438c816130c8565b92915050565b6000806000606084860312156143ab576143aa61305b565b5b60006143b98682870161437d565b93505060206143ca8682870161437d565b92505060406143db8682870161437d565b915050925092509256fea2646970667358221220d067cc7e44f7d5d01a303a7d6151a867b164f3baf6cd291b2af4bffaa48cb26a64736f6c63430008120033
Deployed Bytecode Sourcemap
33327:12702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22259:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24619:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34674:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37337:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23388:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34458:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38082:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35009:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34418:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25400:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37017:144;;;;;;;;;;;;;:::i;:::-;;23230:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38324:882;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26070:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38192:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33451:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40024:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37169:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33815:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23559:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15565:103;;;;;;;;;;;;;:::i;:::-;;39508:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14924:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33516:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22478:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34744:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34498:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26811:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23892:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33853:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39214:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39660:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37803:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34156:253;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;39845:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24148:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39354:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15823:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34960:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33402;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22259:100;22313:13;22346:5;22339:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22259:100;:::o;24619:201::-;24702:4;24719:13;24735:12;:10;:12::i;:::-;24719:28;;24758:32;24767:5;24774:7;24783:6;24758:8;:32::i;:::-;24808:4;24801:11;;;24619:201;;;;:::o;34674:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;37337:458::-;14810:13;:11;:13::i;:::-;37499:3:::1;37483:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37473:4;37460:9;37444:13;:11;:13::i;:::-;:25;;;;:::i;:::-;37443:34;;;;:::i;:::-;37442:61;;37434:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;37620:3;37604:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37594:4;37580:10;37564:13;:11;:13::i;:::-;:26;;;;:::i;:::-;37563:35;;;;:::i;:::-;37562:62;;37554:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37721:4;37708:9;37692:13;:11;:13::i;:::-;:25;;;;:::i;:::-;37691:34;;;;:::i;:::-;37676:12;:49;;;;37783:4;37769:10;37753:13;:11;:13::i;:::-;:26;;;;:::i;:::-;37752:35;;;;:::i;:::-;37736:13;:51;;;;37337:458:::0;;:::o;23388:108::-;23449:7;23476:12;;23469:19;;23388:108;:::o;34458:33::-;;;;:::o;38082:102::-;14810:13;:11;:13::i;:::-;38169:7:::1;38155:11;;:21;;;;;;;;;;;;;;;;;;38082:102:::0;:::o;35009:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;34418:33::-;;;;:::o;25400:261::-;25497:4;25514:15;25532:12;:10;:12::i;:::-;25514:30;;25555:38;25571:4;25577:7;25586:6;25555:15;:38::i;:::-;25604:27;25614:4;25620:2;25624:6;25604:9;:27::i;:::-;25649:4;25642:11;;;25400:261;;;;;:::o;37017:144::-;14810:13;:11;:13::i;:::-;37083:4:::1;37071:9;;:16;;;;;;;;;;;;;;;;;;37112:4;37098:11;;:18;;;;;;;;;;;;;;;;;;37152:1;37137:12;:16;;;;:::i;:::-;37127:7;:26;;;;37017:144::o:0;23230:93::-;23288:5;23313:2;23306:9;;23230:93;:::o;38324:882::-;14810:13;:11;:13::i;:::-;38594:16:::1;38570:5;:21;;;:40;;;;;;;;;;;;;;;;;;38645:16;38621:5;:21;;;:40;;;;;;;;;;;;;;;;;;38690:10;38672:5;:15;;;:28;;;;;;;;;;;;;;;;;;38780:5;:15;;;;;;;;;;;;38756:5;:21;;;;;;;;;;;;38732:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;38711:5;:18;;;:84;;;;;;;;;;;;;;;;;;38833:17;38808:5;:22;;;:42;;;;;;;;;;;;;;;;;;38886:17;38861:5;:22;;;:42;;;;;;;;;;;;;;;;;;38933:11;38914:5;:16;;;:30;;;;;;;;;;;;;;;;;;39027:5;:16;;;;;;;;;;;;39002:5;:22;;;;;;;;;;;;38977:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;38955:5;:19;;;:88;;;;;;;;;;;;;;;;;;39084:2;39062:5;:18;;;;;;;;;;;;:24;;;;39054:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39162:2;39139:5;:19;;;;;;;;;;;;:25;;;;39131:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38324:882:::0;;;;;;:::o;26070:238::-;26158:4;26175:13;26191:12;:10;:12::i;:::-;26175:28;;26214:64;26223:5;26230:7;26267:10;26239:25;26249:5;26256:7;26239:9;:25::i;:::-;:38;;;;:::i;:::-;26214:8;:64::i;:::-;26296:4;26289:11;;;26070:238;;;;:::o;38192:124::-;14810:13;:11;:13::i;:::-;38303:5:::1;38277:14;:23;38292:7;38277:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;38192:124:::0;;:::o;33451:38::-;;;:::o;40024:126::-;40090:4;40114:19;:28;40134:7;40114:28;;;;;;;;;;;;;;;;;;;;;;;;;40107:35;;40024:126;;;:::o;37169:160::-;37251:4;14810:13;:11;:13::i;:::-;37290:9:::1;37268:19;:31;;;;37317:4;37310:11;;37169:160:::0;;;:::o;33815:31::-;;;;;;;;;;;;;:::o;23559:127::-;23633:7;23660:9;:18;23670:7;23660:18;;;;;;;;;;;;;;;;23653:25;;23559:127;;;:::o;15565:103::-;14810:13;:11;:13::i;:::-;15630:30:::1;15657:1;15630:18;:30::i;:::-;15565:103::o:0;39508:144::-;14810:13;:11;:13::i;:::-;39640:4:::1;39598:31;:39;39630:6;39598:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39508:144:::0;;:::o;14924:87::-;14970:7;14997:6;;;;;;;;;;;14990:13;;14924:87;:::o;33516:24::-;;;;;;;;;;;;;:::o;22478:104::-;22534:13;22567:7;22560:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22478:104;:::o;34744:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34498:27::-;;;;:::o;26811:436::-;26904:4;26921:13;26937:12;:10;:12::i;:::-;26921:28;;26960:24;26987:25;26997:5;27004:7;26987:9;:25::i;:::-;26960:52;;27051:15;27031:16;:35;;27023:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27144:60;27153:5;27160:7;27188:15;27169:16;:34;27144:8;:60::i;:::-;27235:4;27228:11;;;;26811:436;;;;:::o;23892:193::-;23971:4;23988:13;24004:12;:10;:12::i;:::-;23988:28;;24027;24037:5;24044:2;24048:6;24027:9;:28::i;:::-;24073:4;24066:11;;;23892:193;;;;:::o;33853:22::-;;;;;;;;;;;;;:::o;39214:132::-;14810:13;:11;:13::i;:::-;39330:8:::1;39299:19;:28;39319:7;39299:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39214:132:::0;;:::o;39660:177::-;14810:13;:11;:13::i;:::-;39753::::1;39745:21;;:4;:21;;::::0;39737:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39824:5;39805:10;:16;39816:4;39805:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;39660:177:::0;;:::o;37803:271::-;14810:13;:11;:13::i;:::-;37956:3:::1;37940:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37930:4;37913:13;37897;:11;:13::i;:::-;:29;;;;:::i;:::-;37896:38;;;;:::i;:::-;37895:65;;37887:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;38062:4;38045:13;38029;:11;:13::i;:::-;:29;;;;:::i;:::-;38028:38;;;;:::i;:::-;38010:15;:56;;;;37803:271:::0;:::o;34156:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39845:171::-;14810:13;:11;:13::i;:::-;39959:16:::1;39941:15;;:34;;;;;;;;;;;;;;;;;;39998:10;39986:9;;:22;;;;;;;;;;;;;;;;;;39845:171:::0;;:::o;24148:151::-;24237:7;24264:11;:18;24276:5;24264:18;;;;;;;;;;;;;;;:27;24283:7;24264:27;;;;;;;;;;;;;;;;24257:34;;24148:151;;;;:::o;39354:146::-;14810:13;:11;:13::i;:::-;39484:8:::1;39446:26;:35;39473:7;39446:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39354:146:::0;;:::o;15823:201::-;14810:13;:11;:13::i;:::-;15932:1:::1;15912:22;;:8;:22;;::::0;15904:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15988:28;16007:8;15988:18;:28::i;:::-;15823:201:::0;:::o;34960:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;33402:::-;;;:::o;13475:98::-;13528:7;13555:10;13548:17;;13475:98;:::o;30804:346::-;30923:1;30906:19;;:5;:19;;;30898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31004:1;30985:21;;:7;:21;;;30977:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31088:6;31058:11;:18;31070:5;31058:18;;;;;;;;;;;;;;;:27;31077:7;31058:27;;;;;;;;;;;;;;;:36;;;;31126:7;31110:32;;31119:5;31110:32;;;31135:6;31110:32;;;;;;:::i;:::-;;;;;;;;30804:346;;;:::o;15089:132::-;15164:12;:10;:12::i;:::-;15153:23;;:7;:5;:7::i;:::-;:23;;;15145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15089:132::o;31441:419::-;31542:24;31569:25;31579:5;31586:7;31569:9;:25::i;:::-;31542:52;;31629:17;31609:16;:37;31605:248;;31691:6;31671:16;:26;;31663:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31775:51;31784:5;31791:7;31819:6;31800:16;:25;31775:8;:51::i;:::-;31605:248;31531:329;31441:419;;;:::o;40158:3284::-;40305:1;40295:6;:11;40291:102;;40323:37;40339:6;40347:9;40358:1;40323:15;:37::i;:::-;40375:7;;40291:102;40433:7;:5;:7::i;:::-;40423:17;;:6;:17;;;;:54;;;;;40470:7;:5;:7::i;:::-;40457:20;;:9;:20;;;;40423:54;:82;;;;;40495:10;;;;;;;;;;;40494:11;40423:82;40405:920;;;40537:9;;;;;;;;;;;40532:147;;40575:19;:27;40595:6;40575:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;40606:19;:30;40626:9;40606:30;;;;;;;;;;;;;;;;;;;;;;;;;40575:61;40567:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40532:147;40697:10;:18;40708:6;40697:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;40720:31;:42;40752:9;40720:42;;;;;;;;;;;;;;;;;;;;;;;;;40719:43;40697:65;40693:346;;;40801:12;;40791:6;:22;;40783:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40693:346;;;40872:10;:21;40883:9;40872:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;40898:31;:39;40930:6;40898:39;;;;;;;;;;;;;;;;;;;;;;;;;40897:40;40872:65;40868:171;;;40976:13;;40966:6;:23;;40958:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40868:171;40693:346;41060:26;:37;41087:9;41060:37;;;;;;;;;;;;;;;;;;;;;;;;;41055:159;;41159:15;;41135:20;41145:9;41135;:20::i;:::-;41126:6;:29;;;;:::i;:::-;:48;;41118:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;41055:159;41237:14;:22;41252:6;41237:22;;;;;;;;;;;;;;;;;;;;;;;;;41236:23;:53;;;;;41264:14;:25;41279:9;41264:25;;;;;;;;;;;;;;;;;;;;;;;;;41263:26;41236:53;41228:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40405:920;41337:28;41368:24;41386:4;41368:9;:24::i;:::-;41337:55;;41405:12;41444:19;;41420:20;:43;;41405:58;;41494:7;:35;;;;;41518:11;;;;;;;;;;;41494:35;:63;;;;;41547:10;;;;;;;;;;;41546:11;41494:63;:101;;;;;41574:10;:21;41585:9;41574:21;;;;;;;;;;;;;;;;;;;;;;;;;41494:101;:146;;;;;41613:19;:27;41633:6;41613:27;;;;;;;;;;;;;;;;;;;;;;;;;41612:28;41494:146;:194;;;;;41658:19;:30;41678:9;41658:30;;;;;;;;;;;;;;;;;;;;;;;;;41657:31;41494:194;41476:326;;;41728:4;41715:10;;:17;;;;;;;;;;;;;;;;;;41747:10;:8;:10::i;:::-;41785:5;41772:10;;:18;;;;;;;;;;;;;;;;;;41476:326;41814:12;41830:10;;;;;;;;;;;41829:11;41814:26;;41942:19;:27;41962:6;41942:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;41973:19;:30;41993:9;41973:30;;;;;;;;;;;;;;;;;;;;;;;;;41942:61;41938:109;;;42030:5;42020:15;;41938:109;42137:7;42133:1247;;;42161:12;42211:7;;42196:12;:22;42192:1037;;;42246:23;42265:3;42246:14;42257:2;42246:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;42239:30;;42324:2;42318;42311:4;:9;;;;:::i;:::-;42310:16;;;;:::i;:::-;42288:18;;:38;;;;;;;:::i;:::-;;;;;;;;42374:2;42369:1;42362:4;:8;;;;:::i;:::-;42361:15;;;;:::i;:::-;42345:12;;:31;;;;;;;:::i;:::-;;;;;;;;42192:1037;;;42402:10;:21;42413:9;42402:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;42449:1;42427:5;:19;;;;;;;;;;;;:23;;;42402:48;42398:831;;;42478:40;42514:3;42478:31;42489:5;:19;;;;;;;;;;;;42478:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;42471:47;;42591:5;:19;;;;;;;;;;;;42559:51;;42566:5;:22;;;;;;;;;;;;42559:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;42537:18;;:73;;;;;;;:::i;:::-;;;;;;;;42683:5;:19;;;;;;;;;;;;42651:51;;42658:5;:22;;;;;;;;;;;;42651:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;42629:18;;:73;;;;;;;:::i;:::-;;;;;;;;42763:5;:19;;;;;;;;;;;;42737:45;;42744:5;:16;;;;;;;;;;;;42737:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;42721:12;;:61;;;;;;;:::i;:::-;;;;;;;;42398:831;;;42844:10;:18;42855:6;42844:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;42887:1;42866:5;:18;;;;;;;;;;;;:22;;;42844:44;42840:389;;;42916:39;42951:3;42916:30;42927:5;:18;;;;;;;;;;;;42916:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;42909:46;;43027:5;:18;;;;;;;;;;;;42996:49;;43003:5;:21;;;;;;;;;;;;42996:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;42974:18;;:71;;;;;;;:::i;:::-;;;;;;;;43117:5;:18;;;;;;;;;;;;43086:49;;43093:5;:21;;;;;;;;;;;;43086:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;43064:18;;:71;;;;;;;:::i;:::-;;;;;;;;43195:5;:18;;;;;;;;;;;;43170:43;;43177:5;:15;;;;;;;;;;;;43170:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;43154:12;;:59;;;;;;;:::i;:::-;;;;;;;;42840:389;42398:831;42192:1037;43256:1;43249:4;:8;43245:93;;;43278:44;43294:6;43310:4;43317;43278:15;:44::i;:::-;43245:93;43364:4;43354:14;;;;;:::i;:::-;;;42146:1234;42133:1247;43392:42;43408:6;43416:9;43427:6;43392:15;:42::i;:::-;40280:3162;;;40158:3284;;;;:::o;16184:191::-;16258:16;16277:6;;;;;;;;;;;16258:25;;16303:8;16294:6;;:17;;;;;;;;;;;;;;;;;;16358:8;16327:40;;16348:8;16327:40;;;;;;;;;;;;16247:128;16184:191;:::o;27717:806::-;27830:1;27814:18;;:4;:18;;;27806:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27907:1;27893:16;;:2;:16;;;27885:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27962:38;27983:4;27989:2;27993:6;27962:20;:38::i;:::-;28013:19;28035:9;:15;28045:4;28035:15;;;;;;;;;;;;;;;;28013:37;;28084:6;28069:11;:21;;28061:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28201:6;28187:11;:20;28169:9;:15;28179:4;28169:15;;;;;;;;;;;;;;;:38;;;;28404:6;28387:9;:13;28397:2;28387:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;28454:2;28439:26;;28448:4;28439:26;;;28458:6;28439:26;;;;;;:::i;:::-;;;;;;;;28478:37;28498:4;28504:2;28508:6;28478:19;:37::i;:::-;27795:728;27717:806;;;:::o;44451:1575::-;44490:28;44521:24;44539:4;44521:9;:24::i;:::-;44490:55;;44556:14;44615:12;;44594:18;;44573;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44556:71;;44638:12;44691:1;44667:20;:25;:40;;;;44706:1;44696:6;:11;44667:40;44663:79;;;44724:7;;;;;44663:79;44803:2;44781:19;;:24;;;;:::i;:::-;44758:20;:47;44754:127;;;44867:2;44845:19;;:24;;;;:::i;:::-;44822:47;;44754:127;44942:23;45021:1;45012:6;44991:18;;44968:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;44942:80;;45033:26;45062:41;45087:15;45062:20;:24;;:41;;;;:::i;:::-;45033:70;;45116:25;45144:21;45116:49;;45178:36;45195:18;45178:16;:36::i;:::-;45227:18;45248:44;45274:17;45248:21;:25;;:44;;;;:::i;:::-;45227:65;;45305:23;45331:46;45370:6;45331:34;45346:18;;45331:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;45305:72;;45388:17;45408:40;45441:6;45408:28;45423:12;;45408:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;45388:60;;45459:23;45517:9;45499:15;:27;;;;:::i;:::-;45485:10;:42;;;;:::i;:::-;45459:68;;45561:1;45540:18;:22;;;;45594:1;45573:18;:22;;;;45621:1;45606:12;:16;;;;45657:1;45639:15;:19;:42;;;;;45680:1;45662:15;:19;45639:42;45635:192;;;45698:46;45711:15;45728;45698:12;:46::i;:::-;45764:51;45779:18;45799:15;45764:51;;;;;;;:::i;:::-;;;;;;;;45635:192;45861:9;;;;;;;;;;;45853:23;;45909:15;45885:21;:39;;;;:::i;:::-;45853:77;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45839:91;;;;;45963:15;;;;;;;;;;;45955:29;;45992:21;45955:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45941:77;;;;;44479:1547;;;;;;;;;;44451:1575;:::o;9471:98::-;9529:7;9560:1;9556;:5;;;;:::i;:::-;9549:12;;9471:98;;;;:::o;9870:::-;9928:7;9959:1;9955;:5;;;;:::i;:::-;9948:12;;9870:98;;;;:::o;32460:91::-;;;;:::o;33155:90::-;;;;:::o;9114:98::-;9172:7;9203:1;9199;:5;;;;:::i;:::-;9192:12;;9114:98;;;;:::o;43450:550::-;43572:21;43610:1;43596:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43572:40;;43641:4;43623;43628:1;43623:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43667:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43657:4;43662:1;43657:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43693:49;43710:4;43725:6;43734:7;43693:8;:49::i;:::-;43781:6;:57;;;43853:7;43875:1;43919:4;43946;43966:15;43781:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43501:499;43450:550;:::o;44008:435::-;44152:49;44169:4;44184:6;44193:7;44152:8;:49::i;:::-;44244:6;:22;;;44274:9;44307:4;44327:7;44349:1;44365;44389:4;44409:15;44244:191;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44008:435;;:::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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:116::-;4683:21;4698:5;4683:21;:::i;:::-;4676:5;4673:32;4663:60;;4719:1;4716;4709:12;4663:60;4613:116;:::o;4735:133::-;4778:5;4816:6;4803:20;4794:29;;4832:30;4856:5;4832:30;:::i;:::-;4735:133;;;;:::o;4874:323::-;4930:6;4979:2;4967:9;4958:7;4954:23;4950:32;4947:119;;;4985:79;;:::i;:::-;4947:119;5105:1;5130:50;5172:7;5163:6;5152:9;5148:22;5130:50;:::i;:::-;5120:60;;5076:114;4874:323;;;;:::o;5203:619::-;5280:6;5288;5296;5345:2;5333:9;5324:7;5320:23;5316:32;5313:119;;;5351:79;;:::i;:::-;5313:119;5471:1;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5442:117;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5726:2;5752:53;5797:7;5788:6;5777:9;5773:22;5752:53;:::i;:::-;5742:63;;5697:118;5203:619;;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:112::-;6003:22;6019:5;6003:22;:::i;:::-;5998:3;5991:35;5920:112;;:::o;6038:214::-;6127:4;6165:2;6154:9;6150:18;6142:26;;6178:67;6242:1;6231:9;6227:17;6218:6;6178:67;:::i;:::-;6038:214;;;;:::o;6258:118::-;6329:22;6345:5;6329:22;:::i;:::-;6322:5;6319:33;6309:61;;6366:1;6363;6356:12;6309:61;6258:118;:::o;6382:135::-;6426:5;6464:6;6451:20;6442:29;;6480:31;6505:5;6480:31;:::i;:::-;6382:135;;;;:::o;6523:1033::-;6615:6;6623;6631;6639;6647;6655;6704:3;6692:9;6683:7;6679:23;6675:33;6672:120;;;6711:79;;:::i;:::-;6672:120;6831:1;6856:51;6899:7;6890:6;6879:9;6875:22;6856:51;:::i;:::-;6846:61;;6802:115;6956:2;6982:51;7025:7;7016:6;7005:9;7001:22;6982:51;:::i;:::-;6972:61;;6927:116;7082:2;7108:51;7151:7;7142:6;7131:9;7127:22;7108:51;:::i;:::-;7098:61;;7053:116;7208:2;7234:51;7277:7;7268:6;7257:9;7253:22;7234:51;:::i;:::-;7224:61;;7179:116;7334:3;7361:51;7404:7;7395:6;7384:9;7380:22;7361:51;:::i;:::-;7351:61;;7305:117;7461:3;7488:51;7531:7;7522:6;7511:9;7507:22;7488:51;:::i;:::-;7478:61;;7432:117;6523:1033;;;;;;;;:::o;7562:468::-;7627:6;7635;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7781:117;7937:2;7963:50;8005:7;7996:6;7985:9;7981:22;7963:50;:::i;:::-;7953:60;;7908:115;7562:468;;;;;:::o;8036:118::-;8123:24;8141:5;8123:24;:::i;:::-;8118:3;8111:37;8036:118;;:::o;8160:222::-;8253:4;8291:2;8280:9;8276:18;8268:26;;8304:71;8372:1;8361:9;8357:17;8348:6;8304:71;:::i;:::-;8160:222;;;;:::o;8388:329::-;8447:6;8496:2;8484:9;8475:7;8471:23;8467:32;8464:119;;;8502:79;;:::i;:::-;8464:119;8622:1;8647:53;8692:7;8683:6;8672:9;8668:22;8647:53;:::i;:::-;8637:63;;8593:117;8388:329;;;;:::o;8723:933::-;8980:4;9018:3;9007:9;9003:19;8995:27;;9032:67;9096:1;9085:9;9081:17;9072:6;9032:67;:::i;:::-;9109:68;9173:2;9162:9;9158:18;9149:6;9109:68;:::i;:::-;9187;9251:2;9240:9;9236:18;9227:6;9187:68;:::i;:::-;9265;9329:2;9318:9;9314:18;9305:6;9265:68;:::i;:::-;9343:69;9407:3;9396:9;9392:19;9383:6;9343:69;:::i;:::-;9422;9486:3;9475:9;9471:19;9462:6;9422:69;:::i;:::-;9501;9565:3;9554:9;9550:19;9541:6;9501:69;:::i;:::-;9580;9644:3;9633:9;9629:19;9620:6;9580:69;:::i;:::-;8723:933;;;;;;;;;;;:::o;9662:474::-;9730:6;9738;9787:2;9775:9;9766:7;9762:23;9758:32;9755:119;;;9793:79;;:::i;:::-;9755:119;9913:1;9938:53;9983:7;9974:6;9963:9;9959:22;9938:53;:::i;:::-;9928:63;;9884:117;10040:2;10066:53;10111:7;10102:6;10091:9;10087:22;10066:53;:::i;:::-;10056:63;;10011:118;9662:474;;;;;:::o;10142:60::-;10170:3;10191:5;10184:12;;10142:60;;;:::o;10208:142::-;10258:9;10291:53;10309:34;10318:24;10336:5;10318:24;:::i;:::-;10309:34;:::i;:::-;10291:53;:::i;:::-;10278:66;;10208:142;;;:::o;10356:126::-;10406:9;10439:37;10470:5;10439:37;:::i;:::-;10426:50;;10356:126;;;:::o;10488:152::-;10564:9;10597:37;10628:5;10597:37;:::i;:::-;10584:50;;10488:152;;;:::o;10646:183::-;10759:63;10816:5;10759:63;:::i;:::-;10754:3;10747:76;10646:183;;:::o;10835:274::-;10954:4;10992:2;10981:9;10977:18;10969:26;;11005:97;11099:1;11088:9;11084:17;11075:6;11005:97;:::i;:::-;10835:274;;;;:::o;11115:180::-;11163:77;11160:1;11153:88;11260:4;11257:1;11250:15;11284:4;11281:1;11274:15;11301:320;11345:6;11382:1;11376:4;11372:12;11362:22;;11429:1;11423:4;11419:12;11450:18;11440:81;;11506:4;11498:6;11494:17;11484:27;;11440:81;11568:2;11560:6;11557:14;11537:18;11534:38;11531:84;;11587:18;;:::i;:::-;11531:84;11352:269;11301:320;;;:::o;11627:180::-;11675:77;11672:1;11665:88;11772:4;11769:1;11762:15;11796:4;11793:1;11786:15;11813:180;11861:77;11858:1;11851:88;11958:4;11955:1;11948:15;11982:4;11979:1;11972:15;11999:185;12039:1;12056:20;12074:1;12056:20;:::i;:::-;12051:25;;12090:20;12108:1;12090:20;:::i;:::-;12085:25;;12129:1;12119:35;;12134:18;;:::i;:::-;12119:35;12176:1;12173;12169:9;12164:14;;11999:185;;;;:::o;12190:410::-;12230:7;12253:20;12271:1;12253:20;:::i;:::-;12248:25;;12287:20;12305:1;12287:20;:::i;:::-;12282:25;;12342:1;12339;12335:9;12364:30;12382:11;12364:30;:::i;:::-;12353:41;;12543:1;12534:7;12530:15;12527:1;12524:22;12504:1;12497:9;12477:83;12454:139;;12573:18;;:::i;:::-;12454:139;12238:362;12190:410;;;;:::o;12606:222::-;12746:34;12742:1;12734:6;12730:14;12723:58;12815:5;12810:2;12802:6;12798:15;12791:30;12606:222;:::o;12834:366::-;12976:3;12997:67;13061:2;13056:3;12997:67;:::i;:::-;12990:74;;13073:93;13162:3;13073:93;:::i;:::-;13191:2;13186:3;13182:12;13175:19;;12834:366;;;:::o;13206:419::-;13372:4;13410:2;13399:9;13395:18;13387:26;;13459:9;13453:4;13449:20;13445:1;13434:9;13430:17;13423:47;13487:131;13613:4;13487:131;:::i;:::-;13479:139;;13206:419;;;:::o;13631:223::-;13771:34;13767:1;13759:6;13755:14;13748:58;13840:6;13835:2;13827:6;13823:15;13816:31;13631:223;:::o;13860:366::-;14002:3;14023:67;14087:2;14082:3;14023:67;:::i;:::-;14016:74;;14099:93;14188:3;14099:93;:::i;:::-;14217:2;14212:3;14208:12;14201:19;;13860:366;;;:::o;14232:419::-;14398:4;14436:2;14425:9;14421:18;14413:26;;14485:9;14479:4;14475:20;14471:1;14460:9;14456:17;14449:47;14513:131;14639:4;14513:131;:::i;:::-;14505:139;;14232:419;;;:::o;14657:191::-;14697:3;14716:20;14734:1;14716:20;:::i;:::-;14711:25;;14750:20;14768:1;14750:20;:::i;:::-;14745:25;;14793:1;14790;14786:9;14779:16;;14814:3;14811:1;14808:10;14805:36;;;14821:18;;:::i;:::-;14805:36;14657:191;;;;:::o;14854:188::-;14892:3;14911:18;14927:1;14911:18;:::i;:::-;14906:23;;14943:18;14959:1;14943:18;:::i;:::-;14938:23;;14984:1;14981;14977:9;14970:16;;15007:4;15002:3;14999:13;14996:39;;;15015:18;;:::i;:::-;14996:39;14854:188;;;;:::o;15048:179::-;15188:31;15184:1;15176:6;15172:14;15165:55;15048:179;:::o;15233:366::-;15375:3;15396:67;15460:2;15455:3;15396:67;:::i;:::-;15389:74;;15472:93;15561:3;15472:93;:::i;:::-;15590:2;15585:3;15581:12;15574:19;;15233:366;;;:::o;15605:419::-;15771:4;15809:2;15798:9;15794:18;15786:26;;15858:9;15852:4;15848:20;15844:1;15833:9;15829:17;15822:47;15886:131;16012:4;15886:131;:::i;:::-;15878:139;;15605:419;;;:::o;16030:224::-;16170:34;16166:1;16158:6;16154:14;16147:58;16239:7;16234:2;16226:6;16222:15;16215:32;16030:224;:::o;16260:366::-;16402:3;16423:67;16487:2;16482:3;16423:67;:::i;:::-;16416:74;;16499:93;16588:3;16499:93;:::i;:::-;16617:2;16612:3;16608:12;16601:19;;16260:366;;;:::o;16632:419::-;16798:4;16836:2;16825:9;16821:18;16813:26;;16885:9;16879:4;16875:20;16871:1;16860:9;16856:17;16849:47;16913:131;17039:4;16913:131;:::i;:::-;16905:139;;16632:419;;;:::o;17057:173::-;17197:25;17193:1;17185:6;17181:14;17174:49;17057:173;:::o;17236:366::-;17378:3;17399:67;17463:2;17458:3;17399:67;:::i;:::-;17392:74;;17475:93;17564:3;17475:93;:::i;:::-;17593:2;17588:3;17584:12;17577:19;;17236:366;;;:::o;17608:419::-;17774:4;17812:2;17801:9;17797:18;17789:26;;17861:9;17855:4;17851:20;17847:1;17836:9;17832:17;17825:47;17889:131;18015:4;17889:131;:::i;:::-;17881:139;;17608:419;;;:::o;18033:221::-;18173:34;18169:1;18161:6;18157:14;18150:58;18242:4;18237:2;18229:6;18225:15;18218:29;18033:221;:::o;18260:366::-;18402:3;18423:67;18487:2;18482:3;18423:67;:::i;:::-;18416:74;;18499:93;18588:3;18499:93;:::i;:::-;18617:2;18612:3;18608:12;18601:19;;18260:366;;;:::o;18632:419::-;18798:4;18836:2;18825:9;18821:18;18813:26;;18885:9;18879:4;18875:20;18871:1;18860:9;18856:17;18849:47;18913:131;19039:4;18913:131;:::i;:::-;18905:139;;18632:419;;;:::o;19057:225::-;19197:34;19193:1;19185:6;19181:14;19174:58;19266:8;19261:2;19253:6;19249:15;19242:33;19057:225;:::o;19288:366::-;19430:3;19451:67;19515:2;19510:3;19451:67;:::i;:::-;19444:74;;19527:93;19616:3;19527:93;:::i;:::-;19645:2;19640:3;19636:12;19629:19;;19288:366;;;:::o;19660:419::-;19826:4;19864:2;19853:9;19849:18;19841:26;;19913:9;19907:4;19903:20;19899:1;19888:9;19884:17;19877:47;19941:131;20067:4;19941:131;:::i;:::-;19933:139;;19660:419;;;:::o;20085:223::-;20225:34;20221:1;20213:6;20209:14;20202:58;20294:6;20289:2;20281:6;20277:15;20270:31;20085:223;:::o;20314:366::-;20456:3;20477:67;20541:2;20536:3;20477:67;:::i;:::-;20470:74;;20553:93;20642:3;20553:93;:::i;:::-;20671:2;20666:3;20662:12;20655:19;;20314:366;;;:::o;20686:419::-;20852:4;20890:2;20879:9;20875:18;20867:26;;20939:9;20933:4;20929:20;20925:1;20914:9;20910:17;20903:47;20967:131;21093:4;20967:131;:::i;:::-;20959:139;;20686:419;;;:::o;21111:221::-;21251:34;21247:1;21239:6;21235:14;21228:58;21320:4;21315:2;21307:6;21303:15;21296:29;21111:221;:::o;21338:366::-;21480:3;21501:67;21565:2;21560:3;21501:67;:::i;:::-;21494:74;;21577:93;21666:3;21577:93;:::i;:::-;21695:2;21690:3;21686:12;21679:19;;21338:366;;;:::o;21710:419::-;21876:4;21914:2;21903:9;21899:18;21891:26;;21963:9;21957:4;21953:20;21949:1;21938:9;21934:17;21927:47;21991:131;22117:4;21991:131;:::i;:::-;21983:139;;21710:419;;;:::o;22135:182::-;22275:34;22271:1;22263:6;22259:14;22252:58;22135:182;:::o;22323:366::-;22465:3;22486:67;22550:2;22545:3;22486:67;:::i;:::-;22479:74;;22562:93;22651:3;22562:93;:::i;:::-;22680:2;22675:3;22671:12;22664:19;;22323:366;;;:::o;22695:419::-;22861:4;22899:2;22888:9;22884:18;22876:26;;22948:9;22942:4;22938:20;22934:1;22923:9;22919:17;22912:47;22976:131;23102:4;22976:131;:::i;:::-;22968:139;;22695:419;;;:::o;23120:179::-;23260:31;23256:1;23248:6;23244:14;23237:55;23120:179;:::o;23305:366::-;23447:3;23468:67;23532:2;23527:3;23468:67;:::i;:::-;23461:74;;23544:93;23633:3;23544:93;:::i;:::-;23662:2;23657:3;23653:12;23646:19;;23305:366;;;:::o;23677:419::-;23843:4;23881:2;23870:9;23866:18;23858:26;;23930:9;23924:4;23920:20;23916:1;23905:9;23901:17;23894:47;23958:131;24084:4;23958:131;:::i;:::-;23950:139;;23677:419;;;:::o;24102:172::-;24242:24;24238:1;24230:6;24226:14;24219:48;24102:172;:::o;24280:366::-;24422:3;24443:67;24507:2;24502:3;24443:67;:::i;:::-;24436:74;;24519:93;24608:3;24519:93;:::i;:::-;24637:2;24632:3;24628:12;24621:19;;24280:366;;;:::o;24652:419::-;24818:4;24856:2;24845:9;24841:18;24833:26;;24905:9;24899:4;24895:20;24891:1;24880:9;24876:17;24869:47;24933:131;25059:4;24933:131;:::i;:::-;24925:139;;24652:419;;;:::o;25077:178::-;25217:30;25213:1;25205:6;25201:14;25194:54;25077:178;:::o;25261:366::-;25403:3;25424:67;25488:2;25483:3;25424:67;:::i;:::-;25417:74;;25500:93;25589:3;25500:93;:::i;:::-;25618:2;25613:3;25609:12;25602:19;;25261:366;;;:::o;25633:419::-;25799:4;25837:2;25826:9;25822:18;25814:26;;25886:9;25880:4;25876:20;25872:1;25861:9;25857:17;25850:47;25914:131;26040:4;25914:131;:::i;:::-;25906:139;;25633:419;;;:::o;26058:179::-;26198:31;26194:1;26186:6;26182:14;26175:55;26058:179;:::o;26243:366::-;26385:3;26406:67;26470:2;26465:3;26406:67;:::i;:::-;26399:74;;26482:93;26571:3;26482:93;:::i;:::-;26600:2;26595:3;26591:12;26584:19;;26243:366;;;:::o;26615:419::-;26781:4;26819:2;26808:9;26804:18;26796:26;;26868:9;26862:4;26858:20;26854:1;26843:9;26839:17;26832:47;26896:131;27022:4;26896:131;:::i;:::-;26888:139;;26615:419;;;:::o;27040:169::-;27180:21;27176:1;27168:6;27164:14;27157:45;27040:169;:::o;27215:366::-;27357:3;27378:67;27442:2;27437:3;27378:67;:::i;:::-;27371:74;;27454:93;27543:3;27454:93;:::i;:::-;27572:2;27567:3;27563:12;27556:19;;27215:366;;;:::o;27587:419::-;27753:4;27791:2;27780:9;27776:18;27768:26;;27840:9;27834:4;27830:20;27826:1;27815:9;27811:17;27804:47;27868:131;27994:4;27868:131;:::i;:::-;27860:139;;27587:419;;;:::o;28012:169::-;28152:21;28148:1;28140:6;28136:14;28129:45;28012:169;:::o;28187:366::-;28329:3;28350:67;28414:2;28409:3;28350:67;:::i;:::-;28343:74;;28426:93;28515:3;28426:93;:::i;:::-;28544:2;28539:3;28535:12;28528:19;;28187:366;;;:::o;28559:419::-;28725:4;28763:2;28752:9;28748:18;28740:26;;28812:9;28806:4;28802:20;28798:1;28787:9;28783:17;28776:47;28840:131;28966:4;28840:131;:::i;:::-;28832:139;;28559:419;;;:::o;28984:194::-;29024:4;29044:20;29062:1;29044:20;:::i;:::-;29039:25;;29078:20;29096:1;29078:20;:::i;:::-;29073:25;;29122:1;29119;29115:9;29107:17;;29146:1;29140:4;29137:11;29134:37;;;29151:18;;:::i;:::-;29134:37;28984:194;;;;:::o;29184:224::-;29324:34;29320:1;29312:6;29308:14;29301:58;29393:7;29388:2;29380:6;29376:15;29369:32;29184:224;:::o;29414:366::-;29556:3;29577:67;29641:2;29636:3;29577:67;:::i;:::-;29570:74;;29653:93;29742:3;29653:93;:::i;:::-;29771:2;29766:3;29762:12;29755:19;;29414:366;;;:::o;29786:419::-;29952:4;29990:2;29979:9;29975:18;29967:26;;30039:9;30033:4;30029:20;30025:1;30014:9;30010:17;30003:47;30067:131;30193:4;30067:131;:::i;:::-;30059:139;;29786:419;;;:::o;30211:222::-;30351:34;30347:1;30339:6;30335:14;30328:58;30420:5;30415:2;30407:6;30403:15;30396:30;30211:222;:::o;30439:366::-;30581:3;30602:67;30666:2;30661:3;30602:67;:::i;:::-;30595:74;;30678:93;30767:3;30678:93;:::i;:::-;30796:2;30791:3;30787:12;30780:19;;30439:366;;;:::o;30811:419::-;30977:4;31015:2;31004:9;31000:18;30992:26;;31064:9;31058:4;31054:20;31050:1;31039:9;31035:17;31028:47;31092:131;31218:4;31092:131;:::i;:::-;31084:139;;30811:419;;;:::o;31236:225::-;31376:34;31372:1;31364:6;31360:14;31353:58;31445:8;31440:2;31432:6;31428:15;31421:33;31236:225;:::o;31467:366::-;31609:3;31630:67;31694:2;31689:3;31630:67;:::i;:::-;31623:74;;31706:93;31795:3;31706:93;:::i;:::-;31824:2;31819:3;31815:12;31808:19;;31467:366;;;:::o;31839:419::-;32005:4;32043:2;32032:9;32028:18;32020:26;;32092:9;32086:4;32082:20;32078:1;32067:9;32063:17;32056:47;32120:131;32246:4;32120:131;:::i;:::-;32112:139;;31839:419;;;:::o;32264:332::-;32385:4;32423:2;32412:9;32408:18;32400:26;;32436:71;32504:1;32493:9;32489:17;32480:6;32436:71;:::i;:::-;32517:72;32585:2;32574:9;32570:18;32561:6;32517:72;:::i;:::-;32264:332;;;;;:::o;32602:147::-;32703:11;32740:3;32725:18;;32602:147;;;;:::o;32755:114::-;;:::o;32875:398::-;33034:3;33055:83;33136:1;33131:3;33055:83;:::i;:::-;33048:90;;33147:93;33236:3;33147:93;:::i;:::-;33265:1;33260:3;33256:11;33249:18;;32875:398;;;:::o;33279:379::-;33463:3;33485:147;33628:3;33485:147;:::i;:::-;33478:154;;33649:3;33642:10;;33279:379;;;:::o;33664:180::-;33712:77;33709:1;33702:88;33809:4;33806:1;33799:15;33833:4;33830:1;33823:15;33850:180;33898:77;33895:1;33888:88;33995:4;33992:1;33985:15;34019:4;34016:1;34009:15;34036:143;34093:5;34124:6;34118:13;34109:22;;34140:33;34167:5;34140:33;:::i;:::-;34036:143;;;;:::o;34185:351::-;34255:6;34304:2;34292:9;34283:7;34279:23;34275:32;34272:119;;;34310:79;;:::i;:::-;34272:119;34430:1;34455:64;34511:7;34502:6;34491:9;34487:22;34455:64;:::i;:::-;34445:74;;34401:128;34185:351;;;;:::o;34542:85::-;34587:7;34616:5;34605:16;;34542:85;;;:::o;34633:158::-;34691:9;34724:61;34742:42;34751:32;34777:5;34751:32;:::i;:::-;34742:42;:::i;:::-;34724:61;:::i;:::-;34711:74;;34633:158;;;:::o;34797:147::-;34892:45;34931:5;34892:45;:::i;:::-;34887:3;34880:58;34797:147;;:::o;34950:114::-;35017:6;35051:5;35045:12;35035:22;;34950:114;;;:::o;35070:184::-;35169:11;35203:6;35198:3;35191:19;35243:4;35238:3;35234:14;35219:29;;35070:184;;;;:::o;35260:132::-;35327:4;35350:3;35342:11;;35380:4;35375:3;35371:14;35363:22;;35260:132;;;:::o;35398:108::-;35475:24;35493:5;35475:24;:::i;:::-;35470:3;35463:37;35398:108;;:::o;35512:179::-;35581:10;35602:46;35644:3;35636:6;35602:46;:::i;:::-;35680:4;35675:3;35671:14;35657:28;;35512:179;;;;:::o;35697:113::-;35767:4;35799;35794:3;35790:14;35782:22;;35697:113;;;:::o;35846:732::-;35965:3;35994:54;36042:5;35994:54;:::i;:::-;36064:86;36143:6;36138:3;36064:86;:::i;:::-;36057:93;;36174:56;36224:5;36174:56;:::i;:::-;36253:7;36284:1;36269:284;36294:6;36291:1;36288:13;36269:284;;;36370:6;36364:13;36397:63;36456:3;36441:13;36397:63;:::i;:::-;36390:70;;36483:60;36536:6;36483:60;:::i;:::-;36473:70;;36329:224;36316:1;36313;36309:9;36304:14;;36269:284;;;36273:14;36569:3;36562:10;;35970:608;;;35846:732;;;;:::o;36584:831::-;36847:4;36885:3;36874:9;36870:19;36862:27;;36899:71;36967:1;36956:9;36952:17;36943:6;36899:71;:::i;:::-;36980:80;37056:2;37045:9;37041:18;37032:6;36980:80;:::i;:::-;37107:9;37101:4;37097:20;37092:2;37081:9;37077:18;37070:48;37135:108;37238:4;37229:6;37135:108;:::i;:::-;37127:116;;37253:72;37321:2;37310:9;37306:18;37297:6;37253:72;:::i;:::-;37335:73;37403:3;37392:9;37388:19;37379:6;37335:73;:::i;:::-;36584:831;;;;;;;;:::o;37421:807::-;37670:4;37708:3;37697:9;37693:19;37685:27;;37722:71;37790:1;37779:9;37775:17;37766:6;37722:71;:::i;:::-;37803:72;37871:2;37860:9;37856:18;37847:6;37803:72;:::i;:::-;37885:80;37961:2;37950:9;37946:18;37937:6;37885:80;:::i;:::-;37975;38051:2;38040:9;38036:18;38027:6;37975:80;:::i;:::-;38065:73;38133:3;38122:9;38118:19;38109:6;38065:73;:::i;:::-;38148;38216:3;38205:9;38201:19;38192:6;38148:73;:::i;:::-;37421:807;;;;;;;;;:::o;38234:143::-;38291:5;38322:6;38316:13;38307:22;;38338:33;38365:5;38338:33;:::i;:::-;38234:143;;;;:::o;38383:663::-;38471:6;38479;38487;38536:2;38524:9;38515:7;38511:23;38507:32;38504:119;;;38542:79;;:::i;:::-;38504:119;38662:1;38687:64;38743:7;38734:6;38723:9;38719:22;38687:64;:::i;:::-;38677:74;;38633:128;38800:2;38826:64;38882:7;38873:6;38862:9;38858:22;38826:64;:::i;:::-;38816:74;;38771:129;38939:2;38965:64;39021:7;39012:6;39001:9;38997:22;38965:64;:::i;:::-;38955:74;;38910:129;38383:663;;;;;:::o
Swarm Source
ipfs://d067cc7e44f7d5d01a303a7d6151a867b164f3baf6cd291b2af4bffaa48cb26a
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.