MATIC Price: $0.747133 (+9.49%)
Gas: 42 GWei
 

Overview

Max Total Supply

337,500,000 DOP

Holders

1,281 (0.00%)

Total Transfers

-

Market

Price

$0.03 @ 0.046776 MATIC (+22.95%)

Onchain Market Cap

$11,794,794.75

Circulating Supply Market Cap

$6,122,580.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Use phone into a magical portal to find treasures with real life value in an adventure that blends the digital and the physical. Live on iOS and Android.

Market

Volume (24H):$226.37
Market Capitalization:$6,122,580.00
Circulating Supply:175,193,442.00 DOP
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
Dop

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 10: dop.sol
// SPDX-License-Identifier: MIT
// D-Drops official token contract
// Date: 8-7-2023
pragma solidity ^0.8.3;

import "./IUniswapV2Factory.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Pair.sol";
import "./SafeMath.sol";
import "./IERC20.sol";
import "./Ownable.sol";

contract Dop is Ownable, IERC20 {
    using SafeMath for uint256;

    mapping(address => uint) private _balances;
    mapping(address => mapping(address => uint)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isBlacklisted;

    bool private _canBurn = false;
    bool private _blacklistMode = true;

    string private constant _name = "DDrops";
    string private constant _symbol = "DOP";
    uint8 private constant _decimals = 18;
    uint private constant _totalSupply = 3375 * 10 ** 5 * 10 ** _decimals;

    receive() external payable {}

    uint private _buyContributionFee;
    uint private _sellContributionFee;
    uint private _previousBuyContributionFee;
    uint private _previousSellContributionFee;

    uint private _maxTrxAmount = _totalSupply;

    address private _treasureWalletAddress;
    address private _developementWalletAddress;

    address public uniswapV2RouterAddress;
    address[] public uniswapV2Pairs;
    mapping(address => bool) public isUniswapV2Pair;

    bool private _lock;

    function isBlackListMode() public view returns (bool) {
        return _blacklistMode;
    }

    function getTreasureWallet() public view returns (address) {
        return _treasureWalletAddress;
    }

    function getBuyContributionFee() public view returns (uint) {
        return _buyContributionFee;
    }

    function getSellContributionFee() public view returns (uint) {
        return _sellContributionFee;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function getMaxTrxAmount() public view returns (uint) {
        return _maxTrxAmount;
    }

    /***** onlyOwner functions to change private parameters *****/

    //Enable burn through dxSale
    function setCanBurn(bool _value) external onlyOwner {
        _canBurn = _value;
    }

    //Enable blacklisting
    function setBlacklistMode(bool _value) external onlyOwner {
        _blacklistMode = _value;
    }

    //Add or remove one or more addresses from the black list, make sure to send enough gas
    function manage_blacklist(
        address[] calldata _addresses,
        bool _value
    ) external onlyOwner {
        for (uint256 i; i < _addresses.length; ++i) {
            _isBlacklisted[_addresses[i]] = _value;
        }
    }

    // Set uniswapV2RouterAddress
    function setRouterAddress(address _newRouterAddress) external onlyOwner {
        uniswapV2RouterAddress = _newRouterAddress;
    }

    function createUniswapV2Pair(
        address _WETH
    ) external onlyOwner returns (address) {
        IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(
            uniswapV2RouterAddress
        );
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), _WETH);

        uniswapV2Pairs.push(_uniswapV2Pair);
        isUniswapV2Pair[address(_uniswapV2Pair)] = true;
        return _uniswapV2Pair;
    }

    // Set total amount of tokens that can be traded per transaction
    function setMaxTrxAmount(
        uint _newMaxTrxAmount
    ) external onlyOwner returns (bool) {
        _maxTrxAmount = _newMaxTrxAmount;
        return true;
    }

    // Set the amount of BUY contribution fee, limited to max 15%
    function setBuyContributionFee(
        uint _newBuyContributionFee
    ) external onlyOwner returns (bool) {
        require(_newBuyContributionFee <= 50);
        _buyContributionFee = _newBuyContributionFee;
        return true;
    }

    // Set the amount of SELL contribution fee, limited to max 20%
    function setSellContributionFee(
        uint _newSellContributionFee
    ) external onlyOwner returns (bool) {
        require(_newSellContributionFee <= 50);
        _sellContributionFee = _newSellContributionFee;
        return true;
    }

    function setDevelopementWallet(
        address _newDevelopementWallet
    ) external onlyOwner returns (bool) {
        _developementWalletAddress = _newDevelopementWallet;
        return true;
    }

    function setTreasureWallet(
        address _newTreasureWallet
    ) external onlyOwner returns (bool) {
        _treasureWalletAddress = _newTreasureWallet;
        return true;
    }

    function excludeFromFee(address _account) external onlyOwner {
        _isExcludedFromFee[_account] = true;
    }

    function includeInFee(address _account) external onlyOwner {
        _isExcludedFromFee[_account] = false;
    }

    /******************* End of onlyOwner functions*********************/
    modifier noReEntry() {
        _lock = true;
        _;
        _lock = false;
    }

    constructor() {
        _maxTrxAmount = 10000000 * 10 ** _decimals;
        _balances[_msgSender()] = 3375 * 10 ** 5 * 10 ** _decimals;

        _buyContributionFee = 5; //this is also the normal transaction fee
        _sellContributionFee = 5;

        _treasureWalletAddress = 0xD6EB8Eeb7403714E1f2074BAF9EBDBBBEfcB9400;
        _developementWalletAddress = 0x1518b9Dfe74f46443b1cAEb3aeF96903b015c005;
        uniswapV2RouterAddress = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff;

        //exclude owner,and this contract form fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[uniswapV2RouterAddress] = true;

        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function burn(uint _amount) public {
        require(_amount > 0, "Burn amount must be greater than zero");
        require(
            _amount <= _balances[msg.sender],
            "Not enough fonds to complete the transaction"
        );
        _balances[msg.sender] = _balances[msg.sender].sub(_amount);
        _balances[0x000000000000000000000000000000000000dEaD] = _balances[
            0x000000000000000000000000000000000000dEaD
        ].add(_amount);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

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

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

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

    function transfer(
        address _recipient,
        uint256 _amount
    ) public override returns (bool) {
        _transfer(_msgSender(), _recipient, _amount);
        return true;
    }

    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) public override returns (bool) {
        _transfer(_sender, _recipient, _amount);
        _approve(
            _sender,
            _msgSender(),
            _allowances[_sender][_msgSender()].sub(
                _amount,
                "ERC20: Transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _transfer(address _from, address _to, uint _amount) internal {
        require(_from != address(0), "ERC20: transfer from the zero address");
        if (_canBurn == false) {
            require(_to != address(0), "ERC20: transfer to the zero address");
        }
        require(_amount > 0, "Transfer amount must be greater than zero");
        require(_amount <= _balances[_from], "Insufficient funds");

        if (_from != owner() && _to != owner()) {
            require(
                _amount <= _maxTrxAmount,
                "Transfer amount exceeds the maxTrxAmount."
            );
        }

        // Check for blacklist
        if (_blacklistMode) {
            require(
                !_isBlacklisted[_from] && !_isBlacklisted[_to],
                "Transaction between these two accounts is blacklisted"
            );
        }
        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[_from] || _isExcludedFromFee[_to]) {
            takeFee = false;
        }
        //Here we initiate the transfer fuction
        _transferToken(_from, _to, _amount, takeFee);
    }

    function _transferToken(
        address _from,
        address _to,
        uint _amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        uint _takeContribution;
        //Code Below: decide if its a buy or sell order and adjust tax accoirdingly
        if (_isIncludedInV2Pairs(_to)) {
            _takeContribution = _calculateAbsoluteSellContributionFee(_amount);
        } else if (_isIncludedInV2Pairs(_from)) {
            _takeContribution = _calculateAbsoluteBuyContributionFee(_amount);
        } else {
            _takeContribution = 0;
        }
        uint trAmountToRecipient = _amount.sub(_takeContribution);
        uint trAmountToContract = _takeContribution;

        _balances[_from] = _balances[_from].sub(_amount);
        _balances[_to] = _balances[_to].add(trAmountToRecipient);
        _balances[address(this)] = _balances[address(this)].add(
            trAmountToContract
        );

        if (!takeFee) {
            restoreAllFee();
        }

        emit Transfer(_from, _to, _amount);
    }

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

    function _approve(
        address _owner,
        address _spender,
        uint256 _amount
    ) internal {
        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 payOut() external {
        uint256 contractBalance = balanceOf(address(this));
        uint256 _developementWalletAmount = contractBalance.mul(50).div(100);
        uint256 _treasureWalletAmount = contractBalance -
            _developementWalletAmount;
        _transfer(
            address(this),
            _developementWalletAddress,
            _developementWalletAmount
        );
        _transfer(address(this), _treasureWalletAddress, _treasureWalletAmount);
    }

    function removeAllFee() internal {
        if ((_buyContributionFee == 0) && (_sellContributionFee == 0)) return;

        _previousBuyContributionFee = _buyContributionFee;
        _previousSellContributionFee = _sellContributionFee;

        _buyContributionFee = _sellContributionFee = 0;
    }

    function restoreAllFee() internal {
        _buyContributionFee = _previousBuyContributionFee;
        _sellContributionFee = _previousSellContributionFee;
    }

    //Note buyContributionFee is the same as reqular transaction fee
    function _calculateAbsoluteBuyContributionFee(
        uint amount
    ) internal view returns (uint) {
        return amount.mul(_buyContributionFee).div(10 ** 2);
    }

    function _calculateAbsoluteSellContributionFee(
        uint amount
    ) internal view returns (uint) {
        return amount.mul(_sellContributionFee).div(10 ** 2);
    }

    function _isIncludedInV2Pairs(
        address candidate
    ) internal view returns (bool) {
        return isUniswapV2Pair[candidate];
    }
}

File 1 of 10: console.sol
// SPDX-License-Identifier: MIT
pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int256 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
	}

	function logUint(uint256 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint256 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint256 p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
	}

	function log(uint256 p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
	}

	function log(uint256 p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
	}

	function log(uint256 p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
	}

	function log(string memory p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint256 p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

File 2 of 10: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 10: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

File 5 of 10: IUniswapV2Factory.sol
pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 6 of 10: IUniswapV2Pair.sol
pragma solidity >=0.5.0;

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

File 7 of 10: IUniswapV2Router01.sol
pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 8 of 10: IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import "./IUniswapV2Router01.sol";

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 9 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 10 of 10: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"name":"createUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyContributionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTrxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellContributionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTreasureWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBlackListMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUniswapV2Pair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setBlacklistMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBuyContributionFee","type":"uint256"}],"name":"setBuyContributionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setCanBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDevelopementWallet","type":"address"}],"name":"setDevelopementWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxTrxAmount","type":"uint256"}],"name":"setMaxTrxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouterAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSellContributionFee","type":"uint256"}],"name":"setSellContributionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTreasureWallet","type":"address"}],"name":"setTreasureWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uniswapV2Pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600560006101000a81548160ff0219169083151502179055506001600560016101000a81548160ff0219169083151502179055506012600a6200004a919062000699565b63141dd7606200005b9190620006ea565b600a553480156200006b57600080fd5b506200008c620000806200040a60201b60201c565b6200041260201b60201c565b6012600a6200009c919062000699565b62989680620000ac9190620006ea565b600a819055506012600a620000c2919062000699565b63141dd760620000d39190620006ea565b60016000620000e76200040a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506005600681905550600560078190555073d6eb8eeb7403714e1f2074baf9ebdbbbefcb9400600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731518b9dfe74f46443b1caeb3aef96903b015c005600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a5e0829caced8ffdd4de3c43696c57f7d7a678ff600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360006200024a620004d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200037d6200040a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a620003dc919062000699565b63141dd760620003ed9190620006ea565b604051620003fc919062000746565b60405180910390a362000763565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200058d57808604811115620005655762000564620004ff565b5b6001851615620005755780820291505b808102905062000585856200052e565b945062000545565b94509492505050565b600082620005a857600190506200067b565b81620005b857600090506200067b565b8160018114620005d15760028114620005dc5762000612565b60019150506200067b565b60ff841115620005f157620005f0620004ff565b5b8360020a9150848211156200060b576200060a620004ff565b5b506200067b565b5060208310610133831016604e8410600b84101617156200064c5782820a905083811115620006465762000645620004ff565b5b6200067b565b6200065b84848460016200053b565b92509050818404811115620006755762000674620004ff565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620006a68262000682565b9150620006b3836200068c565b9250620006e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000596565b905092915050565b6000620006f78262000682565b9150620007048362000682565b9250828202620007148162000682565b915082820484148315176200072e576200072d620004ff565b5b5092915050565b620007408162000682565b82525050565b60006020820190506200075d600083018462000735565b92915050565b612f6580620007736000396000f3fe6080604052600436106102085760003560e01c80635342acb411610118578063ab8439dd116100a0578063c9cd00741161006f578063c9cd0074146107c2578063dd62ed3e146107ed578063ea2f0b371461082a578063f2fde38b14610853578063f5f7b9621461087c5761020f565b8063ab8439dd146106f4578063bc08600514610731578063c20524031461076e578063c7b122b1146107855761020f565b80638da5cb5b116100e75780638da5cb5b1461060d5780638e2eee841461063857806395d89b4114610661578063a0c2e32d1461068c578063a9059cbb146106b75761020f565b80635342acb41461053f57806368c488b31461057c57806370a08231146105b9578063715018a6146105f65761020f565b80632c61beaf1161019b57806342966c681161016a57806342966c681461046e578063437823ec146104975780634553e9c0146104c05780634935d92a146104eb5780634a377e1d146105145761020f565b80632c61beaf146103b4578063313ce567146103f1578063386c69f21461041c57806341cb87fc146104455761020f565b806318160ddd116101d757806318160ddd146102f65780631ef706041461032157806323b872dd1461034c57806325b09d46146103895761020f565b806306fdde0314610214578063095ea7b31461023f5780630eeaa8b71461027c578063177c5013146102b95761020f565b3661020f57005b600080fd5b34801561022057600080fd5b506102296108b9565b6040516102369190612116565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906121d6565b6108f6565b6040516102739190612231565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061224c565b610914565b6040516102b09190612231565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061224c565b61092e565b6040516102ed9190612231565b60405180910390f35b34801561030257600080fd5b5061030b610956565b6040516103189190612288565b60405180910390f35b34801561032d57600080fd5b5061033661097a565b6040516103439190612288565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906122a3565b610984565b6040516103809190612231565b60405180910390f35b34801561039557600080fd5b5061039e610a5d565b6040516103ab9190612288565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d6919061224c565b610a67565b6040516103e89190612305565b60405180910390f35b3480156103fd57600080fd5b50610406610aa6565b604051610413919061233c565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612383565b610aaf565b005b34801561045157600080fd5b5061046c600480360381019061046791906123b0565b610ad4565b005b34801561047a57600080fd5b506104956004803603810190610490919061224c565b610b20565b005b3480156104a357600080fd5b506104be60048036038101906104b991906123b0565b610d16565b005b3480156104cc57600080fd5b506104d5610d79565b6040516104e29190612305565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190612383565b610da3565b005b34801561052057600080fd5b50610529610dc8565b6040516105369190612305565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906123b0565b610dee565b6040516105739190612231565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906123b0565b610e44565b6040516105b09190612305565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db91906123b0565b61102a565b6040516105ed9190612288565b60405180910390f35b34801561060257600080fd5b5061060b611073565b005b34801561061957600080fd5b50610622611087565b60405161062f9190612305565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612442565b6110b0565b005b34801561066d57600080fd5b5061067661115b565b6040516106839190612116565b60405180910390f35b34801561069857600080fd5b506106a1611198565b6040516106ae9190612231565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906121d6565b6111af565b6040516106eb9190612231565b60405180910390f35b34801561070057600080fd5b5061071b600480360381019061071691906123b0565b6111cd565b6040516107289190612231565b60405180910390f35b34801561073d57600080fd5b506107586004803603810190610753919061224c565b611221565b6040516107659190612231565b60405180910390f35b34801561077a57600080fd5b50610783611249565b005b34801561079157600080fd5b506107ac60048036038101906107a791906123b0565b6112f0565b6040516107b99190612231565b60405180910390f35b3480156107ce57600080fd5b506107d7611310565b6040516107e49190612288565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f91906124a2565b61131a565b6040516108219190612288565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906123b0565b6113a1565b005b34801561085f57600080fd5b5061087a600480360381019061087591906123b0565b611404565b005b34801561088857600080fd5b506108a3600480360381019061089e91906123b0565b611487565b6040516108b09190612231565b60405180910390f35b60606040518060400160405280600681526020017f4444726f70730000000000000000000000000000000000000000000000000000815250905090565b600061090a6109036114db565b84846114e3565b6001905092915050565b600061091e6116ac565b81600a8190555060019050919050565b60006109386116ac565b603282111561094657600080fd5b8160078190555060019050919050565b60006012600a6109669190612644565b63141dd760610975919061268f565b905090565b6000600654905090565b600061099184848461172a565b610a528461099d6114db565b610a4d85604051806060016040528060288152602001612f0860289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a036114db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b669092919063ffffffff16565b6114e3565b600190509392505050565b6000600754905090565b600e8181548110610a7757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610ab76116ac565b80600560006101000a81548160ff02191690831515021790555050565b610adc6116ac565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008111610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90612743565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc906127d5565b60405180910390fd5b610c3781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bbb90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cce816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd190919063ffffffff16565b6001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b610d1e6116ac565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610dab6116ac565b80600560016101000a81548160ff02191690831515021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e4e6116ac565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee6919061280a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630866040518363ffffffff1660e01b8152600401610f20929190612837565b6020604051808303816000875af1158015610f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f63919061280a565b9050600e819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508092505050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61107b6116ac565b6110856000611be7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110b86116ac565b60005b838390508110156111555781600460008686858181106110de576110dd612860565b5b90506020020160208101906110f391906123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061114e9061288f565b90506110bb565b50505050565b60606040518060400160405280600381526020017f444f500000000000000000000000000000000000000000000000000000000000815250905090565b6000600560019054906101000a900460ff16905090565b60006111c36111bc6114db565b848461172a565b6001905092915050565b60006111d76116ac565b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061122b6116ac565b603282111561123957600080fd5b8160068190555060019050919050565b60006112543061102a565b9050600061127f6064611271603285611cab90919063ffffffff16565b611cc190919063ffffffff16565b90506000818361128f91906128d7565b90506112be30600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461172a565b6112eb30600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361172a565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600a54905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113a96116ac565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61140c6116ac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114729061297d565b60405180910390fd5b61148481611be7565b50565b60006114916116ac565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990612a0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890612aa1565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161169f9190612288565b60405180910390a3505050565b6116b46114db565b73ffffffffffffffffffffffffffffffffffffffff166116d2611087565b73ffffffffffffffffffffffffffffffffffffffff1614611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90612b0d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090612b9f565b60405180910390fd5b60001515600560009054906101000a900460ff1615150361182457600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90612c31565b60405180910390fd5b5b60008111611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e90612cc3565b60405180910390fd5b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090612d2f565b60405180910390fd5b6118f1611087565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561195f575061192f611087565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156119aa57600a548111156119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090612dc1565b60405180910390fd5b5b600560019054906101000a900460ff1615611aa357600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a635750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990612e53565b60405180910390fd5b5b600060019050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b4a5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b5457600090505b611b6084848484611cd7565b50505050565b6000838311158290611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba59190612116565b60405180910390fd5b5082840390509392505050565b60008183611bc991906128d7565b905092915050565b60008183611bdf9190612e73565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611cb9919061268f565b905092915050565b60008183611ccf9190612ed6565b905092915050565b80611ce557611ce4611f80565b5b6000611cf084611fba565b15611d0557611cfe83612010565b9050611d29565b611d0e85611fba565b15611d2357611d1c83612041565b9050611d28565b600090505b5b6000611d3e8285611bbb90919063ffffffff16565b90506000829050611d9785600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bbb90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e2c82600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd190919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ec181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd190919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083611f1257611f11612072565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611f6f9190612288565b60405180910390a350505050505050565b6000600654148015611f9457506000600754145b611fb857600654600881905550600754600981905550600060078190556006819055505b565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061203a606461202c60075485611cab90919063ffffffff16565b611cc190919063ffffffff16565b9050919050565b600061206b606461205d60065485611cab90919063ffffffff16565b611cc190919063ffffffff16565b9050919050565b600854600681905550600954600781905550565b600081519050919050565b600082825260208201905092915050565b60005b838110156120c05780820151818401526020810190506120a5565b60008484015250505050565b6000601f19601f8301169050919050565b60006120e882612086565b6120f28185612091565b93506121028185602086016120a2565b61210b816120cc565b840191505092915050565b6000602082019050818103600083015261213081846120dd565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061216d82612142565b9050919050565b61217d81612162565b811461218857600080fd5b50565b60008135905061219a81612174565b92915050565b6000819050919050565b6121b3816121a0565b81146121be57600080fd5b50565b6000813590506121d0816121aa565b92915050565b600080604083850312156121ed576121ec612138565b5b60006121fb8582860161218b565b925050602061220c858286016121c1565b9150509250929050565b60008115159050919050565b61222b81612216565b82525050565b60006020820190506122466000830184612222565b92915050565b60006020828403121561226257612261612138565b5b6000612270848285016121c1565b91505092915050565b612282816121a0565b82525050565b600060208201905061229d6000830184612279565b92915050565b6000806000606084860312156122bc576122bb612138565b5b60006122ca8682870161218b565b93505060206122db8682870161218b565b92505060406122ec868287016121c1565b9150509250925092565b6122ff81612162565b82525050565b600060208201905061231a60008301846122f6565b92915050565b600060ff82169050919050565b61233681612320565b82525050565b6000602082019050612351600083018461232d565b92915050565b61236081612216565b811461236b57600080fd5b50565b60008135905061237d81612357565b92915050565b60006020828403121561239957612398612138565b5b60006123a78482850161236e565b91505092915050565b6000602082840312156123c6576123c5612138565b5b60006123d48482850161218b565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612402576124016123dd565b5b8235905067ffffffffffffffff81111561241f5761241e6123e2565b5b60208301915083602082028301111561243b5761243a6123e7565b5b9250929050565b60008060006040848603121561245b5761245a612138565b5b600084013567ffffffffffffffff8111156124795761247861213d565b5b612485868287016123ec565b935093505060206124988682870161236e565b9150509250925092565b600080604083850312156124b9576124b8612138565b5b60006124c78582860161218b565b92505060206124d88582860161218b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561256857808604811115612544576125436124e2565b5b60018516156125535780820291505b808102905061256185612511565b9450612528565b94509492505050565b600082612581576001905061263d565b8161258f576000905061263d565b81600181146125a557600281146125af576125de565b600191505061263d565b60ff8411156125c1576125c06124e2565b5b8360020a9150848211156125d8576125d76124e2565b5b5061263d565b5060208310610133831016604e8410600b84101617156126135782820a90508381111561260e5761260d6124e2565b5b61263d565b612620848484600161251e565b92509050818404811115612637576126366124e2565b5b81810290505b9392505050565b600061264f826121a0565b915061265a83612320565b92506126877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612571565b905092915050565b600061269a826121a0565b91506126a5836121a0565b92508282026126b3816121a0565b915082820484148315176126ca576126c96124e2565b5b5092915050565b7f4275726e20616d6f756e74206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061272d602583612091565b9150612738826126d1565b604082019050919050565b6000602082019050818103600083015261275c81612720565b9050919050565b7f4e6f7420656e6f75676820666f6e647320746f20636f6d706c6574652074686560008201527f207472616e73616374696f6e0000000000000000000000000000000000000000602082015250565b60006127bf602c83612091565b91506127ca82612763565b604082019050919050565b600060208201905081810360008301526127ee816127b2565b9050919050565b60008151905061280481612174565b92915050565b6000602082840312156128205761281f612138565b5b600061282e848285016127f5565b91505092915050565b600060408201905061284c60008301856122f6565b61285960208301846122f6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061289a826121a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128cc576128cb6124e2565b5b600182019050919050565b60006128e2826121a0565b91506128ed836121a0565b9250828203905081811115612905576129046124e2565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612967602683612091565b91506129728261290b565b604082019050919050565b600060208201905081810360008301526129968161295a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129f9602483612091565b9150612a048261299d565b604082019050919050565b60006020820190508181036000830152612a28816129ec565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a8b602283612091565b9150612a9682612a2f565b604082019050919050565b60006020820190508181036000830152612aba81612a7e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612af7602083612091565b9150612b0282612ac1565b602082019050919050565b60006020820190508181036000830152612b2681612aea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b89602583612091565b9150612b9482612b2d565b604082019050919050565b60006020820190508181036000830152612bb881612b7c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612c1b602383612091565b9150612c2682612bbf565b604082019050919050565b60006020820190508181036000830152612c4a81612c0e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612cad602983612091565b9150612cb882612c51565b604082019050919050565b60006020820190508181036000830152612cdc81612ca0565b9050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000612d19601283612091565b9150612d2482612ce3565b602082019050919050565b60006020820190508181036000830152612d4881612d0c565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f7278416d6f756e742e0000000000000000000000000000000000000000000000602082015250565b6000612dab602983612091565b9150612db682612d4f565b604082019050919050565b60006020820190508181036000830152612dda81612d9e565b9050919050565b7f5472616e73616374696f6e206265747765656e2074686573652074776f20616360008201527f636f756e747320697320626c61636b6c69737465640000000000000000000000602082015250565b6000612e3d603583612091565b9150612e4882612de1565b604082019050919050565b60006020820190508181036000830152612e6c81612e30565b9050919050565b6000612e7e826121a0565b9150612e89836121a0565b9250828201905080821115612ea157612ea06124e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ee1826121a0565b9150612eec836121a0565b925082612efc57612efb612ea7565b5b82820490509291505056fe45524332303a205472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c402b8800d254e9dcfd5c67b06d557dcca42fdf749e00fe59e6bf8eabf981f1664736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80635342acb411610118578063ab8439dd116100a0578063c9cd00741161006f578063c9cd0074146107c2578063dd62ed3e146107ed578063ea2f0b371461082a578063f2fde38b14610853578063f5f7b9621461087c5761020f565b8063ab8439dd146106f4578063bc08600514610731578063c20524031461076e578063c7b122b1146107855761020f565b80638da5cb5b116100e75780638da5cb5b1461060d5780638e2eee841461063857806395d89b4114610661578063a0c2e32d1461068c578063a9059cbb146106b75761020f565b80635342acb41461053f57806368c488b31461057c57806370a08231146105b9578063715018a6146105f65761020f565b80632c61beaf1161019b57806342966c681161016a57806342966c681461046e578063437823ec146104975780634553e9c0146104c05780634935d92a146104eb5780634a377e1d146105145761020f565b80632c61beaf146103b4578063313ce567146103f1578063386c69f21461041c57806341cb87fc146104455761020f565b806318160ddd116101d757806318160ddd146102f65780631ef706041461032157806323b872dd1461034c57806325b09d46146103895761020f565b806306fdde0314610214578063095ea7b31461023f5780630eeaa8b71461027c578063177c5013146102b95761020f565b3661020f57005b600080fd5b34801561022057600080fd5b506102296108b9565b6040516102369190612116565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906121d6565b6108f6565b6040516102739190612231565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061224c565b610914565b6040516102b09190612231565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061224c565b61092e565b6040516102ed9190612231565b60405180910390f35b34801561030257600080fd5b5061030b610956565b6040516103189190612288565b60405180910390f35b34801561032d57600080fd5b5061033661097a565b6040516103439190612288565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906122a3565b610984565b6040516103809190612231565b60405180910390f35b34801561039557600080fd5b5061039e610a5d565b6040516103ab9190612288565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d6919061224c565b610a67565b6040516103e89190612305565b60405180910390f35b3480156103fd57600080fd5b50610406610aa6565b604051610413919061233c565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612383565b610aaf565b005b34801561045157600080fd5b5061046c600480360381019061046791906123b0565b610ad4565b005b34801561047a57600080fd5b506104956004803603810190610490919061224c565b610b20565b005b3480156104a357600080fd5b506104be60048036038101906104b991906123b0565b610d16565b005b3480156104cc57600080fd5b506104d5610d79565b6040516104e29190612305565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190612383565b610da3565b005b34801561052057600080fd5b50610529610dc8565b6040516105369190612305565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906123b0565b610dee565b6040516105739190612231565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906123b0565b610e44565b6040516105b09190612305565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db91906123b0565b61102a565b6040516105ed9190612288565b60405180910390f35b34801561060257600080fd5b5061060b611073565b005b34801561061957600080fd5b50610622611087565b60405161062f9190612305565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612442565b6110b0565b005b34801561066d57600080fd5b5061067661115b565b6040516106839190612116565b60405180910390f35b34801561069857600080fd5b506106a1611198565b6040516106ae9190612231565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906121d6565b6111af565b6040516106eb9190612231565b60405180910390f35b34801561070057600080fd5b5061071b600480360381019061071691906123b0565b6111cd565b6040516107289190612231565b60405180910390f35b34801561073d57600080fd5b506107586004803603810190610753919061224c565b611221565b6040516107659190612231565b60405180910390f35b34801561077a57600080fd5b50610783611249565b005b34801561079157600080fd5b506107ac60048036038101906107a791906123b0565b6112f0565b6040516107b99190612231565b60405180910390f35b3480156107ce57600080fd5b506107d7611310565b6040516107e49190612288565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f91906124a2565b61131a565b6040516108219190612288565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906123b0565b6113a1565b005b34801561085f57600080fd5b5061087a600480360381019061087591906123b0565b611404565b005b34801561088857600080fd5b506108a3600480360381019061089e91906123b0565b611487565b6040516108b09190612231565b60405180910390f35b60606040518060400160405280600681526020017f4444726f70730000000000000000000000000000000000000000000000000000815250905090565b600061090a6109036114db565b84846114e3565b6001905092915050565b600061091e6116ac565b81600a8190555060019050919050565b60006109386116ac565b603282111561094657600080fd5b8160078190555060019050919050565b60006012600a6109669190612644565b63141dd760610975919061268f565b905090565b6000600654905090565b600061099184848461172a565b610a528461099d6114db565b610a4d85604051806060016040528060288152602001612f0860289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a036114db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b669092919063ffffffff16565b6114e3565b600190509392505050565b6000600754905090565b600e8181548110610a7757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610ab76116ac565b80600560006101000a81548160ff02191690831515021790555050565b610adc6116ac565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008111610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90612743565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc906127d5565b60405180910390fd5b610c3781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bbb90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cce816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd190919063ffffffff16565b6001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b610d1e6116ac565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610dab6116ac565b80600560016101000a81548160ff02191690831515021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e4e6116ac565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee6919061280a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630866040518363ffffffff1660e01b8152600401610f20929190612837565b6020604051808303816000875af1158015610f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f63919061280a565b9050600e819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508092505050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61107b6116ac565b6110856000611be7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110b86116ac565b60005b838390508110156111555781600460008686858181106110de576110dd612860565b5b90506020020160208101906110f391906123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061114e9061288f565b90506110bb565b50505050565b60606040518060400160405280600381526020017f444f500000000000000000000000000000000000000000000000000000000000815250905090565b6000600560019054906101000a900460ff16905090565b60006111c36111bc6114db565b848461172a565b6001905092915050565b60006111d76116ac565b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061122b6116ac565b603282111561123957600080fd5b8160068190555060019050919050565b60006112543061102a565b9050600061127f6064611271603285611cab90919063ffffffff16565b611cc190919063ffffffff16565b90506000818361128f91906128d7565b90506112be30600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461172a565b6112eb30600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361172a565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600a54905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113a96116ac565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61140c6116ac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114729061297d565b60405180910390fd5b61148481611be7565b50565b60006114916116ac565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990612a0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890612aa1565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161169f9190612288565b60405180910390a3505050565b6116b46114db565b73ffffffffffffffffffffffffffffffffffffffff166116d2611087565b73ffffffffffffffffffffffffffffffffffffffff1614611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90612b0d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090612b9f565b60405180910390fd5b60001515600560009054906101000a900460ff1615150361182457600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90612c31565b60405180910390fd5b5b60008111611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e90612cc3565b60405180910390fd5b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090612d2f565b60405180910390fd5b6118f1611087565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561195f575061192f611087565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156119aa57600a548111156119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090612dc1565b60405180910390fd5b5b600560019054906101000a900460ff1615611aa357600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a635750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990612e53565b60405180910390fd5b5b600060019050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b4a5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b5457600090505b611b6084848484611cd7565b50505050565b6000838311158290611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba59190612116565b60405180910390fd5b5082840390509392505050565b60008183611bc991906128d7565b905092915050565b60008183611bdf9190612e73565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611cb9919061268f565b905092915050565b60008183611ccf9190612ed6565b905092915050565b80611ce557611ce4611f80565b5b6000611cf084611fba565b15611d0557611cfe83612010565b9050611d29565b611d0e85611fba565b15611d2357611d1c83612041565b9050611d28565b600090505b5b6000611d3e8285611bbb90919063ffffffff16565b90506000829050611d9785600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bbb90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e2c82600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd190919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ec181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd190919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083611f1257611f11612072565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611f6f9190612288565b60405180910390a350505050505050565b6000600654148015611f9457506000600754145b611fb857600654600881905550600754600981905550600060078190556006819055505b565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061203a606461202c60075485611cab90919063ffffffff16565b611cc190919063ffffffff16565b9050919050565b600061206b606461205d60065485611cab90919063ffffffff16565b611cc190919063ffffffff16565b9050919050565b600854600681905550600954600781905550565b600081519050919050565b600082825260208201905092915050565b60005b838110156120c05780820151818401526020810190506120a5565b60008484015250505050565b6000601f19601f8301169050919050565b60006120e882612086565b6120f28185612091565b93506121028185602086016120a2565b61210b816120cc565b840191505092915050565b6000602082019050818103600083015261213081846120dd565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061216d82612142565b9050919050565b61217d81612162565b811461218857600080fd5b50565b60008135905061219a81612174565b92915050565b6000819050919050565b6121b3816121a0565b81146121be57600080fd5b50565b6000813590506121d0816121aa565b92915050565b600080604083850312156121ed576121ec612138565b5b60006121fb8582860161218b565b925050602061220c858286016121c1565b9150509250929050565b60008115159050919050565b61222b81612216565b82525050565b60006020820190506122466000830184612222565b92915050565b60006020828403121561226257612261612138565b5b6000612270848285016121c1565b91505092915050565b612282816121a0565b82525050565b600060208201905061229d6000830184612279565b92915050565b6000806000606084860312156122bc576122bb612138565b5b60006122ca8682870161218b565b93505060206122db8682870161218b565b92505060406122ec868287016121c1565b9150509250925092565b6122ff81612162565b82525050565b600060208201905061231a60008301846122f6565b92915050565b600060ff82169050919050565b61233681612320565b82525050565b6000602082019050612351600083018461232d565b92915050565b61236081612216565b811461236b57600080fd5b50565b60008135905061237d81612357565b92915050565b60006020828403121561239957612398612138565b5b60006123a78482850161236e565b91505092915050565b6000602082840312156123c6576123c5612138565b5b60006123d48482850161218b565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612402576124016123dd565b5b8235905067ffffffffffffffff81111561241f5761241e6123e2565b5b60208301915083602082028301111561243b5761243a6123e7565b5b9250929050565b60008060006040848603121561245b5761245a612138565b5b600084013567ffffffffffffffff8111156124795761247861213d565b5b612485868287016123ec565b935093505060206124988682870161236e565b9150509250925092565b600080604083850312156124b9576124b8612138565b5b60006124c78582860161218b565b92505060206124d88582860161218b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561256857808604811115612544576125436124e2565b5b60018516156125535780820291505b808102905061256185612511565b9450612528565b94509492505050565b600082612581576001905061263d565b8161258f576000905061263d565b81600181146125a557600281146125af576125de565b600191505061263d565b60ff8411156125c1576125c06124e2565b5b8360020a9150848211156125d8576125d76124e2565b5b5061263d565b5060208310610133831016604e8410600b84101617156126135782820a90508381111561260e5761260d6124e2565b5b61263d565b612620848484600161251e565b92509050818404811115612637576126366124e2565b5b81810290505b9392505050565b600061264f826121a0565b915061265a83612320565b92506126877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612571565b905092915050565b600061269a826121a0565b91506126a5836121a0565b92508282026126b3816121a0565b915082820484148315176126ca576126c96124e2565b5b5092915050565b7f4275726e20616d6f756e74206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061272d602583612091565b9150612738826126d1565b604082019050919050565b6000602082019050818103600083015261275c81612720565b9050919050565b7f4e6f7420656e6f75676820666f6e647320746f20636f6d706c6574652074686560008201527f207472616e73616374696f6e0000000000000000000000000000000000000000602082015250565b60006127bf602c83612091565b91506127ca82612763565b604082019050919050565b600060208201905081810360008301526127ee816127b2565b9050919050565b60008151905061280481612174565b92915050565b6000602082840312156128205761281f612138565b5b600061282e848285016127f5565b91505092915050565b600060408201905061284c60008301856122f6565b61285960208301846122f6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061289a826121a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128cc576128cb6124e2565b5b600182019050919050565b60006128e2826121a0565b91506128ed836121a0565b9250828203905081811115612905576129046124e2565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612967602683612091565b91506129728261290b565b604082019050919050565b600060208201905081810360008301526129968161295a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129f9602483612091565b9150612a048261299d565b604082019050919050565b60006020820190508181036000830152612a28816129ec565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a8b602283612091565b9150612a9682612a2f565b604082019050919050565b60006020820190508181036000830152612aba81612a7e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612af7602083612091565b9150612b0282612ac1565b602082019050919050565b60006020820190508181036000830152612b2681612aea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b89602583612091565b9150612b9482612b2d565b604082019050919050565b60006020820190508181036000830152612bb881612b7c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612c1b602383612091565b9150612c2682612bbf565b604082019050919050565b60006020820190508181036000830152612c4a81612c0e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612cad602983612091565b9150612cb882612c51565b604082019050919050565b60006020820190508181036000830152612cdc81612ca0565b9050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000612d19601283612091565b9150612d2482612ce3565b602082019050919050565b60006020820190508181036000830152612d4881612d0c565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f7278416d6f756e742e0000000000000000000000000000000000000000000000602082015250565b6000612dab602983612091565b9150612db682612d4f565b604082019050919050565b60006020820190508181036000830152612dda81612d9e565b9050919050565b7f5472616e73616374696f6e206265747765656e2074686573652074776f20616360008201527f636f756e747320697320626c61636b6c69737465640000000000000000000000602082015250565b6000612e3d603583612091565b9150612e4882612de1565b604082019050919050565b60006020820190508181036000830152612e6c81612e30565b9050919050565b6000612e7e826121a0565b9150612e89836121a0565b9250828201905080821115612ea157612ea06124e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ee1826121a0565b9150612eec836121a0565b925082612efc57612efb612ea7565b5b82820490509291505056fe45524332303a205472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c402b8800d254e9dcfd5c67b06d557dcca42fdf749e00fe59e6bf8eabf981f1664736f6c63430008120033

