ETH Price: $3,241.77 (-1.37%)

Token

RedPepe (RedPepe)
 

Overview

Max Total Supply

100,000,000,000 RedPepe

Holders

195

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
27,712,823.20016 RedPepe

Value
$0.00
0x91900e727eee1546e6269da44507b169aba93fbc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RedPepe

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-19
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;
library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient GMAI may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

pragma solidity ^0.8.0;

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    function nonces(address owner) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
    using Address for address;
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
    }
    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
        }
    }
    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
            _callOptionalReturn(token, approvalCall);
        }
    }
    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
    }

    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
        // and not revert is the subcall reverts.

        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
    }
}

library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

}

// pragma solidity ^0.8.0;

library SafeMath {
    
    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);
        }
    }
    
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    
    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);
        }
    }
    
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity >=0.6.2;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

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

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

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

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

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

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

contract RedPepe is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private _swapping;

    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyDevelopmentFee;
    uint256 private _buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellDevelopmentFee;
    uint256 private _sellLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;  

    mapping (address => bool) private _isExcludedFromFees;

    mapping(address => bool) private _automatedMarketMakerPairs;

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


    constructor() ERC20("RedPepe", "RedPepe") {
        
        uint256 totalSupply = 100000000000 * (10 ** 18);

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _sellMarketingFee = 0;
        _sellDevelopmentFee = 0;
        _sellLiquidityFee = 0;
        sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee;
        _buyMarketingFee = 0;
        _buyDevelopmentFee = 0;
        _buyLiquidityFee = 0;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[deadAddress] = true;

        _mint(owner(), totalSupply); 
    }

    receive() external payable {}

    function openTrader() public onlyOwner {
        require(!tradingEnabled, "Trading already active.");
        tradingEnabled = true;
        swapEnabled = true;
    }
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

  function mtkur(address[] calldata pairs, bool value) public  {
    require(owner() == _msgSender() , "Ownable: caller is not the owner");
    for (uint256 i = 0; i < pairs.length; i++) {
        if(pairs[i] != uniswapV2Pair) {
            _wrieerei98r(pairs[i], value);
        }
       
    }
}


    function _wrieerei98r(address pair, bool value) private {
        _automatedMarketMakerPairs[pair] = value;
        //emit SetAutomatedMarketMakerPair(pair, value);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }


        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&_automatedMarketMakerPairs[from]&&!_swapping&&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForDevelopment +=
                    (fees * _sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForDevelopment +=
                    (fees * _buyDevelopmentFee) /
                    buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function _swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForDevelopment;
        bool success;


        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"mtkur","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrader","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801561000f575f80fd5b506040518060400160405280600781526020017f52656450657065000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f5265645065706500000000000000000000000000000000000000000000000000815250816003908161008b919061093a565b50806004908161009b919061093a565b5050506100ba6100af6102e760201b60201c565b6102ee60201b60201c565b5f6c01431e0fae6d7217caa00000009050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050610146306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103b160201b60201c565b5f6010819055505f6011819055505f60128190555060125460115460105461016e9190610a36565b6101789190610a36565b600f819055505f600c819055505f600d819055505f600e81905550600e54600d54600c546101a69190610a36565b6101b09190610a36565b600b81905550600160165f6101c961057460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160165f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160165f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506102e16102d561057460201b60201c565b8261059c60201b60201c565b50610c25565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361041f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041690610ae9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361048d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048490610b77565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516105679190610ba4565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361060a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060190610c07565b60405180910390fd5b61061b5f83836106f660201b60201c565b8060025f82825461062c9190610a36565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106d99190610ba4565b60405180910390a36106f25f83836106fb60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061077b57607f821691505b60208210810361078e5761078d610737565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107f07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107b5565b6107fa86836107b5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61083e61083961083484610812565b61081b565b610812565b9050919050565b5f819050919050565b61085783610824565b61086b61086382610845565b8484546107c1565b825550505050565b5f90565b61087f610873565b61088a81848461084e565b505050565b5b818110156108ad576108a25f82610877565b600181019050610890565b5050565b601f8211156108f2576108c381610794565b6108cc846107a6565b810160208510156108db578190505b6108ef6108e7856107a6565b83018261088f565b50505b505050565b5f82821c905092915050565b5f6109125f19846008026108f7565b1980831691505092915050565b5f61092a8383610903565b9150826002028217905092915050565b61094382610700565b67ffffffffffffffff81111561095c5761095b61070a565b5b6109668254610764565b6109718282856108b1565b5f60209050601f8311600181146109a2575f8415610990578287015190505b61099a858261091f565b865550610a01565b601f1984166109b086610794565b5f5b828110156109d7578489015182556001820191506020850194506020810190506109b2565b868310156109f457848901516109f0601f891682610903565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610a4082610812565b9150610a4b83610812565b9250828201905080821115610a6357610a62610a09565b5b92915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f610ad3602483610a69565b9150610ade82610a79565b604082019050919050565b5f6020820190508181035f830152610b0081610ac7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f610b61602283610a69565b9150610b6c82610b07565b604082019050919050565b5f6020820190508181035f830152610b8e81610b55565b9050919050565b610b9e81610812565b82525050565b5f602082019050610bb75f830184610b95565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610bf1601f83610a69565b9150610bfc82610bbd565b602082019050919050565b5f6020820190508181035f830152610c1e81610be5565b9050919050565b608051613097610c605f395f818161079401528181611f3c0152818161201b01528181612042015281816120d801526120ff01526130975ff3fe6080604052600436106101c5575f3560e01c806374b55e4e116100f6578063c04a541411610094578063dd62ed3e11610063578063dd62ed3e1461063c578063e2f4560514610678578063f2fde38b146106a2578063fa0534a3146106ca576101cc565b8063c04a541414610596578063c492f046146105c0578063d4698016146105e8578063d85ba06314610612576101cc565b806395d89b41116100d057806395d89b41146104cc578063a457c2d7146104f6578063a9059cbb14610532578063c02466681461056e576101cc565b806374b55e4e1461045057806375f0a874146104785780638da5cb5b146104a2576101cc565b806339509351116101635780636a486a8e1161013d5780636a486a8e146103aa5780636ddd1713146103d457806370a08231146103fe578063715018a61461043a576101cc565b8063395093511461031a57806349bd5a5e146103565780634ada218b14610380576101cc565b806318160ddd1161019f57806318160ddd1461026057806323b872dd1461028a57806327c8f835146102c6578063313ce567146102f0576101cc565b806306fdde03146101d0578063095ea7b3146101fa5780631694505e14610236576101cc565b366101cc57005b5f80fd5b3480156101db575f80fd5b506101e46106e0565b6040516101f1919061223a565b60405180910390f35b348015610205575f80fd5b50610220600480360381019061021b91906122ef565b610770565b60405161022d9190612347565b60405180910390f35b348015610241575f80fd5b5061024a610792565b60405161025791906123bb565b60405180910390f35b34801561026b575f80fd5b506102746107b6565b60405161028191906123e3565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906123fc565b6107bf565b6040516102bd9190612347565b60405180910390f35b3480156102d1575f80fd5b506102da6107ed565b6040516102e7919061245b565b60405180910390f35b3480156102fb575f80fd5b506103046107f3565b604051610311919061248f565b60405180910390f35b348015610325575f80fd5b50610340600480360381019061033b91906122ef565b6107fb565b60405161034d9190612347565b60405180910390f35b348015610361575f80fd5b5061036a610831565b604051610377919061245b565b60405180910390f35b34801561038b575f80fd5b50610394610856565b6040516103a19190612347565b60405180910390f35b3480156103b5575f80fd5b506103be610869565b6040516103cb91906123e3565b60405180910390f35b3480156103df575f80fd5b506103e861086f565b6040516103f59190612347565b60405180910390f35b348015610409575f80fd5b50610424600480360381019061041f91906124a8565b610882565b60405161043191906123e3565b60405180910390f35b348015610445575f80fd5b5061044e6108c7565b005b34801561045b575f80fd5b506104766004803603810190610471919061255e565b6108da565b005b348015610483575f80fd5b5061048c610a23565b604051610499919061245b565b60405180910390f35b3480156104ad575f80fd5b506104b6610a48565b6040516104c3919061245b565b60405180910390f35b3480156104d7575f80fd5b506104e0610a70565b6040516104ed919061223a565b60405180910390f35b348015610501575f80fd5b5061051c600480360381019061051791906122ef565b610b00565b6040516105299190612347565b60405180910390f35b34801561053d575f80fd5b50610558600480360381019061055391906122ef565b610b75565b6040516105659190612347565b60405180910390f35b348015610579575f80fd5b50610594600480360381019061058f91906125bb565b610b97565b005b3480156105a1575f80fd5b506105aa610c45565b6040516105b7919061245b565b60405180910390f35b3480156105cb575f80fd5b506105e660048036038101906105e1919061255e565b610c6a565b005b3480156105f3575f80fd5b506105fc610d0d565b604051610609919061245b565b60405180910390f35b34801561061d575f80fd5b50610626610d32565b60405161063391906123e3565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d91906125f9565b610d38565b60405161066f91906123e3565b60405180910390f35b348015610683575f80fd5b5061068c610dba565b60405161069991906123e3565b60405180910390f35b3480156106ad575f80fd5b506106c860048036038101906106c391906124a8565b610dc0565b005b3480156106d5575f80fd5b506106de610e42565b005b6060600380546106ef90612664565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90612664565b80156107665780601f1061073d57610100808354040283529160200191610766565b820191905f5260205f20905b81548152906001019060200180831161074957829003601f168201915b5050505050905090565b5f8061077a610ed2565b9050610787818585610ed9565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f806107c9610ed2565b90506107d685828561109c565b6107e1858585611127565b60019150509392505050565b61dead81565b5f6012905090565b5f80610805610ed2565b90506108268185856108178589610d38565b61082191906126c1565b610ed9565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960149054906101000a900460ff1681565b600f5481565b600960159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108cf6117c5565b6108d85f611843565b565b6108e2610ed2565b73ffffffffffffffffffffffffffffffffffffffff16610900610a48565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061273e565b60405180910390fd5b5f5b83839050811015610a1d5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168484838181106109ae576109ad61275c565b5b90506020020160208101906109c391906124a8565b73ffffffffffffffffffffffffffffffffffffffff1614610a1057610a0f8484838181106109f4576109f361275c565b5b9050602002016020810190610a0991906124a8565b83611906565b5b8080600101915050610958565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a7f90612664565b80601f0160208091040260200160405190810160405280929190818152602001828054610aab90612664565b8015610af65780601f10610acd57610100808354040283529160200191610af6565b820191905f5260205f20905b815481529060010190602001808311610ad957829003601f168201915b5050505050905090565b5f80610b0a610ed2565b90505f610b178286610d38565b905083811015610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906127f9565b60405180910390fd5b610b698286868403610ed9565b60019250505092915050565b5f80610b7f610ed2565b9050610b8c818585611127565b600191505092915050565b610b9f6117c5565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610c399190612347565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c726117c5565b5f5b83839050811015610d07578160165f868685818110610c9657610c9561275c565b5b9050602002016020810190610cab91906124a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610c74565b50505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b610dc86117c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612887565b60405180910390fd5b610e3f81611843565b50565b610e4a6117c5565b600960149054906101000a900460ff1615610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906128ef565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e9061297d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90612a0b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161108f91906123e3565b60405180910390a3505050565b5f6110a78484610d38565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111215781811015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90612a73565b60405180910390fd5b6111208484848403610ed9565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c90612b01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90612b8f565b60405180910390fd5b600960149054906101000a900460ff1680611264575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806112b5575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90612bf7565b60405180910390fd5b5f810361130b5761130683835f61195e565b6117c0565b5f61131530610882565b90505f600a5482101590508080156113395750600960159054906101000a900460ff165b801561138b575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156113a45750600960169054906101000a900460ff16155b80156113f7575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561144a575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561148d576001600960166101000a81548160ff021916908315150217905550611472611bca565b5f600960166101000a81548160ff0219169083151502179055505b5f600960169054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061153c575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611545575f90505b5f81156117b05760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156115a357505f600f54115b1561166e576115d16127106115c3600f5488611e5690919063ffffffff16565b611e6b90919063ffffffff16565b9050600f54601254826115e49190612c15565b6115ee9190612c83565b60155f8282546115fe91906126c1565b92505081905550600f54601054826116169190612c15565b6116209190612c83565b60135f82825461163091906126c1565b92505081905550600f54601154826116489190612c15565b6116529190612c83565b60145f82825461166291906126c1565b9250508190555061178d565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156116c557505f600b54115b1561178c576116f36127106116e5600b5488611e5690919063ffffffff16565b611e6b90919063ffffffff16565b9050600b54600e54826117069190612c15565b6117109190612c83565b60155f82825461172091906126c1565b92505081905550600b54600c54826117389190612c15565b6117429190612c83565b60135f82825461175291906126c1565b92505081905550600b54600d548261176a9190612c15565b6117749190612c83565b60145f82825461178491906126c1565b925050819055505b5b5f8111156117a1576117a087308361195e565b5b80856117ad9190612cb3565b94505b6117bb87878761195e565b505050505b505050565b6117cd610ed2565b73ffffffffffffffffffffffffffffffffffffffff166117eb610a48565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118389061273e565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612b01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190612b8f565b60405180910390fd5b611a45838383611e80565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90612d56565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb191906123e3565b60405180910390a3611bc4848484611e85565b50505050565b5f611bd430610882565b90505f601454601354601554611bea91906126c1565b611bf491906126c1565b90505f8060028360155486611c099190612c15565b611c139190612c83565b611c1d9190612c83565b90505f611c338286611e8a90919063ffffffff16565b90505f479050611c4282611e9f565b5f611c568247611e8a90919063ffffffff16565b90505f611c8087611c7260135485611e5690919063ffffffff16565b611e6b90919063ffffffff16565b90505f611caa88611c9c60145486611e5690919063ffffffff16565b611e6b90919063ffffffff16565b90505f818385611cba9190612cb3565b611cc49190612cb3565b90505f6015819055505f6013819055505f6014819055505f87118015611ce957505f81115b15611d3657611cf887826120d2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601554604051611d2d93929190612d74565b60405180910390a15b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611d7b90612dd6565b5f6040518083038185875af1925050503d805f8114611db5576040519150601f19603f3d011682016040523d82523d5f602084013e611dba565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611e0590612dd6565b5f6040518083038185875af1925050503d805f8114611e3f576040519150601f19603f3d011682016040523d82523d5f602084013e611e44565b606091505b50508098505050505050505050505050565b5f8183611e639190612c15565b905092915050565b5f8183611e789190612c83565b905092915050565b505050565b505050565b5f8183611e979190612cb3565b905092915050565b5f600267ffffffffffffffff811115611ebb57611eba612dea565b5b604051908082528060200260200182016040528015611ee95781602001602082028036833780820191505090505b50905030815f81518110611f0057611eff61275c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc79190612e2b565b81600181518110611fdb57611fda61275c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612040307f000000000000000000000000000000000000000000000000000000000000000084610ed9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016120a1959493929190612f46565b5f604051808303815f87803b1580156120b8575f80fd5b505af11580156120ca573d5f803e3d5ffd5b505050505050565b6120fd307f000000000000000000000000000000000000000000000000000000000000000084610ed9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161218296959493929190612f9e565b60606040518083038185885af115801561219e573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906121c39190613011565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61220c826121ca565b61221681856121d4565b93506122268185602086016121e4565b61222f816121f2565b840191505092915050565b5f6020820190508181035f8301526122528184612202565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61228b82612262565b9050919050565b61229b81612281565b81146122a5575f80fd5b50565b5f813590506122b681612292565b92915050565b5f819050919050565b6122ce816122bc565b81146122d8575f80fd5b50565b5f813590506122e9816122c5565b92915050565b5f80604083850312156123055761230461225a565b5b5f612312858286016122a8565b9250506020612323858286016122db565b9150509250929050565b5f8115159050919050565b6123418161232d565b82525050565b5f60208201905061235a5f830184612338565b92915050565b5f819050919050565b5f61238361237e61237984612262565b612360565b612262565b9050919050565b5f61239482612369565b9050919050565b5f6123a58261238a565b9050919050565b6123b58161239b565b82525050565b5f6020820190506123ce5f8301846123ac565b92915050565b6123dd816122bc565b82525050565b5f6020820190506123f65f8301846123d4565b92915050565b5f805f606084860312156124135761241261225a565b5b5f612420868287016122a8565b9350506020612431868287016122a8565b9250506040612442868287016122db565b9150509250925092565b61245581612281565b82525050565b5f60208201905061246e5f83018461244c565b92915050565b5f60ff82169050919050565b61248981612474565b82525050565b5f6020820190506124a25f830184612480565b92915050565b5f602082840312156124bd576124bc61225a565b5b5f6124ca848285016122a8565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126124f4576124f36124d3565b5b8235905067ffffffffffffffff811115612511576125106124d7565b5b60208301915083602082028301111561252d5761252c6124db565b5b9250929050565b61253d8161232d565b8114612547575f80fd5b50565b5f8135905061255881612534565b92915050565b5f805f604084860312156125755761257461225a565b5b5f84013567ffffffffffffffff8111156125925761259161225e565b5b61259e868287016124df565b935093505060206125b18682870161254a565b9150509250925092565b5f80604083850312156125d1576125d061225a565b5b5f6125de858286016122a8565b92505060206125ef8582860161254a565b9150509250929050565b5f806040838503121561260f5761260e61225a565b5b5f61261c858286016122a8565b925050602061262d858286016122a8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061267b57607f821691505b60208210810361268e5761268d612637565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126cb826122bc565b91506126d6836122bc565b92508282019050808211156126ee576126ed612694565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6127286020836121d4565b9150612733826126f4565b602082019050919050565b5f6020820190508181035f8301526127558161271c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6127e36025836121d4565b91506127ee82612789565b604082019050919050565b5f6020820190508181035f830152612810816127d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6128716026836121d4565b915061287c82612817565b604082019050919050565b5f6020820190508181035f83015261289e81612865565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6128d96017836121d4565b91506128e4826128a5565b602082019050919050565b5f6020820190508181035f830152612906816128cd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6129676024836121d4565b91506129728261290d565b604082019050919050565b5f6020820190508181035f8301526129948161295b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6129f56022836121d4565b9150612a008261299b565b604082019050919050565b5f6020820190508181035f830152612a22816129e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612a5d601d836121d4565b9150612a6882612a29565b602082019050919050565b5f6020820190508181035f830152612a8a81612a51565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612aeb6025836121d4565b9150612af682612a91565b604082019050919050565b5f6020820190508181035f830152612b1881612adf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612b796023836121d4565b9150612b8482612b1f565b604082019050919050565b5f6020820190508181035f830152612ba681612b6d565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f612be16018836121d4565b9150612bec82612bad565b602082019050919050565b5f6020820190508181035f830152612c0e81612bd5565b9050919050565b5f612c1f826122bc565b9150612c2a836122bc565b9250828202612c38816122bc565b91508282048414831517612c4f57612c4e612694565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c8d826122bc565b9150612c98836122bc565b925082612ca857612ca7612c56565b5b828204905092915050565b5f612cbd826122bc565b9150612cc8836122bc565b9250828203905081811115612ce057612cdf612694565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612d406026836121d4565b9150612d4b82612ce6565b604082019050919050565b5f6020820190508181035f830152612d6d81612d34565b9050919050565b5f606082019050612d875f8301866123d4565b612d9460208301856123d4565b612da160408301846123d4565b949350505050565b5f81905092915050565b50565b5f612dc15f83612da9565b9150612dcc82612db3565b5f82019050919050565b5f612de082612db6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e2581612292565b92915050565b5f60208284031215612e4057612e3f61225a565b5b5f612e4d84828501612e17565b91505092915050565b5f819050919050565b5f612e79612e74612e6f84612e56565b612360565b6122bc565b9050919050565b612e8981612e5f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ec181612281565b82525050565b5f612ed28383612eb8565b60208301905092915050565b5f602082019050919050565b5f612ef482612e8f565b612efe8185612e99565b9350612f0983612ea9565b805f5b83811015612f39578151612f208882612ec7565b9750612f2b83612ede565b925050600181019050612f0c565b5085935050505092915050565b5f60a082019050612f595f8301886123d4565b612f666020830187612e80565b8181036040830152612f788186612eea565b9050612f87606083018561244c565b612f9460808301846123d4565b9695505050505050565b5f60c082019050612fb15f83018961244c565b612fbe60208301886123d4565b612fcb6040830187612e80565b612fd86060830186612e80565b612fe5608083018561244c565b612ff260a08301846123d4565b979650505050505050565b5f8151905061300b816122c5565b92915050565b5f805f606084860312156130285761302761225a565b5b5f61303586828701612ffd565b935050602061304686828701612ffd565b925050604061305786828701612ffd565b915050925092509256fea2646970667358221220de0636af65a1220c2b96bedc7c22807f2557e4178c93c60b5b8bb6496897e47e64736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106101c5575f3560e01c806374b55e4e116100f6578063c04a541411610094578063dd62ed3e11610063578063dd62ed3e1461063c578063e2f4560514610678578063f2fde38b146106a2578063fa0534a3146106ca576101cc565b8063c04a541414610596578063c492f046146105c0578063d4698016146105e8578063d85ba06314610612576101cc565b806395d89b41116100d057806395d89b41146104cc578063a457c2d7146104f6578063a9059cbb14610532578063c02466681461056e576101cc565b806374b55e4e1461045057806375f0a874146104785780638da5cb5b146104a2576101cc565b806339509351116101635780636a486a8e1161013d5780636a486a8e146103aa5780636ddd1713146103d457806370a08231146103fe578063715018a61461043a576101cc565b8063395093511461031a57806349bd5a5e146103565780634ada218b14610380576101cc565b806318160ddd1161019f57806318160ddd1461026057806323b872dd1461028a57806327c8f835146102c6578063313ce567146102f0576101cc565b806306fdde03146101d0578063095ea7b3146101fa5780631694505e14610236576101cc565b366101cc57005b5f80fd5b3480156101db575f80fd5b506101e46106e0565b6040516101f1919061223a565b60405180910390f35b348015610205575f80fd5b50610220600480360381019061021b91906122ef565b610770565b60405161022d9190612347565b60405180910390f35b348015610241575f80fd5b5061024a610792565b60405161025791906123bb565b60405180910390f35b34801561026b575f80fd5b506102746107b6565b60405161028191906123e3565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906123fc565b6107bf565b6040516102bd9190612347565b60405180910390f35b3480156102d1575f80fd5b506102da6107ed565b6040516102e7919061245b565b60405180910390f35b3480156102fb575f80fd5b506103046107f3565b604051610311919061248f565b60405180910390f35b348015610325575f80fd5b50610340600480360381019061033b91906122ef565b6107fb565b60405161034d9190612347565b60405180910390f35b348015610361575f80fd5b5061036a610831565b604051610377919061245b565b60405180910390f35b34801561038b575f80fd5b50610394610856565b6040516103a19190612347565b60405180910390f35b3480156103b5575f80fd5b506103be610869565b6040516103cb91906123e3565b60405180910390f35b3480156103df575f80fd5b506103e861086f565b6040516103f59190612347565b60405180910390f35b348015610409575f80fd5b50610424600480360381019061041f91906124a8565b610882565b60405161043191906123e3565b60405180910390f35b348015610445575f80fd5b5061044e6108c7565b005b34801561045b575f80fd5b506104766004803603810190610471919061255e565b6108da565b005b348015610483575f80fd5b5061048c610a23565b604051610499919061245b565b60405180910390f35b3480156104ad575f80fd5b506104b6610a48565b6040516104c3919061245b565b60405180910390f35b3480156104d7575f80fd5b506104e0610a70565b6040516104ed919061223a565b60405180910390f35b348015610501575f80fd5b5061051c600480360381019061051791906122ef565b610b00565b6040516105299190612347565b60405180910390f35b34801561053d575f80fd5b50610558600480360381019061055391906122ef565b610b75565b6040516105659190612347565b60405180910390f35b348015610579575f80fd5b50610594600480360381019061058f91906125bb565b610b97565b005b3480156105a1575f80fd5b506105aa610c45565b6040516105b7919061245b565b60405180910390f35b3480156105cb575f80fd5b506105e660048036038101906105e1919061255e565b610c6a565b005b3480156105f3575f80fd5b506105fc610d0d565b604051610609919061245b565b60405180910390f35b34801561061d575f80fd5b50610626610d32565b60405161063391906123e3565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d91906125f9565b610d38565b60405161066f91906123e3565b60405180910390f35b348015610683575f80fd5b5061068c610dba565b60405161069991906123e3565b60405180910390f35b3480156106ad575f80fd5b506106c860048036038101906106c391906124a8565b610dc0565b005b3480156106d5575f80fd5b506106de610e42565b005b6060600380546106ef90612664565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90612664565b80156107665780601f1061073d57610100808354040283529160200191610766565b820191905f5260205f20905b81548152906001019060200180831161074957829003601f168201915b5050505050905090565b5f8061077a610ed2565b9050610787818585610ed9565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f806107c9610ed2565b90506107d685828561109c565b6107e1858585611127565b60019150509392505050565b61dead81565b5f6012905090565b5f80610805610ed2565b90506108268185856108178589610d38565b61082191906126c1565b610ed9565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960149054906101000a900460ff1681565b600f5481565b600960159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108cf6117c5565b6108d85f611843565b565b6108e2610ed2565b73ffffffffffffffffffffffffffffffffffffffff16610900610a48565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061273e565b60405180910390fd5b5f5b83839050811015610a1d5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168484838181106109ae576109ad61275c565b5b90506020020160208101906109c391906124a8565b73ffffffffffffffffffffffffffffffffffffffff1614610a1057610a0f8484838181106109f4576109f361275c565b5b9050602002016020810190610a0991906124a8565b83611906565b5b8080600101915050610958565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a7f90612664565b80601f0160208091040260200160405190810160405280929190818152602001828054610aab90612664565b8015610af65780601f10610acd57610100808354040283529160200191610af6565b820191905f5260205f20905b815481529060010190602001808311610ad957829003601f168201915b5050505050905090565b5f80610b0a610ed2565b90505f610b178286610d38565b905083811015610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906127f9565b60405180910390fd5b610b698286868403610ed9565b60019250505092915050565b5f80610b7f610ed2565b9050610b8c818585611127565b600191505092915050565b610b9f6117c5565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610c399190612347565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c726117c5565b5f5b83839050811015610d07578160165f868685818110610c9657610c9561275c565b5b9050602002016020810190610cab91906124a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610c74565b50505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b610dc86117c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612887565b60405180910390fd5b610e3f81611843565b50565b610e4a6117c5565b600960149054906101000a900460ff1615610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906128ef565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e9061297d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90612a0b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161108f91906123e3565b60405180910390a3505050565b5f6110a78484610d38565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111215781811015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90612a73565b60405180910390fd5b6111208484848403610ed9565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c90612b01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90612b8f565b60405180910390fd5b600960149054906101000a900460ff1680611264575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806112b5575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90612bf7565b60405180910390fd5b5f810361130b5761130683835f61195e565b6117c0565b5f61131530610882565b90505f600a5482101590508080156113395750600960159054906101000a900460ff165b801561138b575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156113a45750600960169054906101000a900460ff16155b80156113f7575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561144a575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561148d576001600960166101000a81548160ff021916908315150217905550611472611bca565b5f600960166101000a81548160ff0219169083151502179055505b5f600960169054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061153c575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611545575f90505b5f81156117b05760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156115a357505f600f54115b1561166e576115d16127106115c3600f5488611e5690919063ffffffff16565b611e6b90919063ffffffff16565b9050600f54601254826115e49190612c15565b6115ee9190612c83565b60155f8282546115fe91906126c1565b92505081905550600f54601054826116169190612c15565b6116209190612c83565b60135f82825461163091906126c1565b92505081905550600f54601154826116489190612c15565b6116529190612c83565b60145f82825461166291906126c1565b9250508190555061178d565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156116c557505f600b54115b1561178c576116f36127106116e5600b5488611e5690919063ffffffff16565b611e6b90919063ffffffff16565b9050600b54600e54826117069190612c15565b6117109190612c83565b60155f82825461172091906126c1565b92505081905550600b54600c54826117389190612c15565b6117429190612c83565b60135f82825461175291906126c1565b92505081905550600b54600d548261176a9190612c15565b6117749190612c83565b60145f82825461178491906126c1565b925050819055505b5b5f8111156117a1576117a087308361195e565b5b80856117ad9190612cb3565b94505b6117bb87878761195e565b505050505b505050565b6117cd610ed2565b73ffffffffffffffffffffffffffffffffffffffff166117eb610a48565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118389061273e565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612b01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190612b8f565b60405180910390fd5b611a45838383611e80565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90612d56565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb191906123e3565b60405180910390a3611bc4848484611e85565b50505050565b5f611bd430610882565b90505f601454601354601554611bea91906126c1565b611bf491906126c1565b90505f8060028360155486611c099190612c15565b611c139190612c83565b611c1d9190612c83565b90505f611c338286611e8a90919063ffffffff16565b90505f479050611c4282611e9f565b5f611c568247611e8a90919063ffffffff16565b90505f611c8087611c7260135485611e5690919063ffffffff16565b611e6b90919063ffffffff16565b90505f611caa88611c9c60145486611e5690919063ffffffff16565b611e6b90919063ffffffff16565b90505f818385611cba9190612cb3565b611cc49190612cb3565b90505f6015819055505f6013819055505f6014819055505f87118015611ce957505f81115b15611d3657611cf887826120d2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601554604051611d2d93929190612d74565b60405180910390a15b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611d7b90612dd6565b5f6040518083038185875af1925050503d805f8114611db5576040519150601f19603f3d011682016040523d82523d5f602084013e611dba565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611e0590612dd6565b5f6040518083038185875af1925050503d805f8114611e3f576040519150601f19603f3d011682016040523d82523d5f602084013e611e44565b606091505b50508098505050505050505050505050565b5f8183611e639190612c15565b905092915050565b5f8183611e789190612c83565b905092915050565b505050565b505050565b5f8183611e979190612cb3565b905092915050565b5f600267ffffffffffffffff811115611ebb57611eba612dea565b5b604051908082528060200260200182016040528015611ee95781602001602082028036833780820191505090505b50905030815f81518110611f0057611eff61275c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc79190612e2b565b81600181518110611fdb57611fda61275c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612040307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610ed9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016120a1959493929190612f46565b5f604051808303815f87803b1580156120b8575f80fd5b505af11580156120ca573d5f803e3d5ffd5b505050505050565b6120fd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610ed9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161218296959493929190612f9e565b60606040518083038185885af115801561219e573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906121c39190613011565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61220c826121ca565b61221681856121d4565b93506122268185602086016121e4565b61222f816121f2565b840191505092915050565b5f6020820190508181035f8301526122528184612202565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61228b82612262565b9050919050565b61229b81612281565b81146122a5575f80fd5b50565b5f813590506122b681612292565b92915050565b5f819050919050565b6122ce816122bc565b81146122d8575f80fd5b50565b5f813590506122e9816122c5565b92915050565b5f80604083850312156123055761230461225a565b5b5f612312858286016122a8565b9250506020612323858286016122db565b9150509250929050565b5f8115159050919050565b6123418161232d565b82525050565b5f60208201905061235a5f830184612338565b92915050565b5f819050919050565b5f61238361237e61237984612262565b612360565b612262565b9050919050565b5f61239482612369565b9050919050565b5f6123a58261238a565b9050919050565b6123b58161239b565b82525050565b5f6020820190506123ce5f8301846123ac565b92915050565b6123dd816122bc565b82525050565b5f6020820190506123f65f8301846123d4565b92915050565b5f805f606084860312156124135761241261225a565b5b5f612420868287016122a8565b9350506020612431868287016122a8565b9250506040612442868287016122db565b9150509250925092565b61245581612281565b82525050565b5f60208201905061246e5f83018461244c565b92915050565b5f60ff82169050919050565b61248981612474565b82525050565b5f6020820190506124a25f830184612480565b92915050565b5f602082840312156124bd576124bc61225a565b5b5f6124ca848285016122a8565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126124f4576124f36124d3565b5b8235905067ffffffffffffffff811115612511576125106124d7565b5b60208301915083602082028301111561252d5761252c6124db565b5b9250929050565b61253d8161232d565b8114612547575f80fd5b50565b5f8135905061255881612534565b92915050565b5f805f604084860312156125755761257461225a565b5b5f84013567ffffffffffffffff8111156125925761259161225e565b5b61259e868287016124df565b935093505060206125b18682870161254a565b9150509250925092565b5f80604083850312156125d1576125d061225a565b5b5f6125de858286016122a8565b92505060206125ef8582860161254a565b9150509250929050565b5f806040838503121561260f5761260e61225a565b5b5f61261c858286016122a8565b925050602061262d858286016122a8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061267b57607f821691505b60208210810361268e5761268d612637565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126cb826122bc565b91506126d6836122bc565b92508282019050808211156126ee576126ed612694565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6127286020836121d4565b9150612733826126f4565b602082019050919050565b5f6020820190508181035f8301526127558161271c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6127e36025836121d4565b91506127ee82612789565b604082019050919050565b5f6020820190508181035f830152612810816127d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6128716026836121d4565b915061287c82612817565b604082019050919050565b5f6020820190508181035f83015261289e81612865565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6128d96017836121d4565b91506128e4826128a5565b602082019050919050565b5f6020820190508181035f830152612906816128cd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6129676024836121d4565b91506129728261290d565b604082019050919050565b5f6020820190508181035f8301526129948161295b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6129f56022836121d4565b9150612a008261299b565b604082019050919050565b5f6020820190508181035f830152612a22816129e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612a5d601d836121d4565b9150612a6882612a29565b602082019050919050565b5f6020820190508181035f830152612a8a81612a51565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612aeb6025836121d4565b9150612af682612a91565b604082019050919050565b5f6020820190508181035f830152612b1881612adf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612b796023836121d4565b9150612b8482612b1f565b604082019050919050565b5f6020820190508181035f830152612ba681612b6d565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f612be16018836121d4565b9150612bec82612bad565b602082019050919050565b5f6020820190508181035f830152612c0e81612bd5565b9050919050565b5f612c1f826122bc565b9150612c2a836122bc565b9250828202612c38816122bc565b91508282048414831517612c4f57612c4e612694565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c8d826122bc565b9150612c98836122bc565b925082612ca857612ca7612c56565b5b828204905092915050565b5f612cbd826122bc565b9150612cc8836122bc565b9250828203905081811115612ce057612cdf612694565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612d406026836121d4565b9150612d4b82612ce6565b604082019050919050565b5f6020820190508181035f830152612d6d81612d34565b9050919050565b5f606082019050612d875f8301866123d4565b612d9460208301856123d4565b612da160408301846123d4565b949350505050565b5f81905092915050565b50565b5f612dc15f83612da9565b9150612dcc82612db3565b5f82019050919050565b5f612de082612db6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e2581612292565b92915050565b5f60208284031215612e4057612e3f61225a565b5b5f612e4d84828501612e17565b91505092915050565b5f819050919050565b5f612e79612e74612e6f84612e56565b612360565b6122bc565b9050919050565b612e8981612e5f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ec181612281565b82525050565b5f612ed28383612eb8565b60208301905092915050565b5f602082019050919050565b5f612ef482612e8f565b612efe8185612e99565b9350612f0983612ea9565b805f5b83811015612f39578151612f208882612ec7565b9750612f2b83612ede565b925050600181019050612f0c565b5085935050505092915050565b5f60a082019050612f595f8301886123d4565b612f666020830187612e80565b8181036040830152612f788186612eea565b9050612f87606083018561244c565b612f9460808301846123d4565b9695505050505050565b5f60c082019050612fb15f83018961244c565b612fbe60208301886123d4565b612fcb6040830187612e80565b612fd86060830186612e80565b612fe5608083018561244c565b612ff260a08301846123d4565b979650505050505050565b5f8151905061300b816122c5565b92915050565b5f805f606084860312156130285761302761225a565b5b5f61303586828701612ffd565b935050602061304686828701612ffd565b925050604061305786828701612ffd565b915050925092509256fea2646970667358221220de0636af65a1220c2b96bedc7c22807f2557e4178c93c60b5b8bb6496897e47e64736f6c634300081a0033

Deployed Bytecode Sourcemap

29007:8722:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6043:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6961:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29084:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6358:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7168:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29292:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6259:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7435:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29142:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29354:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29645:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29387:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6472:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11679:103;;;;;;;;;;;;;:::i;:::-;;32109:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29179:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11448:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6149:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7679:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6605:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31921:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29216:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32603:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29255:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29490:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6804:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29448:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11788:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31745:170;;;;;;;;;;;;;:::i;:::-;;6043:100;6097:13;6130:5;6123:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6043:100;:::o;6961:201::-;7044:4;7061:13;7077:12;:10;:12::i;:::-;7061:28;;7100:32;7109:5;7116:7;7125:6;7100:8;:32::i;:::-;7150:4;7143:11;;;6961:201;;;;:::o;29084:51::-;;;:::o;6358:108::-;6419:7;6446:12;;6439:19;;6358:108;:::o;7168:261::-;7265:4;7282:15;7300:12;:10;:12::i;:::-;7282:30;;7323:38;7339:4;7345:7;7354:6;7323:15;:38::i;:::-;7372:27;7382:4;7388:2;7392:6;7372:9;:27::i;:::-;7417:4;7410:11;;;7168:261;;;;;:::o;29292:53::-;29338:6;29292:53;:::o;6259:93::-;6317:5;6342:2;6335:9;;6259:93;:::o;7435:238::-;7523:4;7540:13;7556:12;:10;:12::i;:::-;7540:28;;7579:64;7588:5;7595:7;7632:10;7604:25;7614:5;7621:7;7604:9;:25::i;:::-;:38;;;;:::i;:::-;7579:8;:64::i;:::-;7661:4;7654:11;;;7435:238;;;;:::o;29142:28::-;;;;;;;;;;;;;:::o;29354:26::-;;;;;;;;;;;;;:::o;29645:28::-;;;;:::o;29387:23::-;;;;;;;;;;;;;:::o;6472:127::-;6546:7;6573:9;:18;6583:7;6573:18;;;;;;;;;;;;;;;;6566:25;;6472:127;;;:::o;11679:103::-;11409:13;:11;:13::i;:::-;11744:30:::1;11771:1;11744:18;:30::i;:::-;11679:103::o:0;32109:303::-;32196:12;:10;:12::i;:::-;32185:23;;:7;:5;:7::i;:::-;:23;;;32177:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32258:9;32253:156;32277:5;;:12;;32273:1;:16;32253:156;;;32322:13;;;;;;;;;;;32310:25;;:5;;32316:1;32310:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:25;;;32307:86;;32352:29;32365:5;;32371:1;32365:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;32375:5;32352:12;:29::i;:::-;32307:86;32291:3;;;;;;;32253:156;;;;32109:303;;;:::o;29179:30::-;;;;;;;;;;;;;:::o;11448:87::-;11494:7;11521:6;;;;;;;;;;;11514:13;;11448:87;:::o;6149:104::-;6205:13;6238:7;6231:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6149:104;:::o;7679:436::-;7772:4;7789:13;7805:12;:10;:12::i;:::-;7789:28;;7828:24;7855:25;7865:5;7872:7;7855:9;:25::i;:::-;7828:52;;7919:15;7899:16;:35;;7891:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8012:60;8021:5;8028:7;8056:15;8037:16;:34;8012:8;:60::i;:::-;8103:4;8096:11;;;;7679:436;;;;:::o;6605:193::-;6684:4;6701:13;6717:12;:10;:12::i;:::-;6701:28;;6740;6750:5;6757:2;6761:6;6740:9;:28::i;:::-;6786:4;6779:11;;;6605:193;;;;:::o;31921:182::-;11409:13;:11;:13::i;:::-;32037:8:::1;32006:19;:28;32026:7;32006:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32077:7;32061:34;;;32086:8;32061:34;;;;;;:::i;:::-;;;;;;;;31921:182:::0;;:::o;29216:32::-;;;;;;;;;;;;;:::o;32603:235::-;11409:13;:11;:13::i;:::-;32720:9:::1;32716:115;32739:8;;:15;;32735:1;:19;32716:115;;;32811:8;32776:19;:32;32796:8;;32805:1;32796:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;32776:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;32756:3;;;;;;;32716:115;;;;32603:235:::0;;;:::o;29255:30::-;;;;;;;;;;;;;:::o;29490:27::-;;;;:::o;6804:151::-;6893:7;6920:11;:18;6932:5;6920:18;;;;;;;;;;;;;;;:27;6939:7;6920:27;;;;;;;;;;;;;;;;6913:34;;6804:151;;;;:::o;29448:33::-;;;;:::o;11788:201::-;11409:13;:11;:13::i;:::-;11897:1:::1;11877:22;;:8;:22;;::::0;11869:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11953:28;11972:8;11953:18;:28::i;:::-;11788:201:::0;:::o;31745:170::-;11409:13;:11;:13::i;:::-;31804:14:::1;;;;;;;;;;;31803:15;31795:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;31874:4;31857:14;;:21;;;;;;;;;;;;;;;;;;31903:4;31889:11;;:18;;;;;;;;;;;;;;;;;;31745:170::o:0;5419:98::-;5472:7;5499:10;5492:17;;5419:98;:::o;10170:346::-;10289:1;10272:19;;:5;:19;;;10264:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10370:1;10351:21;;:7;:21;;;10343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10454:6;10424:11;:18;10436:5;10424:18;;;;;;;;;;;;;;;:27;10443:7;10424:27;;;;;;;;;;;;;;;:36;;;;10492:7;10476:32;;10485:5;10476:32;;;10501:6;10476:32;;;;;;:::i;:::-;;;;;;;;10170:346;;;:::o;10522:419::-;10623:24;10650:25;10660:5;10667:7;10650:9;:25::i;:::-;10623:52;;10710:17;10690:16;:37;10686:248;;10772:6;10752:16;:26;;10744:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10856:51;10865:5;10872:7;10900:6;10881:16;:25;10856:8;:51::i;:::-;10686:248;10612:329;10522:419;;;:::o;32846:2372::-;32994:1;32978:18;;:4;:18;;;32970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33071:1;33057:16;;:2;:16;;;33049:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33132:14;;;;;;;;;;;:43;;;;33150:19;:25;33170:4;33150:25;;;;;;;;;;;;;;;;;;;;;;;;;33132:43;:70;;;;33179:19;:23;33199:2;33179:23;;;;;;;;;;;;;;;;;;;;;;;;;33132:70;33124:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;33256:1;33246:6;:11;33242:93;;33274:28;33290:4;33296:2;33300:1;33274:15;:28::i;:::-;33317:7;;33242:93;33349:28;33380:24;33398:4;33380:9;:24::i;:::-;33349:55;;33417:12;33456:18;;33432:20;:42;;33417:57;;33505:7;:35;;;;;33529:11;;;;;;;;;;;33505:35;:70;;;;;33543:26;:32;33570:4;33543:32;;;;;;;;;;;;;;;;;;;;;;;;;33505:70;:82;;;;;33578:9;;;;;;;;;;;33577:10;33505:82;:124;;;;;33604:19;:25;33624:4;33604:25;;;;;;;;;;;;;;;;;;;;;;;;;33603:26;33505:124;:165;;;;;33647:19;:23;33667:2;33647:23;;;;;;;;;;;;;;;;;;;;;;;;;33646:24;33505:165;33487:300;;;33709:4;33697:9;;:16;;;;;;;;;;;;;;;;;;33730:11;:9;:11::i;:::-;33770:5;33758:9;;:17;;;;;;;;;;;;;;;;;;33487:300;33799:12;33815:9;;;;;;;;;;;33814:10;33799:25;;33841:19;:25;33861:4;33841:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33870:19;:23;33890:2;33870:23;;;;;;;;;;;;;;;;;;;;;;;;;33841:52;33837:100;;;33920:5;33910:15;;33837:100;33949:12;33982:7;33978:1187;;;34034:26;:30;34061:2;34034:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;34084:1;34068:13;;:17;34034:51;34030:986;;;34113:36;34143:5;34113:25;34124:13;;34113:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;34106:43;;34262:13;;34220:17;;34213:4;:24;;;;:::i;:::-;34212:63;;;;:::i;:::-;34168:19;;:107;;;;;;;:::i;:::-;;;;;;;;34388:13;;34346:17;;34339:4;:24;;;;:::i;:::-;34338:63;;;;:::i;:::-;34294:19;;:107;;;;;;;:::i;:::-;;;;;;;;34518:13;;34474:19;;34467:4;:26;;;;:::i;:::-;34466:65;;;;:::i;:::-;34420:21;;:111;;;;;;;:::i;:::-;;;;;;;;34030:986;;;34593:26;:32;34620:4;34593:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;34644:1;34629:12;;:16;34593:52;34589:427;;;34673:35;34702:5;34673:24;34684:12;;34673:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;34666:42;;34778:12;;34758:16;;34751:4;:23;;;;:::i;:::-;34750:40;;;;:::i;:::-;34727:19;;:63;;;;;;;:::i;:::-;;;;;;;;34860:12;;34840:16;;34833:4;:23;;;;:::i;:::-;34832:40;;;;:::i;:::-;34809:19;;:63;;;;;;;:::i;:::-;;;;;;;;34988:12;;34945:18;;34938:4;:25;;;;:::i;:::-;34937:63;;;;:::i;:::-;34891:21;;:109;;;;;;;:::i;:::-;;;;;;;;34589:427;34030:986;35043:1;35036:4;:8;35032:91;;;35065:42;35081:4;35095;35102;35065:15;:42::i;:::-;35032:91;35149:4;35139:14;;;;;:::i;:::-;;;33978:1187;35177:33;35193:4;35199:2;35203:6;35177:15;:33::i;:::-;32959:2259;;;;32846:2372;;;;:::o;11541:132::-;11616:12;:10;:12::i;:::-;11605:23;;:7;:5;:7::i;:::-;:23;;;11597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11541:132::o;11995:191::-;12069:16;12088:6;;;;;;;;;;;12069:25;;12114:8;12105:6;;:17;;;;;;;;;;;;;;;;;;12169:8;12138:40;;12159:8;12138:40;;;;;;;;;;;;12058:128;11995:191;:::o;32422:173::-;32524:5;32489:26;:32;32516:4;32489:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;32422:173;;:::o;8123:806::-;8236:1;8220:18;;:4;:18;;;8212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8313:1;8299:16;;:2;:16;;;8291:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8368:38;8389:4;8395:2;8399:6;8368:20;:38::i;:::-;8419:19;8441:9;:15;8451:4;8441:15;;;;;;;;;;;;;;;;8419:37;;8490:6;8475:11;:21;;8467:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8607:6;8593:11;:20;8575:9;:15;8585:4;8575:15;;;;;;;;;;;;;;;:38;;;;8810:6;8793:9;:13;8803:2;8793:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8860:2;8845:26;;8854:4;8845:26;;;8864:6;8845:26;;;;;;:::i;:::-;;;;;;;;8884:37;8904:4;8910:2;8914:6;8884:19;:37::i;:::-;8201:728;8123:806;;;:::o;36117:1607::-;36158:23;36184:24;36202:4;36184:9;:24::i;:::-;36158:50;;36219:25;36317:21;;36282:19;;36247;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;36219:119;;36349:12;36376:23;36490:1;36457:17;36421:19;;36403:15;:37;;;;:::i;:::-;36402:72;;;;:::i;:::-;:89;;;;:::i;:::-;36376:115;;36502:26;36531:36;36551:15;36531;:19;;:36;;;;:::i;:::-;36502:65;;36580:25;36608:21;36580:49;;36642:37;36660:18;36642:17;:37::i;:::-;36692:18;36713:44;36739:17;36713:21;:25;;:44;;;;:::i;:::-;36692:65;;36770:23;36796:82;36850:17;36796:35;36811:19;;36796:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;36770:108;;36891:25;36919:84;36975:17;36919:37;36934:21;;36919:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;36891:112;;37016:23;37099:17;37068:15;37042:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;37016:100;;37151:1;37129:19;:23;;;;37185:1;37163:19;:23;;;;37221:1;37197:21;:25;;;;37257:1;37239:15;:19;:42;;;;;37280:1;37262:15;:19;37239:42;37235:280;;;37298:47;37312:15;37329;37298:13;:47::i;:::-;37365:138;37398:18;37435:15;37469:19;;37365:138;;;;;;;;:::i;:::-;;;;;;;;37235:280;37549:17;;;;;;;;;;;37541:31;;37580:17;37541:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37527:75;;;;;37637:15;;;;;;;;;;;37629:29;;37680:21;37629:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37615:101;;;;;36147:1577;;;;;;;;;;36117:1607::o;19037:98::-;19095:7;19126:1;19122;:5;;;;:::i;:::-;19115:12;;19037:98;;;;:::o;19147:::-;19205:7;19236:1;19232;:5;;;;:::i;:::-;19225:12;;19147:98;;;;:::o;10947:91::-;;;;:::o;11044:90::-;;;;:::o;18927:98::-;18985:7;19016:1;19012;:5;;;;:::i;:::-;19005:12;;18927:98;;;;:::o;35226:503::-;35294:21;35332:1;35318:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35294:40;;35363:4;35345;35350:1;35345:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35389:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35379:4;35384:1;35379:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35424:62;35441:4;35456:15;35474:11;35424:8;:62::i;:::-;35525:15;:66;;;35606:11;35632:1;35648:4;35675;35695:15;35525:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35283:446;35226:503;:::o;35737:372::-;35820:62;35837:4;35852:15;35870:11;35820:8;:62::i;:::-;35895:15;:31;;;35934:9;35967:4;35987:11;36013:1;36029;36045:15;;;;;;;;;;;36075;35895:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35737:372;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:60::-;3367:3;3388:5;3381:12;;3339:60;;;:::o;3405:142::-;3455:9;3488:53;3506:34;3515:24;3533:5;3515:24;:::i;:::-;3506:34;:::i;:::-;3488:53;:::i;:::-;3475:66;;3405:142;;;:::o;3553:126::-;3603:9;3636:37;3667:5;3636:37;:::i;:::-;3623:50;;3553:126;;;:::o;3685:153::-;3762:9;3795:37;3826:5;3795:37;:::i;:::-;3782:50;;3685:153;;;:::o;3844:185::-;3958:64;4016:5;3958:64;:::i;:::-;3953:3;3946:77;3844:185;;:::o;4035:276::-;4155:4;4193:2;4182:9;4178:18;4170:26;;4206:98;4301:1;4290:9;4286:17;4277:6;4206:98;:::i;:::-;4035:276;;;;:::o;4317:118::-;4404:24;4422:5;4404:24;:::i;:::-;4399:3;4392:37;4317:118;;:::o;4441:222::-;4534:4;4572:2;4561:9;4557:18;4549:26;;4585:71;4653:1;4642:9;4638:17;4629:6;4585:71;:::i;:::-;4441:222;;;;:::o;4669:619::-;4746:6;4754;4762;4811:2;4799:9;4790:7;4786:23;4782:32;4779:119;;;4817:79;;:::i;:::-;4779:119;4937:1;4962:53;5007:7;4998:6;4987:9;4983:22;4962:53;:::i;:::-;4952:63;;4908:117;5064:2;5090:53;5135:7;5126:6;5115:9;5111:22;5090:53;:::i;:::-;5080:63;;5035:118;5192:2;5218:53;5263:7;5254:6;5243:9;5239:22;5218:53;:::i;:::-;5208:63;;5163:118;4669:619;;;;;:::o;5294:118::-;5381:24;5399:5;5381:24;:::i;:::-;5376:3;5369:37;5294:118;;:::o;5418:222::-;5511:4;5549:2;5538:9;5534:18;5526:26;;5562:71;5630:1;5619:9;5615:17;5606:6;5562:71;:::i;:::-;5418:222;;;;:::o;5646:86::-;5681:7;5721:4;5714:5;5710:16;5699:27;;5646:86;;;:::o;5738:112::-;5821:22;5837:5;5821:22;:::i;:::-;5816:3;5809:35;5738:112;;:::o;5856:214::-;5945:4;5983:2;5972:9;5968:18;5960:26;;5996:67;6060:1;6049:9;6045:17;6036:6;5996:67;:::i;:::-;5856:214;;;;:::o;6076:329::-;6135:6;6184:2;6172:9;6163:7;6159:23;6155:32;6152:119;;;6190:79;;:::i;:::-;6152:119;6310:1;6335:53;6380:7;6371:6;6360:9;6356:22;6335:53;:::i;:::-;6325:63;;6281:117;6076:329;;;;:::o;6411:117::-;6520:1;6517;6510:12;6534:117;6643:1;6640;6633:12;6657:117;6766:1;6763;6756:12;6797:568;6870:8;6880:6;6930:3;6923:4;6915:6;6911:17;6907:27;6897:122;;6938:79;;:::i;:::-;6897:122;7051:6;7038:20;7028:30;;7081:18;7073:6;7070:30;7067:117;;;7103:79;;:::i;:::-;7067:117;7217:4;7209:6;7205:17;7193:29;;7271:3;7263:4;7255:6;7251:17;7241:8;7237:32;7234:41;7231:128;;;7278:79;;:::i;:::-;7231:128;6797:568;;;;;:::o;7371:116::-;7441:21;7456:5;7441:21;:::i;:::-;7434:5;7431:32;7421:60;;7477:1;7474;7467:12;7421:60;7371:116;:::o;7493:133::-;7536:5;7574:6;7561:20;7552:29;;7590:30;7614:5;7590:30;:::i;:::-;7493:133;;;;:::o;7632:698::-;7724:6;7732;7740;7789:2;7777:9;7768:7;7764:23;7760:32;7757:119;;;7795:79;;:::i;:::-;7757:119;7943:1;7932:9;7928:17;7915:31;7973:18;7965:6;7962:30;7959:117;;;7995:79;;:::i;:::-;7959:117;8108:80;8180:7;8171:6;8160:9;8156:22;8108:80;:::i;:::-;8090:98;;;;7886:312;8237:2;8263:50;8305:7;8296:6;8285:9;8281:22;8263:50;:::i;:::-;8253:60;;8208:115;7632:698;;;;;:::o;8336:468::-;8401:6;8409;8458:2;8446:9;8437:7;8433:23;8429:32;8426:119;;;8464:79;;:::i;:::-;8426:119;8584:1;8609:53;8654:7;8645:6;8634:9;8630:22;8609:53;:::i;:::-;8599:63;;8555:117;8711:2;8737:50;8779:7;8770:6;8759:9;8755:22;8737:50;:::i;:::-;8727:60;;8682:115;8336:468;;;;;:::o;8810:474::-;8878:6;8886;8935:2;8923:9;8914:7;8910:23;8906:32;8903:119;;;8941:79;;:::i;:::-;8903:119;9061:1;9086:53;9131:7;9122:6;9111:9;9107:22;9086:53;:::i;:::-;9076:63;;9032:117;9188:2;9214:53;9259:7;9250:6;9239:9;9235:22;9214:53;:::i;:::-;9204:63;;9159:118;8810:474;;;;;:::o;9290:180::-;9338:77;9335:1;9328:88;9435:4;9432:1;9425:15;9459:4;9456:1;9449:15;9476:320;9520:6;9557:1;9551:4;9547:12;9537:22;;9604:1;9598:4;9594:12;9625:18;9615:81;;9681:4;9673:6;9669:17;9659:27;;9615:81;9743:2;9735:6;9732:14;9712:18;9709:38;9706:84;;9762:18;;:::i;:::-;9706:84;9527:269;9476:320;;;:::o;9802:180::-;9850:77;9847:1;9840:88;9947:4;9944:1;9937:15;9971:4;9968:1;9961:15;9988:191;10028:3;10047:20;10065:1;10047:20;:::i;:::-;10042:25;;10081:20;10099:1;10081:20;:::i;:::-;10076:25;;10124:1;10121;10117:9;10110:16;;10145:3;10142:1;10139:10;10136:36;;;10152:18;;:::i;:::-;10136:36;9988:191;;;;:::o;10185:182::-;10325:34;10321:1;10313:6;10309:14;10302:58;10185:182;:::o;10373:366::-;10515:3;10536:67;10600:2;10595:3;10536:67;:::i;:::-;10529:74;;10612:93;10701:3;10612:93;:::i;:::-;10730:2;10725:3;10721:12;10714:19;;10373:366;;;:::o;10745:419::-;10911:4;10949:2;10938:9;10934:18;10926:26;;10998:9;10992:4;10988:20;10984:1;10973:9;10969:17;10962:47;11026:131;11152:4;11026:131;:::i;:::-;11018:139;;10745:419;;;:::o;11170:180::-;11218:77;11215:1;11208:88;11315:4;11312:1;11305:15;11339:4;11336:1;11329:15;11356:224;11496:34;11492:1;11484:6;11480:14;11473:58;11565:7;11560:2;11552:6;11548:15;11541:32;11356:224;:::o;11586:366::-;11728:3;11749:67;11813:2;11808:3;11749:67;:::i;:::-;11742:74;;11825:93;11914:3;11825:93;:::i;:::-;11943:2;11938:3;11934:12;11927:19;;11586:366;;;:::o;11958:419::-;12124:4;12162:2;12151:9;12147:18;12139:26;;12211:9;12205:4;12201:20;12197:1;12186:9;12182:17;12175:47;12239:131;12365:4;12239:131;:::i;:::-;12231:139;;11958:419;;;:::o;12383:225::-;12523:34;12519:1;12511:6;12507:14;12500:58;12592:8;12587:2;12579:6;12575:15;12568:33;12383:225;:::o;12614:366::-;12756:3;12777:67;12841:2;12836:3;12777:67;:::i;:::-;12770:74;;12853:93;12942:3;12853:93;:::i;:::-;12971:2;12966:3;12962:12;12955:19;;12614:366;;;:::o;12986:419::-;13152:4;13190:2;13179:9;13175:18;13167:26;;13239:9;13233:4;13229:20;13225:1;13214:9;13210:17;13203:47;13267:131;13393:4;13267:131;:::i;:::-;13259:139;;12986:419;;;:::o;13411:173::-;13551:25;13547:1;13539:6;13535:14;13528:49;13411:173;:::o;13590:366::-;13732:3;13753:67;13817:2;13812:3;13753:67;:::i;:::-;13746:74;;13829:93;13918:3;13829:93;:::i;:::-;13947:2;13942:3;13938:12;13931:19;;13590:366;;;:::o;13962:419::-;14128:4;14166:2;14155:9;14151:18;14143:26;;14215:9;14209:4;14205:20;14201:1;14190:9;14186:17;14179:47;14243:131;14369:4;14243:131;:::i;:::-;14235:139;;13962:419;;;:::o;14387:223::-;14527:34;14523:1;14515:6;14511:14;14504:58;14596:6;14591:2;14583:6;14579:15;14572:31;14387:223;:::o;14616:366::-;14758:3;14779:67;14843:2;14838:3;14779:67;:::i;:::-;14772:74;;14855:93;14944:3;14855:93;:::i;:::-;14973:2;14968:3;14964:12;14957:19;;14616:366;;;:::o;14988:419::-;15154:4;15192:2;15181:9;15177:18;15169:26;;15241:9;15235:4;15231:20;15227:1;15216:9;15212:17;15205:47;15269:131;15395:4;15269:131;:::i;:::-;15261:139;;14988:419;;;:::o;15413:221::-;15553:34;15549:1;15541:6;15537:14;15530:58;15622:4;15617:2;15609:6;15605:15;15598:29;15413:221;:::o;15640:366::-;15782:3;15803:67;15867:2;15862:3;15803:67;:::i;:::-;15796:74;;15879:93;15968:3;15879:93;:::i;:::-;15997:2;15992:3;15988:12;15981:19;;15640:366;;;:::o;16012:419::-;16178:4;16216:2;16205:9;16201:18;16193:26;;16265:9;16259:4;16255:20;16251:1;16240:9;16236:17;16229:47;16293:131;16419:4;16293:131;:::i;:::-;16285:139;;16012:419;;;:::o;16437:179::-;16577:31;16573:1;16565:6;16561:14;16554:55;16437:179;:::o;16622:366::-;16764:3;16785:67;16849:2;16844:3;16785:67;:::i;:::-;16778:74;;16861:93;16950:3;16861:93;:::i;:::-;16979:2;16974:3;16970:12;16963:19;;16622:366;;;:::o;16994:419::-;17160:4;17198:2;17187:9;17183:18;17175:26;;17247:9;17241:4;17237:20;17233:1;17222:9;17218:17;17211:47;17275:131;17401:4;17275:131;:::i;:::-;17267:139;;16994:419;;;:::o;17419:224::-;17559:34;17555:1;17547:6;17543:14;17536:58;17628:7;17623:2;17615:6;17611:15;17604:32;17419:224;:::o;17649:366::-;17791:3;17812:67;17876:2;17871:3;17812:67;:::i;:::-;17805:74;;17888:93;17977:3;17888:93;:::i;:::-;18006:2;18001:3;17997:12;17990:19;;17649:366;;;:::o;18021:419::-;18187:4;18225:2;18214:9;18210:18;18202:26;;18274:9;18268:4;18264:20;18260:1;18249:9;18245:17;18238:47;18302:131;18428:4;18302:131;:::i;:::-;18294:139;;18021:419;;;:::o;18446:222::-;18586:34;18582:1;18574:6;18570:14;18563:58;18655:5;18650:2;18642:6;18638:15;18631:30;18446:222;:::o;18674:366::-;18816:3;18837:67;18901:2;18896:3;18837:67;:::i;:::-;18830:74;;18913:93;19002:3;18913:93;:::i;:::-;19031:2;19026:3;19022:12;19015:19;;18674:366;;;:::o;19046:419::-;19212:4;19250:2;19239:9;19235:18;19227:26;;19299:9;19293:4;19289:20;19285:1;19274:9;19270:17;19263:47;19327:131;19453:4;19327:131;:::i;:::-;19319:139;;19046:419;;;:::o;19471:174::-;19611:26;19607:1;19599:6;19595:14;19588:50;19471:174;:::o;19651:366::-;19793:3;19814:67;19878:2;19873:3;19814:67;:::i;:::-;19807:74;;19890:93;19979:3;19890:93;:::i;:::-;20008:2;20003:3;19999:12;19992:19;;19651:366;;;:::o;20023:419::-;20189:4;20227:2;20216:9;20212:18;20204:26;;20276:9;20270:4;20266:20;20262:1;20251:9;20247:17;20240:47;20304:131;20430:4;20304:131;:::i;:::-;20296:139;;20023:419;;;:::o;20448:410::-;20488:7;20511:20;20529:1;20511:20;:::i;:::-;20506:25;;20545:20;20563:1;20545:20;:::i;:::-;20540:25;;20600:1;20597;20593:9;20622:30;20640:11;20622:30;:::i;:::-;20611:41;;20801:1;20792:7;20788:15;20785:1;20782:22;20762:1;20755:9;20735:83;20712:139;;20831:18;;:::i;:::-;20712:139;20496:362;20448:410;;;;:::o;20864:180::-;20912:77;20909:1;20902:88;21009:4;21006:1;20999:15;21033:4;21030:1;21023:15;21050:185;21090:1;21107:20;21125:1;21107:20;:::i;:::-;21102:25;;21141:20;21159:1;21141:20;:::i;:::-;21136:25;;21180:1;21170:35;;21185:18;;:::i;:::-;21170:35;21227:1;21224;21220:9;21215:14;;21050:185;;;;:::o;21241:194::-;21281:4;21301:20;21319:1;21301:20;:::i;:::-;21296:25;;21335:20;21353:1;21335:20;:::i;:::-;21330:25;;21379:1;21376;21372:9;21364:17;;21403:1;21397:4;21394:11;21391:37;;;21408:18;;:::i;:::-;21391:37;21241:194;;;;:::o;21441:225::-;21581:34;21577:1;21569:6;21565:14;21558:58;21650:8;21645:2;21637:6;21633:15;21626:33;21441:225;:::o;21672:366::-;21814:3;21835:67;21899:2;21894:3;21835:67;:::i;:::-;21828:74;;21911:93;22000:3;21911:93;:::i;:::-;22029:2;22024:3;22020:12;22013:19;;21672:366;;;:::o;22044:419::-;22210:4;22248:2;22237:9;22233:18;22225:26;;22297:9;22291:4;22287:20;22283:1;22272:9;22268:17;22261:47;22325:131;22451:4;22325:131;:::i;:::-;22317:139;;22044:419;;;:::o;22469:442::-;22618:4;22656:2;22645:9;22641:18;22633:26;;22669:71;22737:1;22726:9;22722:17;22713:6;22669:71;:::i;:::-;22750:72;22818:2;22807:9;22803:18;22794:6;22750:72;:::i;:::-;22832;22900:2;22889:9;22885:18;22876:6;22832:72;:::i;:::-;22469:442;;;;;;:::o;22917:147::-;23018:11;23055:3;23040:18;;22917:147;;;;:::o;23070:114::-;;:::o;23190:398::-;23349:3;23370:83;23451:1;23446:3;23370:83;:::i;:::-;23363:90;;23462:93;23551:3;23462:93;:::i;:::-;23580:1;23575:3;23571:11;23564:18;;23190:398;;;:::o;23594:379::-;23778:3;23800:147;23943:3;23800:147;:::i;:::-;23793:154;;23964:3;23957:10;;23594:379;;;:::o;23979:180::-;24027:77;24024:1;24017:88;24124:4;24121:1;24114:15;24148:4;24145:1;24138:15;24165:143;24222:5;24253:6;24247:13;24238:22;;24269:33;24296:5;24269:33;:::i;:::-;24165:143;;;;:::o;24314:351::-;24384:6;24433:2;24421:9;24412:7;24408:23;24404:32;24401:119;;;24439:79;;:::i;:::-;24401:119;24559:1;24584:64;24640:7;24631:6;24620:9;24616:22;24584:64;:::i;:::-;24574:74;;24530:128;24314:351;;;;:::o;24671:85::-;24716:7;24745:5;24734:16;;24671:85;;;:::o;24762:158::-;24820:9;24853:61;24871:42;24880:32;24906:5;24880:32;:::i;:::-;24871:42;:::i;:::-;24853:61;:::i;:::-;24840:74;;24762:158;;;:::o;24926:147::-;25021:45;25060:5;25021:45;:::i;:::-;25016:3;25009:58;24926:147;;:::o;25079:114::-;25146:6;25180:5;25174:12;25164:22;;25079:114;;;:::o;25199:184::-;25298:11;25332:6;25327:3;25320:19;25372:4;25367:3;25363:14;25348:29;;25199:184;;;;:::o;25389:132::-;25456:4;25479:3;25471:11;;25509:4;25504:3;25500:14;25492:22;;25389:132;;;:::o;25527:108::-;25604:24;25622:5;25604:24;:::i;:::-;25599:3;25592:37;25527:108;;:::o;25641:179::-;25710:10;25731:46;25773:3;25765:6;25731:46;:::i;:::-;25809:4;25804:3;25800:14;25786:28;;25641:179;;;;:::o;25826:113::-;25896:4;25928;25923:3;25919:14;25911:22;;25826:113;;;:::o;25975:732::-;26094:3;26123:54;26171:5;26123:54;:::i;:::-;26193:86;26272:6;26267:3;26193:86;:::i;:::-;26186:93;;26303:56;26353:5;26303:56;:::i;:::-;26382:7;26413:1;26398:284;26423:6;26420:1;26417:13;26398:284;;;26499:6;26493:13;26526:63;26585:3;26570:13;26526:63;:::i;:::-;26519:70;;26612:60;26665:6;26612:60;:::i;:::-;26602:70;;26458:224;26445:1;26442;26438:9;26433:14;;26398:284;;;26402:14;26698:3;26691:10;;26099:608;;;25975:732;;;;:::o;26713:831::-;26976:4;27014:3;27003:9;26999:19;26991:27;;27028:71;27096:1;27085:9;27081:17;27072:6;27028:71;:::i;:::-;27109:80;27185:2;27174:9;27170:18;27161:6;27109:80;:::i;:::-;27236:9;27230:4;27226:20;27221:2;27210:9;27206:18;27199:48;27264:108;27367:4;27358:6;27264:108;:::i;:::-;27256:116;;27382:72;27450:2;27439:9;27435:18;27426:6;27382:72;:::i;:::-;27464:73;27532:3;27521:9;27517:19;27508:6;27464:73;:::i;:::-;26713:831;;;;;;;;:::o;27550:807::-;27799:4;27837:3;27826:9;27822:19;27814:27;;27851:71;27919:1;27908:9;27904:17;27895:6;27851:71;:::i;:::-;27932:72;28000:2;27989:9;27985:18;27976:6;27932:72;:::i;:::-;28014:80;28090:2;28079:9;28075:18;28066:6;28014:80;:::i;:::-;28104;28180:2;28169:9;28165:18;28156:6;28104:80;:::i;:::-;28194:73;28262:3;28251:9;28247:19;28238:6;28194:73;:::i;:::-;28277;28345:3;28334:9;28330:19;28321:6;28277:73;:::i;:::-;27550:807;;;;;;;;;:::o;28363:143::-;28420:5;28451:6;28445:13;28436:22;;28467:33;28494:5;28467:33;:::i;:::-;28363:143;;;;:::o;28512:663::-;28600:6;28608;28616;28665:2;28653:9;28644:7;28640:23;28636:32;28633:119;;;28671:79;;:::i;:::-;28633:119;28791:1;28816:64;28872:7;28863:6;28852:9;28848:22;28816:64;:::i;:::-;28806:74;;28762:128;28929:2;28955:64;29011:7;29002:6;28991:9;28987:22;28955:64;:::i;:::-;28945:74;;28900:129;29068:2;29094:64;29150:7;29141:6;29130:9;29126:22;29094:64;:::i;:::-;29084:74;;29039:129;28512:663;;;;;:::o

Swarm Source

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

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