Contract 0x07d9106bb6da9122d2d21db81a59727bcad79d72

 

Contract Overview

Balance:
0.0909 ETH

ETHValue:
$355.77 (@ $3,913.90/ETH)

Token:
Txn Hash Method
Block
From
To
Value
0x3f883c1dd70e555357f387552cad201031c2c607e429887e7ea2e76f3182274dApprove148797902024-05-24 11:08:473 days 8 hrs ago0xcc43fc98a9fa25d0640bf54b680b05fd1658f42a IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000033895030.072372494
0xe75258b8adecedf70638c4b3308ef431ef1baea34d773aedc2b5ac39bbad4283Approve146408592024-05-18 22:24:258 days 21 hrs ago0x0e98837b0175f54a395b3c5a81684ff0b4c8244e IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000011241280.024107389
0x4d769135984fd83b37ee546ef5fa708f8960cc5a1aba32e01209e4f52cdccf46Approve145410682024-05-16 14:58:0311 days 4 hrs ago0x9bbb08a77a34b9e3d194175c4b8ca43fa012496d IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000052063740.111254903
0xe227bffb34934fc21b084838ce5aeefcd313a3c71bc3d73e0601ef07b6195680Approve145060722024-05-15 19:31:3112 days 8 mins ago0x38210e6432ca715f4e1ae7a4d901d392e3256ac1 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000030772280.065852165
0x358c9fbe4eadf0033212659e712903d71b0d71e28a3eb99a6db7c5f3bc3c354eTransfer145059872024-05-15 19:28:4112 days 11 mins ago0xbdd01f388444cd834e7564eab62545e93cb3f514 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000044327930.073021176
0xfedbd8786a33ce766aa341602b2ed19096d50c4c18a0de6a813758654b167828Approve144200652024-05-13 19:44:3713 days 23 hrs ago0xcd901ad883c5b0524f12b297c53f9d23caf7eefc IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000010835120.043342931
0x962a2a769b36680904f3587b729965a23c190523a2caf3937c2f090277b9ef9cTransfer141880402024-05-08 10:50:2719 days 8 hrs ago0x475c092d3aed6aa52d5d62364b71a638945b88ba IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000930041211.541879661
0xa115c10a804db2198a4913f6bf87e07e1d66c0f94956d713ac6805871d38c019Transfer141854002024-05-08 9:22:2719 days 10 hrs ago0x8ad487557a170ef3d4304520b3687bfb117c0c5f IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000967176321.603467539
0x31822b3e5a3786f7e73aaa5be978565315362351565eebf837415332cc35d333Approve141051302024-05-06 12:46:4721 days 6 hrs ago0x6937d5580a3e9f223e7c0429af9c6d549f742cff IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000022907740.093611352
0x50d360704bb0680a5f1cf8f1854728ae87afddfd3bc8422c8e85ba59aa1177bdApprove140042602024-05-04 4:44:2723 days 14 hrs ago0xd2fa71a10e4b69d06468ff90e5bf45da938defbc IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000022527430.048057056
0x85b77f502e9e53360d1309459d5d9c0ac5fa6b218ba89a178b9e71bc26ca6407Approve140041192024-05-04 4:39:4523 days 15 hrs ago0xb9111107df78160fb7aa031c942584257da41188 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000025359660.054093939
0xfeebda1efe8440ca98ec0d992adf58148bbf0ffee53fd6d6321f587e6d5c7a37Transfer139435202024-05-02 18:59:4725 days 40 mins ago0x13eaa03022210dca826fc607a5f7e890abfedfed IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000085005980.195780642
0x13c957364044463e40fd561da450850ed51950ee5aa099986168754a23323c68Transfer139421412024-05-02 18:13:4925 days 1 hr ago0x13eaa03022210dca826fc607a5f7e890abfedfed IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000081570070.134652796
0x950cd5e15ac8ebfa650f033733d5d8bebc0a3b4b0e87c5c9976ae3238ac05257Approve139418582024-05-02 18:04:2325 days 1 hr ago0xa439d0797d00d33e4e42ee709b39553732209313 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.000003234290.069269306
0xf3466bbfdc593030b1825d507b27c5b51c215f1b2ee3057ef690f033865970acApprove138065372024-04-29 14:53:4128 days 4 hrs ago0x4109392d8a4cca4a0f710dc3b7d51d1442247a47 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000086879510.185658256
0x29fe70aa5cc7aba867af649c433befd8da6902fad0f90f7d2690dd8bd2f3da1eApprove137752352024-04-28 21:30:1728 days 22 hrs ago0x7f0a8142725530380fb5ed54fae926d1e3fbf802 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.000003479230.074383768
0xc5f6ae8d730419d8e9c3307cf89e982b0aebb3f710dc8e47603f1c0422fbf76fApprove137752092024-04-28 21:29:2528 days 22 hrs ago0x8562c03f039d874d32600c138a7b640043c2a05b IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000035572520.076030714
0x59923a576d7730c3f0393a70fb6176fc48f325410dd3f3475f5e08c2a764bf07Approve137743202024-04-28 20:59:4728 days 22 hrs ago0x31208b8a77ddff743dce5e5611e31b94f2d43ec1 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000036370440.078144076
0xd0364c195e7121fb390ddf37adc09507bdcd5ea62d3f60bad46c7f8950843304Approve137740292024-04-28 20:50:0528 days 22 hrs ago0x12a9577805e0e11adb974a8a72813b87433e09ed IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000041386580.088497319
0x1c92e3cc767cd13aebaf9e0c36102c833a12f57caf743da2e295ae8de8c21ba7Approve137734692024-04-28 20:31:2528 days 23 hrs ago0xf0eb54cb9d6bb65b0efa5d1d87e6a2c520b657fd IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0002393662665.133356116
0x4941bb9002e6e781886bc422e3f8d1db5fa58e3591965691c9a4e72a34efbe9eApprove137524552024-04-28 8:50:5729 days 10 hrs ago0xca01b031dbe9debd54c73b92d4174cd50a522a77 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000030310920.064648303
0x7d567e7acf5d189e4c26b8ce4d82ddaf50b9bcd80f0881d1741f32e42d9d0db2Approve137029522024-04-27 5:20:5130 days 14 hrs ago0xe845f4a5ae5e211b9d474cd404d69513b2c18789 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000012501690.050976078
0x5dc009471b2fea91a2ba6d32a41c32ee4d778fa0794fbf254fef5e4a7086b52aApprove135114752024-04-22 18:58:1735 days 41 mins ago0xf3ef29e913fa43c8af0996548e2d77b0f1f7303b IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000035682330.145975644
0x415a327be72b5da58bee85dd188afd4a09b2f8550e1fb9d488bcd7722dc5c57fApprove134693362024-04-21 19:33:3936 days 6 mins ago0x8658755b0a3066820a49aa6cfe5d67b8c0ef64c1 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.000003455080.07369102
0x98f7c4710442694a1d6adae44d5c42f31a5f8230e81167f4987b929936996092Approve134658332024-04-21 17:36:5336 days 2 hrs ago0xeff72b9cb175a14412f705d3a8d69087b66a7ab6 IN  0x07d9106bb6da9122d2d21db81a59727bcad79d720 ETH0.0000031453190.067029972
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Puggy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-03-14
*/

// SPDX-License-Identifier: MIT

// The cutest dawg with lots of utilities, building since summer 2023!
// Telegram: https://t.me/PuggyBASE
// Twitter: https://twitter.com/PuggyBASE
// Website: https://puggytoken.com            