Deployed Bytecode Sourcemap

283:11663:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6231:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9853:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3402:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3950:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6496:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1584:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7088:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1693:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1259:31;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6409:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2130:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2718:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5757:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4594:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1473:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2248:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1216:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1804:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2855:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6600:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:101:6;;;;;;;;;;;;;:::i;:::-;;1216:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2444:234:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6318:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1375:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6892:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4198:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3640:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10418:485;;;;;;;;;;;;;:::i;:::-;;1296:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1932:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6723:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4713:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2089:232:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4404:184:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6231:81;6268:13;6300:5;;;;;;;;;;;;;;;;;6293:12;;6231:81;:::o;9853:180::-;9950:4;9966:39;9975:12;:10;:12::i;:::-;9989:7;9998:6;9966:8;:39::i;:::-;10022:4;10015:11;;9853:180;;;;:::o;3402:166::-;3492:4;1109:13:6;:11;:13::i;:::-;3524:16:9::1;3508:13;:32;;;;3557:4;3550:11;;3402:166:::0;;;:::o;3950:242::-;4054:4;1109:13:6;:11;:13::i;:::-;4105:2:9::1;4078:23;:29;;4070:38;;;::::0;::::1;;4141:23;4118:20;:46;;;;4181:4;4174:11;;3950:242:::0;;;:::o;6496:98::-;6549:7;785:2;847;:15;;;;:::i;:::-;830:14;:32;;;;:::i;:::-;6568:19;;6496:98;:::o;1584:103::-;1638:4;1661:19;;1654:26;;1584:103;:::o;7088:440::-;7219:4;7235:39;7245:7;7254:10;7266:7;7235:9;:39::i;:::-;7284:216;7306:7;7327:12;:10;:12::i;:::-;7353:137;7409:7;7353:137;;;;;;;;;;;;;;;;;:11;:20;7365:7;7353:20;;;;;;;;;;;;;;;:34;7374:12;:10;:12::i;:::-;7353:34;;;;;;;;;;;;;;;;:38;;:137;;;;;:::i;:::-;7284:8;:216::i;:::-;7517:4;7510:11;;7088:440;;;;;:::o;1693:105::-;1748:4;1771:20;;1764:27;;1693:105;:::o;1259:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6409:81::-;6450:5;785:2;6467:16;;6409:81;:::o;2130:86::-;1109:13:6;:11;:13::i;:::-;2203:6:9::1;2192:8;;:17;;;;;;;;;;;;;;;;;;2130:86:::0;:::o;2718:131::-;1109:13:6;:11;:13::i;:::-;2825:17:9::1;2800:22;;:42;;;;;;;;;;;;;;;;;;2718:131:::0;:::o;5757:468::-;5820:1;5810:7;:11;5802:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;5905:9;:21;5915:10;5905:21;;;;;;;;;;;;;;;;5894:7;:32;;5873:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;6030:34;6056:7;6030:9;:21;6040:10;6030:21;;;;;;;;;;;;;;;;:25;;:34;;;;:::i;:::-;6006:9;:21;6016:10;6006:21;;;;;;;;;;;;;;;:58;;;;6130:88;6210:7;6130:9;:75;6153:42;6130:75;;;;;;;;;;;;;;;;:79;;:88;;;;:::i;:::-;6074:9;:53;6084:42;6074:53;;;;;;;;;;;;;;;:144;;;;5757:468;:::o;4594:113::-;1109:13:6;:11;:13::i;:::-;4696:4:9::1;4665:18;:28;4684:8;4665:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;4594:113:::0;:::o;1473:105::-;1523:7;1549:22;;;;;;;;;;;1542:29;;1473:105;:::o;2248:98::-;1109:13:6;:11;:13::i;:::-;2333:6:9::1;2316:14;;:23;;;;;;;;;;;;;;;;;;2248:98:::0;:::o;1216:37::-;;;;;;;;;;;;;:::o;1804:122::-;1869:4;1892:18;:27;1911:7;1892:27;;;;;;;;;;;;;;;;;;;;;;;;;1885:34;;1804:122;;;:::o;2855:472::-;2941:7;1109:13:6;:11;:13::i;:::-;2960:34:9::1;3029:22;;;;;;;;;;;2960:101;;3071:22;3114:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3096:68;;;3173:4;3180:5;3096:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3071:115;;3197:14;3217;3197:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3285:4;3242:15;:40;3266:14;3242:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;3306:14;3299:21;;;;2855:472:::0;;;:::o;6600:117::-;6666:7;6692:9;:18;6702:7;6692:18;;;;;;;;;;;;;;;;6685:25;;6600:117;;;:::o;1839:101:6:-;1109:13;:11;:13::i;:::-;1903:30:::1;1930:1;1903:18;:30::i;:::-;1839:101::o:0;1216:85::-;1262:7;1288:6;;;;;;;;;;;1281:13;;1216:85;:::o;2444:234:9:-;1109:13:6;:11;:13::i;:::-;2570:9:9::1;2565:107;2585:10;;:17;;2581:1;:21;2565:107;;;2655:6;2623:14;:29;2638:10;;2649:1;2638:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2623:29;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2604:3;;;;:::i;:::-;;;2565:107;;;;2444:234:::0;;;:::o;6318:85::-;6357:13;6389:7;;;;;;;;;;;;;;;;;6382:14;;6318:85;:::o;1375:92::-;1423:4;1446:14;;;;;;;;;;;1439:21;;1375:92;:::o;6892:190::-;6994:4;7010:44;7020:12;:10;:12::i;:::-;7034:10;7046:7;7010:9;:44::i;:::-;7071:4;7064:11;;6892:190;;;;:::o;4198:200::-;4303:4;1109:13:6;:11;:13::i;:::-;4348:22:9::1;4319:26;;:51;;;;;;;;;;;;;;;;;;4387:4;4380:11;;4198:200:::0;;;:::o;3640:237::-;3742:4;1109:13:6;:11;:13::i;:::-;3792:2:9::1;3766:22;:28;;3758:37;;;::::0;::::1;;3827:22;3805:19;:44;;;;3866:4;3859:11;;3640:237:::0;;;:::o;10418:485::-;10455:23;10481:24;10499:4;10481:9;:24::i;:::-;10455:50;;10515:33;10551:32;10579:3;10551:23;10571:2;10551:15;:19;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;10515:68;;10593:29;10655:25;10625:15;:55;;;;:::i;:::-;10593:87;;10690:125;10721:4;10740:26;;;;;;;;;;;10780:25;10690:9;:125::i;:::-;10825:71;10843:4;10850:22;;;;;;;;;;;10874:21;10825:9;:71::i;:::-;10445:458;;;10418:485::o;1296:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;1932:91::-;1980:4;2003:13;;1996:20;;1932:91;:::o;6723:163::-;6826:7;6852:11;:18;6864:5;6852:18;;;;;;;;;;;;;;;:27;6871:7;6852:27;;;;;;;;;;;;;;;;6845:34;;6723:163;;;;:::o;4713:112::-;1109:13:6;:11;:13::i;:::-;4813:5:9::1;4782:18;:28;4801:8;4782:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;4713:112:::0;:::o;2089:232:6:-;1109:13;:11;:13::i;:::-;2210:1:::1;2190:22;;:8;:22;;::::0;2169:107:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2286:28;2305:8;2286:18;:28::i;:::-;2089:232:::0;:::o;4404:184:9:-;4501:4;1109:13:6;:11;:13::i;:::-;4542:18:9::1;4517:22;;:43;;;;;;;;;;;;;;;;;;4577:4;4570:11;;4404:184:::0;;;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;10039:373:9:-;10183:1;10165:20;;:6;:20;;;10157:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10264:1;10244:22;;:8;:22;;;10236:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10348:7;10316:11;:19;10328:6;10316:19;;;;;;;;;;;;;;;:29;10336:8;10316:29;;;;;;;;;;;;;;;:39;;;;10387:8;10370:35;;10379:6;10370:35;;;10397:7;10370:35;;;;;;:::i;:::-;;;;;;;;10039:373;;;:::o;1374:130:6:-;1448:12;:10;:12::i;:::-;1437:23;;:7;:5;:7::i;:::-;:23;;;1429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1374:130::o;7534:1246:9:-;7639:1;7622:19;;:5;:19;;;7614:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7709:5;7697:17;;:8;;;;;;;;;;;:17;;;7693:113;;7753:1;7738:17;;:3;:17;;;7730:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7693:113;7833:1;7823:7;:11;7815:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7909:9;:16;7919:5;7909:16;;;;;;;;;;;;;;;;7898:7;:27;;7890:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7972:7;:5;:7::i;:::-;7963:16;;:5;:16;;;;:34;;;;;7990:7;:5;:7::i;:::-;7983:14;;:3;:14;;;;7963:34;7959:189;;;8049:13;;8038:7;:24;;8013:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;7959:189;8193:14;;;;;;;;;;;8189:203;;;8249:14;:21;8264:5;8249:21;;;;;;;;;;;;;;;;;;;;;;;;;8248:22;:46;;;;;8275:14;:19;8290:3;8275:19;;;;;;;;;;;;;;;;;;;;;;;;;8274:20;8248:46;8223:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;8189:203;8461:12;8476:4;8461:19;;8578:18;:25;8597:5;8578:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;8607:18;:23;8626:3;8607:23;;;;;;;;;;;;;;;;;;;;;;;;;8578:52;8574:98;;;8656:5;8646:15;;8574:98;8729:44;8744:5;8751:3;8756:7;8765;8729:14;:44::i;:::-;7604:1176;7534:1246;;;:::o;4959:201:7:-;5045:7;5101:1;5096;:6;;5104:12;5088:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5142:1;5138;:5;5131:12;;4959:201;;;;;:::o;3122:96::-;3180:7;3210:1;3206;:5;;;;:::i;:::-;3199:12;;3122:96;;;;:::o;2755:::-;2813:7;2843:1;2839;:5;;;;:::i;:::-;2832:12;;2755:96;;;;:::o;2475:187:6:-;2548:16;2567:6;;;;;;;;;;;2548:25;;2592:8;2583:6;;:17;;;;;;;;;;;;;;;;;;2646:8;2615:40;;2636:8;2615:40;;;;;;;;;;;;2538:124;2475:187;:::o;3465:96:7:-;3523:7;3553:1;3549;:5;;;;:::i;:::-;3542:12;;3465:96;;;;:::o;3850:::-;3908:7;3938:1;3934;:5;;;;:::i;:::-;3927:12;;3850:96;;;;:::o;8786:1061:9:-;8927:7;8922:28;;8936:14;:12;:14::i;:::-;8922:28;8961:22;9081:25;9102:3;9081:20;:25::i;:::-;9077:303;;;9142:46;9180:7;9142:37;:46::i;:::-;9122:66;;9077:303;;;9209:27;9230:5;9209:20;:27::i;:::-;9205:175;;;9272:45;9309:7;9272:36;:45::i;:::-;9252:65;;9205:175;;;9368:1;9348:21;;9205:175;9077:303;9389:24;9416:30;9428:17;9416:7;:11;;:30;;;;:::i;:::-;9389:57;;9456:23;9482:17;9456:43;;9529:29;9550:7;9529:9;:16;9539:5;9529:16;;;;;;;;;;;;;;;;:20;;:29;;;;:::i;:::-;9510:9;:16;9520:5;9510:16;;;;;;;;;;;;;;;:48;;;;9585:39;9604:19;9585:9;:14;9595:3;9585:14;;;;;;;;;;;;;;;;:18;;:39;;;;:::i;:::-;9568:9;:14;9578:3;9568:14;;;;;;;;;;;;;;;:56;;;;9661:70;9703:18;9661:9;:24;9679:4;9661:24;;;;;;;;;;;;;;;;:28;;:70;;;;:::i;:::-;9634:9;:24;9652:4;9634:24;;;;;;;;;;;;;;;:97;;;;9747:7;9742:54;;9770:15;:13;:15::i;:::-;9742:54;9827:3;9811:29;;9820:5;9811:29;;;9832:7;9811:29;;;;;;:::i;:::-;;;;;;;;8912:935;;;8786:1061;;;;:::o;10909:297::-;10980:1;10957:19;;:24;10956:57;;;;;11011:1;10987:20;;:25;10956:57;11015:7;10952:70;11062:19;;11032:27;:49;;;;11122:20;;11091:28;:51;;;;11198:1;11175:20;:24;;;11153:19;:46;;;;10909:297;:::o;11802:142::-;11888:4;11911:15;:26;11927:9;11911:26;;;;;;;;;;;;;;;;;;;;;;;;;11904:33;;11802:142;;;:::o;11624:172::-;11721:4;11744:45;11781:7;11744:32;11755:20;;11744:6;:10;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;11737:52;;11624:172;;;:::o;11448:170::-;11544:4;11567:44;11603:7;11567:31;11578:19;;11567:6;:10;;:31;;;;:::i;:::-;:35;;:44;;;;:::i;:::-;11560:51;;11448:170;;;:::o;11212:161::-;11278:27;;11256:19;:49;;;;11338:28;;11315:20;:51;;;;11212:161::o;7:99:10:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:118::-;4845:24;4863:5;4845:24;:::i;:::-;4840:3;4833:37;4758:118;;:::o;4882:222::-;4975:4;5013:2;5002:9;4998:18;4990:26;;5026:71;5094:1;5083:9;5079:17;5070:6;5026:71;:::i;:::-;4882:222;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:116::-;5610:21;5625:5;5610:21;:::i;:::-;5603:5;5600:32;5590:60;;5646:1;5643;5636:12;5590:60;5540:116;:::o;5662:133::-;5705:5;5743:6;5730:20;5721:29;;5759:30;5783:5;5759:30;:::i;:::-;5662:133;;;;:::o;5801:323::-;5857:6;5906:2;5894:9;5885:7;5881:23;5877:32;5874:119;;;5912:79;;:::i;:::-;5874:119;6032:1;6057:50;6099:7;6090:6;6079:9;6075:22;6057:50;:::i;:::-;6047:60;;6003:114;5801:323;;;;:::o;6130:329::-;6189:6;6238:2;6226:9;6217:7;6213:23;6209:32;6206:119;;;6244:79;;:::i;:::-;6206:119;6364:1;6389:53;6434:7;6425:6;6414:9;6410:22;6389:53;:::i;:::-;6379:63;;6335:117;6130:329;;;;:::o;6465:117::-;6574:1;6571;6564:12;6588:117;6697:1;6694;6687:12;6711:117;6820:1;6817;6810:12;6851:568;6924:8;6934:6;6984:3;6977:4;6969:6;6965:17;6961:27;6951:122;;6992:79;;:::i;:::-;6951:122;7105:6;7092:20;7082:30;;7135:18;7127:6;7124:30;7121:117;;;7157:79;;:::i;:::-;7121:117;7271:4;7263:6;7259:17;7247:29;;7325:3;7317:4;7309:6;7305:17;7295:8;7291:32;7288:41;7285:128;;;7332:79;;:::i;:::-;7285:128;6851:568;;;;;:::o;7425:698::-;7517:6;7525;7533;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7901:80;7973:7;7964:6;7953:9;7949:22;7901:80;:::i;:::-;7883:98;;;;7679:312;8030:2;8056:50;8098:7;8089:6;8078:9;8074:22;8056:50;:::i;:::-;8046:60;;8001:115;7425:698;;;;;:::o;8129:474::-;8197:6;8205;8254:2;8242:9;8233:7;8229:23;8225:32;8222:119;;;8260:79;;:::i;:::-;8222:119;8380:1;8405:53;8450:7;8441:6;8430:9;8426:22;8405:53;:::i;:::-;8395:63;;8351:117;8507:2;8533:53;8578:7;8569:6;8558:9;8554:22;8533:53;:::i;:::-;8523:63;;8478:118;8129:474;;;;;:::o;8609:180::-;8657:77;8654:1;8647:88;8754:4;8751:1;8744:15;8778:4;8775:1;8768:15;8795:102;8837:8;8884:5;8881:1;8877:13;8856:34;;8795:102;;;:::o;8903:848::-;8964:5;8971:4;8995:6;8986:15;;9019:5;9010:14;;9033:712;9054:1;9044:8;9041:15;9033:712;;;9149:4;9144:3;9140:14;9134:4;9131:24;9128:50;;;9158:18;;:::i;:::-;9128:50;9208:1;9198:8;9194:16;9191:451;;;9623:4;9616:5;9612:16;9603:25;;9191:451;9673:4;9667;9663:15;9655:23;;9703:32;9726:8;9703:32;:::i;:::-;9691:44;;9033:712;;;8903:848;;;;;;;:::o;9757:1073::-;9811:5;10002:8;9992:40;;10023:1;10014:10;;10025:5;;9992:40;10051:4;10041:36;;10068:1;10059:10;;10070:5;;10041:36;10137:4;10185:1;10180:27;;;;10221:1;10216:191;;;;10130:277;;10180:27;10198:1;10189:10;;10200:5;;;10216:191;10261:3;10251:8;10248:17;10245:43;;;10268:18;;:::i;:::-;10245:43;10317:8;10314:1;10310:16;10301:25;;10352:3;10345:5;10342:14;10339:40;;;10359:18;;:::i;:::-;10339:40;10392:5;;;10130:277;;10516:2;10506:8;10503:16;10497:3;10491:4;10488:13;10484:36;10466:2;10456:8;10453:16;10448:2;10442:4;10439:12;10435:35;10419:111;10416:246;;;10572:8;10566:4;10562:19;10553:28;;10607:3;10600:5;10597:14;10594:40;;;10614:18;;:::i;:::-;10594:40;10647:5;;10416:246;10687:42;10725:3;10715:8;10709:4;10706:1;10687:42;:::i;:::-;10672:57;;;;10761:4;10756:3;10752:14;10745:5;10742:25;10739:51;;;10770:18;;:::i;:::-;10739:51;10819:4;10812:5;10808:16;10799:25;;9757:1073;;;;;;:::o;10836:281::-;10894:5;10918:23;10936:4;10918:23;:::i;:::-;10910:31;;10962:25;10978:8;10962:25;:::i;:::-;10950:37;;11006:104;11043:66;11033:8;11027:4;11006:104;:::i;:::-;10997:113;;10836:281;;;;:::o;11123:410::-;11163:7;11186:20;11204:1;11186:20;:::i;:::-;11181:25;;11220:20;11238:1;11220:20;:::i;:::-;11215:25;;11275:1;11272;11268:9;11297:30;11315:11;11297:30;:::i;:::-;11286:41;;11476:1;11467:7;11463:15;11460:1;11457:22;11437:1;11430:9;11410:83;11387:139;;11506:18;;:::i;:::-;11387:139;11171:362;11123:410;;;;:::o;11539:224::-;11679:34;11675:1;11667:6;11663:14;11656:58;11748:7;11743:2;11735:6;11731:15;11724:32;11539:224;:::o;11769:366::-;11911:3;11932:67;11996:2;11991:3;11932:67;:::i;:::-;11925:74;;12008:93;12097:3;12008:93;:::i;:::-;12126:2;12121:3;12117:12;12110:19;;11769:366;;;:::o;12141:419::-;12307:4;12345:2;12334:9;12330:18;12322:26;;12394:9;12388:4;12384:20;12380:1;12369:9;12365:17;12358:47;12422:131;12548:4;12422:131;:::i;:::-;12414:139;;12141:419;;;:::o;12566:231::-;12706:34;12702:1;12694:6;12690:14;12683:58;12775:14;12770:2;12762:6;12758:15;12751:39;12566:231;:::o;12803:366::-;12945:3;12966:67;13030:2;13025:3;12966:67;:::i;:::-;12959:74;;13042:93;13131:3;13042:93;:::i;:::-;13160:2;13155:3;13151:12;13144:19;;12803:366;;;:::o;13175:419::-;13341:4;13379:2;13368:9;13364:18;13356:26;;13428:9;13422:4;13418:20;13414:1;13403:9;13399:17;13392:47;13456:131;13582:4;13456:131;:::i;:::-;13448:139;;13175:419;;;:::o;13600:143::-;13657:5;13688:6;13682:13;13673:22;;13704:33;13731:5;13704:33;:::i;:::-;13600:143;;;;:::o;13749:351::-;13819:6;13868:2;13856:9;13847:7;13843:23;13839:32;13836:119;;;13874:79;;:::i;:::-;13836:119;13994:1;14019:64;14075:7;14066:6;14055:9;14051:22;14019:64;:::i;:::-;14009:74;;13965:128;13749:351;;;;:::o;14106:332::-;14227:4;14265:2;14254:9;14250:18;14242:26;;14278:71;14346:1;14335:9;14331:17;14322:6;14278:71;:::i;:::-;14359:72;14427:2;14416:9;14412:18;14403:6;14359:72;:::i;:::-;14106:332;;;;;:::o;14444:180::-;14492:77;14489:1;14482:88;14589:4;14586:1;14579:15;14613:4;14610:1;14603:15;14630:233;14669:3;14692:24;14710:5;14692:24;:::i;:::-;14683:33;;14738:66;14731:5;14728:77;14725:103;;14808:18;;:::i;:::-;14725:103;14855:1;14848:5;14844:13;14837:20;;14630:233;;;:::o;14869:194::-;14909:4;14929:20;14947:1;14929:20;:::i;:::-;14924:25;;14963:20;14981:1;14963:20;:::i;:::-;14958:25;;15007:1;15004;15000:9;14992:17;;15031:1;15025:4;15022:11;15019:37;;;15036:18;;:::i;:::-;15019:37;14869:194;;;;:::o;15069:225::-;15209:34;15205:1;15197:6;15193:14;15186:58;15278:8;15273:2;15265:6;15261:15;15254:33;15069:225;:::o;15300:366::-;15442:3;15463:67;15527:2;15522:3;15463:67;:::i;:::-;15456:74;;15539:93;15628:3;15539:93;:::i;:::-;15657:2;15652:3;15648:12;15641:19;;15300:366;;;:::o;15672:419::-;15838:4;15876:2;15865:9;15861:18;15853:26;;15925:9;15919:4;15915:20;15911:1;15900:9;15896:17;15889:47;15953:131;16079:4;15953:131;:::i;:::-;15945:139;;15672:419;;;:::o;16097:223::-;16237:34;16233:1;16225:6;16221:14;16214:58;16306:6;16301:2;16293:6;16289:15;16282:31;16097:223;:::o;16326:366::-;16468:3;16489:67;16553:2;16548:3;16489:67;:::i;:::-;16482:74;;16565:93;16654:3;16565:93;:::i;:::-;16683:2;16678:3;16674:12;16667:19;;16326:366;;;:::o;16698:419::-;16864:4;16902:2;16891:9;16887:18;16879:26;;16951:9;16945:4;16941:20;16937:1;16926:9;16922:17;16915:47;16979:131;17105:4;16979:131;:::i;:::-;16971:139;;16698:419;;;:::o;17123:221::-;17263:34;17259:1;17251:6;17247:14;17240:58;17332:4;17327:2;17319:6;17315:15;17308:29;17123:221;:::o;17350:366::-;17492:3;17513:67;17577:2;17572:3;17513:67;:::i;:::-;17506:74;;17589:93;17678:3;17589:93;:::i;:::-;17707:2;17702:3;17698:12;17691:19;;17350:366;;;:::o;17722:419::-;17888:4;17926:2;17915:9;17911:18;17903:26;;17975:9;17969:4;17965:20;17961:1;17950:9;17946:17;17939:47;18003:131;18129:4;18003:131;:::i;:::-;17995:139;;17722:419;;;:::o;18147:182::-;18287:34;18283:1;18275:6;18271:14;18264:58;18147:182;:::o;18335:366::-;18477:3;18498:67;18562:2;18557:3;18498:67;:::i;:::-;18491:74;;18574:93;18663:3;18574:93;:::i;:::-;18692:2;18687:3;18683:12;18676:19;;18335:366;;;:::o;18707:419::-;18873:4;18911:2;18900:9;18896:18;18888:26;;18960:9;18954:4;18950:20;18946:1;18935:9;18931:17;18924:47;18988:131;19114:4;18988:131;:::i;:::-;18980:139;;18707:419;;;:::o;19132:224::-;19272:34;19268:1;19260:6;19256:14;19249:58;19341:7;19336:2;19328:6;19324:15;19317:32;19132:224;:::o;19362:366::-;19504:3;19525:67;19589:2;19584:3;19525:67;:::i;:::-;19518:74;;19601:93;19690:3;19601:93;:::i;:::-;19719:2;19714:3;19710:12;19703:19;;19362:366;;;:::o;19734:419::-;19900:4;19938:2;19927:9;19923:18;19915:26;;19987:9;19981:4;19977:20;19973:1;19962:9;19958:17;19951:47;20015:131;20141:4;20015:131;:::i;:::-;20007:139;;19734:419;;;:::o;20159:222::-;20299:34;20295:1;20287:6;20283:14;20276:58;20368:5;20363:2;20355:6;20351:15;20344:30;20159:222;:::o;20387:366::-;20529:3;20550:67;20614:2;20609:3;20550:67;:::i;:::-;20543:74;;20626:93;20715:3;20626:93;:::i;:::-;20744:2;20739:3;20735:12;20728:19;;20387:366;;;:::o;20759:419::-;20925:4;20963:2;20952:9;20948:18;20940:26;;21012:9;21006:4;21002:20;20998:1;20987:9;20983:17;20976:47;21040:131;21166:4;21040:131;:::i;:::-;21032:139;;20759:419;;;:::o;21184:228::-;21324:34;21320:1;21312:6;21308:14;21301:58;21393:11;21388:2;21380:6;21376:15;21369:36;21184:228;:::o;21418:366::-;21560:3;21581:67;21645:2;21640:3;21581:67;:::i;:::-;21574:74;;21657:93;21746:3;21657:93;:::i;:::-;21775:2;21770:3;21766:12;21759:19;;21418:366;;;:::o;21790:419::-;21956:4;21994:2;21983:9;21979:18;21971:26;;22043:9;22037:4;22033:20;22029:1;22018:9;22014:17;22007:47;22071:131;22197:4;22071:131;:::i;:::-;22063:139;;21790:419;;;:::o;22215:168::-;22355:20;22351:1;22343:6;22339:14;22332:44;22215:168;:::o;22389:366::-;22531:3;22552:67;22616:2;22611:3;22552:67;:::i;:::-;22545:74;;22628:93;22717:3;22628:93;:::i;:::-;22746:2;22741:3;22737:12;22730:19;;22389:366;;;:::o;22761:419::-;22927:4;22965:2;22954:9;22950:18;22942:26;;23014:9;23008:4;23004:20;23000:1;22989:9;22985:17;22978:47;23042:131;23168:4;23042:131;:::i;:::-;23034:139;;22761:419;;;:::o;23186:228::-;23326:34;23322:1;23314:6;23310:14;23303:58;23395:11;23390:2;23382:6;23378:15;23371:36;23186:228;:::o;23420:366::-;23562:3;23583:67;23647:2;23642:3;23583:67;:::i;:::-;23576:74;;23659:93;23748:3;23659:93;:::i;:::-;23777:2;23772:3;23768:12;23761:19;;23420:366;;;:::o;23792:419::-;23958:4;23996:2;23985:9;23981:18;23973:26;;24045:9;24039:4;24035:20;24031:1;24020:9;24016:17;24009:47;24073:131;24199:4;24073:131;:::i;:::-;24065:139;;23792:419;;;:::o;24217:240::-;24357:34;24353:1;24345:6;24341:14;24334:58;24426:23;24421:2;24413:6;24409:15;24402:48;24217:240;:::o;24463:366::-;24605:3;24626:67;24690:2;24685:3;24626:67;:::i;:::-;24619:74;;24702:93;24791:3;24702:93;:::i;:::-;24820:2;24815:3;24811:12;24804:19;;24463:366;;;:::o;24835:419::-;25001:4;25039:2;25028:9;25024:18;25016:26;;25088:9;25082:4;25078:20;25074:1;25063:9;25059:17;25052:47;25116:131;25242:4;25116:131;:::i;:::-;25108:139;;24835:419;;;:::o;25260:191::-;25300:3;25319:20;25337:1;25319:20;:::i;:::-;25314:25;;25353:20;25371:1;25353:20;:::i;:::-;25348:25;;25396:1;25393;25389:9;25382:16;;25417:3;25414:1;25411:10;25408:36;;;25424:18;;:::i;:::-;25408:36;25260:191;;;;:::o;25457:180::-;25505:77;25502:1;25495:88;25602:4;25599:1;25592:15;25626:4;25623:1;25616:15;25643:185;25683:1;25700:20;25718:1;25700:20;:::i;:::-;25695:25;;25734:20;25752:1;25734:20;:::i;:::-;25729:25;;25773:1;25763:35;;25778:18;;:::i;:::-;25763:35;25820:1;25817;25813:9;25808:14;;25643:185;;;;:::o

Swarm Source

ipfs://c402b8800d254e9dcfd5c67b06d557dcca42fdf749e00fe59e6bf8eabf981f16
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.