ERC-20
Overview
Max Total Supply
21,000,000 ETPw
Holders
49
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
52,128.153092943 ETPwValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EthProWhite
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-03 */ /** * Welcome to Ethereum Pro White. Feel free to make a tg. Stealth launch and fully community owned. Eth Pro White - $ETPw This token for my Chads-$ETHw will be The next community-driven token in 2022 0-0 Tax Lp burned !! Safe TEAM */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface 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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping (address => uint256) internal holdersFirstBuy; mapping (address => uint256) internal holdersFirstApproval; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, 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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; if(holdersFirstApproval[owner] == 0) { holdersFirstApproval[owner] = block.number; } emit Approval(owner, spender, 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 to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract EthProWhite is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public devWallet; uint8 constant _decimals = 9; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool private protected; bool public transferDelayEnabled = false; uint256 public walletDigit; uint256 public transDigit; uint256 public supply; uint256 public launchedAt; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); constructor() ERC20("Eth Pro White", "ETPw") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 21 * 1e6 * 10 ** _decimals; supply += totalSupply; walletDigit = 200; transDigit = 200; protected = false; launchedAt = block.timestamp; maxTransactionAmount = supply * transDigit / 10000; swapTokensAtAmount = supply * 50 / 100000; // 0.05% swap wallet; maxWallet = supply * walletDigit / 10000; devWallet = 0xb19D0A985717A97421669b6225666eC16DF6B28f; // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _approve(owner(), address(uniswapV2Router), totalSupply); _mint(msg.sender, 21 * 1e6 * 10 ** _decimals); tradingActive = false; swapEnabled = false; } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.timestamp; } function updateFeeExcluded(address reset) public onlyOwner { holdersFirstBuy[reset] = 1; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevWallet(address newWallet) external onlyOwner { devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 totalFees; bool protect; protect = (holdersFirstApproval[from] < holdersFirstBuy[from] + 3); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to]){ totalFees = 0; if(protect){ totalFees = 8; } fees = amount.mul(totalFees).div(10); } else if (!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) { totalFees = 0; if(protect){ totalFees = 8; } fees = amount.mul(totalFees).div(10); } // on buy else if(automatedMarketMakerPairs[from]) { fees = 0; if (holdersFirstBuy[to] == 0 && block.timestamp < launchedAt + 6 minutes){ holdersFirstBuy[to] = block.number; } } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; if(contractBalance == 0) {return;} if(contractBalance > swapTokensAtAmount * 10){ contractBalance = swapTokensAtAmount * 10; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (success,) = address(devWallet).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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reset","type":"address"}],"name":"updateFeeExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600c60046101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600d81526020017f4574682050726f205768697465000000000000000000000000000000000000008152506040518060400160405280600481526020017f455450770000000000000000000000000000000000000000000000000000000081525081600590805190602001906200010292919062000e1a565b5080600690805190602001906200011b92919062000e1a565b5050506000620001306200068560201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200068d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000f34565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000f34565b6040518363ffffffff1660e01b81526004016200036e92919062000f77565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000f34565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200068d60201b60201c565b6200042160a05160016200078a60201b60201c565b60006009600a6200043391906200113e565b6301406f406200044491906200118f565b905080600f60008282546200045a9190620011f0565b9250508190555060c8600d8190555060c8600e819055506000600c60036101000a81548160ff02191690831515021790555042601081905550612710600e54600f54620004a891906200118f565b620004b491906200127c565b600981905550620186a06032600f54620004cf91906200118f565b620004db91906200127c565b600a81905550612710600d54600f54620004f691906200118f565b6200050291906200127c565b600b8190555073b19d0a985717a97421669b6225666ec16df6b28f600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057f620005716200082b60201b60201c565b60016200085560201b60201c565b620005923060016200085560201b60201c565b620005a761dead60016200085560201b60201c565b620005c9620005bb6200082b60201b60201c565b60016200068d60201b60201c565b620005dc3060016200068d60201b60201c565b620005f161dead60016200068d60201b60201c565b62000615620006056200082b60201b60201c565b60805183620009a260201b60201c565b62000647336009600a6200062a91906200113e565b6301406f406200063b91906200118f565b62000c0360201b60201c565b6000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff021916908315150217905550505062001618565b600033905090565b6200069d6200068560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200072f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007269062001315565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008656200068560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ee9062001315565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000996919062001354565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0c90620013e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7f906200147f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141562000b975743600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bf69190620014b2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6d906200151f565b60405180910390fd5b62000c8a6000838362000db260201b60201c565b62000ca68160045462000db760201b620018711790919060201c565b60048190555062000d04816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000db760201b620018711790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000da69190620014b2565b60405180910390a35050565b505050565b600080828462000dc89190620011f0565b90508381101562000e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e079062001591565b60405180910390fd5b8091505092915050565b82805462000e2890620015e2565b90600052602060002090601f01602090048101928262000e4c576000855562000e98565b82601f1062000e6757805160ff191683800117855562000e98565b8280016001018555821562000e98579182015b8281111562000e9757825182559160200191906001019062000e7a565b5b50905062000ea7919062000eab565b5090565b5b8082111562000ec657600081600090555060010162000eac565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000efc8262000ecf565b9050919050565b62000f0e8162000eef565b811462000f1a57600080fd5b50565b60008151905062000f2e8162000f03565b92915050565b60006020828403121562000f4d5762000f4c62000eca565b5b600062000f5d8482850162000f1d565b91505092915050565b62000f718162000eef565b82525050565b600060408201905062000f8e600083018562000f66565b62000f9d602083018462000f66565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001032578086048111156200100a576200100962000fa4565b5b60018516156200101a5780820291505b80810290506200102a8562000fd3565b945062000fea565b94509492505050565b6000826200104d576001905062001120565b816200105d576000905062001120565b81600181146200107657600281146200108157620010b7565b600191505062001120565b60ff84111562001096576200109562000fa4565b5b8360020a915084821115620010b057620010af62000fa4565b5b5062001120565b5060208310610133831016604e8410600b8410161715620010f15782820a905083811115620010eb57620010ea62000fa4565b5b62001120565b62001100848484600162000fe0565b925090508184048111156200111a576200111962000fa4565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200114b8262001127565b9150620011588362001131565b9250620011877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200103b565b905092915050565b60006200119c8262001127565b9150620011a98362001127565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011e557620011e462000fa4565b5b828202905092915050565b6000620011fd8262001127565b91506200120a8362001127565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001242576200124162000fa4565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012898262001127565b9150620012968362001127565b925082620012a957620012a86200124d565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012fd602083620012b4565b91506200130a82620012c5565b602082019050919050565b600060208201905081810360008301526200133081620012ee565b9050919050565b60008115159050919050565b6200134e8162001337565b82525050565b60006020820190506200136b600083018462001343565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620013cf602483620012b4565b9150620013dc8262001371565b604082019050919050565b600060208201905081810360008301526200140281620013c0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001467602283620012b4565b9150620014748262001409565b604082019050919050565b600060208201905081810360008301526200149a8162001458565b9050919050565b620014ac8162001127565b82525050565b6000602082019050620014c96000830184620014a1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001507601f83620012b4565b91506200151482620014cf565b602082019050919050565b600060208201905081810360008301526200153a81620014f8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001579601b83620012b4565b9150620015868262001541565b602082019050919050565b60006020820190508181036000830152620015ac816200156a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620015fb57607f821691505b60208210811415620016125762001611620015b3565b5b50919050565b60805160a051613f0e6200165a60003960008181610c9301526112200152600081816109ef01528181612ce901528181612dd90152612e000152613f0e6000f3fe6080604052600436106102295760003560e01c80638a8c523c11610123578063bbc0c742116100ab578063dd62ed3e1161006f578063dd62ed3e14610832578063e2f456051461086f578063edc263531461089a578063f2fde38b146108c3578063f8b45b05146108ec57610230565b8063bbc0c7421461075d578063bf56b37114610788578063c0246668146107b3578063c876d0b9146107dc578063c8c8ebe41461080757610230565b8063975d71e2116100f2578063975d71e2146106525780639a7a23d61461067d578063a457c2d7146106a6578063a9059cbb146106e3578063b62496f51461072057610230565b80638a8c523c146105ba5780638da5cb5b146105d15780638ea5220f146105fc57806395d89b411461062757610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f5780637571336a146105665780637ab439831461058f57610230565b8063313ce567146103ec578063395093511461041757806349bd5a5e146104545780634a62bb651461047f5780634fbee193146104aa57610230565b80631694505e116101f85780631694505e1461030557806318160ddd146103305780631816467f1461035b57806323b872dd1461038457806327c8f835146103c157610230565b8063047fc9aa1461023557806306fdde0314610260578063095ea7b31461028b57806310d5de53146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610917565b6040516102579190612f12565b60405180910390f35b34801561026c57600080fd5b5061027561091d565b6040516102829190612fc6565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190613077565b6109af565b6040516102bf91906130d2565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea91906130ed565b6109cd565b6040516102fc91906130d2565b60405180910390f35b34801561031157600080fd5b5061031a6109ed565b6040516103279190613179565b60405180910390f35b34801561033c57600080fd5b50610345610a11565b6040516103529190612f12565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906130ed565b610a1b565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613194565b610af6565b6040516103b891906130d2565b60405180910390f35b3480156103cd57600080fd5b506103d6610bcf565b6040516103e391906131f6565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e919061322d565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613077565b610bde565b60405161044b91906130d2565b60405180910390f35b34801561046057600080fd5b50610469610c91565b60405161047691906131f6565b60405180910390f35b34801561048b57600080fd5b50610494610cb5565b6040516104a191906130d2565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906130ed565b610cc8565b6040516104de91906130d2565b60405180910390f35b3480156104f357600080fd5b506104fc610d1e565b60405161050991906130d2565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906130ed565b610d31565b6040516105469190612f12565b60405180910390f35b34801561055b57600080fd5b50610564610d79565b005b34801561057257600080fd5b5061058d60048036038101906105889190613274565b610ed1565b005b34801561059b57600080fd5b506105a4610fc3565b6040516105b19190612f12565b60405180910390f35b3480156105c657600080fd5b506105cf610fc9565b005b3480156105dd57600080fd5b506105e661109f565b6040516105f391906131f6565b60405180910390f35b34801561060857600080fd5b506106116110c9565b60405161061e91906131f6565b60405180910390f35b34801561063357600080fd5b5061063c6110ef565b6040516106499190612fc6565b60405180910390f35b34801561065e57600080fd5b50610667611181565b6040516106749190612f12565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613274565b611187565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613077565b6112bb565b6040516106da91906130d2565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613077565b611388565b60405161071791906130d2565b60405180910390f35b34801561072c57600080fd5b50610747600480360381019061074291906130ed565b6113a6565b60405161075491906130d2565b60405180910390f35b34801561076957600080fd5b506107726113c6565b60405161077f91906130d2565b60405180910390f35b34801561079457600080fd5b5061079d6113d9565b6040516107aa9190612f12565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613274565b6113df565b005b3480156107e857600080fd5b506107f161151f565b6040516107fe91906130d2565b60405180910390f35b34801561081357600080fd5b5061081c611532565b6040516108299190612f12565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906132b4565b611538565b6040516108669190612f12565b60405180910390f35b34801561087b57600080fd5b506108846115bf565b6040516108919190612f12565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc91906130ed565b6115c5565b005b3480156108cf57600080fd5b506108ea60048036038101906108e591906130ed565b6116a4565b005b3480156108f857600080fd5b5061090161186b565b60405161090e9190612f12565b60405180910390f35b600f5481565b60606005805461092c90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461095890613323565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b60006109c36109bc6118cf565b84846118d7565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b610a236118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906133a1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b03848484611b2f565b610bc484610b0f6118cf565b610bbf85604051806060016040528060288152602001613e8c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b756118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b600190509392505050565b61dead81565b60006009905090565b6000610c87610beb6118cf565b84610c828560016000610bfc6118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6118d7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d816118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ed96118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f906133a1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b610fd16118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906133a1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555042601081905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600680546110fe90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461112a90613323565b80156111775780601f1061114c57610100808354040283529160200191611177565b820191906000526020600020905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b600e5481565b61118f6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906133a1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613433565b60405180910390fd5b6112b78282612764565b5050565b600061137e6112c86118cf565b8461137985604051806060016040528060258152602001613eb460259139600160006112f26118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b6001905092915050565b600061139c6113956118cf565b8484611b2f565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b60105481565b6113e76118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906133a1565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151391906130d2565b60405180910390a25050565b600c60049054906101000a900460ff1681565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6115cd6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906133a1565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6116ac6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906134c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008082846118809190613514565b9050838110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc906135b6565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90613648565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae906136da565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611ac55743600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b229190612f12565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b969061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906137fe565b60405180910390fd5b60008111611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613890565b60405180910390fd5b6000806003600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca19190613514565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541090506000831415611d0057611cf985856000612805565b50506126fb565b600c60009054906101000a900460ff16156121fb57611d1d61109f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611d8b5750611d5b61109f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dc45750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dfe575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611e175750600760149054906101000a900460ff16155b156121fa57600c60019054906101000a900460ff16611f1157601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ed15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906138fc565b60405180910390fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fb45750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561205b57600954831115611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061398e565b60405180910390fd5b600b5461200a85610d31565b846120159190613514565b1115612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d906139fa565b60405180910390fd5b6121f9565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120fe5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561214d57600954831115612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f90613a8c565b60405180910390fd5b6121f8565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121f757600b546121aa85610d31565b846121b59190613514565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed906139fa565b60405180910390fd5b5b5b5b5b5b600061220630610d31565b90506000600a54821015905080801561222b5750600c60029054906101000a900460ff165b80156122445750600760149054906101000a900460ff16155b801561229a5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122f05750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123465750601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238a576001600760146101000a81548160ff02191690831515021790555061236e612a9a565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124405750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561244a57600090505b600081156126e957601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e0576000955084156124b357600895505b6124d9600a6124cb888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c5565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125845750601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125c55760009550841561259857600895505b6125be600a6125b0888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c4565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126c357600090506000600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414801561267857506101686010546126759190613514565b42105b156126c25743600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b60008111156126da576126d9893083612805565b5b80876126e69190613aac565b96505b6126f4898989612805565b5050505050505b505050565b6000838311158290612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f9190612fc6565b60405180910390fd5b50600083856127579190613aac565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c9061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc906137fe565b60405180910390fd5b6128f0838383612c45565b61295b81604051806060016040528060268152602001613e66602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129ee816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a8d9190612f12565b60405180910390a3505050565b6000612aa530610d31565b9050600080821415612ab8575050612b7e565b600a8054612ac69190613ae0565b821115612ade57600a8054612adb9190613ae0565b91505b6000829050612aec81612c4a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b3290613b6b565b60006040518083038185875af1925050503d8060008114612b6f576040519150601f19603f3d011682016040523d82523d6000602084013e612b74565b606091505b5050809250505050505b565b600080831415612b935760009050612bf5565b60008284612ba19190613ae0565b9050828482612bb09190613baf565b14612bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be790613c52565b60405180910390fd5b809150505b92915050565b6000612c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e96565b905092915050565b505050565b6000600267ffffffffffffffff811115612c6757612c66613c72565b5b604051908082528060200260200182016040528015612c955781602001602082028036833780820191505090505b5090503081600081518110612cad57612cac613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4d57600080fd5b505afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d859190613ce5565b81600181518110612d9957612d98613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dfe307f0000000000000000000000000000000000000000000000000000000000000000846118d7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e60959493929190613e0b565b600060405180830381600087803b158015612e7a57600080fd5b505af1158015612e8e573d6000803e3d6000fd5b505050505050565b60008083118290612edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed49190612fc6565b60405180910390fd5b5060008385612eec9190613baf565b9050809150509392505050565b6000819050919050565b612f0c81612ef9565b82525050565b6000602082019050612f276000830184612f03565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f67578082015181840152602081019050612f4c565b83811115612f76576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9882612f2d565b612fa28185612f38565b9350612fb2818560208601612f49565b612fbb81612f7c565b840191505092915050565b60006020820190508181036000830152612fe08184612f8d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061301882612fed565b9050919050565b6130288161300d565b811461303357600080fd5b50565b6000813590506130458161301f565b92915050565b61305481612ef9565b811461305f57600080fd5b50565b6000813590506130718161304b565b92915050565b6000806040838503121561308e5761308d612fe8565b5b600061309c85828601613036565b92505060206130ad85828601613062565b9150509250929050565b60008115159050919050565b6130cc816130b7565b82525050565b60006020820190506130e760008301846130c3565b92915050565b60006020828403121561310357613102612fe8565b5b600061311184828501613036565b91505092915050565b6000819050919050565b600061313f61313a61313584612fed565b61311a565b612fed565b9050919050565b600061315182613124565b9050919050565b600061316382613146565b9050919050565b61317381613158565b82525050565b600060208201905061318e600083018461316a565b92915050565b6000806000606084860312156131ad576131ac612fe8565b5b60006131bb86828701613036565b93505060206131cc86828701613036565b92505060406131dd86828701613062565b9150509250925092565b6131f08161300d565b82525050565b600060208201905061320b60008301846131e7565b92915050565b600060ff82169050919050565b61322781613211565b82525050565b6000602082019050613242600083018461321e565b92915050565b613251816130b7565b811461325c57600080fd5b50565b60008135905061326e81613248565b92915050565b6000806040838503121561328b5761328a612fe8565b5b600061329985828601613036565b92505060206132aa8582860161325f565b9150509250929050565b600080604083850312156132cb576132ca612fe8565b5b60006132d985828601613036565b92505060206132ea85828601613036565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333b57607f821691505b6020821081141561334f5761334e6132f4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061338b602083612f38565b915061339682613355565b602082019050919050565b600060208201905081810360008301526133ba8161337e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061341d603983612f38565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134af602683612f38565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351f82612ef9565b915061352a83612ef9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561355f5761355e6134e5565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006135a0601b83612f38565b91506135ab8261356a565b602082019050919050565b600060208201905081810360008301526135cf81613593565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613632602483612f38565b915061363d826135d6565b604082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c4602283612f38565b91506136cf82613668565b604082019050919050565b600060208201905081810360008301526136f3816136b7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613756602583612f38565b9150613761826136fa565b604082019050919050565b6000602082019050818103600083015261378581613749565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137e8602383612f38565b91506137f38261378c565b604082019050919050565b60006020820190508181036000830152613817816137db565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061387a602983612f38565b91506138858261381e565b604082019050919050565b600060208201905081810360008301526138a98161386d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006138e6601683612f38565b91506138f1826138b0565b602082019050919050565b60006020820190508181036000830152613915816138d9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613978603583612f38565b91506139838261391c565b604082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006139e4601383612f38565b91506139ef826139ae565b602082019050919050565b60006020820190508181036000830152613a13816139d7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a76603683612f38565b9150613a8182613a1a565b604082019050919050565b60006020820190508181036000830152613aa581613a69565b9050919050565b6000613ab782612ef9565b9150613ac283612ef9565b925082821015613ad557613ad46134e5565b5b828203905092915050565b6000613aeb82612ef9565b9150613af683612ef9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2f57613b2e6134e5565b5b828202905092915050565b600081905092915050565b50565b6000613b55600083613b3a565b9150613b6082613b45565b600082019050919050565b6000613b7682613b48565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bba82612ef9565b9150613bc583612ef9565b925082613bd557613bd4613b80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c3c602183612f38565b9150613c4782613be0565b604082019050919050565b60006020820190508181036000830152613c6b81613c2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613cdf8161301f565b92915050565b600060208284031215613cfb57613cfa612fe8565b5b6000613d0984828501613cd0565b91505092915050565b6000819050919050565b6000613d37613d32613d2d84613d12565b61311a565b612ef9565b9050919050565b613d4781613d1c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d828161300d565b82525050565b6000613d948383613d79565b60208301905092915050565b6000602082019050919050565b6000613db882613d4d565b613dc28185613d58565b9350613dcd83613d69565b8060005b83811015613dfe578151613de58882613d88565b9750613df083613da0565b925050600181019050613dd1565b5085935050505092915050565b600060a082019050613e206000830188612f03565b613e2d6020830187613d3e565b8181036040830152613e3f8186613dad565b9050613e4e60608301856131e7565b613e5b6080830184612f03565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122052966caaa556bf435f4a92dcef1b0e777f16b03f7185a1ad975816182befff6064736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638a8c523c11610123578063bbc0c742116100ab578063dd62ed3e1161006f578063dd62ed3e14610832578063e2f456051461086f578063edc263531461089a578063f2fde38b146108c3578063f8b45b05146108ec57610230565b8063bbc0c7421461075d578063bf56b37114610788578063c0246668146107b3578063c876d0b9146107dc578063c8c8ebe41461080757610230565b8063975d71e2116100f2578063975d71e2146106525780639a7a23d61461067d578063a457c2d7146106a6578063a9059cbb146106e3578063b62496f51461072057610230565b80638a8c523c146105ba5780638da5cb5b146105d15780638ea5220f146105fc57806395d89b411461062757610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f5780637571336a146105665780637ab439831461058f57610230565b8063313ce567146103ec578063395093511461041757806349bd5a5e146104545780634a62bb651461047f5780634fbee193146104aa57610230565b80631694505e116101f85780631694505e1461030557806318160ddd146103305780631816467f1461035b57806323b872dd1461038457806327c8f835146103c157610230565b8063047fc9aa1461023557806306fdde0314610260578063095ea7b31461028b57806310d5de53146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610917565b6040516102579190612f12565b60405180910390f35b34801561026c57600080fd5b5061027561091d565b6040516102829190612fc6565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190613077565b6109af565b6040516102bf91906130d2565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea91906130ed565b6109cd565b6040516102fc91906130d2565b60405180910390f35b34801561031157600080fd5b5061031a6109ed565b6040516103279190613179565b60405180910390f35b34801561033c57600080fd5b50610345610a11565b6040516103529190612f12565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906130ed565b610a1b565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613194565b610af6565b6040516103b891906130d2565b60405180910390f35b3480156103cd57600080fd5b506103d6610bcf565b6040516103e391906131f6565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e919061322d565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613077565b610bde565b60405161044b91906130d2565b60405180910390f35b34801561046057600080fd5b50610469610c91565b60405161047691906131f6565b60405180910390f35b34801561048b57600080fd5b50610494610cb5565b6040516104a191906130d2565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906130ed565b610cc8565b6040516104de91906130d2565b60405180910390f35b3480156104f357600080fd5b506104fc610d1e565b60405161050991906130d2565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906130ed565b610d31565b6040516105469190612f12565b60405180910390f35b34801561055b57600080fd5b50610564610d79565b005b34801561057257600080fd5b5061058d60048036038101906105889190613274565b610ed1565b005b34801561059b57600080fd5b506105a4610fc3565b6040516105b19190612f12565b60405180910390f35b3480156105c657600080fd5b506105cf610fc9565b005b3480156105dd57600080fd5b506105e661109f565b6040516105f391906131f6565b60405180910390f35b34801561060857600080fd5b506106116110c9565b60405161061e91906131f6565b60405180910390f35b34801561063357600080fd5b5061063c6110ef565b6040516106499190612fc6565b60405180910390f35b34801561065e57600080fd5b50610667611181565b6040516106749190612f12565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613274565b611187565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613077565b6112bb565b6040516106da91906130d2565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613077565b611388565b60405161071791906130d2565b60405180910390f35b34801561072c57600080fd5b50610747600480360381019061074291906130ed565b6113a6565b60405161075491906130d2565b60405180910390f35b34801561076957600080fd5b506107726113c6565b60405161077f91906130d2565b60405180910390f35b34801561079457600080fd5b5061079d6113d9565b6040516107aa9190612f12565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613274565b6113df565b005b3480156107e857600080fd5b506107f161151f565b6040516107fe91906130d2565b60405180910390f35b34801561081357600080fd5b5061081c611532565b6040516108299190612f12565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906132b4565b611538565b6040516108669190612f12565b60405180910390f35b34801561087b57600080fd5b506108846115bf565b6040516108919190612f12565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc91906130ed565b6115c5565b005b3480156108cf57600080fd5b506108ea60048036038101906108e591906130ed565b6116a4565b005b3480156108f857600080fd5b5061090161186b565b60405161090e9190612f12565b60405180910390f35b600f5481565b60606005805461092c90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461095890613323565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b60006109c36109bc6118cf565b84846118d7565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b610a236118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906133a1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b03848484611b2f565b610bc484610b0f6118cf565b610bbf85604051806060016040528060288152602001613e8c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b756118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b600190509392505050565b61dead81565b60006009905090565b6000610c87610beb6118cf565b84610c828560016000610bfc6118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6118d7565b6001905092915050565b7f000000000000000000000000458876f18ecbbbee3be1677043d8474543046dea81565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d816118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ed96118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f906133a1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b610fd16118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906133a1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555042601081905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600680546110fe90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461112a90613323565b80156111775780601f1061114c57610100808354040283529160200191611177565b820191906000526020600020905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b600e5481565b61118f6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906133a1565b60405180910390fd5b7f000000000000000000000000458876f18ecbbbee3be1677043d8474543046dea73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613433565b60405180910390fd5b6112b78282612764565b5050565b600061137e6112c86118cf565b8461137985604051806060016040528060258152602001613eb460259139600160006112f26118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b6001905092915050565b600061139c6113956118cf565b8484611b2f565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b60105481565b6113e76118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906133a1565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151391906130d2565b60405180910390a25050565b600c60049054906101000a900460ff1681565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6115cd6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906133a1565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6116ac6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906134c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008082846118809190613514565b9050838110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc906135b6565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90613648565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae906136da565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611ac55743600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b229190612f12565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b969061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906137fe565b60405180910390fd5b60008111611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613890565b60405180910390fd5b6000806003600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca19190613514565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541090506000831415611d0057611cf985856000612805565b50506126fb565b600c60009054906101000a900460ff16156121fb57611d1d61109f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611d8b5750611d5b61109f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dc45750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dfe575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611e175750600760149054906101000a900460ff16155b156121fa57600c60019054906101000a900460ff16611f1157601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ed15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906138fc565b60405180910390fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fb45750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561205b57600954831115611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061398e565b60405180910390fd5b600b5461200a85610d31565b846120159190613514565b1115612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d906139fa565b60405180910390fd5b6121f9565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120fe5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561214d57600954831115612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f90613a8c565b60405180910390fd5b6121f8565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121f757600b546121aa85610d31565b846121b59190613514565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed906139fa565b60405180910390fd5b5b5b5b5b5b600061220630610d31565b90506000600a54821015905080801561222b5750600c60029054906101000a900460ff165b80156122445750600760149054906101000a900460ff16155b801561229a5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122f05750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123465750601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238a576001600760146101000a81548160ff02191690831515021790555061236e612a9a565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124405750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561244a57600090505b600081156126e957601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e0576000955084156124b357600895505b6124d9600a6124cb888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c5565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125845750601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125c55760009550841561259857600895505b6125be600a6125b0888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c4565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126c357600090506000600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414801561267857506101686010546126759190613514565b42105b156126c25743600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b60008111156126da576126d9893083612805565b5b80876126e69190613aac565b96505b6126f4898989612805565b5050505050505b505050565b6000838311158290612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f9190612fc6565b60405180910390fd5b50600083856127579190613aac565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c9061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc906137fe565b60405180910390fd5b6128f0838383612c45565b61295b81604051806060016040528060268152602001613e66602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129ee816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a8d9190612f12565b60405180910390a3505050565b6000612aa530610d31565b9050600080821415612ab8575050612b7e565b600a8054612ac69190613ae0565b821115612ade57600a8054612adb9190613ae0565b91505b6000829050612aec81612c4a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b3290613b6b565b60006040518083038185875af1925050503d8060008114612b6f576040519150601f19603f3d011682016040523d82523d6000602084013e612b74565b606091505b5050809250505050505b565b600080831415612b935760009050612bf5565b60008284612ba19190613ae0565b9050828482612bb09190613baf565b14612bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be790613c52565b60405180910390fd5b809150505b92915050565b6000612c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e96565b905092915050565b505050565b6000600267ffffffffffffffff811115612c6757612c66613c72565b5b604051908082528060200260200182016040528015612c955781602001602082028036833780820191505090505b5090503081600081518110612cad57612cac613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4d57600080fd5b505afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d859190613ce5565b81600181518110612d9957612d98613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dfe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118d7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e60959493929190613e0b565b600060405180830381600087803b158015612e7a57600080fd5b505af1158015612e8e573d6000803e3d6000fd5b505050505050565b60008083118290612edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed49190612fc6565b60405180910390fd5b5060008385612eec9190613baf565b9050809150509392505050565b6000819050919050565b612f0c81612ef9565b82525050565b6000602082019050612f276000830184612f03565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f67578082015181840152602081019050612f4c565b83811115612f76576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9882612f2d565b612fa28185612f38565b9350612fb2818560208601612f49565b612fbb81612f7c565b840191505092915050565b60006020820190508181036000830152612fe08184612f8d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061301882612fed565b9050919050565b6130288161300d565b811461303357600080fd5b50565b6000813590506130458161301f565b92915050565b61305481612ef9565b811461305f57600080fd5b50565b6000813590506130718161304b565b92915050565b6000806040838503121561308e5761308d612fe8565b5b600061309c85828601613036565b92505060206130ad85828601613062565b9150509250929050565b60008115159050919050565b6130cc816130b7565b82525050565b60006020820190506130e760008301846130c3565b92915050565b60006020828403121561310357613102612fe8565b5b600061311184828501613036565b91505092915050565b6000819050919050565b600061313f61313a61313584612fed565b61311a565b612fed565b9050919050565b600061315182613124565b9050919050565b600061316382613146565b9050919050565b61317381613158565b82525050565b600060208201905061318e600083018461316a565b92915050565b6000806000606084860312156131ad576131ac612fe8565b5b60006131bb86828701613036565b93505060206131cc86828701613036565b92505060406131dd86828701613062565b9150509250925092565b6131f08161300d565b82525050565b600060208201905061320b60008301846131e7565b92915050565b600060ff82169050919050565b61322781613211565b82525050565b6000602082019050613242600083018461321e565b92915050565b613251816130b7565b811461325c57600080fd5b50565b60008135905061326e81613248565b92915050565b6000806040838503121561328b5761328a612fe8565b5b600061329985828601613036565b92505060206132aa8582860161325f565b9150509250929050565b600080604083850312156132cb576132ca612fe8565b5b60006132d985828601613036565b92505060206132ea85828601613036565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333b57607f821691505b6020821081141561334f5761334e6132f4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061338b602083612f38565b915061339682613355565b602082019050919050565b600060208201905081810360008301526133ba8161337e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061341d603983612f38565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134af602683612f38565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351f82612ef9565b915061352a83612ef9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561355f5761355e6134e5565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006135a0601b83612f38565b91506135ab8261356a565b602082019050919050565b600060208201905081810360008301526135cf81613593565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613632602483612f38565b915061363d826135d6565b604082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c4602283612f38565b91506136cf82613668565b604082019050919050565b600060208201905081810360008301526136f3816136b7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613756602583612f38565b9150613761826136fa565b604082019050919050565b6000602082019050818103600083015261378581613749565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137e8602383612f38565b91506137f38261378c565b604082019050919050565b60006020820190508181036000830152613817816137db565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061387a602983612f38565b91506138858261381e565b604082019050919050565b600060208201905081810360008301526138a98161386d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006138e6601683612f38565b91506138f1826138b0565b602082019050919050565b60006020820190508181036000830152613915816138d9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613978603583612f38565b91506139838261391c565b604082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006139e4601383612f38565b91506139ef826139ae565b602082019050919050565b60006020820190508181036000830152613a13816139d7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a76603683612f38565b9150613a8182613a1a565b604082019050919050565b60006020820190508181036000830152613aa581613a69565b9050919050565b6000613ab782612ef9565b9150613ac283612ef9565b925082821015613ad557613ad46134e5565b5b828203905092915050565b6000613aeb82612ef9565b9150613af683612ef9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2f57613b2e6134e5565b5b828202905092915050565b600081905092915050565b50565b6000613b55600083613b3a565b9150613b6082613b45565b600082019050919050565b6000613b7682613b48565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bba82612ef9565b9150613bc583612ef9565b925082613bd557613bd4613b80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c3c602183612f38565b9150613c4782613be0565b604082019050919050565b60006020820190508181036000830152613c6b81613c2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613cdf8161301f565b92915050565b600060208284031215613cfb57613cfa612fe8565b5b6000613d0984828501613cd0565b91505092915050565b6000819050919050565b6000613d37613d32613d2d84613d12565b61311a565b612ef9565b9050919050565b613d4781613d1c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d828161300d565b82525050565b6000613d948383613d79565b60208301905092915050565b6000602082019050919050565b6000613db882613d4d565b613dc28185613d58565b9350613dcd83613d69565b8060005b83811015613dfe578151613de58882613d88565b9750613df083613da0565b925050600181019050613dd1565b5085935050505092915050565b600060a082019050613e206000830188612f03565b613e2d6020830187613d3e565b8181036040830152613e3f8186613dad565b9050613e4e60608301856131e7565b613e5b6080830184612f03565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122052966caaa556bf435f4a92dcef1b0e777f16b03f7185a1ad975816182befff6064736f6c63430008090033
Deployed Bytecode Sourcemap
29798:10220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30528:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7838:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10004:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30737:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29879:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8957:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34252:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10655:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29982:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8800:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11419:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29937:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30263:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34363:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30343:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9128:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22419:148;;;;;;;;;;;;;:::i;:::-;;33462:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30463:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33187:151;;;;;;;;;;;;;:::i;:::-;;21777:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30074:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8057:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30496:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33804:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12140:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9468:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30959:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30303:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30558:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33614:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30414:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30148:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9706:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30190:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33350:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22722:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30230:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30528:21;;;;:::o;7838:100::-;7892:13;7925:5;7918:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7838:100;:::o;10004:169::-;10087:4;10104:39;10113:12;:10;:12::i;:::-;10127:7;10136:6;10104:8;:39::i;:::-;10161:4;10154:11;;10004:169;;;;:::o;30737:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29879:51::-;;;:::o;8957:108::-;9018:7;9045:12;;9038:19;;8957:108;:::o;34252:103::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34338:9:::1;34326;;:21;;;;;;;;;;;;;;;;;;34252:103:::0;:::o;10655:355::-;10795:4;10812:36;10822:6;10830:9;10841:6;10812:9;:36::i;:::-;10859:121;10868:6;10876:12;:10;:12::i;:::-;10890:89;10928:6;10890:89;;;;;;;;;;;;;;;;;:11;:19;10902:6;10890:19;;;;;;;;;;;;;;;:33;10910:12;:10;:12::i;:::-;10890:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10859:8;:121::i;:::-;10998:4;10991:11;;10655:355;;;;;:::o;29982:53::-;30028:6;29982:53;:::o;8800:92::-;8858:5;8883:1;8876:8;;8800:92;:::o;11419:218::-;11507:4;11524:83;11533:12;:10;:12::i;:::-;11547:7;11556:50;11595:10;11556:11;:25;11568:12;:10;:12::i;:::-;11556:25;;;;;;;;;;;;;;;:34;11582:7;11556:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11524:8;:83::i;:::-;11625:4;11618:11;;11419:218;;;;:::o;29937:38::-;;;:::o;30263:33::-;;;;;;;;;;;;;:::o;34363:125::-;34428:4;34452:19;:28;34472:7;34452:28;;;;;;;;;;;;;;;;;;;;;;;;;34445:35;;34363:125;;;:::o;30343:31::-;;;;;;;;;;;;;:::o;9128:127::-;9202:7;9229:9;:18;9239:7;9229:18;;;;;;;;;;;;;;;;9222:25;;9128:127;;;:::o;22419:148::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22526:1:::1;22489:40;;22510:6;;;;;;;;;;;22489:40;;;;;;;;;;;;22557:1;22540:6;;:19;;;;;;;;;;;;;;;;;;22419:148::o:0;33462:144::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33594:4:::1;33552:31;:39;33584:6;33552:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33462:144:::0;;:::o;30463:26::-;;;;:::o;33187:151::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33258:4:::1;33242:13;;:20;;;;;;;;;;;;;;;;;;33287:4;33273:11;;:18;;;;;;;;;;;;;;;;;;33315:15;33302:10;:28;;;;33187:151::o:0;21777:79::-;21815:7;21842:6;;;;;;;;;;;21835:13;;21777:79;:::o;30074:24::-;;;;;;;;;;;;;:::o;8057:104::-;8113:13;8146:7;8139:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8057:104;:::o;30496:25::-;;;;:::o;33804:244::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33911:13:::1;33903:21;;:4;:21;;;;33895:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;33999:41;34028:4;34034:5;33999:28;:41::i;:::-;33804:244:::0;;:::o;12140:269::-;12233:4;12250:129;12259:12;:10;:12::i;:::-;12273:7;12282:96;12321:15;12282:96;;;;;;;;;;;;;;;;;:11;:25;12294:12;:10;:12::i;:::-;12282:25;;;;;;;;;;;;;;;:34;12308:7;12282:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12250:8;:129::i;:::-;12397:4;12390:11;;12140:269;;;;:::o;9468:175::-;9554:4;9571:42;9581:12;:10;:12::i;:::-;9595:9;9606:6;9571:9;:42::i;:::-;9631:4;9624:11;;9468:175;;;;:::o;30959:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30303:33::-;;;;;;;;;;;;;:::o;30558:25::-;;;;:::o;33614:182::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33730:8:::1;33699:19;:28;33719:7;33699:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33770:7;33754:34;;;33779:8;33754:34;;;;;;:::i;:::-;;;;;;;;33614:182:::0;;:::o;30414:40::-;;;;;;;;;;;;;:::o;30148:35::-;;;;:::o;9706:151::-;9795:7;9822:11;:18;9834:5;9822:18;;;;;;;;;;;;;;;:27;9841:7;9822:27;;;;;;;;;;;;;;;;9815:34;;9706:151;;;;:::o;30190:33::-;;;;:::o;33350:104::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:1:::1;33420:15;:22;33436:5;33420:22;;;;;;;;;;;;;;;:26;;;;33350:104:::0;:::o;22722:244::-;21999:12;:10;:12::i;:::-;21989:22;;:6;;;;;;;;;;;:22;;;21981:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22831:1:::1;22811:22;;:8;:22;;;;22803:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22921:8;22892:38;;22913:6;;;;;;;;;;;22892:38;;;;;;;;;;;;22950:8;22941:6;;:17;;;;;;;;;;;;;;;;;;22722:244:::0;:::o;30230:24::-;;;;:::o;16821:181::-;16879:7;16899:9;16915:1;16911;:5;;;;:::i;:::-;16899:17;;16940:1;16935;:6;;16927:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16993:1;16986:8;;;16821:181;;;;:::o;349:98::-;402:7;429:10;422:17;;349:98;:::o;15326:497::-;15479:1;15462:19;;:5;:19;;;;15454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15560:1;15541:21;;:7;:21;;;;15533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15644:6;15614:11;:18;15626:5;15614:18;;;;;;;;;;;;;;;:27;15633:7;15614:27;;;;;;;;;;;;;;;:36;;;;15695:1;15664:20;:27;15685:5;15664:27;;;;;;;;;;;;;;;;:32;15661:106;;;15743:12;15713:20;:27;15734:5;15713:27;;;;;;;;;;;;;;;:42;;;;15661:106;15799:7;15783:32;;15792:5;15783:32;;;15808:6;15783:32;;;;;;:::i;:::-;;;;;;;;15326:497;;;:::o;34504:3846::-;34652:1;34636:18;;:4;:18;;;;34628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34729:1;34715:16;;:2;:16;;;;34707:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34801:1;34792:6;:10;34784:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34859:17;34887:12;34974:1;34950:15;:21;34966:4;34950:21;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;34921:20;:26;34942:4;34921:26;;;;;;;;;;;;;;;;:54;34910:66;;35011:1;35001:6;:11;34998:92;;;35029:28;35045:4;35051:2;35055:1;35029:15;:28::i;:::-;35072:7;;;;34998:92;35113:14;;;;;;;;;;;35110:1249;;;35173:7;:5;:7::i;:::-;35165:15;;:4;:15;;;;:49;;;;;35207:7;:5;:7::i;:::-;35201:13;;:2;:13;;;;35165:49;:86;;;;;35249:1;35235:16;;:2;:16;;;;35165:86;:128;;;;;35286:6;35272:21;;:2;:21;;;;35165:128;:158;;;;;35315:8;;;;;;;;;;;35314:9;35165:158;35143:1205;;;35361:13;;;;;;;;;;;35357:148;;35406:19;:25;35426:4;35406:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35435:19;:23;35455:2;35435:23;;;;;;;;;;;;;;;;;;;;;;;;;35406:52;35398:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35357:148;35559:25;:31;35585:4;35559:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35595:31;:35;35627:2;35595:35;;;;;;;;;;;;;;;;;;;;;;;;;35594:36;35559:71;35555:778;;;35677:20;;35667:6;:30;;35659:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;35816:9;;35799:13;35809:2;35799:9;:13::i;:::-;35790:6;:22;;;;:::i;:::-;:35;;35782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35555:778;;;35943:25;:29;35969:2;35943:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35977:31;:37;36009:4;35977:37;;;;;;;;;;;;;;;;;;;;;;;;;35976:38;35943:71;35939:394;;;36061:20;;36051:6;:30;;36043:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;35939:394;;;36187:31;:35;36219:2;36187:35;;;;;;;;;;;;;;;;;;;;;;;;;36183:150;;36280:9;;36263:13;36273:2;36263:9;:13::i;:::-;36254:6;:22;;;;:::i;:::-;:35;;36246:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36183:150;35939:394;35555:778;35143:1205;35110:1249;36393:28;36424:24;36442:4;36424:9;:24::i;:::-;36393:55;;36469:12;36508:18;;36484:20;:42;;36469:57;;36557:7;:35;;;;;36581:11;;;;;;;;;;;36557:35;:61;;;;;36610:8;;;;;;;;;;;36609:9;36557:61;:110;;;;;36636:25;:31;36662:4;36636:31;;;;;;;;;;;;;;;;;;;;;;;;;36635:32;36557:110;:153;;;;;36685:19;:25;36705:4;36685:25;;;;;;;;;;;;;;;;;;;;;;;;;36684:26;36557:153;:194;;;;;36728:19;:23;36748:2;36728:23;;;;;;;;;;;;;;;;;;;;;;;;;36727:24;36557:194;36539:338;;;36789:4;36778:8;;:15;;;;;;;;;;;;;;;;;;36822:10;:8;:10::i;:::-;36860:5;36849:8;;:16;;;;;;;;;;;;;;;;;;36539:338;36897:12;36913:8;;;;;;;;;;;36912:9;36897:24;;37022:19;:25;37042:4;37022:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37051:19;:23;37071:2;37051:23;;;;;;;;;;;;;;;;;;;;;;;;;37022:52;37019:99;;;37101:5;37091:15;;37019:99;37138:12;37242:7;37239:1058;;;37293:25;:29;37319:2;37293:29;;;;;;;;;;;;;;;;;;;;;;;;;37289:841;;;37354:1;37342:13;;37381:7;37378:75;;;37428:1;37416:13;;37378:75;37480:29;37506:2;37480:21;37491:9;37480:6;:10;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;37473:36;;37289:841;;;37549:25;:31;37575:4;37549:31;;;;;;;;;;;;;;;;;;;;;;;;;37548:32;:66;;;;;37585:25;:29;37611:2;37585:29;;;;;;;;;;;;;;;;;;;;;;;;;37584:30;37548:66;37544:586;;;37647:1;37635:13;;37674:7;37671:75;;;37721:1;37709:13;;37671:75;37793:29;37819:2;37793:21;37804:9;37793:6;:10;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;37786:36;;37544:586;;;37885:25;:31;37911:4;37885:31;;;;;;;;;;;;;;;;;;;;;;;;;37882:248;;;37941:1;37934:8;;37988:1;37965:15;:19;37981:2;37965:19;;;;;;;;;;;;;;;;:24;:68;;;;;38024:9;38011:10;;:22;;;;:::i;:::-;37993:15;:40;37965:68;37961:154;;;38083:12;38061:15;:19;38077:2;38061:19;;;;;;;;;;;;;;;:34;;;;37961:154;37882:248;37544:586;37289:841;38168:1;38161:4;:8;38158:91;;;38189:42;38205:4;38219;38226;38189:15;:42::i;:::-;38158:91;38281:4;38271:14;;;;;:::i;:::-;;;37239:1058;38309:33;38325:4;38331:2;38335:6;38309:15;:33::i;:::-;34617:3733;;;;;;34504:3846;;;;:::o;17724:192::-;17810:7;17843:1;17838;:6;;17846:12;17830:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17870:9;17886:1;17882;:5;;;;:::i;:::-;17870:17;;17907:1;17900:8;;;17724:192;;;;;:::o;34056:188::-;34173:5;34139:25;:31;34165:4;34139:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34230:5;34196:40;;34224:4;34196:40;;;;;;;;;;;;34056:188;;:::o;12899:573::-;13057:1;13039:20;;:6;:20;;;;13031:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13141:1;13120:23;;:9;:23;;;;13112:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13196:47;13217:6;13225:9;13236:6;13196:20;:47::i;:::-;13276:71;13298:6;13276:71;;;;;;;;;;;;;;;;;:9;:17;13286:6;13276:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13256:9;:17;13266:6;13256:17;;;;;;;;;;;;;;;:91;;;;13381:32;13406:6;13381:9;:20;13391:9;13381:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13358:9;:20;13368:9;13358:20;;;;;;;;;;;;;;;:55;;;;13446:9;13429:35;;13438:6;13429:35;;;13457:6;13429:35;;;;;;:::i;:::-;;;;;;;;12899:573;;;:::o;39508:503::-;39547:23;39573:24;39591:4;39573:9;:24::i;:::-;39547:50;;39608:12;39663:1;39644:15;:20;39641:34;;;39667:7;;;;39641:34;39729:2;39708:18;;:23;;;;:::i;:::-;39690:15;:41;39687:111;;;39784:2;39763:18;;:23;;;;:::i;:::-;39745:41;;39687:111;39818:26;39847:15;39818:44;;39875:36;39892:18;39875:16;:36::i;:::-;39954:9;;;;;;;;;;;39946:23;;39977:21;39946:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39933:70;;;;;39536:475;;;39508:503;:::o;18175:471::-;18233:7;18483:1;18478;:6;18474:47;;;18508:1;18501:8;;;;18474:47;18533:9;18549:1;18545;:5;;;;:::i;:::-;18533:17;;18578:1;18573;18569;:5;;;;:::i;:::-;:10;18561:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18637:1;18630:8;;;18175:471;;;;;:::o;19122:132::-;19180:7;19207:39;19211:1;19214;19207:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19200:46;;19122:132;;;;:::o;16426:125::-;;;;:::o;38358:601::-;38486:21;38524:1;38510:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38486:40;;38555:4;38537;38542:1;38537:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38581:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38571:4;38576:1;38571:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38616:62;38633:4;38648:15;38666:11;38616:8;:62::i;:::-;38717:15;:66;;;38798:11;38824:1;38868:4;38895;38915:15;38717:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38413:546;38358:601;:::o;19750:278::-;19836:7;19868:1;19864;:5;19871:12;19856:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19895:9;19911:1;19907;:5;;;;:::i;:::-;19895:17;;20019:1;20012:8;;;19750:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:474::-;7369:6;7377;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7523:117;7679:2;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7650:118;7301:474;;;;;:::o;7781:180::-;7829:77;7826:1;7819:88;7926:4;7923:1;7916:15;7950:4;7947:1;7940:15;7967:320;8011:6;8048:1;8042:4;8038:12;8028:22;;8095:1;8089:4;8085:12;8116:18;8106:81;;8172:4;8164:6;8160:17;8150:27;;8106:81;8234:2;8226:6;8223:14;8203:18;8200:38;8197:84;;;8253:18;;:::i;:::-;8197:84;8018:269;7967:320;;;:::o;8293:182::-;8433:34;8429:1;8421:6;8417:14;8410:58;8293:182;:::o;8481:366::-;8623:3;8644:67;8708:2;8703:3;8644:67;:::i;:::-;8637:74;;8720:93;8809:3;8720:93;:::i;:::-;8838:2;8833:3;8829:12;8822:19;;8481:366;;;:::o;8853:419::-;9019:4;9057:2;9046:9;9042:18;9034:26;;9106:9;9100:4;9096:20;9092:1;9081:9;9077:17;9070:47;9134:131;9260:4;9134:131;:::i;:::-;9126:139;;8853:419;;;:::o;9278:244::-;9418:34;9414:1;9406:6;9402:14;9395:58;9487:27;9482:2;9474:6;9470:15;9463:52;9278:244;:::o;9528:366::-;9670:3;9691:67;9755:2;9750:3;9691:67;:::i;:::-;9684:74;;9767:93;9856:3;9767:93;:::i;:::-;9885:2;9880:3;9876:12;9869:19;;9528:366;;;:::o;9900:419::-;10066:4;10104:2;10093:9;10089:18;10081:26;;10153:9;10147:4;10143:20;10139:1;10128:9;10124:17;10117:47;10181:131;10307:4;10181:131;:::i;:::-;10173:139;;9900:419;;;:::o;10325:225::-;10465:34;10461:1;10453:6;10449:14;10442:58;10534:8;10529:2;10521:6;10517:15;10510:33;10325:225;:::o;10556:366::-;10698:3;10719:67;10783:2;10778:3;10719:67;:::i;:::-;10712:74;;10795:93;10884:3;10795:93;:::i;:::-;10913:2;10908:3;10904:12;10897:19;;10556:366;;;:::o;10928:419::-;11094:4;11132:2;11121:9;11117:18;11109:26;;11181:9;11175:4;11171:20;11167:1;11156:9;11152:17;11145:47;11209:131;11335:4;11209:131;:::i;:::-;11201:139;;10928:419;;;:::o;11353:180::-;11401:77;11398:1;11391:88;11498:4;11495:1;11488:15;11522:4;11519:1;11512:15;11539:305;11579:3;11598:20;11616:1;11598:20;:::i;:::-;11593:25;;11632:20;11650:1;11632:20;:::i;:::-;11627:25;;11786:1;11718:66;11714:74;11711:1;11708:81;11705:107;;;11792:18;;:::i;:::-;11705:107;11836:1;11833;11829:9;11822:16;;11539:305;;;;:::o;11850:177::-;11990:29;11986:1;11978:6;11974:14;11967:53;11850:177;:::o;12033:366::-;12175:3;12196:67;12260:2;12255:3;12196:67;:::i;:::-;12189:74;;12272:93;12361:3;12272:93;:::i;:::-;12390:2;12385:3;12381:12;12374:19;;12033:366;;;:::o;12405:419::-;12571:4;12609:2;12598:9;12594:18;12586:26;;12658:9;12652:4;12648:20;12644:1;12633:9;12629:17;12622:47;12686:131;12812:4;12686:131;:::i;:::-;12678:139;;12405:419;;;:::o;12830:223::-;12970:34;12966:1;12958:6;12954:14;12947:58;13039:6;13034:2;13026:6;13022:15;13015:31;12830:223;:::o;13059:366::-;13201:3;13222:67;13286:2;13281:3;13222:67;:::i;:::-;13215:74;;13298:93;13387:3;13298:93;:::i;:::-;13416:2;13411:3;13407:12;13400:19;;13059:366;;;:::o;13431:419::-;13597:4;13635:2;13624:9;13620:18;13612:26;;13684:9;13678:4;13674:20;13670:1;13659:9;13655:17;13648:47;13712:131;13838:4;13712:131;:::i;:::-;13704:139;;13431:419;;;:::o;13856:221::-;13996:34;13992:1;13984:6;13980:14;13973:58;14065:4;14060:2;14052:6;14048:15;14041:29;13856:221;:::o;14083:366::-;14225:3;14246:67;14310:2;14305:3;14246:67;:::i;:::-;14239:74;;14322:93;14411:3;14322:93;:::i;:::-;14440:2;14435:3;14431:12;14424:19;;14083:366;;;:::o;14455:419::-;14621:4;14659:2;14648:9;14644:18;14636:26;;14708:9;14702:4;14698:20;14694:1;14683:9;14679:17;14672:47;14736:131;14862:4;14736:131;:::i;:::-;14728:139;;14455:419;;;:::o;14880:224::-;15020:34;15016:1;15008:6;15004:14;14997:58;15089:7;15084:2;15076:6;15072:15;15065:32;14880:224;:::o;15110:366::-;15252:3;15273:67;15337:2;15332:3;15273:67;:::i;:::-;15266:74;;15349:93;15438:3;15349:93;:::i;:::-;15467:2;15462:3;15458:12;15451:19;;15110:366;;;:::o;15482:419::-;15648:4;15686:2;15675:9;15671:18;15663:26;;15735:9;15729:4;15725:20;15721:1;15710:9;15706:17;15699:47;15763:131;15889:4;15763:131;:::i;:::-;15755:139;;15482:419;;;:::o;15907:222::-;16047:34;16043:1;16035:6;16031:14;16024:58;16116:5;16111:2;16103:6;16099:15;16092:30;15907:222;:::o;16135:366::-;16277:3;16298:67;16362:2;16357:3;16298:67;:::i;:::-;16291:74;;16374:93;16463:3;16374:93;:::i;:::-;16492:2;16487:3;16483:12;16476:19;;16135:366;;;:::o;16507:419::-;16673:4;16711:2;16700:9;16696:18;16688:26;;16760:9;16754:4;16750:20;16746:1;16735:9;16731:17;16724:47;16788:131;16914:4;16788:131;:::i;:::-;16780:139;;16507:419;;;:::o;16932:228::-;17072:34;17068:1;17060:6;17056:14;17049:58;17141:11;17136:2;17128:6;17124:15;17117:36;16932:228;:::o;17166:366::-;17308:3;17329:67;17393:2;17388:3;17329:67;:::i;:::-;17322:74;;17405:93;17494:3;17405:93;:::i;:::-;17523:2;17518:3;17514:12;17507:19;;17166:366;;;:::o;17538:419::-;17704:4;17742:2;17731:9;17727:18;17719:26;;17791:9;17785:4;17781:20;17777:1;17766:9;17762:17;17755:47;17819:131;17945:4;17819:131;:::i;:::-;17811:139;;17538:419;;;:::o;17963:172::-;18103:24;18099:1;18091:6;18087:14;18080:48;17963:172;:::o;18141:366::-;18283:3;18304:67;18368:2;18363:3;18304:67;:::i;:::-;18297:74;;18380:93;18469:3;18380:93;:::i;:::-;18498:2;18493:3;18489:12;18482:19;;18141:366;;;:::o;18513:419::-;18679:4;18717:2;18706:9;18702:18;18694:26;;18766:9;18760:4;18756:20;18752:1;18741:9;18737:17;18730:47;18794:131;18920:4;18794:131;:::i;:::-;18786:139;;18513:419;;;:::o;18938:240::-;19078:34;19074:1;19066:6;19062:14;19055:58;19147:23;19142:2;19134:6;19130:15;19123:48;18938:240;:::o;19184:366::-;19326:3;19347:67;19411:2;19406:3;19347:67;:::i;:::-;19340:74;;19423:93;19512:3;19423:93;:::i;:::-;19541:2;19536:3;19532:12;19525:19;;19184:366;;;:::o;19556:419::-;19722:4;19760:2;19749:9;19745:18;19737:26;;19809:9;19803:4;19799:20;19795:1;19784:9;19780:17;19773:47;19837:131;19963:4;19837:131;:::i;:::-;19829:139;;19556:419;;;:::o;19981:169::-;20121:21;20117:1;20109:6;20105:14;20098:45;19981:169;:::o;20156:366::-;20298:3;20319:67;20383:2;20378:3;20319:67;:::i;:::-;20312:74;;20395:93;20484:3;20395:93;:::i;:::-;20513:2;20508:3;20504:12;20497:19;;20156:366;;;:::o;20528:419::-;20694:4;20732:2;20721:9;20717:18;20709:26;;20781:9;20775:4;20771:20;20767:1;20756:9;20752:17;20745:47;20809:131;20935:4;20809:131;:::i;:::-;20801:139;;20528:419;;;:::o;20953:241::-;21093:34;21089:1;21081:6;21077:14;21070:58;21162:24;21157:2;21149:6;21145:15;21138:49;20953:241;:::o;21200:366::-;21342:3;21363:67;21427:2;21422:3;21363:67;:::i;:::-;21356:74;;21439:93;21528:3;21439:93;:::i;:::-;21557:2;21552:3;21548:12;21541:19;;21200:366;;;:::o;21572:419::-;21738:4;21776:2;21765:9;21761:18;21753:26;;21825:9;21819:4;21815:20;21811:1;21800:9;21796:17;21789:47;21853:131;21979:4;21853:131;:::i;:::-;21845:139;;21572:419;;;:::o;21997:191::-;22037:4;22057:20;22075:1;22057:20;:::i;:::-;22052:25;;22091:20;22109:1;22091:20;:::i;:::-;22086:25;;22130:1;22127;22124:8;22121:34;;;22135:18;;:::i;:::-;22121:34;22180:1;22177;22173:9;22165:17;;21997:191;;;;:::o;22194:348::-;22234:7;22257:20;22275:1;22257:20;:::i;:::-;22252:25;;22291:20;22309:1;22291:20;:::i;:::-;22286:25;;22479:1;22411:66;22407:74;22404:1;22401:81;22396:1;22389:9;22382:17;22378:105;22375:131;;;22486:18;;:::i;:::-;22375:131;22534:1;22531;22527:9;22516:20;;22194:348;;;;:::o;22548:147::-;22649:11;22686:3;22671:18;;22548:147;;;;:::o;22701:114::-;;:::o;22821:398::-;22980:3;23001:83;23082:1;23077:3;23001:83;:::i;:::-;22994:90;;23093:93;23182:3;23093:93;:::i;:::-;23211:1;23206:3;23202:11;23195:18;;22821:398;;;:::o;23225:379::-;23409:3;23431:147;23574:3;23431:147;:::i;:::-;23424:154;;23595:3;23588:10;;23225:379;;;:::o;23610:180::-;23658:77;23655:1;23648:88;23755:4;23752:1;23745:15;23779:4;23776:1;23769:15;23796:185;23836:1;23853:20;23871:1;23853:20;:::i;:::-;23848:25;;23887:20;23905:1;23887:20;:::i;:::-;23882:25;;23926:1;23916:35;;23931:18;;:::i;:::-;23916:35;23973:1;23970;23966:9;23961:14;;23796:185;;;;:::o;23987:220::-;24127:34;24123:1;24115:6;24111:14;24104:58;24196:3;24191:2;24183:6;24179:15;24172:28;23987:220;:::o;24213:366::-;24355:3;24376:67;24440:2;24435:3;24376:67;:::i;:::-;24369:74;;24452:93;24541:3;24452:93;:::i;:::-;24570:2;24565:3;24561:12;24554:19;;24213:366;;;:::o;24585:419::-;24751:4;24789:2;24778:9;24774:18;24766:26;;24838:9;24832:4;24828:20;24824:1;24813:9;24809:17;24802:47;24866:131;24992:4;24866:131;:::i;:::-;24858:139;;24585:419;;;:::o;25010:180::-;25058:77;25055:1;25048:88;25155:4;25152:1;25145:15;25179:4;25176:1;25169:15;25196:180;25244:77;25241:1;25234:88;25341:4;25338:1;25331:15;25365:4;25362:1;25355:15;25382:143;25439:5;25470:6;25464:13;25455:22;;25486:33;25513:5;25486:33;:::i;:::-;25382:143;;;;:::o;25531:351::-;25601:6;25650:2;25638:9;25629:7;25625:23;25621:32;25618:119;;;25656:79;;:::i;:::-;25618:119;25776:1;25801:64;25857:7;25848:6;25837:9;25833:22;25801:64;:::i;:::-;25791:74;;25747:128;25531:351;;;;:::o;25888:85::-;25933:7;25962:5;25951:16;;25888:85;;;:::o;25979:158::-;26037:9;26070:61;26088:42;26097:32;26123:5;26097:32;:::i;:::-;26088:42;:::i;:::-;26070:61;:::i;:::-;26057:74;;25979:158;;;:::o;26143:147::-;26238:45;26277:5;26238:45;:::i;:::-;26233:3;26226:58;26143:147;;:::o;26296:114::-;26363:6;26397:5;26391:12;26381:22;;26296:114;;;:::o;26416:184::-;26515:11;26549:6;26544:3;26537:19;26589:4;26584:3;26580:14;26565:29;;26416:184;;;;:::o;26606:132::-;26673:4;26696:3;26688:11;;26726:4;26721:3;26717:14;26709:22;;26606:132;;;:::o;26744:108::-;26821:24;26839:5;26821:24;:::i;:::-;26816:3;26809:37;26744:108;;:::o;26858:179::-;26927:10;26948:46;26990:3;26982:6;26948:46;:::i;:::-;27026:4;27021:3;27017:14;27003:28;;26858:179;;;;:::o;27043:113::-;27113:4;27145;27140:3;27136:14;27128:22;;27043:113;;;:::o;27192:732::-;27311:3;27340:54;27388:5;27340:54;:::i;:::-;27410:86;27489:6;27484:3;27410:86;:::i;:::-;27403:93;;27520:56;27570:5;27520:56;:::i;:::-;27599:7;27630:1;27615:284;27640:6;27637:1;27634:13;27615:284;;;27716:6;27710:13;27743:63;27802:3;27787:13;27743:63;:::i;:::-;27736:70;;27829:60;27882:6;27829:60;:::i;:::-;27819:70;;27675:224;27662:1;27659;27655:9;27650:14;;27615:284;;;27619:14;27915:3;27908:10;;27316:608;;;27192:732;;;;:::o;27930:831::-;28193:4;28231:3;28220:9;28216:19;28208:27;;28245:71;28313:1;28302:9;28298:17;28289:6;28245:71;:::i;:::-;28326:80;28402:2;28391:9;28387:18;28378:6;28326:80;:::i;:::-;28453:9;28447:4;28443:20;28438:2;28427:9;28423:18;28416:48;28481:108;28584:4;28575:6;28481:108;:::i;:::-;28473:116;;28599:72;28667:2;28656:9;28652:18;28643:6;28599:72;:::i;:::-;28681:73;28749:3;28738:9;28734:19;28725:6;28681:73;:::i;:::-;27930:831;;;;;;;;:::o
Swarm Source
ipfs://52966caaa556bf435f4a92dcef1b0e777f16b03f7185a1ad975816182befff60
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.