pragma solidity 0.8.17;

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 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 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;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
   
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract call
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Check for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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 - https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract Puggy is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    address private  marketingWallet;
    address private  developmentWallet;

    uint256 private  swapTokensAtAmount;
    bool    private swapping;

    bool    private swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 ethSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("Puggy", "PUG") 
    {   
        address router;
        if (block.chainid == 8453) {
            router = 0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891; // BASE SushiSwap Mainnet Router
        } else if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC PancakeSwap Mainnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet & Testnet
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        liquidityFeeOnBuy  = 0;
        liquidityFeeOnSell = 0;

        marketingFeeOnBuy  = 0;
        marketingFeeOnSell = 0;

        _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        marketingWallet = 0xDf30761D151A91200E495a51225EDe7576E623cc;
        developmentWallet = 0x43d28F29C2b43E546a331cAa2e715AbdB8A4Ab33;
        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[developmentWallet] = true;

        _mint(owner(), 330_000_000 * 10**18);
        swapTokensAtAmount = totalSupply() * 1 / 20000;

        puggyEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Puggy cannot rescue contract balance of PUG tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function withdrawETH() external onlyOwner {
        uint256 amount = address(this).balance;
        require(amount > 0, "No ETH in contract to withdraw");

        // Use call instead of transfer to send ETH and check for its success.
        (bool success, ) = msg.sender.call{value: amount}("");
        require(success, "Transfer failed.");
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    bool private puggyEnabled;

    function enablePuggy() external onlyOwner{
        require(!puggyEnabled, "Puggy is already enabled.");
        puggyEnabled = true;
        swapEnabled = true;
    }

    function setMWallet(address newMWallet) external onlyOwner {
        marketingWallet = newMWallet;
    }

    function setDWallet(address newDWallet) external onlyOwner {
        developmentWallet = newDWallet;
    }
	
    function disableBuyTax() external onlyOwner{
        liquidityFeeOnBuy  = 0;
        marketingFeeOnBuy  = 0;
        _totalFeesOnBuy    = liquidityFeeOnBuy + marketingFeeOnBuy;
    }

    function enableBuyTax() external onlyOwner{
        liquidityFeeOnBuy  = 1;
        marketingFeeOnBuy  = 2;
        _totalFeesOnBuy    = liquidityFeeOnBuy + marketingFeeOnBuy;
    }

    function disableSellTax() external onlyOwner{
        liquidityFeeOnSell = 0;
        marketingFeeOnSell = 0;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
    }

    function enableSellTax() external onlyOwner{
        liquidityFeeOnSell = 1;
        marketingFeeOnSell = 2;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
    }
	
    function twoPercentTax() external onlyOwner{
        liquidityFeeOnBuy  = 1;
        marketingFeeOnBuy  = 1;
        liquidityFeeOnSell = 1;
        marketingFeeOnSell = 1;
		_totalFeesOnBuy    = liquidityFeeOnBuy + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
    }
	
    function onePercentTax() external onlyOwner{
        liquidityFeeOnBuy  = 1;
        marketingFeeOnBuy  = 0;
        liquidityFeeOnSell = 1;
        marketingFeeOnSell = 0;
		_totalFeesOnBuy    = liquidityFeeOnBuy + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
    }

    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(puggyEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Puggy is not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

            if (liquidityShare > 0) {
                uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee;
                swapAndLiquify(liquidityTokens);
            }
            
            if (marketingShare > 0) {
                uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee;
                swapAndSendMarketing(marketingTokens);
            }          

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        super._transfer(from, to, amount);
    }

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "TAX swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "TAX swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        uint256 half = newBalance / 2;

        payable(marketingWallet).sendValue(half);
        payable(developmentWallet).sendValue(address(this).balance - initialBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }
}

Contract Security Audit

Contract ABI

[{"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePuggy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSellTax","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":"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":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","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":"onePercentTax","outputs":[],"stateMutability":"nonpayable","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":"newDWallet","type":"address"}],"name":"setDWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMWallet","type":"address"}],"name":"setMWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":[{"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":[{"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":"twoPercentTax","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":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405180604001604052806005815260200164507567677960d81b8152506040518060400160405280600381526020016250554760e81b81525081600390816200005d91906200073b565b5060046200006c82826200073b565b5050506000620000816200047d60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060004661210503620000f75750736bded42c6da8fbf0d2ba55b2fa120c5e0c8d789162000153565b466038036200011c57507310ed43c718714eb63d5aa57b78b54704e256024e62000153565b46600114806200012c5750466005145b156200014e5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000153565b600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000199573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bf919062000807565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000233919062000807565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a7919062000807565b600680546001600160a01b038086166001600160a01b031992831681179093556007805491851691909216179055909150620002e890309060001962000481565b60006009819055600a819055600b819055600c8190556200030a90806200084f565b600d55600c54600a546200031f91906200084f565b600e55600f80546001600160a01b031990811673df30761d151a91200e495a51225ede7576e623cc17909155601080549091167343d28f29c2b43e546a331caa2e715abdb8a4ab33179055600160086000620003836005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560089093527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054851660019081179091553084528284208054861682179055600f548216845282842080548616821790556010549091168352912080549092161790556200043f6200042c6005546001600160a01b031690565b6b0110f837d8942a518a000000620005ad565b614e206200044c60025490565b620004599060016200086b565b62000465919062000885565b60115550506012805462ffff001916905550620008a8565b3390565b6001600160a01b038316620004e95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200054c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004e0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006055760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004e0565b80600260008282546200061991906200084f565b90915550506001600160a01b03821660009081526020819052604081208054839290620006489084906200084f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006c257607f821691505b602082108103620006e357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069257600081815260208120601f850160051c81016020861015620007125750805b601f850160051c820191505b8181101562000733578281556001016200071e565b505050505050565b81516001600160401b0381111562000757576200075762000697565b6200076f81620007688454620006ad565b84620006e9565b602080601f831160018114620007a757600084156200078e5750858301515b600019600386901b1c1916600185901b17855562000733565b600085815260208120601f198616915b82811015620007d857888601518255948401946001909101908401620007b7565b5085821015620007f75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200081a57600080fd5b81516001600160a01b03811681146200083257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000865576200086562000839565b92915050565b808202811582820484141762000865576200086562000839565b600082620008a357634e487b7160e01b600052601260045260246000fd5b500490565b6121ee80620008b86000396000f3fe6080604052600436106102085760003560e01c80637b3c83b111610118578063dc4c7dbc116100a0578063e0abe9121161006f578063e0abe912146105d7578063ed8128cf146105f7578063f2fde38b1461060c578063f3e67cbd1461062c578063f9d0831a1461064157600080fd5b8063dc4c7dbc14610546578063dd62ed3e1461055c578063e01af92c146105a2578063e086e5ec146105c257600080fd5b8063a457c2d7116100e7578063a457c2d7146104b1578063a9059cbb146104d1578063afa4f3b2146104f1578063c024666814610511578063c8b164fb1461053157600080fd5b80637b3c83b1146104535780638ad0b163146104695780638da5cb5b1461047e57806395d89b411461049c57600080fd5b8063395093511161019b5780635fc2e5961161016a5780635fc2e596146103bd578063700e3408146103d357806370a08231146103f3578063715018a61461042957806372682c321461043e57600080fd5b8063395093511461032f57806349bd5a5e1461034f5780634ed4e9e31461036f5780634fbee1931461038457600080fd5b806318160ddd116101d757806318160ddd146102be57806323b872dd146102dd5780632ce86fbf146102fd578063313ce5671461031357600080fd5b8063049ec6f21461021457806306fdde031461022b578063095ea7b3146102565780631694505e1461028657600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b50610229610661565b005b34801561023757600080fd5b506102406106cc565b60405161024d9190611da5565b60405180910390f35b34801561026257600080fd5b50610276610271366004611e08565b61075e565b604051901515815260200161024d565b34801561029257600080fd5b506006546102a6906001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b3480156102ca57600080fd5b506002545b60405190815260200161024d565b3480156102e957600080fd5b506102766102f8366004611e34565b610775565b34801561030957600080fd5b506102cf600a5481565b34801561031f57600080fd5b506040516012815260200161024d565b34801561033b57600080fd5b5061027661034a366004611e08565b610826565b34801561035b57600080fd5b506007546102a6906001600160a01b031681565b34801561037b57600080fd5b50610229610862565b34801561039057600080fd5b5061027661039f366004611e75565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156103c957600080fd5b506102cf600b5481565b3480156103df57600080fd5b506102296103ee366004611e75565b6108a2565b3480156103ff57600080fd5b506102cf61040e366004611e75565b6001600160a01b031660009081526020819052604090205490565b34801561043557600080fd5b506102296108ee565b34801561044a57600080fd5b50610229610962565b34801561045f57600080fd5b506102cf60095481565b34801561047557600080fd5b506102296109a8565b34801561048a57600080fd5b506005546001600160a01b03166102a6565b3480156104a857600080fd5b50610240610a3e565b3480156104bd57600080fd5b506102766104cc366004611e08565b610a4d565b3480156104dd57600080fd5b506102766104ec366004611e08565b610ae6565b3480156104fd57600080fd5b5061022961050c366004611e99565b610af3565b34801561051d57600080fd5b5061022961052c366004611ec0565b610c85565b34801561053d57600080fd5b50610229610d91565b34801561055257600080fd5b506102cf600c5481565b34801561056857600080fd5b506102cf610577366004611ef9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105ae57600080fd5b506102296105bd366004611f27565b610ddc565b3480156105ce57600080fd5b50610229610e8d565b3480156105e357600080fd5b506102296105f2366004611e75565b610f94565b34801561060357600080fd5b50610229610fe0565b34801561061857600080fd5b50610229610627366004611e75565b611021565b34801561063857600080fd5b5061022961110c565b34801561064d57600080fd5b5061022961065c366004611e75565b61114c565b6005546001600160a01b031633146106945760405162461bcd60e51b815260040161068b90611f44565b60405180910390fd5b60016009819055600b819055600a819055600c8190556106b49080611f8f565b600d55600c54600a546106c79190611f8f565b600e55565b6060600380546106db90611fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461070790611fa2565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b5050505050905090565b600061076b3384846112eb565b5060015b92915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461081057828110156108035760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161068b565b61081085338584036112eb565b61081b85858561140f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161076b91859061085d908690611f8f565b6112eb565b6005546001600160a01b0316331461088c5760405162461bcd60e51b815260040161068b90611f44565b6000600a819055600c8190556106c79080611f8f565b6005546001600160a01b031633146108cc5760405162461bcd60e51b815260040161068b90611f44565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146109185760405162461bcd60e51b815260040161068b90611f44565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461098c5760405162461bcd60e51b815260040161068b90611f44565b600160098190556002600b8190556109a391611f8f565b600d55565b6005546001600160a01b031633146109d25760405162461bcd60e51b815260040161068b90611f44565b60125462010000900460ff1615610a2b5760405162461bcd60e51b815260206004820152601960248201527f507567677920697320616c726561647920656e61626c65642e00000000000000604482015260640161068b565b6012805462ffff00191662010100179055565b6060600480546106db90611fa2565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610acf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161068b565b610adc33858584036112eb565b5060019392505050565b600061076b33848461140f565b6005546001600160a01b03163314610b1d5760405162461bcd60e51b815260040161068b90611f44565b620186a0610b2a60025490565b610b35906001611fdc565b610b3f9190611ff3565b811015610bb45760405162461bcd60e51b815260206004820152603960248201527f544158207377617020616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e3030312520746f74616c20737570706c792e00000000000000606482015260840161068b565b6103e8610bc060025490565b610bcb906005611fdc565b610bd59190611ff3565b811115610c4a5760405162461bcd60e51b815260206004820152603860248201527f544158207377617020616d6f756e742063616e6e6f742062652068696768657260448201527f207468616e20302e352520746f74616c20737570706c792e0000000000000000606482015260840161068b565b60118190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b1459060200160405180910390a150565b6005546001600160a01b03163314610caf5760405162461bcd60e51b815260040161068b90611f44565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610d325760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b606482015260840161068b565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610dbb5760405162461bcd60e51b815260040161068b90611f44565b600160098190556000600b819055600a829055600c8190556106b491611f8f565b6005546001600160a01b03163314610e065760405162461bcd60e51b815260040161068b90611f44565b801515601260019054906101000a900460ff16151503610e735760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b606482015260840161068b565b601280549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314610eb75760405162461bcd60e51b815260040161068b90611f44565b4780610f055760405162461bcd60e51b815260206004820152601e60248201527f4e6f2045544820696e20636f6e747261637420746f2077697468647261770000604482015260640161068b565b604051600090339083908381818185875af1925050503d8060008114610f47576040519150601f19603f3d011682016040523d82523d6000602084013e610f4c565b606091505b5050905080610f905760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161068b565b5050565b6005546001600160a01b03163314610fbe5760405162461bcd60e51b815260040161068b90611f44565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461100a5760405162461bcd60e51b815260040161068b90611f44565b6001600a8190556002600c8190556106c791611f8f565b6005546001600160a01b0316331461104b5760405162461bcd60e51b815260040161068b90611f44565b6001600160a01b0381166110b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111365760405162461bcd60e51b815260040161068b90611f44565b60006009819055600b8190556109a39080611f8f565b6005546001600160a01b031633146111765760405162461bcd60e51b815260040161068b90611f44565b306001600160a01b038216036111e95760405162461bcd60e51b815260206004820152603260248201527f50756767792063616e6e6f742072657363756520636f6e74726163742062616c604482015271616e6365206f662050554720746f6b656e7360701b606482015260840161068b565b6001600160a01b038116611204576112013347611717565b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561124d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112719190612015565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e5919061202e565b50505050565b6001600160a01b03831661134d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161068b565b6001600160a01b0382166113ae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161068b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114355760405162461bcd60e51b815260040161068b9061204b565b6001600160a01b03821661145b5760405162461bcd60e51b815260040161068b90612090565b60125462010000900460ff168061148a57506001600160a01b03831660009081526008602052604090205460ff165b806114ad57506001600160a01b03821660009081526008602052604090205460ff165b6114f95760405162461bcd60e51b815260206004820152601960248201527f5075676779206973206e6f742079657420656e61626c65642100000000000000604482015260640161068b565b806000036115125761150d83836000611830565b505050565b3060009081526020819052604090205460115481108015908190611539575060125460ff16155b801561155257506007546001600160a01b038581169116145b801561156d57506000600e54600d5461156b9190611f8f565b115b80156115805750601254610100900460ff165b15611630576012805460ff19166001179055600e54600d546000916115a491611f8f565b90506000600a546009546115b89190611f8f565b90506000600c54600b546115cc9190611f8f565b905081156115f8576000836115e18488611fdc565b6115eb9190611ff3565b90506115f681611984565b505b80156116225760008361160b8388611fdc565b6116159190611ff3565b905061162081611bcf565b505b50506012805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff168061166f57506001600160a01b03851660009081526008602052604090205460ff165b8061167c575060125460ff165b15611689575060006116cb565b6007546001600160a01b03908116908716036116a85750600d546116cb565b6007546001600160a01b03908116908616036116c75750600e546116cb565b5060005b801561170457600060646116df8387611fdc565b6116e99190611ff3565b90506116f581866120d3565b9450611702873083611830565b505b61170f868686611830565b505050505050565b804710156117675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161068b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146117b4576040519150601f19603f3d011682016040523d82523d6000602084013e6117b9565b606091505b505090508061150d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161068b565b6001600160a01b0383166118565760405162461bcd60e51b815260040161068b9061204b565b6001600160a01b03821661187c5760405162461bcd60e51b815260040161068b90612090565b6001600160a01b038316600090815260208190526040902054818110156118f45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161068b565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061192b908490611f8f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161197791815260200190565b60405180910390a36112e5565b6000611991600283611ff3565b9050600061199f82846120d3565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106119d9576119d96120e6565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5691906120fc565b81600181518110611a6957611a696120e6565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790611aaf908790600090869030904290600401612119565b600060405180830381600087803b158015611ac957600080fd5b505af1158015611add573d6000803e3d6000fd5b5050505060008247611aef91906120d3565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611b5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b83919061218a565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110611c0857611c086120e6565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8591906120fc565b81600181518110611c9857611c986120e6565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790611cde908690600090869030904290600401612119565b600060405180830381600087803b158015611cf857600080fd5b505af1158015611d0c573d6000803e3d6000fd5b5050505060008247611d1e91906120d3565b90506000611d2d600283611ff3565b600f54909150611d46906001600160a01b031682611717565b611d65611d5385476120d3565b6010546001600160a01b031690611717565b60408051868152602081018490527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a15050505050565b600060208083528351808285015260005b81811015611dd257858101830151858201604001528201611db6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461120157600080fd5b60008060408385031215611e1b57600080fd5b8235611e2681611df3565b946020939093013593505050565b600080600060608486031215611e4957600080fd5b8335611e5481611df3565b92506020840135611e6481611df3565b929592945050506040919091013590565b600060208284031215611e8757600080fd5b8135611e9281611df3565b9392505050565b600060208284031215611eab57600080fd5b5035919050565b801515811461120157600080fd5b60008060408385031215611ed357600080fd5b8235611ede81611df3565b91506020830135611eee81611eb2565b809150509250929050565b60008060408385031215611f0c57600080fd5b8235611f1781611df3565b91506020830135611eee81611df3565b600060208284031215611f3957600080fd5b8135611e9281611eb2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561076f5761076f611f79565b600181811c90821680611fb657607f821691505b602082108103611fd657634e487b7160e01b600052602260045260246000fd5b50919050565b808202811582820484141761076f5761076f611f79565b60008261201057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561202757600080fd5b5051919050565b60006020828403121561204057600080fd5b8151611e9281611eb2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561076f5761076f611f79565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561210e57600080fd5b8151611e9281611df3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121695784516001600160a01b031683529383019391830191600101612144565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561219f57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122071234f106a153bdad4450973357404ad857fb559cbf388943e4e9e4fd72edac064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80637b3c83b111610118578063dc4c7dbc116100a0578063e0abe9121161006f578063e0abe912146105d7578063ed8128cf146105f7578063f2fde38b1461060c578063f3e67cbd1461062c578063f9d0831a1461064157600080fd5b8063dc4c7dbc14610546578063dd62ed3e1461055c578063e01af92c146105a2578063e086e5ec146105c257600080fd5b8063a457c2d7116100e7578063a457c2d7146104b1578063a9059cbb146104d1578063afa4f3b2146104f1578063c024666814610511578063c8b164fb1461053157600080fd5b80637b3c83b1146104535780638ad0b163146104695780638da5cb5b1461047e57806395d89b411461049c57600080fd5b8063395093511161019b5780635fc2e5961161016a5780635fc2e596146103bd578063700e3408146103d357806370a08231146103f3578063715018a61461042957806372682c321461043e57600080fd5b8063395093511461032f57806349bd5a5e1461034f5780634ed4e9e31461036f5780634fbee1931461038457600080fd5b806318160ddd116101d757806318160ddd146102be57806323b872dd146102dd5780632ce86fbf146102fd578063313ce5671461031357600080fd5b8063049ec6f21461021457806306fdde031461022b578063095ea7b3146102565780631694505e1461028657600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b50610229610661565b005b34801561023757600080fd5b506102406106cc565b60405161024d9190611da5565b60405180910390f35b34801561026257600080fd5b50610276610271366004611e08565b61075e565b604051901515815260200161024d565b34801561029257600080fd5b506006546102a6906001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b3480156102ca57600080fd5b506002545b60405190815260200161024d565b3480156102e957600080fd5b506102766102f8366004611e34565b610775565b34801561030957600080fd5b506102cf600a5481565b34801561031f57600080fd5b506040516012815260200161024d565b34801561033b57600080fd5b5061027661034a366004611e08565b610826565b34801561035b57600080fd5b506007546102a6906001600160a01b031681565b34801561037b57600080fd5b50610229610862565b34801561039057600080fd5b5061027661039f366004611e75565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156103c957600080fd5b506102cf600b5481565b3480156103df57600080fd5b506102296103ee366004611e75565b6108a2565b3480156103ff57600080fd5b506102cf61040e366004611e75565b6001600160a01b031660009081526020819052604090205490565b34801561043557600080fd5b506102296108ee565b34801561044a57600080fd5b50610229610962565b34801561045f57600080fd5b506102cf60095481565b34801561047557600080fd5b506102296109a8565b34801561048a57600080fd5b506005546001600160a01b03166102a6565b3480156104a857600080fd5b50610240610a3e565b3480156104bd57600080fd5b506102766104cc366004611e08565b610a4d565b3480156104dd57600080fd5b506102766104ec366004611e08565b610ae6565b3480156104fd57600080fd5b5061022961050c366004611e99565b610af3565b34801561051d57600080fd5b5061022961052c366004611ec0565b610c85565b34801561053d57600080fd5b50610229610d91565b34801561055257600080fd5b506102cf600c5481565b34801561056857600080fd5b506102cf610577366004611ef9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105ae57600080fd5b506102296105bd366004611f27565b610ddc565b3480156105ce57600080fd5b50610229610e8d565b3480156105e357600080fd5b506102296105f2366004611e75565b610f94565b34801561060357600080fd5b50610229610fe0565b34801561061857600080fd5b50610229610627366004611e75565b611021565b34801561063857600080fd5b5061022961110c565b34801561064d57600080fd5b5061022961065c366004611e75565b61114c565b6005546001600160a01b031633146106945760405162461bcd60e51b815260040161068b90611f44565b60405180910390fd5b60016009819055600b819055600a819055600c8190556106b49080611f8f565b600d55600c54600a546106c79190611f8f565b600e55565b6060600380546106db90611fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461070790611fa2565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b5050505050905090565b600061076b3384846112eb565b5060015b92915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461081057828110156108035760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161068b565b61081085338584036112eb565b61081b85858561140f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161076b91859061085d908690611f8f565b6112eb565b6005546001600160a01b0316331461088c5760405162461bcd60e51b815260040161068b90611f44565b6000600a819055600c8190556106c79080611f8f565b6005546001600160a01b031633146108cc5760405162461bcd60e51b815260040161068b90611f44565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146109185760405162461bcd60e51b815260040161068b90611f44565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461098c5760405162461bcd60e51b815260040161068b90611f44565b600160098190556002600b8190556109a391611f8f565b600d55565b6005546001600160a01b031633146109d25760405162461bcd60e51b815260040161068b90611f44565b60125462010000900460ff1615610a2b5760405162461bcd60e51b815260206004820152601960248201527f507567677920697320616c726561647920656e61626c65642e00000000000000604482015260640161068b565b6012805462ffff00191662010100179055565b6060600480546106db90611fa2565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610acf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161068b565b610adc33858584036112eb565b5060019392505050565b600061076b33848461140f565b6005546001600160a01b03163314610b1d5760405162461bcd60e51b815260040161068b90611f44565b620186a0610b2a60025490565b610b35906001611fdc565b610b3f9190611ff3565b811015610bb45760405162461bcd60e51b815260206004820152603960248201527f544158207377617020616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e3030312520746f74616c20737570706c792e00000000000000606482015260840161068b565b6103e8610bc060025490565b610bcb906005611fdc565b610bd59190611ff3565b811115610c4a5760405162461bcd60e51b815260206004820152603860248201527f544158207377617020616d6f756e742063616e6e6f742062652068696768657260448201527f207468616e20302e352520746f74616c20737570706c792e0000000000000000606482015260840161068b565b60118190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b1459060200160405180910390a150565b6005546001600160a01b03163314610caf5760405162461bcd60e51b815260040161068b90611f44565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610d325760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b606482015260840161068b565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610dbb5760405162461bcd60e51b815260040161068b90611f44565b600160098190556000600b819055600a829055600c8190556106b491611f8f565b6005546001600160a01b03163314610e065760405162461bcd60e51b815260040161068b90611f44565b801515601260019054906101000a900460ff16151503610e735760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b606482015260840161068b565b601280549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314610eb75760405162461bcd60e51b815260040161068b90611f44565b4780610f055760405162461bcd60e51b815260206004820152601e60248201527f4e6f2045544820696e20636f6e747261637420746f2077697468647261770000604482015260640161068b565b604051600090339083908381818185875af1925050503d8060008114610f47576040519150601f19603f3d011682016040523d82523d6000602084013e610f4c565b606091505b5050905080610f905760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161068b565b5050565b6005546001600160a01b03163314610fbe5760405162461bcd60e51b815260040161068b90611f44565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461100a5760405162461bcd60e51b815260040161068b90611f44565b6001600a8190556002600c8190556106c791611f8f565b6005546001600160a01b0316331461104b5760405162461bcd60e51b815260040161068b90611f44565b6001600160a01b0381166110b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111365760405162461bcd60e51b815260040161068b90611f44565b60006009819055600b8190556109a39080611f8f565b6005546001600160a01b031633146111765760405162461bcd60e51b815260040161068b90611f44565b306001600160a01b038216036111e95760405162461bcd60e51b815260206004820152603260248201527f50756767792063616e6e6f742072657363756520636f6e74726163742062616c604482015271616e6365206f662050554720746f6b656e7360701b606482015260840161068b565b6001600160a01b038116611204576112013347611717565b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561124d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112719190612015565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e5919061202e565b50505050565b6001600160a01b03831661134d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161068b565b6001600160a01b0382166113ae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161068b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114355760405162461bcd60e51b815260040161068b9061204b565b6001600160a01b03821661145b5760405162461bcd60e51b815260040161068b90612090565b60125462010000900460ff168061148a57506001600160a01b03831660009081526008602052604090205460ff165b806114ad57506001600160a01b03821660009081526008602052604090205460ff165b6114f95760405162461bcd60e51b815260206004820152601960248201527f5075676779206973206e6f742079657420656e61626c65642100000000000000604482015260640161068b565b806000036115125761150d83836000611830565b505050565b3060009081526020819052604090205460115481108015908190611539575060125460ff16155b801561155257506007546001600160a01b038581169116145b801561156d57506000600e54600d5461156b9190611f8f565b115b80156115805750601254610100900460ff165b15611630576012805460ff19166001179055600e54600d546000916115a491611f8f565b90506000600a546009546115b89190611f8f565b90506000600c54600b546115cc9190611f8f565b905081156115f8576000836115e18488611fdc565b6115eb9190611ff3565b90506115f681611984565b505b80156116225760008361160b8388611fdc565b6116159190611ff3565b905061162081611bcf565b505b50506012805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff168061166f57506001600160a01b03851660009081526008602052604090205460ff165b8061167c575060125460ff165b15611689575060006116cb565b6007546001600160a01b03908116908716036116a85750600d546116cb565b6007546001600160a01b03908116908616036116c75750600e546116cb565b5060005b801561170457600060646116df8387611fdc565b6116e99190611ff3565b90506116f581866120d3565b9450611702873083611830565b505b61170f868686611830565b505050505050565b804710156117675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161068b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146117b4576040519150601f19603f3d011682016040523d82523d6000602084013e6117b9565b606091505b505090508061150d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161068b565b6001600160a01b0383166118565760405162461bcd60e51b815260040161068b9061204b565b6001600160a01b03821661187c5760405162461bcd60e51b815260040161068b90612090565b6001600160a01b038316600090815260208190526040902054818110156118f45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161068b565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061192b908490611f8f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161197791815260200190565b60405180910390a36112e5565b6000611991600283611ff3565b9050600061199f82846120d3565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106119d9576119d96120e6565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5691906120fc565b81600181518110611a6957611a696120e6565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790611aaf908790600090869030904290600401612119565b600060405180830381600087803b158015611ac957600080fd5b505af1158015611add573d6000803e3d6000fd5b5050505060008247611aef91906120d3565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611b5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b83919061218a565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110611c0857611c086120e6565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8591906120fc565b81600181518110611c9857611c986120e6565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790611cde908690600090869030904290600401612119565b600060405180830381600087803b158015611cf857600080fd5b505af1158015611d0c573d6000803e3d6000fd5b5050505060008247611d1e91906120d3565b90506000611d2d600283611ff3565b600f54909150611d46906001600160a01b031682611717565b611d65611d5385476120d3565b6010546001600160a01b031690611717565b60408051868152602081018490527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a15050505050565b600060208083528351808285015260005b81811015611dd257858101830151858201604001528201611db6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461120157600080fd5b60008060408385031215611e1b57600080fd5b8235611e2681611df3565b946020939093013593505050565b600080600060608486031215611e4957600080fd5b8335611e5481611df3565b92506020840135611e6481611df3565b929592945050506040919091013590565b600060208284031215611e8757600080fd5b8135611e9281611df3565b9392505050565b600060208284031215611eab57600080fd5b5035919050565b801515811461120157600080fd5b60008060408385031215611ed357600080fd5b8235611ede81611df3565b91506020830135611eee81611eb2565b809150509250929050565b60008060408385031215611f0c57600080fd5b8235611f1781611df3565b91506020830135611eee81611df3565b600060208284031215611f3957600080fd5b8135611e9281611eb2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561076f5761076f611f79565b600181811c90821680611fb657607f821691505b602082108103611fd657634e487b7160e01b600052602260045260246000fd5b50919050565b808202811582820484141761076f5761076f611f79565b60008261201057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561202757600080fd5b5051919050565b60006020828403121561204057600080fd5b8151611e9281611eb2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561076f5761076f611f79565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561210e57600080fd5b8151611e9281611df3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121695784516001600160a01b031683529383019391830191600101612144565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561219f57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122071234f106a153bdad4450973357404ad857fb559cbf388943e4e9e4fd72edac064736f6c63430008110033

Deployed ByteCode Sourcemap

19866:10471:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25208:317;;;;;;;;;;;;;:::i;:::-;;15151:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16065:169;;;;;;;;;;-1:-1:-1;16065:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;16065:169:0;1023:187:1;19948:41:0;;;;;;;;;;-1:-1:-1;19948:41:0;;;;-1:-1:-1;;;;;19948:41:0;;;;;;-1:-1:-1;;;;;1405:32:1;;;1387:51;;1375:2;1360:18;19948:41:0;1215:229:1;15472:108:0;;;;;;;;;;-1:-1:-1;15560:12:0;;15472:108;;;1595:25:1;;;1583:2;1568:18;15472:108:0;1449:177:1;16242:573:0;;;;;;;;;;-1:-1:-1;16242:573:0;;;;;:::i;:::-;;:::i;20136:34::-;;;;;;;;;;;;;;;;15371:93;;;;;;;;;;-1:-1:-1;15371:93:0;;15454:2;2234:36:1;;2222:2;2207:18;15371:93:0;2092:184:1;16823:215:0;;;;;;;;;;-1:-1:-1;16823:215:0;;;;;:::i;:::-;;:::i;19996:29::-;;;;;;;;;;-1:-1:-1;19996:29:0;;;;-1:-1:-1;;;;;19996:29:0;;;24814:189;;;;;;;;;;;;;:::i;23851:125::-;;;;;;;;;;-1:-1:-1;23851:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23940:28:0;23916:4;23940:28;;;:19;:28;;;;;;;;;23851:125;20179:33;;;;;;;;;;;;;;;;24196:106;;;;;;;;;;-1:-1:-1;24196:106:0;;;;;:::i;:::-;;:::i;15588:127::-;;;;;;;;;;-1:-1:-1;15588:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15689:18:0;15662:7;15689:18;;;;;;;;;;;;15588:127;14338:148;;;;;;;;;;;;;:::i;24621:185::-;;;;;;;;;;;;;:::i;20096:33::-;;;;;;;;;;;;;;;;24018:170;;;;;;;;;;;;;:::i;14124:79::-;;;;;;;;;;-1:-1:-1;14189:6:0;;-1:-1:-1;;;;;14189:6:0;14124:79;;15259:104;;;;;;;;;;;;;:::i;17046:413::-;;;;;;;;;;-1:-1:-1;17046:413:0;;;;;:::i;:::-;;:::i;15723:175::-;;;;;;;;;;-1:-1:-1;15723:175:0;;;;;:::i;:::-;;:::i;28177:495::-;;;;;;;;;;-1:-1:-1;28177:495:0;;;;;:::i;:::-;;:::i;23553:290::-;;;;;;;;;;-1:-1:-1;23553:290:0;;;;;:::i;:::-;;:::i;25534:317::-;;;;;;;;;;;;;:::i;20219:34::-;;;;;;;;;;;;;;;;15906:151;;;;;;;;;;-1:-1:-1;15906:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;16022:18:0;;;15995:7;16022:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15906:151;27990:179;;;;;;;;;;-1:-1:-1;27990:179:0;;;;;:::i;:::-;;:::i;23189:356::-;;;;;;;;;;;;;:::i;24310:108::-;;;;;;;;;;-1:-1:-1;24310:108:0;;;;;:::i;:::-;;:::i;25011:188::-;;;;;;;;;;;;;:::i;14494:244::-;;;;;;;;;;-1:-1:-1;14494:244:0;;;;;:::i;:::-;;:::i;24427:186::-;;;;;;;;;;;;;:::i;22721:460::-;;;;;;;;;;-1:-1:-1;22721:460:0;;;;;:::i;:::-;;:::i;25208:317::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;;;;;;;;;25283:1:::1;25262:17;:22:::0;;;25295:17:::1;:22:::0;;;25328:18:::1;:22:::0;;;25361:18:::1;:22:::0;;;25409:37:::1;::::0;25283:1;25409:37:::1;:::i;:::-;25388:15;:58:::0;25499:18:::1;::::0;25478::::1;::::0;:39:::1;::::0;25499:18;25478:39:::1;:::i;:::-;25457:16;:60:::0;25208:317::o;15151:100::-;15205:13;15238:5;15231:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15151:100;:::o;16065:169::-;16148:4;16165:39;13531:10;16188:7;16197:6;16165:8;:39::i;:::-;-1:-1:-1;16222:4:0;16065:169;;;;;:::o;16242:573::-;-1:-1:-1;;;;;16426:19:0;;16382:4;16426:19;;;:11;:19;;;;;;;;13531:10;16426:33;;;;;;;;-1:-1:-1;;16474:37:0;;16470:265;;16556:6;16536:16;:26;;16528:79;;;;-1:-1:-1;;;16528:79:0;;5285:2:1;16528:79:0;;;5267:21:1;5324:2;5304:18;;;5297:30;5363:34;5343:18;;;5336:62;-1:-1:-1;;;5414:18:1;;;5407:38;5462:19;;16528:79:0;5083:404:1;16528:79:0;16651:57;16660:6;13531:10;16701:6;16682:16;:25;16651:8;:57::i;:::-;16747:36;16757:6;16765:9;16776:6;16747:9;:36::i;:::-;-1:-1:-1;16803:4:0;;16242:573;-1:-1:-1;;;;16242:573:0:o;16823:215::-;13531:10;16911:4;16960:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16960:34:0;;;;;;;;;;16911:4;;16928:80;;16951:7;;16960:47;;16997:10;;16960:47;:::i;:::-;16928:8;:80::i;24814:189::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;24890:1:::1;24869:18;:22:::0;;;24902:18:::1;:22:::0;;;24956:39:::1;::::0;24890:1;24956:39:::1;:::i;24196:106::-:0;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;24266:15:::1;:28:::0;;-1:-1:-1;;;;;;24266:28:0::1;-1:-1:-1::0;;;;;24266:28:0;;;::::1;::::0;;;::::1;::::0;;24196:106::o;14338:148::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;14429:6:::1;::::0;14408:40:::1;::::0;14445:1:::1;::::0;-1:-1:-1;;;;;14429:6:0::1;::::0;14408:40:::1;::::0;14445:1;;14408:40:::1;14459:6;:19:::0;;-1:-1:-1;;;;;;14459:19:0::1;::::0;;14338:148::o;24621:185::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;24695:1:::1;24674:17;:22:::0;;;24728:1:::1;24707:17;:22:::0;;;24761:37:::1;::::0;::::1;:::i;:::-;24740:15;:58:::0;24621:185::o;24018:170::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;24079:12:::1;::::0;;;::::1;;;24078:13;24070:51;;;::::0;-1:-1:-1;;;24070:51:0;;5694:2:1;24070:51:0::1;::::0;::::1;5676:21:1::0;5733:2;5713:18;;;5706:30;5772:27;5752:18;;;5745:55;5817:18;;24070:51:0::1;5492:349:1::0;24070:51:0::1;24132:12;:19:::0;;-1:-1:-1;;24162:18:0;;;;;24018:170::o;15259:104::-;15315:13;15348:7;15341:14;;;;;:::i;17046:413::-;13531:10;17139:4;17183:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17183:34:0;;;;;;;;;;17236:35;;;;17228:85;;;;-1:-1:-1;;;17228:85:0;;6048:2:1;17228:85:0;;;6030:21:1;6087:2;6067:18;;;6060:30;6126:34;6106:18;;;6099:62;-1:-1:-1;;;6177:18:1;;;6170:35;6222:19;;17228:85:0;5846:401:1;17228:85:0;17349:67;13531:10;17372:7;17400:15;17381:16;:34;17349:8;:67::i;:::-;-1:-1:-1;17447:4:0;;17046:413;-1:-1:-1;;;17046:413:0:o;15723:175::-;15809:4;15826:42;13531:10;15850:9;15861:6;15826:9;:42::i;28177:495::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;28313:6:::1;28292:13;15560:12:::0;;;15472:108;28292:13:::1;:17;::::0;28308:1:::1;28292:17;:::i;:::-;28291:28;;;;:::i;:::-;28278:9;:41;;28256:148;;;::::0;-1:-1:-1;;;28256:148:0;;6849:2:1;28256:148:0::1;::::0;::::1;6831:21:1::0;6888:2;6868:18;;;6861:30;6927:34;6907:18;;;6900:62;6998:27;6978:18;;;6971:55;7043:19;;28256:148:0::1;6647:421:1::0;28256:148:0::1;28472:4;28451:13;15560:12:::0;;;15472:108;28451:13:::1;:17;::::0;28467:1:::1;28451:17;:::i;:::-;28450:26;;;;:::i;:::-;28437:9;:39;;28415:145;;;::::0;-1:-1:-1;;;28415:145:0;;7275:2:1;28415:145:0::1;::::0;::::1;7257:21:1::0;7314:2;7294:18;;;7287:30;7353:34;7333:18;;;7326:62;7424:26;7404:18;;;7397:54;7468:19;;28415:145:0::1;7073:420:1::0;28415:145:0::1;28571:18;:30:::0;;;28619:45:::1;::::0;1595:25:1;;;28619:45:0::1;::::0;1583:2:1;1568:18;28619:45:0::1;;;;;;;28177:495:::0;:::o;23553:290::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23647:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;23639:94:::1;;;::::0;-1:-1:-1;;;23639:94:0;;7700:2:1;23639:94:0::1;::::0;::::1;7682:21:1::0;7739:2;7719:18;;;7712:30;7778:34;7758:18;;;7751:62;-1:-1:-1;;;7829:18:1;;;7822:40;7879:19;;23639:94:0::1;7498:406:1::0;23639:94:0::1;-1:-1:-1::0;;;;;23744:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23744:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23801:34;;1163:41:1;;;23801:34:0::1;::::0;1136:18:1;23801:34:0::1;;;;;;;23553:290:::0;;:::o;25534:317::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;25609:1:::1;25588:17;:22:::0;;;25642:1:::1;25621:17;:22:::0;;;25654:18:::1;:22:::0;;;25687:18:::1;:22:::0;;;25735:37:::1;::::0;::::1;:::i;27990:179::-:0;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;28081:8:::1;28066:23;;:11;;;;;;;;;;;:23;;::::0;28058:70:::1;;;::::0;-1:-1:-1;;;28058:70:0;;8111:2:1;28058:70:0::1;::::0;::::1;8093:21:1::0;8150:2;8130:18;;;8123:30;8189:34;8169:18;;;8162:62;-1:-1:-1;;;8240:18:1;;;8233:32;8282:19;;28058:70:0::1;7909:398:1::0;28058:70:0::1;28139:11;:22:::0;;;::::1;;;;-1:-1:-1::0;;28139:22:0;;::::1;::::0;;;::::1;::::0;;27990:179::o;23189:356::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;23259:21:::1;23299:10:::0;23291:53:::1;;;::::0;-1:-1:-1;;;23291:53:0;;8514:2:1;23291:53:0::1;::::0;::::1;8496:21:1::0;8553:2;8533:18;;;8526:30;8592:32;8572:18;;;8565:60;8642:18;;23291:53:0::1;8312:354:1::0;23291:53:0::1;23456:34;::::0;23438:12:::1;::::0;23456:10:::1;::::0;23479:6;;23438:12;23456:34;23438:12;23456:34;23479:6;23456:10;:34:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23437:53;;;23509:7;23501:36;;;::::0;-1:-1:-1;;;23501:36:0;;9083:2:1;23501:36:0::1;::::0;::::1;9065:21:1::0;9122:2;9102:18;;;9095:30;-1:-1:-1;;;9141:18:1;;;9134:46;9197:18;;23501:36:0::1;8881:340:1::0;23501:36:0::1;23231:314;;23189:356::o:0;24310:108::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;24380:17:::1;:30:::0;;-1:-1:-1;;;;;;24380:30:0::1;-1:-1:-1::0;;;;;24380:30:0;;;::::1;::::0;;;::::1;::::0;;24310:108::o;25011:188::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;25086:1:::1;25065:18;:22:::0;;;25119:1:::1;25098:18;:22:::0;;;25152:39:::1;::::0;::::1;:::i;14494:244::-:0;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14583:22:0;::::1;14575:73;;;::::0;-1:-1:-1;;;14575:73:0;;9428:2:1;14575:73:0::1;::::0;::::1;9410:21:1::0;9467:2;9447:18;;;9440:30;9506:34;9486:18;;;9479:62;-1:-1:-1;;;9557:18:1;;;9550:36;9603:19;;14575:73:0::1;9226:402:1::0;14575:73:0::1;14685:6;::::0;14664:38:::1;::::0;-1:-1:-1;;;;;14664:38:0;;::::1;::::0;14685:6:::1;::::0;14664:38:::1;::::0;14685:6:::1;::::0;14664:38:::1;14713:6;:17:::0;;-1:-1:-1;;;;;;14713:17:0::1;-1:-1:-1::0;;;;;14713:17:0;;;::::1;::::0;;;::::1;::::0;;14494:244::o;24427:186::-;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;24502:1:::1;24481:17;:22:::0;;;24514:17:::1;:22:::0;;;24568:37:::1;::::0;24502:1;24568:37:::1;:::i;22721:460::-:0;14251:6;;-1:-1:-1;;;;;14251:6:0;13531:10;14251:22;14243:67;;;;-1:-1:-1;;;14243:67:0;;;;;;;:::i;:::-;22817:4:::1;-1:-1:-1::0;;;;;22800:22:0;::::1;::::0;22792:85:::1;;;::::0;-1:-1:-1;;;22792:85:0;;9835:2:1;22792:85:0::1;::::0;::::1;9817:21:1::0;9874:2;9854:18;;;9847:30;9913:34;9893:18;;;9886:62;-1:-1:-1;;;9964:18:1;;;9957:48;10022:19;;22792:85:0::1;9633:414:1::0;22792:85:0::1;-1:-1:-1::0;;;;;22892:21:0;::::1;22888:127;;22930:52;22938:10;22960:21;22930:29;:52::i;:::-;22721:460:::0;:::o;22888:127::-:1;23087:35;::::0;-1:-1:-1;;;23087:35:0;;23116:4:::1;23087:35;::::0;::::1;1387:51:1::0;23052:5:0;;23025:17:::1;::::0;-1:-1:-1;;;;;23087:20:0;::::1;::::0;::::1;::::0;1360:18:1;;23087:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23133:40;::::0;-1:-1:-1;;;23133:40:0;;23153:10:::1;23133:40;::::0;::::1;10415:51:1::0;10482:18;;;10475:34;;;23069:53:0;;-1:-1:-1;;;;;;23133:19:0;::::1;::::0;::::1;::::0;10388:18:1;;23133:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22781:400;;22721:460:::0;:::o;19214:380::-;-1:-1:-1;;;;;19350:19:0;;19342:68;;;;-1:-1:-1;;;19342:68:0;;10972:2:1;19342:68:0;;;10954:21:1;11011:2;10991:18;;;10984:30;11050:34;11030:18;;;11023:62;-1:-1:-1;;;11101:18:1;;;11094:34;11145:19;;19342:68:0;10770:400:1;19342:68:0;-1:-1:-1;;;;;19429:21:0;;19421:68;;;;-1:-1:-1;;;19421:68:0;;11377:2:1;19421:68:0;;;11359:21:1;11416:2;11396:18;;;11389:30;11455:34;11435:18;;;11428:62;-1:-1:-1;;;11506:18:1;;;11499:32;11548:19;;19421:68:0;11175:398:1;19421:68:0;-1:-1:-1;;;;;19502:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19554:32;;1595:25:1;;;19554:32:0;;1568:18:1;19554:32:0;;;;;;;19214:380;;;:::o;25859:2123::-;-1:-1:-1;;;;;25956:18:0;;25948:68;;;;-1:-1:-1;;;25948:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26035:16:0;;26027:64;;;;-1:-1:-1;;;26027:64:0;;;;;;;:::i;:::-;26110:12;;;;;;;;:41;;-1:-1:-1;;;;;;26126:25:0;;;;;;:19;:25;;;;;;;;26110:41;:68;;;-1:-1:-1;;;;;;26155:23:0;;;;;;:19;:23;;;;;;;;26110:68;26102:106;;;;-1:-1:-1;;;26102:106:0;;12590:2:1;26102:106:0;;;12572:21:1;12629:2;12609:18;;;12602:30;12668:27;12648:18;;;12641:55;12713:18;;26102:106:0;12388:349:1;26102:106:0;26232:6;26242:1;26232:11;26228:93;;26260:28;26276:4;26282:2;26286:1;26260:15;:28::i;:::-;25859:2123;;;:::o;26228:93::-;26376:4;26327:28;15689:18;;;;;;;;;;;26434;;26410:42;;;;;;;26469:33;;-1:-1:-1;26494:8:0;;;;26493:9;26469:33;:69;;;;-1:-1:-1;26525:13:0;;-1:-1:-1;;;;;26519:19:0;;;26525:13;;26519:19;26469:69;:124;;;;;26592:1;26573:16;;26555:15;;:34;;;;:::i;:::-;:38;26469:124;:152;;;;-1:-1:-1;26610:11:0;;;;;;;26469:152;26465:895;;;26648:8;:15;;-1:-1:-1;;26648:15:0;26659:4;26648:15;;;26717:16;;26699:15;;26648:8;;26699:34;;;:::i;:::-;26680:53;;26748:22;26793:18;;26773:17;;:38;;;;:::i;:::-;26748:63;;26826:22;26871:18;;26851:17;;:38;;;;:::i;:::-;26826:63;-1:-1:-1;26910:18:0;;26906:183;;26949:23;27015:8;26975:37;26998:14;26975:20;:37;:::i;:::-;:48;;;;:::i;:::-;26949:74;;27042:31;27057:15;27042:14;:31::i;:::-;26930:159;26906:183;27121:18;;27117:189;;27160:23;27226:8;27186:37;27209:14;27186:20;:37;:::i;:::-;:48;;;;:::i;:::-;27160:74;;27253:37;27274:15;27253:20;:37::i;:::-;27141:165;27117:189;-1:-1:-1;;27332:8:0;:16;;-1:-1:-1;;27332:16:0;;;-1:-1:-1;26465:895:0;-1:-1:-1;;;;;27405:25:0;;27372:18;27405:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27434:23:0;;;;;;:19;:23;;;;;;;;27405:52;:64;;;-1:-1:-1;27461:8:0;;;;27405:64;27401:333;;;-1:-1:-1;27499:1:0;27401:333;;;27530:13;;-1:-1:-1;;;;;27530:13:0;;;27522:21;;;;27518:216;;-1:-1:-1;27573:15:0;;27518:216;;;27616:13;;-1:-1:-1;;;;;27616:13:0;;;27610:19;;;;27606:128;;-1:-1:-1;27659:16:0;;27606:128;;;-1:-1:-1;27721:1:0;27606:128;27750:14;;27746:183;;27781:12;27820:3;27797:19;27806:10;27797:6;:19;:::i;:::-;27796:27;;;;:::i;:::-;27781:42;-1:-1:-1;27847:13:0;27781:42;27847:6;:13;:::i;:::-;27838:22;;27875:42;27891:4;27905;27912;27875:15;:42::i;:::-;27766:163;27746:183;27941:33;27957:4;27963:2;27967:6;27941:15;:33::i;:::-;25937:2045;;;25859:2123;;;:::o;9304:317::-;9419:6;9394:21;:31;;9386:73;;;;-1:-1:-1;;;9386:73:0;;13077:2:1;9386:73:0;;;13059:21:1;13116:2;13096:18;;;13089:30;13155:31;13135:18;;;13128:59;13204:18;;9386:73:0;12875:353:1;9386:73:0;9473:12;9491:9;-1:-1:-1;;;;;9491:14:0;9513:6;9491:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9472:52;;;9543:7;9535:78;;;;-1:-1:-1;;;9535:78:0;;13435:2:1;9535:78:0;;;13417:21:1;13474:2;13454:18;;;13447:30;13513:34;13493:18;;;13486:62;13584:28;13564:18;;;13557:56;13630:19;;9535:78:0;13233:422:1;17467:733:0;-1:-1:-1;;;;;17607:20:0;;17599:70;;;;-1:-1:-1;;;17599:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17688:23:0;;17680:71;;;;-1:-1:-1;;;17680:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17848:17:0;;17824:21;17848:17;;;;;;;;;;;17884:23;;;;17876:74;;;;-1:-1:-1;;;17876:74:0;;13862:2:1;17876:74:0;;;13844:21:1;13901:2;13881:18;;;13874:30;13940:34;13920:18;;;13913:62;-1:-1:-1;;;13991:18:1;;;13984:36;14037:19;;17876:74:0;13660:402:1;17876:74:0;-1:-1:-1;;;;;17986:17:0;;;:9;:17;;;;;;;;;;;18006:22;;;17986:42;;18050:20;;;;;;;;:30;;18022:6;;17986:9;18050:30;;18022:6;;18050:30;:::i;:::-;;;;;;;;18115:9;-1:-1:-1;;;;;18098:35:0;18107:6;-1:-1:-1;;;;;18098:35:0;;18126:6;18098:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;18098:35:0;;;;;;;;18146:46;25859:2123;28680:876;28739:12;28754:10;28763:1;28754:6;:10;:::i;:::-;28739:25;-1:-1:-1;28775:17:0;28795:13;28739:25;28795:6;:13;:::i;:::-;28904:16;;;28918:1;28904:16;;;;;;;;28775:33;;-1:-1:-1;28846:21:0;;28821:22;;28904:16;;;;;;;;;;-1:-1:-1;28904:16:0;28880:40;;28949:4;28931;28936:1;28931:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28931:23:0;;;:7;;;;;;;;;;:23;;;;28975:15;;:22;;;-1:-1:-1;;;28975:22:0;;;;:15;;;;;:20;;:22;;;;;28931:7;;28975:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28965:4;28970:1;28965:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28965:32:0;;;:7;;;;;;;;;:32;29010:15;;:179;;-1:-1:-1;;;29010:179:0;;:15;;;:66;;:179;;29091:4;;29010:15;;29126:4;;29153;;29173:15;;29010:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29210:18;29255:14;29231:21;:38;;;;:::i;:::-;29282:15;;:205;;-1:-1:-1;;;29282:205:0;;29355:4;29282:205;;;15913:34:1;15963:18;;;15956:34;;;29282:15:0;16006:18:1;;;15999:34;;;16049:18;;;16042:34;29439:6:0;16092:19:1;;;16085:44;29461:15:0;16145:19:1;;;16138:35;29210:59:0;;-1:-1:-1;;;;;;29282:15:0;;:31;;29210:59;;15847:19:1;;29282:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;29505:43:0;;;16697:25:1;;;16753:2;16738:18;;16731:34;;;16781:18;;;16774:34;;;29505:43:0;;-1:-1:-1;16685:2:1;16670:18;29505:43:0;;;;;;;28728:828;;;;;28680:876;:::o;29564:770::-;29717:16;;;29731:1;29717:16;;;;;;;;29659:21;;29634:22;;29717:16;29731:1;29717:16;;;;;;;;;;-1:-1:-1;29717:16:0;29693:40;;29762:4;29744;29749:1;29744:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29744:23:0;;;:7;;;;;;;;;;:23;;;;29788:15;;:22;;;-1:-1:-1;;;29788:22:0;;;;:15;;;;;:20;;:22;;;;;29744:7;;29788:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29778:4;29783:1;29778:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29778:32:0;;;:7;;;;;;;;;:32;29823:15;;:186;;-1:-1:-1;;;29823:186:0;;:15;;;:66;;:186;;29904:11;;29823:15;;29946:4;;29973;;29993:15;;29823:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30022:18;30067:14;30043:21;:38;;;;:::i;:::-;30022:59;-1:-1:-1;30094:12:0;30109:14;30122:1;30022:59;30109:14;:::i;:::-;30144:15;;30094:29;;-1:-1:-1;30136:40:0;;-1:-1:-1;;;;;30144:15:0;30094:29;30136:34;:40::i;:::-;30187:76;30224:38;30248:14;30224:21;:38;:::i;:::-;30195:17;;-1:-1:-1;;;;;30195:17:0;;30187:36;:76::i;:::-;30281:45;;;16993:25:1;;;17049:2;17034:18;;17027:34;;;30281:45:0;;16966:18:1;30281:45:0;;;;;;;29623:711;;;;29564:770;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2489:247::-;2548:6;2601:2;2589:9;2580:7;2576:23;2572:32;2569:52;;;2617:1;2614;2607:12;2569:52;2656:9;2643:23;2675:31;2700:5;2675:31;:::i;:::-;2725:5;2489:247;-1:-1:-1;;;2489:247:1:o;2741:180::-;2800:6;2853:2;2841:9;2832:7;2828:23;2824:32;2821:52;;;2869:1;2866;2859:12;2821:52;-1:-1:-1;2892:23:1;;2741:180;-1:-1:-1;2741:180:1:o;2926:118::-;3012:5;3005:13;2998:21;2991:5;2988:32;2978:60;;3034:1;3031;3024:12;3049:382;3114:6;3122;3175:2;3163:9;3154:7;3150:23;3146:32;3143:52;;;3191:1;3188;3181:12;3143:52;3230:9;3217:23;3249:31;3274:5;3249:31;:::i;:::-;3299:5;-1:-1:-1;3356:2:1;3341:18;;3328:32;3369:30;3328:32;3369:30;:::i;:::-;3418:7;3408:17;;;3049:382;;;;;:::o;3436:388::-;3504:6;3512;3565:2;3553:9;3544:7;3540:23;3536:32;3533:52;;;3581:1;3578;3571:12;3533:52;3620:9;3607:23;3639:31;3664:5;3639:31;:::i;:::-;3689:5;-1:-1:-1;3746:2:1;3731:18;;3718:32;3759:33;3718:32;3759:33;:::i;3829:241::-;3885:6;3938:2;3926:9;3917:7;3913:23;3909:32;3906:52;;;3954:1;3951;3944:12;3906:52;3993:9;3980:23;4012:28;4034:5;4012:28;:::i;4075:356::-;4277:2;4259:21;;;4296:18;;;4289:30;4355:34;4350:2;4335:18;;4328:62;4422:2;4407:18;;4075:356::o;4436:127::-;4497:10;4492:3;4488:20;4485:1;4478:31;4528:4;4525:1;4518:15;4552:4;4549:1;4542:15;4568:125;4633:9;;;4654:10;;;4651:36;;;4667:18;;:::i;4698:380::-;4777:1;4773:12;;;;4820;;;4841:61;;4895:4;4887:6;4883:17;4873:27;;4841:61;4948:2;4940:6;4937:14;4917:18;4914:38;4911:161;;4994:10;4989:3;4985:20;4982:1;4975:31;5029:4;5026:1;5019:15;5057:4;5054:1;5047:15;4911:161;;4698:380;;;:::o;6252:168::-;6325:9;;;6356;;6373:15;;;6367:22;;6353:37;6343:71;;6394:18;;:::i;6425:217::-;6465:1;6491;6481:132;;6535:10;6530:3;6526:20;6523:1;6516:31;6570:4;6567:1;6560:15;6598:4;6595:1;6588:15;6481:132;-1:-1:-1;6627:9:1;;6425:217::o;10052:184::-;10122:6;10175:2;10163:9;10154:7;10150:23;10146:32;10143:52;;;10191:1;10188;10181:12;10143:52;-1:-1:-1;10214:16:1;;10052:184;-1:-1:-1;10052:184:1:o;10520:245::-;10587:6;10640:2;10628:9;10619:7;10615:23;10611:32;10608:52;;;10656:1;10653;10646:12;10608:52;10688:9;10682:16;10707:28;10729:5;10707:28;:::i;11578:401::-;11780:2;11762:21;;;11819:2;11799:18;;;11792:30;11858:34;11853:2;11838:18;;11831:62;-1:-1:-1;;;11924:2:1;11909:18;;11902:35;11969:3;11954:19;;11578:401::o;11984:399::-;12186:2;12168:21;;;12225:2;12205:18;;;12198:30;12264:34;12259:2;12244:18;;12237:62;-1:-1:-1;;;12330:2:1;12315:18;;12308:33;12373:3;12358:19;;11984:399::o;12742:128::-;12809:9;;;12830:11;;;12827:37;;;12844:18;;:::i;14199:127::-;14260:10;14255:3;14251:20;14248:1;14241:31;14291:4;14288:1;14281:15;14315:4;14312:1;14305:15;14331:251;14401:6;14454:2;14442:9;14433:7;14429:23;14425:32;14422:52;;;14470:1;14467;14460:12;14422:52;14502:9;14496:16;14521:31;14546:5;14521:31;:::i;14587:980::-;14849:4;14897:3;14886:9;14882:19;14928:6;14917:9;14910:25;14954:2;14992:6;14987:2;14976:9;14972:18;14965:34;15035:3;15030:2;15019:9;15015:18;15008:31;15059:6;15094;15088:13;15125:6;15117;15110:22;15163:3;15152:9;15148:19;15141:26;;15202:2;15194:6;15190:15;15176:29;;15223:1;15233:195;15247:6;15244:1;15241:13;15233:195;;;15312:13;;-1:-1:-1;;;;;15308:39:1;15296:52;;15403:15;;;;15368:12;;;;15344:1;15262:9;15233:195;;;-1:-1:-1;;;;;;;15484:32:1;;;;15479:2;15464:18;;15457:60;-1:-1:-1;;;15548:3:1;15533:19;15526:35;15445:3;14587:980;-1:-1:-1;;;14587:980:1:o;16184:306::-;16272:6;16280;16288;16341:2;16329:9;16320:7;16316:23;16312:32;16309:52;;;16357:1;16354;16347:12;16309:52;16386:9;16380:16;16370:26;;16436:2;16425:9;16421:18;16415:25;16405:35;;16480:2;16469:9;16465:18;16459:25;16449:35;;16184:306;;;;;:::o

Swarm Source

ipfs://71234f106a153bdad4450973357404ad857fb559cbf388943e4e9e4fd72edac0
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.