ETH Price: $3,228.23 (+1.79%)

Token

Technium (ONE)
 

Overview

Max Total Supply

100,000,000 ONE

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,406.071353680682859269 ONE

Value
$0.00
0xdd30235DC68011F4de01A5c4059fC20145D5c874
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:
Technium

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-05
*/

// SPDX-License-Identifier: MIT

// TG - https://t.me/TechniumOne

// Website - www.technium.one

// Do not buy until the contract has been checked and declared safe to buy on our telegram page. 

// Any wallets buying before this will be blacklisted.

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata, Ownable {
    using SafeMath for uint256;
    using Address for address;
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    mapping(address => bool) public blackList;
    IUniswapV2Router02 public uniswapV2Router;
    address public liquidityAddress;
    bool public swapAndLiquifyEnabled = true;

    address public feeWallet = address(this);
    address public marketingWallet = 0x1Ac252bc2613359a11555354F579Bceaec283ca4;
    uint256 public _maxWalletAmount = 500000 * 10 ** 18;
    uint256 public numTokensSellToAddToLiquidity = 100000 * 10 ** 18;
    uint256 public _buyTaxFee = 80;
    uint256 public _sellTaxFee = 80;
    uint256 public _marketingTaxFee = 880;
    uint256 public constant PERCENTS_DIVIDER = 1000;
    bool public isSwapEnabled = true;
    bool public currentStateSwap = true;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedMaxWallet;
    mapping(address => bool) public ammPairs;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived);
    event SwapAndLiquifyLp(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    function _initializeToken(
        string memory _mname,
        string memory _msymbol,
        uint8 _mdecimals,
        uint256 _mamount
    ) internal {
        _name = _mname;
        _symbol = _msymbol;
        _decimals = _mdecimals;
        _mint(owner(), _mamount);

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        // Create a uniswap pair for this new token
        liquidityAddress = address(this); //  IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        ammPairs[liquidityAddress] = true;
        _isExcludedMaxWallet[owner()] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _transfer(sender, recipient, amount);
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }
        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!blackList[sender], "ERC20: transfer to the black list address");
        require(!blackList[recipient], "ERC20: transfer to the black list address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(_balances[sender] >= amount, "ERC20: transfer amount exceeds balance");
        _beforeTokenTransfer(sender, recipient, amount);

        if (!ammPairs[recipient] && !_isExcludedMaxWallet[sender] && !_isExcludedMaxWallet[recipient]) {
            require(
                (balanceOf(recipient) + amount) <= _maxWalletAmount,
                "Transfer amount exceeds the maxWalletAmount."
            );
        }

        bool takeFee = false;
        if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
            takeFee = true;
        }
        bool isBuy = ammPairs[sender];
        bool isSell = ammPairs[recipient];
        if (isBuy || isSell) {
            require(isSwapEnabled, "swap not enabled");
        }

        if (takeFee) {
            uint256 _fee = 0;

            if (isBuy) {
                _fee = amount.mul(_buyTaxFee).div(1000);
            } else if (isSell) {
                _fee = amount.mul(_sellTaxFee).div(1000);
            }
            uint256 amountAfterFee = amount.sub(_fee);
            _balances[feeWallet] += _fee;
            _balances[sender] -= amount;
            _balances[recipient] += amountAfterFee;
        } else {
            _balances[sender] -= amount;
            _balances[recipient] += amount;
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        bool overMinTokenBalance = _balances[address(this)] >= numTokensSellToAddToLiquidity;

        if (
            overMinTokenBalance &&
            !ammPairs[sender] &&
            !ammPairs[recipient] &&
            swapAndLiquifyEnabled &&
            currentStateSwap
        ) {
            //swap fee
            swapAndLiquifyForMKT(numTokensSellToAddToLiquidity.mul(_marketingTaxFee).div(1000));
        }
        if (
            overMinTokenBalance &&
            !ammPairs[sender] &&
            !ammPairs[recipient] &&
            swapAndLiquifyEnabled &&
            !currentStateSwap
        ) {
            //swap fee
            swapAndLiquifyLp(numTokensSellToAddToLiquidity.sub(numTokensSellToAddToLiquidity.mul(_marketingTaxFee).div(1000)));
        }
        currentStateSwap = !currentStateSwap;

        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}


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

    function excludedFromFee(address[] memory account, bool _excluded) public onlyOwner {
        for (uint256 index = 0; index < account.length; index++) {
            _isExcludedFromFee[account[index]] = _excluded;
        }
    }

    function managerAmmPairs(address pair, bool isAdd) public onlyOwner {
        ammPairs[pair] = isAdd;
    }

    function excludeMaxWallet(address account, bool isBool) public onlyOwner {
        _isExcludedMaxWallet[account] = isBool;
    }

    function isExcludeMaxWallet(address account) public view returns (bool) {
        return _isExcludedMaxWallet[account];
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
    }

    function setMarketingFeePercent(uint256 _marketingFee) external onlyOwner {
        _marketingTaxFee = _marketingFee;
    }

    function setMaxWalletPercent(uint256 _maxWalletPercent) external onlyOwner {
        _maxWalletAmount = _totalSupply.mul(_maxWalletPercent).div(10 ** 3);
    }

    function turnOnOffSwap(bool _isBool) public onlyOwner {
        isSwapEnabled = _isBool;
    }

    function setTaxFeePercent(
        uint256 buyTaxFee,
        uint256 sellTaxFee
    ) external onlyOwner {
        if (buyTaxFee > 0) {
            _buyTaxFee = buyTaxFee;
        }
        if (sellTaxFee > 0) {
            _sellTaxFee = sellTaxFee;
        }
    }

    function setBlackList(address _user, bool _block) public onlyOwner {
        blackList[_user] = _block;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setNumTokensSellToAddToLiquidity(uint256 _amount) public onlyOwner {
        numTokensSellToAddToLiquidity = _amount;
    }

    function swapAndLiquifyForMKT(uint256 contractTokenBalance) private {
        swapTokensForEth(contractTokenBalance, marketingWallet);
    }

    function swapAndLiquifyLp(uint256 contractTokenBalance) private {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half, address(this));
        // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquifyLp(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount, address targetAddress) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            targetAddress,
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    /**
     * @dev Withdraw bnb from this contract (Callable by owner only)
     */
    function handleForfeitedBalance(
        address coinAddress,
        uint256 value,
        address payable to
    ) public onlyOwner {
        if (coinAddress == address(0)) {
            return to.transfer(value);
        }
        if (coinAddress == address(this)) {
            return _transfer(address(this), to, value);
        }
        IERC20(coinAddress).transfer(to, value);
    }
    receive() external payable {}
}

contract Technium is ERC20 {
    uint256 maxSupply = 100000000 * 10 ** 18;

    constructor () {
        _initializeToken("Technium", "ONE", 18, maxSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifyLp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PERCENTS_DIVIDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStateSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBool","type":"bool"}],"name":"excludeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"excludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"coinAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"handleForfeitedBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludeMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"isAdd","type":"bool"}],"name":"managerAmmPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_block","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellTaxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBool","type":"bool"}],"name":"turnOnOffSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600960146101000a81548160ff02191690831515021790555030600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731ac252bc2613359a11555354f579bceaec283ca4600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506969e10de76676d0800000600c5569152d02c7e14af6800000600d556050600e556050600f556103706010556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506a52b7d2dcc80cd2e40000006015553480156200013357600080fd5b506200015462000148620001db60201b60201c565b620001e360201b60201c565b620001d56040518060400160405280600881526020017f546563686e69756d0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f4e4500000000000000000000000000000000000000000000000000000000008152506012601554620002a760201b60201c565b6200094c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8360049080519060200190620002bf929190620006fe565b508260059080519060200190620002d8929190620006fe565b5081600660006101000a81548160ff021916908360ff16021790555062000315620003086200055160201b60201c565b826200057a60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360006200043b6200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000620004a26200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e49062000801565b60405180910390fd5b6200060160008383620006f460201b60201c565b806003600082825462000615919062000851565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200066d919062000851565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006d4919062000823565b60405180910390a3620006f060008383620006f960201b60201c565b5050565b505050565b505050565b8280546200070c90620008b8565b90600052602060002090601f0160209004810192826200073057600085556200077c565b82601f106200074b57805160ff19168380011785556200077c565b828001600101855582156200077c579182015b828111156200077b5782518255916020019190600101906200075e565b5b5090506200078b91906200078f565b5090565b5b80821115620007aa57600081600090555060010162000790565b5090565b6000620007bd601f8362000840565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620007fb81620008ae565b82525050565b600060208201905081810360008301526200081c81620007ae565b9050919050565b60006020820190506200083a6000830184620007f0565b92915050565b600082825260208201905092915050565b60006200085e82620008ae565b91506200086b83620008ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008a357620008a2620008ee565b5b828201905092915050565b6000819050919050565b60006002820490506001821680620008d157607f821691505b60208210811415620008e857620008e76200091d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6141c2806200095c6000396000f3fe6080604052600436106102605760003560e01c80635d098b3811610144578063a72905a2116100b6578063d12a76881161007a578063d12a76881461092d578063dd62ed3e14610958578063efcc52de14610995578063f0f165af146109c0578063f25f4b56146109e9578063f2fde38b14610a1457610267565b8063a72905a214610838578063a9059cbb14610875578063b3fbe3d8146108b2578063c49b9a80146108db578063cca44fc81461090457610267565b806375f0a8741161010857806375f0a8741461072657806382bf293c146107515780638da5cb5b1461077a57806395d89b41146107a55780639fa71254146107d0578063a457c2d7146107fb57610267565b80635d098b381461065557806368092bd91461067e5780636c0a24eb146106a757806370a08231146106d2578063715018a61461070f57610267565b8063313ce567116101dd5780634838d165116101a15780634838d165146105335780634a74bb02146105705780634e5146321461059b5780634e6f5b60146105c6578063525bf097146105ef5780635342acb41461061857610267565b8063313ce5671461044c5780633221c93f14610477578063351a964d146104a257806339509351146104cd578063457c194c1461050a57610267565b806318160ddd1161022457806318160ddd146103535780631e89dbbe1461037e578063200a692d146103bb57806323b872dd146103e657806330b263ba1461042357610267565b806301c234a81461026c57806306fdde0314610297578063095ea7b3146102c25780630c77a8f6146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a3d565b60405161028e9190613c54565b60405180910390f35b3480156102a357600080fd5b506102ac610a43565b6040516102b99190613a92565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e491906131c9565b610ad5565b6040516102f69190613a5c565b60405180910390f35b34801561030b57600080fd5b506103266004803603810190610321919061318d565b610af3565b005b34801561033457600080fd5b5061033d610bca565b60405161034a9190613a77565b60405180910390f35b34801561035f57600080fd5b50610368610bf0565b6040516103759190613c54565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a091906130b0565b610bfa565b6040516103b29190613a5c565b60405180910390f35b3480156103c757600080fd5b506103d0610c50565b6040516103dd9190613c54565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061313e565b610c56565b60405161041a9190613a5c565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613323565b610d4d565b005b34801561045857600080fd5b50610461610def565b60405161046e9190613d00565b60405180910390f35b34801561048357600080fd5b5061048c610e06565b60405161049991906139b7565b60405180910390f35b3480156104ae57600080fd5b506104b7610e2c565b6040516104c49190613a5c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906131c9565b610e3f565b6040516105019190613a5c565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c91906132fa565b610eeb565b005b34801561053f57600080fd5b5061055a600480360381019061055591906130b0565b610f71565b6040516105679190613a5c565b60405180910390f35b34801561057c57600080fd5b50610585610f91565b6040516105929190613a5c565b60405180910390f35b3480156105a757600080fd5b506105b0610fa4565b6040516105bd9190613c54565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190613205565b610faa565b005b3480156105fb57600080fd5b50610616600480360381019061061191906132a8565b61117f565b005b34801561062457600080fd5b5061063f600480360381019061063a91906130b0565b611218565b60405161064c9190613a5c565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906130b0565b61126e565b005b34801561068a57600080fd5b506106a560048036038101906106a0919061318d565b61132e565b005b3480156106b357600080fd5b506106bc611405565b6040516106c99190613c54565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906130b0565b61140b565b6040516107069190613c54565b60405180910390f35b34801561071b57600080fd5b50610724611454565b005b34801561073257600080fd5b5061073b6114dc565b60405161074891906139b7565b60405180910390f35b34801561075d57600080fd5b50610778600480360381019061077391906132fa565b611502565b005b34801561078657600080fd5b5061078f6115b0565b60405161079c91906139b7565b60405180910390f35b3480156107b157600080fd5b506107ba6115d9565b6040516107c79190613a92565b60405180910390f35b3480156107dc57600080fd5b506107e561166b565b6040516107f29190613a5c565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d91906131c9565b61167e565b60405161082f9190613a5c565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a91906130b0565b611769565b60405161086c9190613a5c565b60405180910390f35b34801561088157600080fd5b5061089c600480360381019061089791906131c9565b611789565b6040516108a99190613a5c565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d4919061318d565b6117a7565b005b3480156108e757600080fd5b5061090260048036038101906108fd91906132a8565b61187e565b005b34801561091057600080fd5b5061092b60048036038101906109269190613254565b61194e565b005b34801561093957600080fd5b50610942611a85565b60405161094f9190613c54565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a9190613102565b611a8b565b60405161098c9190613c54565b60405180910390f35b3480156109a157600080fd5b506109aa611b12565b6040516109b79190613c54565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e291906132fa565b611b18565b005b3480156109f557600080fd5b506109fe611b9e565b604051610a0b91906139b7565b60405180910390f35b348015610a2057600080fd5b50610a3b6004803603810190610a3691906130b0565b611bc4565b005b6103e881565b606060048054610a5290613fe8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7e90613fe8565b8015610acb5780601f10610aa057610100808354040283529160200191610acb565b820191906000526020600020905b815481529060010190602001808311610aae57829003601f168201915b5050505050905090565b6000610ae9610ae2611cbc565b8484611cc4565b6001905092915050565b610afb611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610b196115b0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6690613b74565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca2611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613b54565b60405180910390fd5b610d2d858585611e8f565b610d4185610d39611cbc565b858403611cc4565b60019150509392505050565b610d55611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610d736115b0565b73ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613b74565b60405180910390fd5b6000821115610dda5781600e819055505b6000811115610deb5780600f819055505b5050565b6000600660009054906101000a900460ff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000610ee1610e4c611cbc565b848460026000610e5a611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610edc9190613dcd565b611cc4565b6001905092915050565b610ef3611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610f116115b0565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90613b74565b60405180910390fd5b8060108190555050565b60076020528060005260406000206000915054906101000a900460ff1681565b600960149054906101000a900460ff1681565b60105481565b610fb2611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610fd06115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90613b74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110a7578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156110a1573d6000803e3d6000fd5b5061117a565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110eb576110e6308284611e8f565b61117a565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b81526004016111269291906139d2565b602060405180830381600087803b15801561114057600080fd5b505af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906132d1565b505b505050565b611187611cbc565b73ffffffffffffffffffffffffffffffffffffffff166111a56115b0565b73ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613b74565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611276611cbc565b73ffffffffffffffffffffffffffffffffffffffff166112946115b0565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613b74565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611336611cbc565b73ffffffffffffffffffffffffffffffffffffffff166113546115b0565b73ffffffffffffffffffffffffffffffffffffffff16146113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a190613b74565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61145c611cbc565b73ffffffffffffffffffffffffffffffffffffffff1661147a6115b0565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613b74565b60405180910390fd5b6114da60006129ee565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61150a611cbc565b73ffffffffffffffffffffffffffffffffffffffff166115286115b0565b73ffffffffffffffffffffffffffffffffffffffff161461157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590613b74565b60405180910390fd5b6115a76103e861159983600354612ab290919063ffffffff16565b612ac890919063ffffffff16565b600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546115e890613fe8565b80601f016020809104026020016040519081016040528092919081815260200182805461161490613fe8565b80156116615780601f1061163657610100808354040283529160200191611661565b820191906000526020600020905b81548152906001019060200180831161164457829003601f168201915b5050505050905090565b601160019054906101000a900460ff1681565b6000806002600061168d611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174190613c34565b60405180910390fd5b61175e611755611cbc565b85858403611cc4565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600061179d611796611cbc565b8484611e8f565b6001905092915050565b6117af611cbc565b73ffffffffffffffffffffffffffffffffffffffff166117cd6115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613b74565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611886611cbc565b73ffffffffffffffffffffffffffffffffffffffff166118a46115b0565b73ffffffffffffffffffffffffffffffffffffffff16146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613b74565b60405180910390fd5b80600960146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516119439190613a5c565b60405180910390a150565b611956611cbc565b73ffffffffffffffffffffffffffffffffffffffff166119746115b0565b73ffffffffffffffffffffffffffffffffffffffff16146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190613b74565b60405180910390fd5b60005b8251811015611a80578160126000858481518110611a14577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a789061401a565b9150506119cd565b505050565b600d5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611b20611cbc565b73ffffffffffffffffffffffffffffffffffffffff16611b3e6115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90613b74565b60405180910390fd5b80600d8190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bcc611cbc565b73ffffffffffffffffffffffffffffffffffffffff16611bea6115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790613b74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca790613ad4565b60405180910390fd5b611cb9816129ee565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90613bf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90613af4565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e829190613c54565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef690613bb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690613ab4565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff390613b34565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090613b34565b60405180910390fd5b600081116120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613b94565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590613b14565b60405180910390fd5b612159838383612ade565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121fd5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122535750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122b157600c54816122658461140b565b61226f9190613dcd565b11156122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790613bd4565b60405180910390fd5b5b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123575750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561236157600190505b6000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061240c5750805b1561246157601160009054906101000a900460ff16612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790613c14565b60405180910390fd5b5b8215612614576000821561249f576124986103e861248a600e5488612ab290919063ffffffff16565b612ac890919063ffffffff16565b90506124d2565b81156124d1576124ce6103e86124c0600f5488612ab290919063ffffffff16565b612ac890919063ffffffff16565b90505b5b60006124e78287612ae390919063ffffffff16565b90508160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255a9190613dcd565b9250508190555085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b09190613eae565b9250508190555080600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126069190613dcd565b9250508190555050506126c1565b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126639190613eae565b9250508190555083600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b99190613dcd565b925050819055505b6000600d54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101590508080156127615750601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127b75750601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127cf5750600960149054906101000a900460ff165b80156127e75750601160019054906101000a900460ff165b156128205761281f61281a6103e861280c601054600d54612ab290919063ffffffff16565b612ac890919063ffffffff16565b612af9565b5b8080156128775750601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128cd5750601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128e55750600960149054906101000a900460ff165b80156128fe5750601160019054906101000a900460ff16155b1561294b5761294a6129456129346103e8612926601054600d54612ab290919063ffffffff16565b612ac890919063ffffffff16565b600d54612ae390919063ffffffff16565b612b28565b5b601160019054906101000a900460ff1615601160016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129d29190613c54565b60405180910390a36129e5878787612bc9565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612ac09190613e54565b905092915050565b60008183612ad69190613e23565b905092915050565b505050565b60008183612af19190613eae565b905092915050565b612b2581600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612bce565b50565b6000612b3e600283612ac890919063ffffffff16565b90506000612b558284612ae390919063ffffffff16565b90506000479050612b668330612bce565b6000612b7b8247612ae390919063ffffffff16565b9050612b878382612e93565b7f80e6caad6fd8c3ee999cba473f7f22f7dd9264c2068b7b1a285f780397bdf791848285604051612bba93929190613cc9565b60405180910390a15050505050565b505050565b6000600267ffffffffffffffff811115612c11577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612c3f5781602001602082028036833780820191505090505b5090503081600081518110612c7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1f57600080fd5b505afa158015612d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5791906130d9565b81600181518110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612df830600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611cc4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401612e5c959493929190613c6f565b600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b50505050505050565b612ec030600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cc4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612f0c6115b0565b426040518863ffffffff1660e01b8152600401612f2e969594939291906139fb565b6060604051808303818588803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f80919061335f565b5050505050565b6000612f9a612f9584613d4c565b613d1b565b90508083825260208201905082856020860282011115612fb957600080fd5b60005b85811015612fe95781612fcf8882612ff3565b845260208401935060208301925050600181019050612fbc565b5050509392505050565b60008135905061300281614130565b92915050565b60008151905061301781614130565b92915050565b60008135905061302c81614147565b92915050565b600082601f83011261304357600080fd5b8135613053848260208601612f87565b91505092915050565b60008135905061306b8161415e565b92915050565b6000815190506130808161415e565b92915050565b60008135905061309581614175565b92915050565b6000815190506130aa81614175565b92915050565b6000602082840312156130c257600080fd5b60006130d084828501612ff3565b91505092915050565b6000602082840312156130eb57600080fd5b60006130f984828501613008565b91505092915050565b6000806040838503121561311557600080fd5b600061312385828601612ff3565b925050602061313485828601612ff3565b9150509250929050565b60008060006060848603121561315357600080fd5b600061316186828701612ff3565b935050602061317286828701612ff3565b925050604061318386828701613086565b9150509250925092565b600080604083850312156131a057600080fd5b60006131ae85828601612ff3565b92505060206131bf8582860161305c565b9150509250929050565b600080604083850312156131dc57600080fd5b60006131ea85828601612ff3565b92505060206131fb85828601613086565b9150509250929050565b60008060006060848603121561321a57600080fd5b600061322886828701612ff3565b935050602061323986828701613086565b925050604061324a8682870161301d565b9150509250925092565b6000806040838503121561326757600080fd5b600083013567ffffffffffffffff81111561328157600080fd5b61328d85828601613032565b925050602061329e8582860161305c565b9150509250929050565b6000602082840312156132ba57600080fd5b60006132c88482850161305c565b91505092915050565b6000602082840312156132e357600080fd5b60006132f184828501613071565b91505092915050565b60006020828403121561330c57600080fd5b600061331a84828501613086565b91505092915050565b6000806040838503121561333657600080fd5b600061334485828601613086565b925050602061335585828601613086565b9150509250929050565b60008060006060848603121561337457600080fd5b60006133828682870161309b565b93505060206133938682870161309b565b92505060406133a48682870161309b565b9150509250925092565b60006133ba83836133d5565b60208301905092915050565b6133cf81613f49565b82525050565b6133de81613ee2565b82525050565b6133ed81613ee2565b82525050565b60006133fe82613d88565b6134088185613dab565b935061341383613d78565b8060005b8381101561344457815161342b88826133ae565b975061343683613d9e565b925050600181019050613417565b5085935050505092915050565b61345a81613f06565b82525050565b61346981613f5b565b82525050565b61347881613f7f565b82525050565b600061348982613d93565b6134938185613dbc565b93506134a3818560208601613fb5565b6134ac8161411f565b840191505092915050565b60006134c4602383613dbc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352a602683613dbc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613590602283613dbc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135f6602683613dbc565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061365c602983613dbc565b91507f45524332303a207472616e7366657220746f2074686520626c61636b206c697360008301527f74206164647265737300000000000000000000000000000000000000000000006020830152604082019050919050565b60006136c2602883613dbc565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613728602083613dbc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613768602983613dbc565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137ce602583613dbc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613834602c83613dbc565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785760008301527f616c6c6574416d6f756e742e00000000000000000000000000000000000000006020830152604082019050919050565b600061389a602483613dbc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613900601083613dbc565b91507f73776170206e6f7420656e61626c6564000000000000000000000000000000006000830152602082019050919050565b6000613940602583613dbc565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6139a281613f32565b82525050565b6139b181613f3c565b82525050565b60006020820190506139cc60008301846133e4565b92915050565b60006040820190506139e760008301856133c6565b6139f46020830184613999565b9392505050565b600060c082019050613a1060008301896133e4565b613a1d6020830188613999565b613a2a604083018761346f565b613a37606083018661346f565b613a4460808301856133e4565b613a5160a0830184613999565b979650505050505050565b6000602082019050613a716000830184613451565b92915050565b6000602082019050613a8c6000830184613460565b92915050565b60006020820190508181036000830152613aac818461347e565b905092915050565b60006020820190508181036000830152613acd816134b7565b9050919050565b60006020820190508181036000830152613aed8161351d565b9050919050565b60006020820190508181036000830152613b0d81613583565b9050919050565b60006020820190508181036000830152613b2d816135e9565b9050919050565b60006020820190508181036000830152613b4d8161364f565b9050919050565b60006020820190508181036000830152613b6d816136b5565b9050919050565b60006020820190508181036000830152613b8d8161371b565b9050919050565b60006020820190508181036000830152613bad8161375b565b9050919050565b60006020820190508181036000830152613bcd816137c1565b9050919050565b60006020820190508181036000830152613bed81613827565b9050919050565b60006020820190508181036000830152613c0d8161388d565b9050919050565b60006020820190508181036000830152613c2d816138f3565b9050919050565b60006020820190508181036000830152613c4d81613933565b9050919050565b6000602082019050613c696000830184613999565b92915050565b600060a082019050613c846000830188613999565b613c91602083018761346f565b8181036040830152613ca381866133f3565b9050613cb260608301856133e4565b613cbf6080830184613999565b9695505050505050565b6000606082019050613cde6000830186613999565b613ceb6020830185613999565b613cf86040830184613999565b949350505050565b6000602082019050613d1560008301846139a8565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613d4257613d416140f0565b5b8060405250919050565b600067ffffffffffffffff821115613d6757613d666140f0565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613dd882613f32565b9150613de383613f32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1857613e17614063565b5b828201905092915050565b6000613e2e82613f32565b9150613e3983613f32565b925082613e4957613e48614092565b5b828204905092915050565b6000613e5f82613f32565b9150613e6a83613f32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ea357613ea2614063565b5b828202905092915050565b6000613eb982613f32565b9150613ec483613f32565b925082821015613ed757613ed6614063565b5b828203905092915050565b6000613eed82613f12565b9050919050565b6000613eff82613f12565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613f5482613f91565b9050919050565b6000613f6682613f6d565b9050919050565b6000613f7882613f12565b9050919050565b6000613f8a82613f32565b9050919050565b6000613f9c82613fa3565b9050919050565b6000613fae82613f12565b9050919050565b60005b83811015613fd3578082015181840152602081019050613fb8565b83811115613fe2576000848401525b50505050565b6000600282049050600182168061400057607f821691505b60208210811415614014576140136140c1565b5b50919050565b600061402582613f32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561405857614057614063565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61413981613ee2565b811461414457600080fd5b50565b61415081613ef4565b811461415b57600080fd5b50565b61416781613f06565b811461417257600080fd5b50565b61417e81613f32565b811461418957600080fd5b5056fea2646970667358221220ab73d6bcb4c61d010dffa2bece335c7b3c22533bf18434a4f7cc5fcefa24528c64736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80635d098b3811610144578063a72905a2116100b6578063d12a76881161007a578063d12a76881461092d578063dd62ed3e14610958578063efcc52de14610995578063f0f165af146109c0578063f25f4b56146109e9578063f2fde38b14610a1457610267565b8063a72905a214610838578063a9059cbb14610875578063b3fbe3d8146108b2578063c49b9a80146108db578063cca44fc81461090457610267565b806375f0a8741161010857806375f0a8741461072657806382bf293c146107515780638da5cb5b1461077a57806395d89b41146107a55780639fa71254146107d0578063a457c2d7146107fb57610267565b80635d098b381461065557806368092bd91461067e5780636c0a24eb146106a757806370a08231146106d2578063715018a61461070f57610267565b8063313ce567116101dd5780634838d165116101a15780634838d165146105335780634a74bb02146105705780634e5146321461059b5780634e6f5b60146105c6578063525bf097146105ef5780635342acb41461061857610267565b8063313ce5671461044c5780633221c93f14610477578063351a964d146104a257806339509351146104cd578063457c194c1461050a57610267565b806318160ddd1161022457806318160ddd146103535780631e89dbbe1461037e578063200a692d146103bb57806323b872dd146103e657806330b263ba1461042357610267565b806301c234a81461026c57806306fdde0314610297578063095ea7b3146102c25780630c77a8f6146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a3d565b60405161028e9190613c54565b60405180910390f35b3480156102a357600080fd5b506102ac610a43565b6040516102b99190613a92565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e491906131c9565b610ad5565b6040516102f69190613a5c565b60405180910390f35b34801561030b57600080fd5b506103266004803603810190610321919061318d565b610af3565b005b34801561033457600080fd5b5061033d610bca565b60405161034a9190613a77565b60405180910390f35b34801561035f57600080fd5b50610368610bf0565b6040516103759190613c54565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a091906130b0565b610bfa565b6040516103b29190613a5c565b60405180910390f35b3480156103c757600080fd5b506103d0610c50565b6040516103dd9190613c54565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061313e565b610c56565b60405161041a9190613a5c565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613323565b610d4d565b005b34801561045857600080fd5b50610461610def565b60405161046e9190613d00565b60405180910390f35b34801561048357600080fd5b5061048c610e06565b60405161049991906139b7565b60405180910390f35b3480156104ae57600080fd5b506104b7610e2c565b6040516104c49190613a5c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906131c9565b610e3f565b6040516105019190613a5c565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c91906132fa565b610eeb565b005b34801561053f57600080fd5b5061055a600480360381019061055591906130b0565b610f71565b6040516105679190613a5c565b60405180910390f35b34801561057c57600080fd5b50610585610f91565b6040516105929190613a5c565b60405180910390f35b3480156105a757600080fd5b506105b0610fa4565b6040516105bd9190613c54565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190613205565b610faa565b005b3480156105fb57600080fd5b50610616600480360381019061061191906132a8565b61117f565b005b34801561062457600080fd5b5061063f600480360381019061063a91906130b0565b611218565b60405161064c9190613a5c565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906130b0565b61126e565b005b34801561068a57600080fd5b506106a560048036038101906106a0919061318d565b61132e565b005b3480156106b357600080fd5b506106bc611405565b6040516106c99190613c54565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906130b0565b61140b565b6040516107069190613c54565b60405180910390f35b34801561071b57600080fd5b50610724611454565b005b34801561073257600080fd5b5061073b6114dc565b60405161074891906139b7565b60405180910390f35b34801561075d57600080fd5b50610778600480360381019061077391906132fa565b611502565b005b34801561078657600080fd5b5061078f6115b0565b60405161079c91906139b7565b60405180910390f35b3480156107b157600080fd5b506107ba6115d9565b6040516107c79190613a92565b60405180910390f35b3480156107dc57600080fd5b506107e561166b565b6040516107f29190613a5c565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d91906131c9565b61167e565b60405161082f9190613a5c565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a91906130b0565b611769565b60405161086c9190613a5c565b60405180910390f35b34801561088157600080fd5b5061089c600480360381019061089791906131c9565b611789565b6040516108a99190613a5c565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d4919061318d565b6117a7565b005b3480156108e757600080fd5b5061090260048036038101906108fd91906132a8565b61187e565b005b34801561091057600080fd5b5061092b60048036038101906109269190613254565b61194e565b005b34801561093957600080fd5b50610942611a85565b60405161094f9190613c54565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a9190613102565b611a8b565b60405161098c9190613c54565b60405180910390f35b3480156109a157600080fd5b506109aa611b12565b6040516109b79190613c54565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e291906132fa565b611b18565b005b3480156109f557600080fd5b506109fe611b9e565b604051610a0b91906139b7565b60405180910390f35b348015610a2057600080fd5b50610a3b6004803603810190610a3691906130b0565b611bc4565b005b6103e881565b606060048054610a5290613fe8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7e90613fe8565b8015610acb5780601f10610aa057610100808354040283529160200191610acb565b820191906000526020600020905b815481529060010190602001808311610aae57829003601f168201915b5050505050905090565b6000610ae9610ae2611cbc565b8484611cc4565b6001905092915050565b610afb611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610b196115b0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6690613b74565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca2611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613b54565b60405180910390fd5b610d2d858585611e8f565b610d4185610d39611cbc565b858403611cc4565b60019150509392505050565b610d55611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610d736115b0565b73ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613b74565b60405180910390fd5b6000821115610dda5781600e819055505b6000811115610deb5780600f819055505b5050565b6000600660009054906101000a900460ff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000610ee1610e4c611cbc565b848460026000610e5a611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610edc9190613dcd565b611cc4565b6001905092915050565b610ef3611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610f116115b0565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90613b74565b60405180910390fd5b8060108190555050565b60076020528060005260406000206000915054906101000a900460ff1681565b600960149054906101000a900460ff1681565b60105481565b610fb2611cbc565b73ffffffffffffffffffffffffffffffffffffffff16610fd06115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90613b74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110a7578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156110a1573d6000803e3d6000fd5b5061117a565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110eb576110e6308284611e8f565b61117a565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b81526004016111269291906139d2565b602060405180830381600087803b15801561114057600080fd5b505af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906132d1565b505b505050565b611187611cbc565b73ffffffffffffffffffffffffffffffffffffffff166111a56115b0565b73ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613b74565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611276611cbc565b73ffffffffffffffffffffffffffffffffffffffff166112946115b0565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613b74565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611336611cbc565b73ffffffffffffffffffffffffffffffffffffffff166113546115b0565b73ffffffffffffffffffffffffffffffffffffffff16146113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a190613b74565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61145c611cbc565b73ffffffffffffffffffffffffffffffffffffffff1661147a6115b0565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613b74565b60405180910390fd5b6114da60006129ee565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61150a611cbc565b73ffffffffffffffffffffffffffffffffffffffff166115286115b0565b73ffffffffffffffffffffffffffffffffffffffff161461157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590613b74565b60405180910390fd5b6115a76103e861159983600354612ab290919063ffffffff16565b612ac890919063ffffffff16565b600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546115e890613fe8565b80601f016020809104026020016040519081016040528092919081815260200182805461161490613fe8565b80156116615780601f1061163657610100808354040283529160200191611661565b820191906000526020600020905b81548152906001019060200180831161164457829003601f168201915b5050505050905090565b601160019054906101000a900460ff1681565b6000806002600061168d611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174190613c34565b60405180910390fd5b61175e611755611cbc565b85858403611cc4565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600061179d611796611cbc565b8484611e8f565b6001905092915050565b6117af611cbc565b73ffffffffffffffffffffffffffffffffffffffff166117cd6115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613b74565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611886611cbc565b73ffffffffffffffffffffffffffffffffffffffff166118a46115b0565b73ffffffffffffffffffffffffffffffffffffffff16146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613b74565b60405180910390fd5b80600960146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516119439190613a5c565b60405180910390a150565b611956611cbc565b73ffffffffffffffffffffffffffffffffffffffff166119746115b0565b73ffffffffffffffffffffffffffffffffffffffff16146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190613b74565b60405180910390fd5b60005b8251811015611a80578160126000858481518110611a14577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a789061401a565b9150506119cd565b505050565b600d5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611b20611cbc565b73ffffffffffffffffffffffffffffffffffffffff16611b3e6115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90613b74565b60405180910390fd5b80600d8190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bcc611cbc565b73ffffffffffffffffffffffffffffffffffffffff16611bea6115b0565b73ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790613b74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca790613ad4565b60405180910390fd5b611cb9816129ee565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90613bf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90613af4565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e829190613c54565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef690613bb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690613ab4565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff390613b34565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090613b34565b60405180910390fd5b600081116120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613b94565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590613b14565b60405180910390fd5b612159838383612ade565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121fd5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122535750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122b157600c54816122658461140b565b61226f9190613dcd565b11156122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790613bd4565b60405180910390fd5b5b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123575750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561236157600190505b6000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061240c5750805b1561246157601160009054906101000a900460ff16612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790613c14565b60405180910390fd5b5b8215612614576000821561249f576124986103e861248a600e5488612ab290919063ffffffff16565b612ac890919063ffffffff16565b90506124d2565b81156124d1576124ce6103e86124c0600f5488612ab290919063ffffffff16565b612ac890919063ffffffff16565b90505b5b60006124e78287612ae390919063ffffffff16565b90508160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255a9190613dcd565b9250508190555085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b09190613eae565b9250508190555080600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126069190613dcd565b9250508190555050506126c1565b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126639190613eae565b9250508190555083600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b99190613dcd565b925050819055505b6000600d54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101590508080156127615750601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127b75750601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127cf5750600960149054906101000a900460ff165b80156127e75750601160019054906101000a900460ff165b156128205761281f61281a6103e861280c601054600d54612ab290919063ffffffff16565b612ac890919063ffffffff16565b612af9565b5b8080156128775750601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128cd5750601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128e55750600960149054906101000a900460ff165b80156128fe5750601160019054906101000a900460ff16155b1561294b5761294a6129456129346103e8612926601054600d54612ab290919063ffffffff16565b612ac890919063ffffffff16565b600d54612ae390919063ffffffff16565b612b28565b5b601160019054906101000a900460ff1615601160016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129d29190613c54565b60405180910390a36129e5878787612bc9565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612ac09190613e54565b905092915050565b60008183612ad69190613e23565b905092915050565b505050565b60008183612af19190613eae565b905092915050565b612b2581600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612bce565b50565b6000612b3e600283612ac890919063ffffffff16565b90506000612b558284612ae390919063ffffffff16565b90506000479050612b668330612bce565b6000612b7b8247612ae390919063ffffffff16565b9050612b878382612e93565b7f80e6caad6fd8c3ee999cba473f7f22f7dd9264c2068b7b1a285f780397bdf791848285604051612bba93929190613cc9565b60405180910390a15050505050565b505050565b6000600267ffffffffffffffff811115612c11577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612c3f5781602001602082028036833780820191505090505b5090503081600081518110612c7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1f57600080fd5b505afa158015612d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5791906130d9565b81600181518110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612df830600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611cc4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401612e5c959493929190613c6f565b600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b50505050505050565b612ec030600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cc4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612f0c6115b0565b426040518863ffffffff1660e01b8152600401612f2e969594939291906139fb565b6060604051808303818588803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f80919061335f565b5050505050565b6000612f9a612f9584613d4c565b613d1b565b90508083825260208201905082856020860282011115612fb957600080fd5b60005b85811015612fe95781612fcf8882612ff3565b845260208401935060208301925050600181019050612fbc565b5050509392505050565b60008135905061300281614130565b92915050565b60008151905061301781614130565b92915050565b60008135905061302c81614147565b92915050565b600082601f83011261304357600080fd5b8135613053848260208601612f87565b91505092915050565b60008135905061306b8161415e565b92915050565b6000815190506130808161415e565b92915050565b60008135905061309581614175565b92915050565b6000815190506130aa81614175565b92915050565b6000602082840312156130c257600080fd5b60006130d084828501612ff3565b91505092915050565b6000602082840312156130eb57600080fd5b60006130f984828501613008565b91505092915050565b6000806040838503121561311557600080fd5b600061312385828601612ff3565b925050602061313485828601612ff3565b9150509250929050565b60008060006060848603121561315357600080fd5b600061316186828701612ff3565b935050602061317286828701612ff3565b925050604061318386828701613086565b9150509250925092565b600080604083850312156131a057600080fd5b60006131ae85828601612ff3565b92505060206131bf8582860161305c565b9150509250929050565b600080604083850312156131dc57600080fd5b60006131ea85828601612ff3565b92505060206131fb85828601613086565b9150509250929050565b60008060006060848603121561321a57600080fd5b600061322886828701612ff3565b935050602061323986828701613086565b925050604061324a8682870161301d565b9150509250925092565b6000806040838503121561326757600080fd5b600083013567ffffffffffffffff81111561328157600080fd5b61328d85828601613032565b925050602061329e8582860161305c565b9150509250929050565b6000602082840312156132ba57600080fd5b60006132c88482850161305c565b91505092915050565b6000602082840312156132e357600080fd5b60006132f184828501613071565b91505092915050565b60006020828403121561330c57600080fd5b600061331a84828501613086565b91505092915050565b6000806040838503121561333657600080fd5b600061334485828601613086565b925050602061335585828601613086565b9150509250929050565b60008060006060848603121561337457600080fd5b60006133828682870161309b565b93505060206133938682870161309b565b92505060406133a48682870161309b565b9150509250925092565b60006133ba83836133d5565b60208301905092915050565b6133cf81613f49565b82525050565b6133de81613ee2565b82525050565b6133ed81613ee2565b82525050565b60006133fe82613d88565b6134088185613dab565b935061341383613d78565b8060005b8381101561344457815161342b88826133ae565b975061343683613d9e565b925050600181019050613417565b5085935050505092915050565b61345a81613f06565b82525050565b61346981613f5b565b82525050565b61347881613f7f565b82525050565b600061348982613d93565b6134938185613dbc565b93506134a3818560208601613fb5565b6134ac8161411f565b840191505092915050565b60006134c4602383613dbc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352a602683613dbc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613590602283613dbc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135f6602683613dbc565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061365c602983613dbc565b91507f45524332303a207472616e7366657220746f2074686520626c61636b206c697360008301527f74206164647265737300000000000000000000000000000000000000000000006020830152604082019050919050565b60006136c2602883613dbc565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613728602083613dbc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613768602983613dbc565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137ce602583613dbc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613834602c83613dbc565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785760008301527f616c6c6574416d6f756e742e00000000000000000000000000000000000000006020830152604082019050919050565b600061389a602483613dbc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613900601083613dbc565b91507f73776170206e6f7420656e61626c6564000000000000000000000000000000006000830152602082019050919050565b6000613940602583613dbc565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6139a281613f32565b82525050565b6139b181613f3c565b82525050565b60006020820190506139cc60008301846133e4565b92915050565b60006040820190506139e760008301856133c6565b6139f46020830184613999565b9392505050565b600060c082019050613a1060008301896133e4565b613a1d6020830188613999565b613a2a604083018761346f565b613a37606083018661346f565b613a4460808301856133e4565b613a5160a0830184613999565b979650505050505050565b6000602082019050613a716000830184613451565b92915050565b6000602082019050613a8c6000830184613460565b92915050565b60006020820190508181036000830152613aac818461347e565b905092915050565b60006020820190508181036000830152613acd816134b7565b9050919050565b60006020820190508181036000830152613aed8161351d565b9050919050565b60006020820190508181036000830152613b0d81613583565b9050919050565b60006020820190508181036000830152613b2d816135e9565b9050919050565b60006020820190508181036000830152613b4d8161364f565b9050919050565b60006020820190508181036000830152613b6d816136b5565b9050919050565b60006020820190508181036000830152613b8d8161371b565b9050919050565b60006020820190508181036000830152613bad8161375b565b9050919050565b60006020820190508181036000830152613bcd816137c1565b9050919050565b60006020820190508181036000830152613bed81613827565b9050919050565b60006020820190508181036000830152613c0d8161388d565b9050919050565b60006020820190508181036000830152613c2d816138f3565b9050919050565b60006020820190508181036000830152613c4d81613933565b9050919050565b6000602082019050613c696000830184613999565b92915050565b600060a082019050613c846000830188613999565b613c91602083018761346f565b8181036040830152613ca381866133f3565b9050613cb260608301856133e4565b613cbf6080830184613999565b9695505050505050565b6000606082019050613cde6000830186613999565b613ceb6020830185613999565b613cf86040830184613999565b949350505050565b6000602082019050613d1560008301846139a8565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613d4257613d416140f0565b5b8060405250919050565b600067ffffffffffffffff821115613d6757613d666140f0565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613dd882613f32565b9150613de383613f32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1857613e17614063565b5b828201905092915050565b6000613e2e82613f32565b9150613e3983613f32565b925082613e4957613e48614092565b5b828204905092915050565b6000613e5f82613f32565b9150613e6a83613f32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ea357613ea2614063565b5b828202905092915050565b6000613eb982613f32565b9150613ec483613f32565b925082821015613ed757613ed6614063565b5b828203905092915050565b6000613eed82613f12565b9050919050565b6000613eff82613f12565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613f5482613f91565b9050919050565b6000613f6682613f6d565b9050919050565b6000613f7882613f12565b9050919050565b6000613f8a82613f32565b9050919050565b6000613f9c82613fa3565b9050919050565b6000613fae82613f12565b9050919050565b60005b83811015613fd3578082015181840152602081019050613fb8565b83811115613fe2576000848401525b50505050565b6000600282049050600182168061400057607f821691505b60208210811415614014576140136140c1565b5b50919050565b600061402582613f32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561405857614057614063565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61413981613ee2565b811461414457600080fd5b50565b61415081613ef4565b811461415b57600080fd5b50565b61416781613f06565b811461417257600080fd5b50565b61417e81613f32565b811461418957600080fd5b5056fea2646970667358221220ab73d6bcb4c61d010dffa2bece335c7b3c22533bf18434a4f7cc5fcefa24528c64736f6c63430008000033

Deployed Bytecode Sourcemap

45144:170:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26302:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27985:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30159:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40782:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25790:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29112:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40920:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26220:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30810:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41595:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28947:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25838:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26356:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31673:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41189:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25742:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25876:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26258:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44699:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41491:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40293:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41055:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41879:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26054:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29283:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12700:94;;;;;;;;;;;;;:::i;:::-;;25972:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41322:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12049:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28204:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26395:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32391:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26557:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29623:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40665:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41998:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40425:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26112:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29861:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26183:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42177:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25925:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12949:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26302:47;26345:4;26302:47;:::o;27985:100::-;28039:13;28072:5;28065:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27985:100;:::o;30159:169::-;30242:4;30259:39;30268:12;:10;:12::i;:::-;30282:7;30291:6;30259:8;:39::i;:::-;30316:4;30309:11;;30159:169;;;;:::o;40782:130::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40898:6:::1;40866:20;:29;40887:7;40866:29;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;40782:130:::0;;:::o;25790:41::-;;;;;;;;;;;;;:::o;29112:108::-;29173:7;29200:12;;29193:19;;29112:108;:::o;40920:127::-;40986:4;41010:20;:29;41031:7;41010:29;;;;;;;;;;;;;;;;;;;;;;;;;41003:36;;40920:127;;;:::o;26220:31::-;;;;:::o;30810:454::-;30916:4;30933:24;30960:11;:19;30972:6;30960:19;;;;;;;;;;;;;;;:33;30980:12;:10;:12::i;:::-;30960:33;;;;;;;;;;;;;;;;30933:60;;31032:6;31012:16;:26;;31004:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;31094:36;31104:6;31112:9;31123:6;31094:9;:36::i;:::-;31166:57;31175:6;31183:12;:10;:12::i;:::-;31216:6;31197:16;:25;31166:8;:57::i;:::-;31252:4;31245:11;;;30810:454;;;;;:::o;41595:276::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41731:1:::1;41719:9;:13;41715:68;;;41762:9;41749:10;:22;;;;41715:68;41810:1;41797:10;:14;41793:71;;;41842:10;41828:11;:24;;;;41793:71;41595:276:::0;;:::o;28947:100::-;29005:5;29030:9;;;;;;;;;;;29023:16;;28947:100;:::o;25838:31::-;;;;;;;;;;;;;:::o;26356:32::-;;;;;;;;;;;;;:::o;31673:215::-;31761:4;31778:80;31787:12;:10;:12::i;:::-;31801:7;31847:10;31810:11;:25;31822:12;:10;:12::i;:::-;31810:25;;;;;;;;;;;;;;;:34;31836:7;31810:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;31778:8;:80::i;:::-;31876:4;31869:11;;31673:215;;;;:::o;41189:125::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41293:13:::1;41274:16;:32;;;;41189:125:::0;:::o;25742:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;25876:40::-;;;;;;;;;;;;;:::o;26258:37::-;;;;:::o;44699:403::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44876:1:::1;44853:25;;:11;:25;;;44849:83;;;44902:2;:11;;:18;44914:5;44902:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44895:25;;44849:83;44969:4;44946:28;;:11;:28;;;44942:103;;;44998:35;45016:4;45023:2;45027:5;44998:9;:35::i;:::-;44991:42;;44942:103;45062:11;45055:28;;;45084:2;45088:5;45055:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12340:1;44699:403:::0;;;:::o;41491:96::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41572:7:::1;41556:13;;:23;;;;;;;;;;;;;;;;;;41491:96:::0;:::o;40293:124::-;40358:4;40382:18;:27;40401:7;40382:27;;;;;;;;;;;;;;;;;;;;;;;;;40375:34;;40293:124;;;:::o;41055:126::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41157:16:::1;41139:15;;:34;;;;;;;;;;;;;;;;;;41055:126:::0;:::o;41879:111::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41976:6:::1;41957:9;:16;41967:5;41957:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;41879:111:::0;;:::o;26054:51::-;;;;:::o;29283:127::-;29357:7;29384:9;:18;29394:7;29384:18;;;;;;;;;;;;;;;;29377:25;;29283:127;;;:::o;12700:94::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12765:21:::1;12783:1;12765:9;:21::i;:::-;12700:94::o:0;25972:75::-;;;;;;;;;;;;;:::o;41322:161::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41427:48:::1;41467:7;41427:35;41444:17;41427:12;;:16;;:35;;;;:::i;:::-;:39;;:48;;;;:::i;:::-;41408:16;:67;;;;41322:161:::0;:::o;12049:87::-;12095:7;12122:6;;;;;;;;;;;12115:13;;12049:87;:::o;28204:104::-;28260:13;28293:7;28286:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28204:104;:::o;26395:35::-;;;;;;;;;;;;;:::o;32391:411::-;32484:4;32501:24;32528:11;:25;32540:12;:10;:12::i;:::-;32528:25;;;;;;;;;;;;;;;:34;32554:7;32528:34;;;;;;;;;;;;;;;;32501:61;;32601:15;32581:16;:35;;32573:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32694:67;32703:12;:10;:12::i;:::-;32717:7;32745:15;32726:16;:34;32694:8;:67::i;:::-;32790:4;32783:11;;;32391:411;;;;:::o;26557:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;29623:175::-;29709:4;29726:42;29736:12;:10;:12::i;:::-;29750:9;29761:6;29726:9;:42::i;:::-;29786:4;29779:11;;29623:175;;;;:::o;40665:109::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40761:5:::1;40744:8;:14;40753:4;40744:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;40665:109:::0;;:::o;41998:171::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42099:8:::1;42075:21;;:32;;;;;;;;;;;;;;;;;;42123:38;42152:8;42123:38;;;;;;:::i;:::-;;;;;;;;41998:171:::0;:::o;40425:232::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40525:13:::1;40520:130;40552:7;:14;40544:5;:22;40520:130;;;40629:9;40592:18;:34;40611:7;40619:5;40611:14;;;;;;;;;;;;;;;;;;;;;;40592:34;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40568:7;;;;;:::i;:::-;;;;40520:130;;;;40425:232:::0;;:::o;26112:64::-;;;;:::o;29861:151::-;29950:7;29977:11;:18;29989:5;29977:18;;;;;;;;;;;;;;;:27;29996:7;29977:27;;;;;;;;;;;;;;;;29970:34;;29861:151;;;;:::o;26183:30::-;;;;:::o;42177:134::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42296:7:::1;42264:29;:39;;;;42177:134:::0;:::o;25925:40::-;;;;;;;;;;;;;:::o;12949:192::-;12280:12;:10;:12::i;:::-;12269:23;;:7;:5;:7::i;:::-;:23;;;12261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13058:1:::1;13038:22;;:8;:22;;;;13030:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13114:19;13124:8;13114:9;:19::i;:::-;12949:192:::0;:::o;8335:98::-;8388:7;8415:10;8408:17;;8335:98;:::o;38450:380::-;38603:1;38586:19;;:5;:19;;;;38578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38684:1;38665:21;;:7;:21;;;;38657:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38768:6;38738:11;:18;38750:5;38738:18;;;;;;;;;;;;;;;:27;38757:7;38738:27;;;;;;;;;;;;;;;:36;;;;38806:7;38790:32;;38799:5;38790:32;;;38815:6;38790:32;;;;;;:::i;:::-;;;;;;;;38450:380;;;:::o;33292:3110::-;33450:1;33432:20;;:6;:20;;;;33424:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33534:1;33513:23;;:9;:23;;;;33505:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33596:9;:17;33606:6;33596:17;;;;;;;;;;;;;;;;;;;;;;;;;33595:18;33587:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33679:9;:20;33689:9;33679:20;;;;;;;;;;;;;;;;;;;;;;;;;33678:21;33670:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33773:1;33764:6;:10;33756:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33860:6;33839:9;:17;33849:6;33839:17;;;;;;;;;;;;;;;;:27;;33831:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33920:47;33941:6;33949:9;33960:6;33920:20;:47::i;:::-;33985:8;:19;33994:9;33985:19;;;;;;;;;;;;;;;;;;;;;;;;;33984:20;:53;;;;;34009:20;:28;34030:6;34009:28;;;;;;;;;;;;;;;;;;;;;;;;;34008:29;33984:53;:89;;;;;34042:20;:31;34063:9;34042:31;;;;;;;;;;;;;;;;;;;;;;;;;34041:32;33984:89;33980:279;;;34151:16;;34140:6;34117:20;34127:9;34117;:20::i;:::-;:29;;;;:::i;:::-;34116:51;;34090:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;33980:279;34271:12;34307:18;:26;34326:6;34307:26;;;;;;;;;;;;;;;;;;;;;;;;;34306:27;:61;;;;;34338:18;:29;34357:9;34338:29;;;;;;;;;;;;;;;;;;;;;;;;;34337:30;34306:61;34302:108;;;34394:4;34384:14;;34302:108;34420:10;34433:8;:16;34442:6;34433:16;;;;;;;;;;;;;;;;;;;;;;;;;34420:29;;34460:11;34474:8;:19;34483:9;34474:19;;;;;;;;;;;;;;;;;;;;;;;;;34460:33;;34508:5;:15;;;;34517:6;34508:15;34504:90;;;34548:13;;;;;;;;;;;34540:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;34504:90;34610:7;34606:549;;;34634:12;34671:5;34667:178;;;34704:32;34731:4;34704:22;34715:10;;34704:6;:10;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;34697:39;;34667:178;;;34762:6;34758:87;;;34796:33;34824:4;34796:23;34807:11;;34796:6;:10;;:23;;;;:::i;:::-;:27;;:33;;;;:::i;:::-;34789:40;;34758:87;34667:178;34859:22;34884:16;34895:4;34884:6;:10;;:16;;;;:::i;:::-;34859:41;;34939:4;34915:9;:20;34925:9;;;;;;;;;;;34915:20;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;34979:6;34958:9;:17;34968:6;34958:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35024:14;35000:9;:20;35010:9;35000:20;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;34606:549;;;;;35092:6;35071:9;:17;35081:6;35071:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35137:6;35113:9;:20;35123:9;35113:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;34606:549;35449:24;35504:29;;35476:9;:24;35494:4;35476:24;;;;;;;;;;;;;;;;:57;;35449:84;;35564:19;:53;;;;;35601:8;:16;35610:6;35601:16;;;;;;;;;;;;;;;;;;;;;;;;;35600:17;35564:53;:90;;;;;35635:8;:19;35644:9;35635:19;;;;;;;;;;;;;;;;;;;;;;;;;35634:20;35564:90;:128;;;;;35671:21;;;;;;;;;;;35564:128;:161;;;;;35709:16;;;;;;;;;;;35564:161;35546:325;;;35776:83;35797:61;35853:4;35797:51;35831:16;;35797:29;;:33;;:51;;;;:::i;:::-;:55;;:61;;;;:::i;:::-;35776:20;:83::i;:::-;35546:325;35899:19;:53;;;;;35936:8;:16;35945:6;35936:16;;;;;;;;;;;;;;;;;;;;;;;;;35935:17;35899:53;:90;;;;;35970:8;:19;35979:9;35970:19;;;;;;;;;;;;;;;;;;;;;;;;;35969:20;35899:90;:128;;;;;36006:21;;;;;;;;;;;35899:128;:162;;;;;36045:16;;;;;;;;;;;36044:17;35899:162;35881:357;;;36112:114;36129:96;36163:61;36219:4;36163:51;36197:16;;36163:29;;:33;;:51;;;;:::i;:::-;:55;;:61;;;;:::i;:::-;36129:29;;:33;;:96;;;;:::i;:::-;36112:16;:114::i;:::-;35881:357;36268:16;;;;;;;;;;;36267:17;36248:16;;:36;;;;;;;;;;;;;;;;;;36319:9;36302:35;;36311:6;36302:35;;;36330:6;36302:35;;;;;;:::i;:::-;;;;;;;;36348:46;36368:6;36376:9;36387:6;36348:19;:46::i;:::-;33292:3110;;;;;;;:::o;13149:173::-;13205:16;13224:6;;;;;;;;;;;13205:25;;13250:8;13241:6;;:17;;;;;;;;;;;;;;;;;;13305:8;13274:40;;13295:8;13274:40;;;;;;;;;;;;13149:173;;:::o;16418:98::-;16476:7;16507:1;16503;:5;;;;:::i;:::-;16496:12;;16418:98;;;;:::o;16817:::-;16875:7;16906:1;16902;:5;;;;:::i;:::-;16895:12;;16817:98;;;;:::o;39430:125::-;;;;:::o;16061:98::-;16119:7;16150:1;16146;:5;;;;:::i;:::-;16139:12;;16061:98;;;;:::o;42319:142::-;42398:55;42415:20;42437:15;;;;;;;;;;;42398:16;:55::i;:::-;42319:142;:::o;42469:993::-;42595:12;42610:27;42635:1;42610:20;:24;;:27;;;;:::i;:::-;42595:42;;42648:17;42668:30;42693:4;42668:20;:24;;:30;;;;:::i;:::-;42648:50;;42976:22;43001:21;42976:46;;43067:37;43084:4;43098;43067:16;:37::i;:::-;43244:18;43265:41;43291:14;43265:21;:25;;:41;;;;:::i;:::-;43244:62;;43356:35;43369:9;43380:10;43356:12;:35::i;:::-;43409:45;43426:4;43432:10;43444:9;43409:45;;;;;;;;:::i;:::-;;;;;;;;42469:993;;;;;:::o;40159:124::-;;;;:::o;43470:612::-;43619:21;43657:1;43643:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43619:40;;43688:4;43670;43675:1;43670:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;43714:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43704:4;43709:1;43704:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;43749:62;43766:4;43781:15;;;;;;;;;;;43799:11;43749:8;:62::i;:::-;43850:15;;;;;;;;;;;:66;;;43931:11;43957:1;44001:4;44020:13;44048:15;43850:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43470:612;;;:::o;44090:513::-;44238:62;44255:4;44270:15;;;;;;;;;;;44288:11;44238:8;:62::i;:::-;44343:15;;;;;;;;;;;:31;;;44382:9;44415:4;44435:11;44461:1;44504;44547:7;:5;:7::i;:::-;44569:15;44343:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44090:513;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:143::-;;885:6;879:13;870:22;;901:33;928:5;901:33;:::i;:::-;860:80;;;;:::o;946:155::-;;1038:6;1025:20;1016:29;;1054:41;1089:5;1054:41;:::i;:::-;1006:95;;;;:::o;1124:303::-;;1244:3;1237:4;1229:6;1225:17;1221:27;1211:2;;1262:1;1259;1252:12;1211:2;1302:6;1289:20;1327:94;1417:3;1409:6;1402:4;1394:6;1390:17;1327:94;:::i;:::-;1318:103;;1201:226;;;;;:::o;1433:133::-;;1514:6;1501:20;1492:29;;1530:30;1554:5;1530:30;:::i;:::-;1482:84;;;;:::o;1572:137::-;;1657:6;1651:13;1642:22;;1673:30;1697:5;1673:30;:::i;:::-;1632:77;;;;:::o;1715:139::-;;1799:6;1786:20;1777:29;;1815:33;1842:5;1815:33;:::i;:::-;1767:87;;;;:::o;1860:143::-;;1948:6;1942:13;1933:22;;1964:33;1991:5;1964:33;:::i;:::-;1923:80;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:284::-;;2396:2;2384:9;2375:7;2371:23;2367:32;2364:2;;;2412:1;2409;2402:12;2364:2;2455:1;2480:64;2536:7;2527:6;2516:9;2512:22;2480:64;:::i;:::-;2470:74;;2426:128;2354:207;;;;:::o;2567:407::-;;;2692:2;2680:9;2671:7;2667:23;2663:32;2660:2;;;2708:1;2705;2698:12;2660:2;2751:1;2776:53;2821:7;2812:6;2801:9;2797:22;2776:53;:::i;:::-;2766:63;;2722:117;2878:2;2904:53;2949:7;2940:6;2929:9;2925:22;2904:53;:::i;:::-;2894:63;;2849:118;2650:324;;;;;:::o;2980:552::-;;;;3122:2;3110:9;3101:7;3097:23;3093:32;3090:2;;;3138:1;3135;3128:12;3090:2;3181:1;3206:53;3251:7;3242:6;3231:9;3227:22;3206:53;:::i;:::-;3196:63;;3152:117;3308:2;3334:53;3379:7;3370:6;3359:9;3355:22;3334:53;:::i;:::-;3324:63;;3279:118;3436:2;3462:53;3507:7;3498:6;3487:9;3483:22;3462:53;:::i;:::-;3452:63;;3407:118;3080:452;;;;;:::o;3538:401::-;;;3660:2;3648:9;3639:7;3635:23;3631:32;3628:2;;;3676:1;3673;3666:12;3628:2;3719:1;3744:53;3789:7;3780:6;3769:9;3765:22;3744:53;:::i;:::-;3734:63;;3690:117;3846:2;3872:50;3914:7;3905:6;3894:9;3890:22;3872:50;:::i;:::-;3862:60;;3817:115;3618:321;;;;;:::o;3945:407::-;;;4070:2;4058:9;4049:7;4045:23;4041:32;4038:2;;;4086:1;4083;4076:12;4038:2;4129:1;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4100:117;4256:2;4282:53;4327:7;4318:6;4307:9;4303:22;4282:53;:::i;:::-;4272:63;;4227:118;4028:324;;;;;:::o;4358:568::-;;;;4508:2;4496:9;4487:7;4483:23;4479:32;4476:2;;;4524:1;4521;4514:12;4476:2;4567:1;4592:53;4637:7;4628:6;4617:9;4613:22;4592:53;:::i;:::-;4582:63;;4538:117;4694:2;4720:53;4765:7;4756:6;4745:9;4741:22;4720:53;:::i;:::-;4710:63;;4665:118;4822:2;4848:61;4901:7;4892:6;4881:9;4877:22;4848:61;:::i;:::-;4838:71;;4793:126;4466:460;;;;;:::o;4932:544::-;;;5079:2;5067:9;5058:7;5054:23;5050:32;5047:2;;;5095:1;5092;5085:12;5047:2;5166:1;5155:9;5151:17;5138:31;5196:18;5188:6;5185:30;5182:2;;;5228:1;5225;5218:12;5182:2;5256:78;5326:7;5317:6;5306:9;5302:22;5256:78;:::i;:::-;5246:88;;5109:235;5383:2;5409:50;5451:7;5442:6;5431:9;5427:22;5409:50;:::i;:::-;5399:60;;5354:115;5037:439;;;;;:::o;5482:256::-;;5587:2;5575:9;5566:7;5562:23;5558:32;5555:2;;;5603:1;5600;5593:12;5555:2;5646:1;5671:50;5713:7;5704:6;5693:9;5689:22;5671:50;:::i;:::-;5661:60;;5617:114;5545:193;;;;:::o;5744:278::-;;5860:2;5848:9;5839:7;5835:23;5831:32;5828:2;;;5876:1;5873;5866:12;5828:2;5919:1;5944:61;5997:7;5988:6;5977:9;5973:22;5944:61;:::i;:::-;5934:71;;5890:125;5818:204;;;;:::o;6028:262::-;;6136:2;6124:9;6115:7;6111:23;6107:32;6104:2;;;6152:1;6149;6142:12;6104:2;6195:1;6220:53;6265:7;6256:6;6245:9;6241:22;6220:53;:::i;:::-;6210:63;;6166:117;6094:196;;;;:::o;6296:407::-;;;6421:2;6409:9;6400:7;6396:23;6392:32;6389:2;;;6437:1;6434;6427:12;6389:2;6480:1;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6451:117;6607:2;6633:53;6678:7;6669:6;6658:9;6654:22;6633:53;:::i;:::-;6623:63;;6578:118;6379:324;;;;;:::o;6709:596::-;;;;6862:2;6850:9;6841:7;6837:23;6833:32;6830:2;;;6878:1;6875;6868:12;6830:2;6921:1;6946:64;7002:7;6993:6;6982:9;6978:22;6946:64;:::i;:::-;6936:74;;6892:128;7059:2;7085:64;7141:7;7132:6;7121:9;7117:22;7085:64;:::i;:::-;7075:74;;7030:129;7198:2;7224:64;7280:7;7271:6;7260:9;7256:22;7224:64;:::i;:::-;7214:74;;7169:129;6820:485;;;;;:::o;7311:179::-;;7401:46;7443:3;7435:6;7401:46;:::i;:::-;7479:4;7474:3;7470:14;7456:28;;7391:99;;;;:::o;7496:147::-;7591:45;7630:5;7591:45;:::i;:::-;7586:3;7579:58;7569:74;;:::o;7649:108::-;7726:24;7744:5;7726:24;:::i;:::-;7721:3;7714:37;7704:53;;:::o;7763:118::-;7850:24;7868:5;7850:24;:::i;:::-;7845:3;7838:37;7828:53;;:::o;7917:732::-;;8065:54;8113:5;8065:54;:::i;:::-;8135:86;8214:6;8209:3;8135:86;:::i;:::-;8128:93;;8245:56;8295:5;8245:56;:::i;:::-;8324:7;8355:1;8340:284;8365:6;8362:1;8359:13;8340:284;;;8441:6;8435:13;8468:63;8527:3;8512:13;8468:63;:::i;:::-;8461:70;;8554:60;8607:6;8554:60;:::i;:::-;8544:70;;8400:224;8387:1;8384;8380:9;8375:14;;8340:284;;;8344:14;8640:3;8633:10;;8041:608;;;;;;;:::o;8655:109::-;8736:21;8751:5;8736:21;:::i;:::-;8731:3;8724:34;8714:50;;:::o;8770:185::-;8884:64;8942:5;8884:64;:::i;:::-;8879:3;8872:77;8862:93;;:::o;8961:147::-;9056:45;9095:5;9056:45;:::i;:::-;9051:3;9044:58;9034:74;;:::o;9114:364::-;;9230:39;9263:5;9230:39;:::i;:::-;9285:71;9349:6;9344:3;9285:71;:::i;:::-;9278:78;;9365:52;9410:6;9405:3;9398:4;9391:5;9387:16;9365:52;:::i;:::-;9442:29;9464:6;9442:29;:::i;:::-;9437:3;9433:39;9426:46;;9206:272;;;;;:::o;9484:367::-;;9647:67;9711:2;9706:3;9647:67;:::i;:::-;9640:74;;9744:34;9740:1;9735:3;9731:11;9724:55;9810:5;9805:2;9800:3;9796:12;9789:27;9842:2;9837:3;9833:12;9826:19;;9630:221;;;:::o;9857:370::-;;10020:67;10084:2;10079:3;10020:67;:::i;:::-;10013:74;;10117:34;10113:1;10108:3;10104:11;10097:55;10183:8;10178:2;10173:3;10169:12;10162:30;10218:2;10213:3;10209:12;10202:19;;10003:224;;;:::o;10233:366::-;;10396:67;10460:2;10455:3;10396:67;:::i;:::-;10389:74;;10493:34;10489:1;10484:3;10480:11;10473:55;10559:4;10554:2;10549:3;10545:12;10538:26;10590:2;10585:3;10581:12;10574:19;;10379:220;;;:::o;10605:370::-;;10768:67;10832:2;10827:3;10768:67;:::i;:::-;10761:74;;10865:34;10861:1;10856:3;10852:11;10845:55;10931:8;10926:2;10921:3;10917:12;10910:30;10966:2;10961:3;10957:12;10950:19;;10751:224;;;:::o;10981:373::-;;11144:67;11208:2;11203:3;11144:67;:::i;:::-;11137:74;;11241:34;11237:1;11232:3;11228:11;11221:55;11307:11;11302:2;11297:3;11293:12;11286:33;11345:2;11340:3;11336:12;11329:19;;11127:227;;;:::o;11360:372::-;;11523:67;11587:2;11582:3;11523:67;:::i;:::-;11516:74;;11620:34;11616:1;11611:3;11607:11;11600:55;11686:10;11681:2;11676:3;11672:12;11665:32;11723:2;11718:3;11714:12;11707:19;;11506:226;;;:::o;11738:330::-;;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11998:34;11994:1;11989:3;11985:11;11978:55;12059:2;12054:3;12050:12;12043:19;;11884:184;;;:::o;12074:373::-;;12237:67;12301:2;12296:3;12237:67;:::i;:::-;12230:74;;12334:34;12330:1;12325:3;12321:11;12314:55;12400:11;12395:2;12390:3;12386:12;12379:33;12438:2;12433:3;12429:12;12422:19;;12220:227;;;:::o;12453:369::-;;12616:67;12680:2;12675:3;12616:67;:::i;:::-;12609:74;;12713:34;12709:1;12704:3;12700:11;12693:55;12779:7;12774:2;12769:3;12765:12;12758:29;12813:2;12808:3;12804:12;12797:19;;12599:223;;;:::o;12828:376::-;;12991:67;13055:2;13050:3;12991:67;:::i;:::-;12984:74;;13088:34;13084:1;13079:3;13075:11;13068:55;13154:14;13149:2;13144:3;13140:12;13133:36;13195:2;13190:3;13186:12;13179:19;;12974:230;;;:::o;13210:368::-;;13373:67;13437:2;13432:3;13373:67;:::i;:::-;13366:74;;13470:34;13466:1;13461:3;13457:11;13450:55;13536:6;13531:2;13526:3;13522:12;13515:28;13569:2;13564:3;13560:12;13553:19;;13356:222;;;:::o;13584:314::-;;13747:67;13811:2;13806:3;13747:67;:::i;:::-;13740:74;;13844:18;13840:1;13835:3;13831:11;13824:39;13889:2;13884:3;13880:12;13873:19;;13730:168;;;:::o;13904:369::-;;14067:67;14131:2;14126:3;14067:67;:::i;:::-;14060:74;;14164:34;14160:1;14155:3;14151:11;14144:55;14230:7;14225:2;14220:3;14216:12;14209:29;14264:2;14259:3;14255:12;14248:19;;14050:223;;;:::o;14279:118::-;14366:24;14384:5;14366:24;:::i;:::-;14361:3;14354:37;14344:53;;:::o;14403:112::-;14486:22;14502:5;14486:22;:::i;:::-;14481:3;14474:35;14464:51;;:::o;14521:222::-;;14652:2;14641:9;14637:18;14629:26;;14665:71;14733:1;14722:9;14718:17;14709:6;14665:71;:::i;:::-;14619:124;;;;:::o;14749:348::-;;14916:2;14905:9;14901:18;14893:26;;14929:79;15005:1;14994:9;14990:17;14981:6;14929:79;:::i;:::-;15018:72;15086:2;15075:9;15071:18;15062:6;15018:72;:::i;:::-;14883:214;;;;;:::o;15103:807::-;;15390:3;15379:9;15375:19;15367:27;;15404:71;15472:1;15461:9;15457:17;15448:6;15404:71;:::i;:::-;15485:72;15553:2;15542:9;15538:18;15529:6;15485:72;:::i;:::-;15567:80;15643:2;15632:9;15628:18;15619:6;15567:80;:::i;:::-;15657;15733:2;15722:9;15718:18;15709:6;15657:80;:::i;:::-;15747:73;15815:3;15804:9;15800:19;15791:6;15747:73;:::i;:::-;15830;15898:3;15887:9;15883:19;15874:6;15830:73;:::i;:::-;15357:553;;;;;;;;;:::o;15916:210::-;;16041:2;16030:9;16026:18;16018:26;;16054:65;16116:1;16105:9;16101:17;16092:6;16054:65;:::i;:::-;16008:118;;;;:::o;16132:276::-;;16290:2;16279:9;16275:18;16267:26;;16303:98;16398:1;16387:9;16383:17;16374:6;16303:98;:::i;:::-;16257:151;;;;:::o;16414:313::-;;16565:2;16554:9;16550:18;16542:26;;16614:9;16608:4;16604:20;16600:1;16589:9;16585:17;16578:47;16642:78;16715:4;16706:6;16642:78;:::i;:::-;16634:86;;16532:195;;;;:::o;16733:419::-;;16937:2;16926:9;16922:18;16914:26;;16986:9;16980:4;16976:20;16972:1;16961:9;16957:17;16950:47;17014:131;17140:4;17014:131;:::i;:::-;17006:139;;16904:248;;;:::o;17158:419::-;;17362:2;17351:9;17347:18;17339:26;;17411:9;17405:4;17401:20;17397:1;17386:9;17382:17;17375:47;17439:131;17565:4;17439:131;:::i;:::-;17431:139;;17329:248;;;:::o;17583:419::-;;17787:2;17776:9;17772:18;17764:26;;17836:9;17830:4;17826:20;17822:1;17811:9;17807:17;17800:47;17864:131;17990:4;17864:131;:::i;:::-;17856:139;;17754:248;;;:::o;18008:419::-;;18212:2;18201:9;18197:18;18189:26;;18261:9;18255:4;18251:20;18247:1;18236:9;18232:17;18225:47;18289:131;18415:4;18289:131;:::i;:::-;18281:139;;18179:248;;;:::o;18433:419::-;;18637:2;18626:9;18622:18;18614:26;;18686:9;18680:4;18676:20;18672:1;18661:9;18657:17;18650:47;18714:131;18840:4;18714:131;:::i;:::-;18706:139;;18604:248;;;:::o;18858:419::-;;19062:2;19051:9;19047:18;19039:26;;19111:9;19105:4;19101:20;19097:1;19086:9;19082:17;19075:47;19139:131;19265:4;19139:131;:::i;:::-;19131:139;;19029:248;;;:::o;19283:419::-;;19487:2;19476:9;19472:18;19464:26;;19536:9;19530:4;19526:20;19522:1;19511:9;19507:17;19500:47;19564:131;19690:4;19564:131;:::i;:::-;19556:139;;19454:248;;;:::o;19708:419::-;;19912:2;19901:9;19897:18;19889:26;;19961:9;19955:4;19951:20;19947:1;19936:9;19932:17;19925:47;19989:131;20115:4;19989:131;:::i;:::-;19981:139;;19879:248;;;:::o;20133:419::-;;20337:2;20326:9;20322:18;20314:26;;20386:9;20380:4;20376:20;20372:1;20361:9;20357:17;20350:47;20414:131;20540:4;20414:131;:::i;:::-;20406:139;;20304:248;;;:::o;20558:419::-;;20762:2;20751:9;20747:18;20739:26;;20811:9;20805:4;20801:20;20797:1;20786:9;20782:17;20775:47;20839:131;20965:4;20839:131;:::i;:::-;20831:139;;20729:248;;;:::o;20983:419::-;;21187:2;21176:9;21172:18;21164:26;;21236:9;21230:4;21226:20;21222:1;21211:9;21207:17;21200:47;21264:131;21390:4;21264:131;:::i;:::-;21256:139;;21154:248;;;:::o;21408:419::-;;21612:2;21601:9;21597:18;21589:26;;21661:9;21655:4;21651:20;21647:1;21636:9;21632:17;21625:47;21689:131;21815:4;21689:131;:::i;:::-;21681:139;;21579:248;;;:::o;21833:419::-;;22037:2;22026:9;22022:18;22014:26;;22086:9;22080:4;22076:20;22072:1;22061:9;22057:17;22050:47;22114:131;22240:4;22114:131;:::i;:::-;22106:139;;22004:248;;;:::o;22258:222::-;;22389:2;22378:9;22374:18;22366:26;;22402:71;22470:1;22459:9;22455:17;22446:6;22402:71;:::i;:::-;22356:124;;;;:::o;22486:831::-;;22787:3;22776:9;22772:19;22764:27;;22801:71;22869:1;22858:9;22854:17;22845:6;22801:71;:::i;:::-;22882:80;22958:2;22947:9;22943:18;22934:6;22882:80;:::i;:::-;23009:9;23003:4;22999:20;22994:2;22983:9;22979:18;22972:48;23037:108;23140:4;23131:6;23037:108;:::i;:::-;23029:116;;23155:72;23223:2;23212:9;23208:18;23199:6;23155:72;:::i;:::-;23237:73;23305:3;23294:9;23290:19;23281:6;23237:73;:::i;:::-;22754:563;;;;;;;;:::o;23323:442::-;;23510:2;23499:9;23495:18;23487:26;;23523:71;23591:1;23580:9;23576:17;23567:6;23523:71;:::i;:::-;23604:72;23672:2;23661:9;23657:18;23648:6;23604:72;:::i;:::-;23686;23754:2;23743:9;23739:18;23730:6;23686:72;:::i;:::-;23477:288;;;;;;:::o;23771:214::-;;23898:2;23887:9;23883:18;23875:26;;23911:67;23975:1;23964:9;23960:17;23951:6;23911:67;:::i;:::-;23865:120;;;;:::o;23991:283::-;;24057:2;24051:9;24041:19;;24099:4;24091:6;24087:17;24206:6;24194:10;24191:22;24170:18;24158:10;24155:34;24152:62;24149:2;;;24217:18;;:::i;:::-;24149:2;24257:10;24253:2;24246:22;24031:243;;;;:::o;24280:311::-;;24447:18;24439:6;24436:30;24433:2;;;24469:18;;:::i;:::-;24433:2;24519:4;24511:6;24507:17;24499:25;;24579:4;24573;24569:15;24561:23;;24362:229;;;:::o;24597:132::-;;24687:3;24679:11;;24717:4;24712:3;24708:14;24700:22;;24669:60;;;:::o;24735:114::-;;24836:5;24830:12;24820:22;;24809:40;;;:::o;24855:99::-;;24941:5;24935:12;24925:22;;24914:40;;;:::o;24960:113::-;;25062:4;25057:3;25053:14;25045:22;;25035:38;;;:::o;25079:184::-;;25212:6;25207:3;25200:19;25252:4;25247:3;25243:14;25228:29;;25190:73;;;;:::o;25269:169::-;;25387:6;25382:3;25375:19;25427:4;25422:3;25418:14;25403:29;;25365:73;;;;:::o;25444:305::-;;25503:20;25521:1;25503:20;:::i;:::-;25498:25;;25537:20;25555:1;25537:20;:::i;:::-;25532:25;;25691:1;25623:66;25619:74;25616:1;25613:81;25610:2;;;25697:18;;:::i;:::-;25610:2;25741:1;25738;25734:9;25727:16;;25488:261;;;;:::o;25755:185::-;;25812:20;25830:1;25812:20;:::i;:::-;25807:25;;25846:20;25864:1;25846:20;:::i;:::-;25841:25;;25885:1;25875:2;;25890:18;;:::i;:::-;25875:2;25932:1;25929;25925:9;25920:14;;25797:143;;;;:::o;25946:348::-;;26009:20;26027:1;26009:20;:::i;:::-;26004:25;;26043:20;26061:1;26043:20;:::i;:::-;26038:25;;26231:1;26163:66;26159:74;26156:1;26153:81;26148:1;26141:9;26134:17;26130:105;26127:2;;;26238:18;;:::i;:::-;26127:2;26286:1;26283;26279:9;26268:20;;25994:300;;;;:::o;26300:191::-;;26360:20;26378:1;26360:20;:::i;:::-;26355:25;;26394:20;26412:1;26394:20;:::i;:::-;26389:25;;26433:1;26430;26427:8;26424:2;;;26438:18;;:::i;:::-;26424:2;26483:1;26480;26476:9;26468:17;;26345:146;;;;:::o;26497:96::-;;26563:24;26581:5;26563:24;:::i;:::-;26552:35;;26542:51;;;:::o;26599:104::-;;26673:24;26691:5;26673:24;:::i;:::-;26662:35;;26652:51;;;:::o;26709:90::-;;26786:5;26779:13;26772:21;26761:32;;26751:48;;;:::o;26805:126::-;;26882:42;26875:5;26871:54;26860:65;;26850:81;;;:::o;26937:77::-;;27003:5;26992:16;;26982:32;;;:::o;27020:86::-;;27095:4;27088:5;27084:16;27073:27;;27063:43;;;:::o;27112:134::-;;27203:37;27234:5;27203:37;:::i;:::-;27190:50;;27180:66;;;:::o;27252:180::-;;27362:64;27420:5;27362:64;:::i;:::-;27349:77;;27339:93;;;:::o;27438:140::-;;27548:24;27566:5;27548:24;:::i;:::-;27535:37;;27525:53;;;:::o;27584:121::-;;27675:24;27693:5;27675:24;:::i;:::-;27662:37;;27652:53;;;:::o;27711:126::-;;27794:37;27825:5;27794:37;:::i;:::-;27781:50;;27771:66;;;:::o;27843:113::-;;27926:24;27944:5;27926:24;:::i;:::-;27913:37;;27903:53;;;:::o;27962:307::-;28030:1;28040:113;28054:6;28051:1;28048:13;28040:113;;;28139:1;28134:3;28130:11;28124:18;28120:1;28115:3;28111:11;28104:39;28076:2;28073:1;28069:10;28064:15;;28040:113;;;28171:6;28168:1;28165:13;28162:2;;;28251:1;28242:6;28237:3;28233:16;28226:27;28162:2;28011:258;;;;:::o;28275:320::-;;28356:1;28350:4;28346:12;28336:22;;28403:1;28397:4;28393:12;28424:18;28414:2;;28480:4;28472:6;28468:17;28458:27;;28414:2;28542;28534:6;28531:14;28511:18;28508:38;28505:2;;;28561:18;;:::i;:::-;28505:2;28326:269;;;;:::o;28601:233::-;;28663:24;28681:5;28663:24;:::i;:::-;28654:33;;28709:66;28702:5;28699:77;28696:2;;;28779:18;;:::i;:::-;28696:2;28826:1;28819:5;28815:13;28808:20;;28644:190;;;:::o;28840:180::-;28888:77;28885:1;28878:88;28985:4;28982:1;28975:15;29009:4;29006:1;28999:15;29026:180;29074:77;29071:1;29064:88;29171:4;29168:1;29161:15;29195:4;29192:1;29185:15;29212:180;29260:77;29257:1;29250:88;29357:4;29354:1;29347:15;29381:4;29378:1;29371:15;29398:180;29446:77;29443:1;29436:88;29543:4;29540:1;29533:15;29567:4;29564:1;29557:15;29584:102;;29676:2;29672:7;29667:2;29660:5;29656:14;29652:28;29642:38;;29632:54;;;:::o;29692:122::-;29765:24;29783:5;29765:24;:::i;:::-;29758:5;29755:35;29745:2;;29804:1;29801;29794:12;29745:2;29735:79;:::o;29820:138::-;29901:32;29927:5;29901:32;:::i;:::-;29894:5;29891:43;29881:2;;29948:1;29945;29938:12;29881:2;29871:87;:::o;29964:116::-;30034:21;30049:5;30034:21;:::i;:::-;30027:5;30024:32;30014:2;;30070:1;30067;30060:12;30014:2;30004:76;:::o;30086:122::-;30159:24;30177:5;30159:24;:::i;:::-;30152:5;30149:35;30139:2;;30198:1;30195;30188:12;30139:2;30129:79;:::o

Swarm Source

ipfs://ab73d6bcb4c61d010dffa2bece335c7b3c22533bf18434a4f7cc5fcefa24528c
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.