ETH Price: $3,440.36 (-1.16%)
Gas: 11 Gwei

Token

Trump Army (TRUMPX)
 

Overview

Max Total Supply

100,000,000 TRUMPX

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 TRUMPX

Value
$0.00
0x9df28296f553b786f3f56028bb52a0d286d4b6fa
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:
TrumpX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-31
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;

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 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @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://consensys.net/diligence/blog/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
            functionCallWithValue(
                target,
                data,
                0,
                "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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

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

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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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 {
        _transferOwnership(address(0));
    }

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function getAmountsIn(
        uint256 amountOut,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);
}

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

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

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

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

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

contract TrumpX is Context, IERC20, Ownable {
    using Address for address;
    //Contract Update Information
    string public constant contractVersion = "3.3";
    string public constant contractDev = "CFG";
    string public constant contractEdition = "Factory";
    //Definition of Wallets for Marketing or team.
    address payable public marketingWallet =
        payable(0x1f6b32601345A92FB77656699ae157be9270D9B2);
    //adding customer wallet to send supply and exclude from fees.
    address payable public safuWallet =
        payable(0xd66e28Df51aDF7212918Ba8eDF9C4B5AbEDBba2e);

    //Dead Wallet for SAFU Contract
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;
    //Mapping section for better tracking.
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    //Loging and Event Information for better troubleshooting.
    event TransferStatus(string,bool);
    event Log(string, uint256);
    event AuditLog(string, address);
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SwapTokensForETH(uint256 amountIn, address[] path);
    //Supply Definition.
    uint256 private _tTotal = 100_000_000 ether;
    uint256 private _tFeeTotal;
    //Token Definition.
    string public constant name = "Trump Army";
    string public constant symbol = "TRUMPX";
    uint8 public constant decimals = 18;
    //Taxes Definition.
    uint public buyFee = 5;

    uint256 public sellFee = 5;

    uint256 public marketingTokensCollected = 0;
    uint256 public totalMarketingTokensCollected = 0;

    uint256 public minimumTokensBeforeSwap = 10_000 ether;

    //Oracle Price Update, Manual Process.
    uint256 public swapOutput = 0;
        //Trading Controls added for SAFU Requirements
    bool public tradingEnabled;
    //Router and Pair Configuration.
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address private immutable WETH;
    //Tracking of Automatic Swap vs Manual Swap.
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
//What is my router and exclude pinksale locker.
        address currentRouter;
        //Adding Variables for all the routers for easier deployment for our customers.
        if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
            _isExcludedFromFee[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true;
        } else if (block.chainid == 97) {
            currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
            _isExcludedFromFee[0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5] = true;
            safuWallet = payable(0x4c4DAFf8A144213896db1dD85730163d17EB6afe);
        } else if (block.chainid == 43114) {
            currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet
            _isExcludedFromFee[0x9479C6484a392113bB829A15E7c9E033C9e70D30] = true;
        } else if (block.chainid == 42161) {
            currentRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; //Arbitrum Sushi
            _isExcludedFromFee[0xeBb415084Ce323338CFD3174162964CC23753dFD] = true;
        } else if (block.chainid == 1 || block.chainid == 5) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet
            _isExcludedFromFee[0x71B5759d73262FBb223956913ecF4ecC51057641] = true;
        } else {
            revert("You're not Blade");
        }

        //End of Router Variables.
        //Owner of balance
        _tOwned[safuWallet] = _tTotal;
        //Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed.
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
        WETH = _uniswapV2Router.WETH();
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), WETH);
        uniswapV2Router = _uniswapV2Router;
        //Approve router to be used.
        _approve(msg.sender, address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        //Exclude from fees the owner, contract and SAFU.
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[safuWallet] = true;


        emit Transfer(address(0), safuWallet, _tTotal);
        _transferOwnership(safuWallet);
    }

    //Readable Functions.
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

    //ERC 20 Standard Transfer Functions
    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    //ERC 20 Standard Allowance Function
    function allowance(
        address _owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[_owner][spender];
    }

    //ERC 20 Standard Approve Function
    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    //ERC 20 Standard Transfer From
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

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

    //ERC 20 Standard decrease Allowance
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - subtractedValue
        );
        return true;
    }

    //Approve Function
    function _approve(address _owner, address spender, uint256 amount) private {
        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);
    }

    //Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            _tOwned[from] >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        //Enable Trade after sale is finilized
        require(tradingEnabled || _isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading not yet enabled!");

        //Adding logic for automatic swap.
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;
        uint fee = 0;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance &&
            swapAndLiquifyEnabled
        ) {
            swapAndLiquify();
        }
        if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
            fee = (sellFee * amount) / 100;
        }
        if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
            fee = (buyFee * amount) / 100;
        }
        amount -= fee;
        if (fee > 0) {
            _tokenTransfer(from, address(this), fee);
            marketingTokensCollected += fee;
            totalMarketingTokensCollected += fee;
        }
        _tokenTransfer(from, to, amount);
    }

    //Swap Tokens for BNB or to add liquidity either automatically or manual, by default this is set to manual.
    //Corrected newBalance bug, it sending bnb to wallet and any remaining is on contract and can be recoverred.
    function swapAndLiquify() public lockTheSwap {
        uint256 totalTokens = balanceOf(address(this));
        swapTokensForEth(totalTokens);
        uint ethBalance = address(this).balance;

        transferToAddressETH(marketingWallet, ethBalance);

        marketingTokensCollected = 0;
    }

    //swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    //ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        _tOwned[sender] -= amount;
        _tOwned[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

    //exclude wallets from fees, this is needed for launch or other contracts.
    function excludeFromFee(address account) external onlyOwner {
        require(_isExcludedFromFee[account] != true, "The wallet is already excluded!");
        _isExcludedFromFee[account] = true;
        emit AuditLog(
            "We have excluded the following walled in fees:",
            account
        );
    }

    //include wallet back in fees.
    function includeInFee(address account) external onlyOwner {
        require(_isExcludedFromFee[account] != false, "The wallet is already included!");
        _isExcludedFromFee[account] = false;
        emit AuditLog(
            "We have including the following walled in fees:",
            account
        );
    }

    //Automatic Swap Configuration.
    function setTokensToSwap(
        uint256 _minimumTokensBeforeSwap
    ) external onlyOwner {
        require(
            _minimumTokensBeforeSwap >= 100 ether,
            "You need to enter more than 100 tokens."
        );
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit Log(
            "We have updated minimunTokensBeforeSwap to:",
            minimumTokensBeforeSwap
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        require(swapAndLiquifyEnabled != _enabled, "Value already set");
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //set a new marketing wallet.
    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "setmarketingWallet: ZERO");
        marketingWallet = payable(_marketingWallet);
        emit AuditLog("We have Updated the MarketingWallet:", marketingWallet);
    }




function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        if (amount == 0) return;
        (bool succ, ) = recipient.call{value: amount}("");
        emit TransferStatus("Transfer Status",succ );
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    /////---fallback--////
    //This cannot be removed as is a fallback to the swapAndLiquify
    event SwapETHForTokens(uint256 amountIn, address[] path);

    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            swapOutput, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp + 300
        );
        emit SwapETHForTokens(amount, path);
    }

    // Withdraw ETH that's potentially stuck in the Contract
    function recoverETHfromContract() external onlyOwner {
        uint ethBalance = address(this).balance;
        (bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
        require(succ, "Transfer failed");
        emit AuditLog(
            "We have recover the stuck eth from contract.",
            marketingWallet
        );
    }

    // Withdraw ERC20 tokens that are potentially stuck in Contract
    function recoverTokensFromContract(
        address _tokenAddress,
        uint256 _amount
    ) external onlyOwner {
        require(
            _tokenAddress != address(this),
            "Owner can't claim contract's balance of its own tokens"
        );
        bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
        require(succ, "Transfer failed");
        emit Log("We have recovered tokens from contract:", _amount);
    }
        //Trading Controls for SAFU Contract
        function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapAndLiquifyEnabled = true;
        emit AuditLog("We have Enable Trading and Automatic Swaps:", msg.sender);
    }
    //Updated code to enable swapAndLiquify at the time of enable trade.
}

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":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"TransferStatus","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractDev","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractEdition","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safuWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052731f6b32601345a92fb77656699ae157be9270d9b2600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d66e28df51adf7212918ba8edf9c4b5abedbba2e600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a52b7d2dcc80cd2e4000000600655600560085560056009556000600a556000600b5569021e19e0c9bab2400000600c556000600d556000600e60026101000a81548160ff0219169083151502179055503480156200010c57600080fd5b506200012d620001216200098760201b60201c565b6200098f60201b60201c565b600060384603620001c1577310ed43c718714eb63d5aa57b78b54704e256024e905060016005600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ae565b60614603620002a85773d99d1c33f9fc3444f8101754abc46c52416550d19050600160056000735e5b9be5fd939c578abe5800a90c566eeeba44a573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550734c4daff8a144213896db1dd85730163d17eb6afe600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004ad565b61a86a46036200033b577360ae616a2155ee3d9a68541ba4544862310933d49050600160056000739479c6484a392113bb829a15e7c9e033c9e70d3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ac565b61a4b14603620003ce57731b02da8cb0d097eb8d57a175b88c7d8b47997506905060016005600073ebb415084ce323338cfd3174162964cc23753dfd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ab565b6001461480620003de5750600546145b156200046d57737a250d5630b4cf539739df2c5dacb4c659f2488d90506001600560007371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004aa565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a19062000cae565b60405180910390fd5b5b5b5b5b60065460036000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008190508073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000567573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058d919062000d3a565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200060c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000632919062000d3a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b81526004016200067092919062000d7d565b6020604051808303816000875af115801562000690573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006b6919062000d3a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000752336080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a5360201b60201c565b62000787306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a5360201b60201c565b6001600560006200079d62000c2460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000944919062000dc5565b60405180910390a36200097f600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200098f60201b60201c565b505062000f12565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000abc9062000e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2e9062000ef0565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c17919062000dc5565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082825260208201905092915050565b7f596f75277265206e6f7420426c61646500000000000000000000000000000000600082015250565b600062000c9660108362000c4d565b915062000ca38262000c5e565b602082019050919050565b6000602082019050818103600083015262000cc98162000c87565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d028262000cd5565b9050919050565b62000d148162000cf5565b811462000d2057600080fd5b50565b60008151905062000d348162000d09565b92915050565b60006020828403121562000d535762000d5262000cd0565b5b600062000d638482850162000d23565b91505092915050565b62000d778162000cf5565b82525050565b600060408201905062000d94600083018562000d6c565b62000da3602083018462000d6c565b9392505050565b6000819050919050565b62000dbf8162000daa565b82525050565b600060208201905062000ddc600083018462000db4565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000e4060248362000c4d565b915062000e4d8262000de2565b604082019050919050565b6000602082019050818103600083015262000e738162000e31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000ed860228362000c4d565b915062000ee58262000e7a565b604082019050919050565b6000602082019050818103600083015262000f0b8162000ec9565b9050919050565b60805160a05160c051613b5862000f6560003960006121cf015260008181610dc501528181611d7a01528181611dfa0152611ec10152600081816109c40152818161224201526122690152613b586000f3fe60806040526004361061024a5760003560e01c80636ca60bc611610139578063a457c2d7116100b6578063d1b236b41161007a578063d1b236b41461085d578063d2d7ad8314610888578063dd62ed3e146108b3578063e6be4a72146108f0578063ea2f0b3714610919578063f2fde38b1461094257610251565b8063a457c2d71461078c578063a9059cbb146107c9578063b29ad50a14610806578063c49b9a801461081d578063ce831ed51461084657610251565b806385141a77116100fd57806385141a77146106c95780638a8c523c146106f45780638da5cb5b1461070b57806395d89b4114610736578063a0a8e4601461076157610251565b80636ca60bc6146105f457806370a082311461061f578063715018a61461065c57806375f0a874146106735780637724bad81461069e57610251565b806340763503116101c75780634a74bb021161018b5780634a74bb021461050d5780634ada218b146105385780635342acb4146105635780635d098b38146105a05780635eaa8247146105c957610251565b8063407635031461043a578063437823ec14610465578063461d94761461048e57806347062402146104b757806349bd5a5e146104e257610251565b806323b872dd1161020e57806323b872dd1461033f5780632a4a7ba81461037c5780632b14ca56146103a7578063313ce567146103d257806339509351146103fd57610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e9578063220f66961461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61096b565b6040516102789190612590565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a3919061264b565b6109a4565b6040516102b591906126a6565b60405180910390f35b3480156102ca57600080fd5b506102d36109c2565b6040516102e09190612720565b60405180910390f35b3480156102f557600080fd5b506102fe6109e6565b60405161030b919061274a565b60405180910390f35b34801561032057600080fd5b506103296109f0565b60405161033691906126a6565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612765565b610a03565b60405161037391906126a6565b60405180910390f35b34801561038857600080fd5b50610391610b03565b60405161039e9190612590565b60405180910390f35b3480156103b357600080fd5b506103bc610b3c565b6040516103c9919061274a565b60405180910390f35b3480156103de57600080fd5b506103e7610b42565b6040516103f491906127d4565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f919061264b565b610b47565b60405161043191906126a6565b60405180910390f35b34801561044657600080fd5b5061044f610bf3565b60405161045c919061274a565b60405180910390f35b34801561047157600080fd5b5061048c600480360381019061048791906127ef565b610bf9565b005b34801561049a57600080fd5b506104b560048036038101906104b0919061281c565b610d26565b005b3480156104c357600080fd5b506104cc610dbd565b6040516104d9919061274a565b60405180910390f35b3480156104ee57600080fd5b506104f7610dc3565b6040516105049190612858565b60405180910390f35b34801561051957600080fd5b50610522610de7565b60405161052f91906126a6565b60405180910390f35b34801561054457600080fd5b5061054d610dfa565b60405161055a91906126a6565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906127ef565b610e0d565b60405161059791906126a6565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906127ef565b610e63565b005b3480156105d557600080fd5b506105de610f77565b6040516105eb919061274a565b60405180910390f35b34801561060057600080fd5b50610609610f7d565b604051610616919061274a565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906127ef565b610f83565b604051610653919061274a565b60405180910390f35b34801561066857600080fd5b50610671610fcc565b005b34801561067f57600080fd5b50610688610fe0565b6040516106959190612894565b60405180910390f35b3480156106aa57600080fd5b506106b3611006565b6040516106c09190612590565b60405180910390f35b3480156106d557600080fd5b506106de61103f565b6040516106eb9190612858565b60405180910390f35b34801561070057600080fd5b50610709611045565b005b34801561071757600080fd5b5061072061110c565b60405161072d9190612858565b60405180910390f35b34801561074257600080fd5b5061074b611135565b6040516107589190612590565b60405180910390f35b34801561076d57600080fd5b5061077661116e565b6040516107839190612590565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae919061264b565b6111a7565b6040516107c091906126a6565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061264b565b611253565b6040516107fd91906126a6565b60405180910390f35b34801561081257600080fd5b5061081b611271565b005b34801561082957600080fd5b50610844600480360381019061083f91906128db565b6112fa565b005b34801561085257600080fd5b5061085b6113ab565b005b34801561086957600080fd5b506108726114e3565b60405161087f9190612894565b60405180910390f35b34801561089457600080fd5b5061089d611509565b6040516108aa919061274a565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612908565b61150f565b6040516108e7919061274a565b60405180910390f35b3480156108fc57600080fd5b506109176004803603810190610912919061264b565b611596565b005b34801561092557600080fd5b50610940600480360381019061093b91906127ef565b61172c565b005b34801561094e57600080fd5b50610969600480360381019061096491906127ef565b611859565b005b6040518060400160405280600a81526020017f5472756d702041726d790000000000000000000000000000000000000000000081525081565b60006109b86109b16118dc565b84846118e4565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600654905090565b600e60019054906101000a900460ff1681565b600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a4f6118dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906129ba565b60405180910390fd5b610ada858585611aad565b610af785610ae66118dc565b8584610af29190612a09565b6118e4565b60019150509392505050565b6040518060400160405280600781526020017f466163746f72790000000000000000000000000000000000000000000000000081525081565b60095481565b601281565b6000610be9610b546118dc565b848460046000610b626118dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be49190612a3d565b6118e4565b6001905092915050565b600b5481565b610c01611fee565b60011515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90612abd565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610d1b9190612b4f565b60405180910390a150565b610d2e611fee565b68056bc75e2d63100000811015610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190612bef565b60405180910390fd5b80600c819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600c54604051610db29190612c81565b60405180910390a150565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e6b611fee565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190612cfb565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610f6c9190612dae565b60405180910390a150565b600d5481565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fd4611fee565b610fde600061206c565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600381526020017f434647000000000000000000000000000000000000000000000000000000000081525081565b61dead81565b61104d611fee565b600e60009054906101000a900460ff161561109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490612e28565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00336040516111029190612eba565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600681526020017f5452554d5058000000000000000000000000000000000000000000000000000081525081565b6040518060400160405280600381526020017f332e33000000000000000000000000000000000000000000000000000000000081525081565b60006112496111b46118dc565b8484600460006111c26118dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112449190612a09565b6118e4565b6001905092915050565b60006112676112606118dc565b8484611aad565b6001905092915050565b6001600e60016101000a81548160ff021916908315150217905550600061129730610f83565b90506112a281612130565b60004790506112d3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612338565b6000600a8190555050506000600e60016101000a81548160ff021916908315150217905550565b611302611fee565b801515600e60029054906101000a900460ff16151503611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134e90612f34565b60405180910390fd5b80600e60026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113a091906126a6565b60405180910390a150565b6113b3611fee565b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161140090612f85565b60006040518083038185875af1925050503d806000811461143d576040519150601f19603f3d011682016040523d82523d6000602084013e611442565b606091505b5050905080611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90612fe6565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516114d79190613078565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61159e611fee565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390613118565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161166b929190613138565b6020604051808303816000875af115801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae9190613176565b9050806116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790612fe6565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b58260405161171f9190613215565b60405180910390a1505050565b611734611fee565b60001515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be9061328f565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a008160405161184e9190613321565b60405180910390a150565b611861611fee565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c7906133c1565b60405180910390fd5b6118d98161206c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90613453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b9906134e5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aa0919061274a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613577565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613609565b60405180910390fd5b60008111611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc59061369b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c479061372d565b60405180910390fd5b600e60009054906101000a900460ff1680611cb45750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d085750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613799565b60405180910390fd5b6000611d5230610f83565b90506000600c5482101590506000600e60019054906101000a900460ff16158015611dc957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd25750815b8015611dea5750600e60029054906101000a900460ff165b15611df857611df7611271565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611e9d5750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ebf57606484600954611eb291906137b9565b611ebc919061382a565b90505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f645750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f8657606484600854611f7991906137b9565b611f83919061382a565b90505b8084611f929190612a09565b93506000811115611fdb57611fa88630836123ea565b80600a6000828254611fba9190612a3d565b9250508190555080600b6000828254611fd39190612a3d565b925050819055505b611fe68686866123ea565b505050505050565b611ff66118dc565b73ffffffffffffffffffffffffffffffffffffffff1661201461110c565b73ffffffffffffffffffffffffffffffffffffffff161461206a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612061906138a7565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561214d5761214c6138c7565b5b60405190808252806020026020018201604052801561217b5781602001602082028036833780820191505090505b5090503081600081518110612193576121926138f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612202576122016138f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612267307f0000000000000000000000000000000000000000000000000000000000000000846118e4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122c9959493929190613a1e565b600060405180830381600087803b1580156122e357600080fd5b505af11580156122f7573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161232c929190613a78565b60405180910390a15050565b60008103156123e65760008273ffffffffffffffffffffffffffffffffffffffff168260405161236790612f85565b60006040518083038185875af1925050503d80600081146123a4576040519150601f19603f3d011682016040523d82523d6000602084013e6123a9565b606091505b505090507f232b4b3d4096931affa643ef458ec66ca050f6e6f4c2506c93fb2bcd50990212816040516123dc9190613af4565b60405180910390a1505b5050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124399190612a09565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461248f9190612a3d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124f3919061274a565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561253a57808201518184015260208101905061251f565b60008484015250505050565b6000601f19601f8301169050919050565b600061256282612500565b61256c818561250b565b935061257c81856020860161251c565b61258581612546565b840191505092915050565b600060208201905081810360008301526125aa8184612557565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125e2826125b7565b9050919050565b6125f2816125d7565b81146125fd57600080fd5b50565b60008135905061260f816125e9565b92915050565b6000819050919050565b61262881612615565b811461263357600080fd5b50565b6000813590506126458161261f565b92915050565b60008060408385031215612662576126616125b2565b5b600061267085828601612600565b925050602061268185828601612636565b9150509250929050565b60008115159050919050565b6126a08161268b565b82525050565b60006020820190506126bb6000830184612697565b92915050565b6000819050919050565b60006126e66126e16126dc846125b7565b6126c1565b6125b7565b9050919050565b60006126f8826126cb565b9050919050565b600061270a826126ed565b9050919050565b61271a816126ff565b82525050565b60006020820190506127356000830184612711565b92915050565b61274481612615565b82525050565b600060208201905061275f600083018461273b565b92915050565b60008060006060848603121561277e5761277d6125b2565b5b600061278c86828701612600565b935050602061279d86828701612600565b92505060406127ae86828701612636565b9150509250925092565b600060ff82169050919050565b6127ce816127b8565b82525050565b60006020820190506127e960008301846127c5565b92915050565b600060208284031215612805576128046125b2565b5b600061281384828501612600565b91505092915050565b600060208284031215612832576128316125b2565b5b600061284084828501612636565b91505092915050565b612852816125d7565b82525050565b600060208201905061286d6000830184612849565b92915050565b600061287e826125b7565b9050919050565b61288e81612873565b82525050565b60006020820190506128a96000830184612885565b92915050565b6128b88161268b565b81146128c357600080fd5b50565b6000813590506128d5816128af565b92915050565b6000602082840312156128f1576128f06125b2565b5b60006128ff848285016128c6565b91505092915050565b6000806040838503121561291f5761291e6125b2565b5b600061292d85828601612600565b925050602061293e85828601612600565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006129a460288361250b565b91506129af82612948565b604082019050919050565b600060208201905081810360008301526129d381612997565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a1482612615565b9150612a1f83612615565b9250828203905081811115612a3757612a366129da565b5b92915050565b6000612a4882612615565b9150612a5383612615565b9250828201905080821115612a6b57612a6a6129da565b5b92915050565b7f5468652077616c6c657420697320616c7265616479206578636c756465642100600082015250565b6000612aa7601f8361250b565b9150612ab282612a71565b602082019050919050565b60006020820190508181036000830152612ad681612a9a565b9050919050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612b39602e8361250b565b9150612b4482612add565b604082019050919050565b60006040820190508181036000830152612b6881612b2c565b9050612b776020830184612849565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b6000612bd960278361250b565b9150612be482612b7d565b604082019050919050565b60006020820190508181036000830152612c0881612bcc565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b6000612c6b602b8361250b565b9150612c7682612c0f565b604082019050919050565b60006040820190508181036000830152612c9a81612c5e565b9050612ca9602083018461273b565b92915050565b7f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612ce560188361250b565b9150612cf082612caf565b602082019050919050565b60006020820190508181036000830152612d1481612cd8565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612d7760248361250b565b9150612d8282612d1b565b604082019050919050565b6000612d98826126ed565b9050919050565b612da881612d8d565b82525050565b60006040820190508181036000830152612dc781612d6a565b9050612dd66020830184612d9f565b92915050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000612e1260188361250b565b9150612e1d82612ddc565b602082019050919050565b60006020820190508181036000830152612e4181612e05565b9050919050565b7f5765206861766520456e61626c652054726164696e6720616e64204175746f6d60008201527f617469632053776170733a000000000000000000000000000000000000000000602082015250565b6000612ea4602b8361250b565b9150612eaf82612e48565b604082019050919050565b60006040820190508181036000830152612ed381612e97565b9050612ee26020830184612849565b92915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000612f1e60118361250b565b9150612f2982612ee8565b602082019050919050565b60006020820190508181036000830152612f4d81612f11565b9050919050565b600081905092915050565b50565b6000612f6f600083612f54565b9150612f7a82612f5f565b600082019050919050565b6000612f9082612f62565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612fd0600f8361250b565b9150612fdb82612f9a565b602082019050919050565b60006020820190508181036000830152612fff81612fc3565b9050919050565b7f57652068617665207265636f7665722074686520737475636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b6000613062602c8361250b565b915061306d82613006565b604082019050919050565b6000604082019050818103600083015261309181613055565b90506130a06020830184612d9f565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b600061310260368361250b565b915061310d826130a6565b604082019050919050565b60006020820190508181036000830152613131816130f5565b9050919050565b600060408201905061314d6000830185612d9f565b61315a602083018461273b565b9392505050565b600081519050613170816128af565b92915050565b60006020828403121561318c5761318b6125b2565b5b600061319a84828501613161565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b60006131ff60278361250b565b915061320a826131a3565b604082019050919050565b6000604082019050818103600083015261322e816131f2565b905061323d602083018461273b565b92915050565b7f5468652077616c6c657420697320616c726561647920696e636c756465642100600082015250565b6000613279601f8361250b565b915061328482613243565b602082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b600061330b602f8361250b565b9150613316826132af565b604082019050919050565b6000604082019050818103600083015261333a816132fe565b90506133496020830184612849565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133ab60268361250b565b91506133b68261334f565b604082019050919050565b600060208201905081810360008301526133da8161339e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061343d60248361250b565b9150613448826133e1565b604082019050919050565b6000602082019050818103600083015261346c81613430565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006134cf60228361250b565b91506134da82613473565b604082019050919050565b600060208201905081810360008301526134fe816134c2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061356160258361250b565b915061356c82613505565b604082019050919050565b6000602082019050818103600083015261359081613554565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135f360238361250b565b91506135fe82613597565b604082019050919050565b60006020820190508181036000830152613622816135e6565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061368560298361250b565b915061369082613629565b604082019050919050565b600060208201905081810360008301526136b481613678565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061371760268361250b565b9150613722826136bb565b604082019050919050565b600060208201905081810360008301526137468161370a565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b600061378360188361250b565b915061378e8261374d565b602082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b60006137c482612615565b91506137cf83612615565b92508282026137dd81612615565b915082820484148315176137f4576137f36129da565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383582612615565b915061384083612615565b9250826138505761384f6137fb565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061389160208361250b565b915061389c8261385b565b602082019050919050565b600060208201905081810360008301526138c081613884565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061394a61394561394084613925565b6126c1565b612615565b9050919050565b61395a8161392f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613995816125d7565b82525050565b60006139a7838361398c565b60208301905092915050565b6000602082019050919050565b60006139cb82613960565b6139d5818561396b565b93506139e08361397c565b8060005b83811015613a115781516139f8888261399b565b9750613a03836139b3565b9250506001810190506139e4565b5085935050505092915050565b600060a082019050613a33600083018861273b565b613a406020830187613951565b8181036040830152613a5281866139c0565b9050613a616060830185612849565b613a6e608083018461273b565b9695505050505050565b6000604082019050613a8d600083018561273b565b8181036020830152613a9f81846139c0565b90509392505050565b7f5472616e73666572205374617475730000000000000000000000000000000000600082015250565b6000613ade600f8361250b565b9150613ae982613aa8565b602082019050919050565b60006040820190508181036000830152613b0d81613ad1565b9050613b1c6020830184612697565b9291505056fea26469706673582212203e27fa4ba79e28f87dc67c3baefc171aa7b3e5dbdfe8cad1b687e62fa3b1058264736f6c63430008130033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636ca60bc611610139578063a457c2d7116100b6578063d1b236b41161007a578063d1b236b41461085d578063d2d7ad8314610888578063dd62ed3e146108b3578063e6be4a72146108f0578063ea2f0b3714610919578063f2fde38b1461094257610251565b8063a457c2d71461078c578063a9059cbb146107c9578063b29ad50a14610806578063c49b9a801461081d578063ce831ed51461084657610251565b806385141a77116100fd57806385141a77146106c95780638a8c523c146106f45780638da5cb5b1461070b57806395d89b4114610736578063a0a8e4601461076157610251565b80636ca60bc6146105f457806370a082311461061f578063715018a61461065c57806375f0a874146106735780637724bad81461069e57610251565b806340763503116101c75780634a74bb021161018b5780634a74bb021461050d5780634ada218b146105385780635342acb4146105635780635d098b38146105a05780635eaa8247146105c957610251565b8063407635031461043a578063437823ec14610465578063461d94761461048e57806347062402146104b757806349bd5a5e146104e257610251565b806323b872dd1161020e57806323b872dd1461033f5780632a4a7ba81461037c5780632b14ca56146103a7578063313ce567146103d257806339509351146103fd57610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e9578063220f66961461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61096b565b6040516102789190612590565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a3919061264b565b6109a4565b6040516102b591906126a6565b60405180910390f35b3480156102ca57600080fd5b506102d36109c2565b6040516102e09190612720565b60405180910390f35b3480156102f557600080fd5b506102fe6109e6565b60405161030b919061274a565b60405180910390f35b34801561032057600080fd5b506103296109f0565b60405161033691906126a6565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612765565b610a03565b60405161037391906126a6565b60405180910390f35b34801561038857600080fd5b50610391610b03565b60405161039e9190612590565b60405180910390f35b3480156103b357600080fd5b506103bc610b3c565b6040516103c9919061274a565b60405180910390f35b3480156103de57600080fd5b506103e7610b42565b6040516103f491906127d4565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f919061264b565b610b47565b60405161043191906126a6565b60405180910390f35b34801561044657600080fd5b5061044f610bf3565b60405161045c919061274a565b60405180910390f35b34801561047157600080fd5b5061048c600480360381019061048791906127ef565b610bf9565b005b34801561049a57600080fd5b506104b560048036038101906104b0919061281c565b610d26565b005b3480156104c357600080fd5b506104cc610dbd565b6040516104d9919061274a565b60405180910390f35b3480156104ee57600080fd5b506104f7610dc3565b6040516105049190612858565b60405180910390f35b34801561051957600080fd5b50610522610de7565b60405161052f91906126a6565b60405180910390f35b34801561054457600080fd5b5061054d610dfa565b60405161055a91906126a6565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906127ef565b610e0d565b60405161059791906126a6565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906127ef565b610e63565b005b3480156105d557600080fd5b506105de610f77565b6040516105eb919061274a565b60405180910390f35b34801561060057600080fd5b50610609610f7d565b604051610616919061274a565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906127ef565b610f83565b604051610653919061274a565b60405180910390f35b34801561066857600080fd5b50610671610fcc565b005b34801561067f57600080fd5b50610688610fe0565b6040516106959190612894565b60405180910390f35b3480156106aa57600080fd5b506106b3611006565b6040516106c09190612590565b60405180910390f35b3480156106d557600080fd5b506106de61103f565b6040516106eb9190612858565b60405180910390f35b34801561070057600080fd5b50610709611045565b005b34801561071757600080fd5b5061072061110c565b60405161072d9190612858565b60405180910390f35b34801561074257600080fd5b5061074b611135565b6040516107589190612590565b60405180910390f35b34801561076d57600080fd5b5061077661116e565b6040516107839190612590565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae919061264b565b6111a7565b6040516107c091906126a6565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061264b565b611253565b6040516107fd91906126a6565b60405180910390f35b34801561081257600080fd5b5061081b611271565b005b34801561082957600080fd5b50610844600480360381019061083f91906128db565b6112fa565b005b34801561085257600080fd5b5061085b6113ab565b005b34801561086957600080fd5b506108726114e3565b60405161087f9190612894565b60405180910390f35b34801561089457600080fd5b5061089d611509565b6040516108aa919061274a565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612908565b61150f565b6040516108e7919061274a565b60405180910390f35b3480156108fc57600080fd5b506109176004803603810190610912919061264b565b611596565b005b34801561092557600080fd5b50610940600480360381019061093b91906127ef565b61172c565b005b34801561094e57600080fd5b50610969600480360381019061096491906127ef565b611859565b005b6040518060400160405280600a81526020017f5472756d702041726d790000000000000000000000000000000000000000000081525081565b60006109b86109b16118dc565b84846118e4565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600654905090565b600e60019054906101000a900460ff1681565b600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a4f6118dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906129ba565b60405180910390fd5b610ada858585611aad565b610af785610ae66118dc565b8584610af29190612a09565b6118e4565b60019150509392505050565b6040518060400160405280600781526020017f466163746f72790000000000000000000000000000000000000000000000000081525081565b60095481565b601281565b6000610be9610b546118dc565b848460046000610b626118dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be49190612a3d565b6118e4565b6001905092915050565b600b5481565b610c01611fee565b60011515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90612abd565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610d1b9190612b4f565b60405180910390a150565b610d2e611fee565b68056bc75e2d63100000811015610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190612bef565b60405180910390fd5b80600c819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600c54604051610db29190612c81565b60405180910390a150565b60085481565b7f00000000000000000000000083055e96fe2bc587e64650dbdb8f44ace449b0bc81565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e6b611fee565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190612cfb565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610f6c9190612dae565b60405180910390a150565b600d5481565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fd4611fee565b610fde600061206c565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600381526020017f434647000000000000000000000000000000000000000000000000000000000081525081565b61dead81565b61104d611fee565b600e60009054906101000a900460ff161561109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490612e28565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00336040516111029190612eba565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600681526020017f5452554d5058000000000000000000000000000000000000000000000000000081525081565b6040518060400160405280600381526020017f332e33000000000000000000000000000000000000000000000000000000000081525081565b60006112496111b46118dc565b8484600460006111c26118dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112449190612a09565b6118e4565b6001905092915050565b60006112676112606118dc565b8484611aad565b6001905092915050565b6001600e60016101000a81548160ff021916908315150217905550600061129730610f83565b90506112a281612130565b60004790506112d3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612338565b6000600a8190555050506000600e60016101000a81548160ff021916908315150217905550565b611302611fee565b801515600e60029054906101000a900460ff16151503611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134e90612f34565b60405180910390fd5b80600e60026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113a091906126a6565b60405180910390a150565b6113b3611fee565b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161140090612f85565b60006040518083038185875af1925050503d806000811461143d576040519150601f19603f3d011682016040523d82523d6000602084013e611442565b606091505b5050905080611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90612fe6565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516114d79190613078565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61159e611fee565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390613118565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161166b929190613138565b6020604051808303816000875af115801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae9190613176565b9050806116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790612fe6565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b58260405161171f9190613215565b60405180910390a1505050565b611734611fee565b60001515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be9061328f565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a008160405161184e9190613321565b60405180910390a150565b611861611fee565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c7906133c1565b60405180910390fd5b6118d98161206c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90613453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b9906134e5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aa0919061274a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613577565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613609565b60405180910390fd5b60008111611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc59061369b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c479061372d565b60405180910390fd5b600e60009054906101000a900460ff1680611cb45750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d085750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613799565b60405180910390fd5b6000611d5230610f83565b90506000600c5482101590506000600e60019054906101000a900460ff16158015611dc957507f00000000000000000000000083055e96fe2bc587e64650dbdb8f44ace449b0bc73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd25750815b8015611dea5750600e60029054906101000a900460ff165b15611df857611df7611271565b5b7f00000000000000000000000083055e96fe2bc587e64650dbdb8f44ace449b0bc73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611e9d5750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ebf57606484600954611eb291906137b9565b611ebc919061382a565b90505b7f00000000000000000000000083055e96fe2bc587e64650dbdb8f44ace449b0bc73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f645750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f8657606484600854611f7991906137b9565b611f83919061382a565b90505b8084611f929190612a09565b93506000811115611fdb57611fa88630836123ea565b80600a6000828254611fba9190612a3d565b9250508190555080600b6000828254611fd39190612a3d565b925050819055505b611fe68686866123ea565b505050505050565b611ff66118dc565b73ffffffffffffffffffffffffffffffffffffffff1661201461110c565b73ffffffffffffffffffffffffffffffffffffffff161461206a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612061906138a7565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561214d5761214c6138c7565b5b60405190808252806020026020018201604052801561217b5781602001602082028036833780820191505090505b5090503081600081518110612193576121926138f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612202576122016138f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612267307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118e4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122c9959493929190613a1e565b600060405180830381600087803b1580156122e357600080fd5b505af11580156122f7573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161232c929190613a78565b60405180910390a15050565b60008103156123e65760008273ffffffffffffffffffffffffffffffffffffffff168260405161236790612f85565b60006040518083038185875af1925050503d80600081146123a4576040519150601f19603f3d011682016040523d82523d6000602084013e6123a9565b606091505b505090507f232b4b3d4096931affa643ef458ec66ca050f6e6f4c2506c93fb2bcd50990212816040516123dc9190613af4565b60405180910390a1505b5050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124399190612a09565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461248f9190612a3d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124f3919061274a565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561253a57808201518184015260208101905061251f565b60008484015250505050565b6000601f19601f8301169050919050565b600061256282612500565b61256c818561250b565b935061257c81856020860161251c565b61258581612546565b840191505092915050565b600060208201905081810360008301526125aa8184612557565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125e2826125b7565b9050919050565b6125f2816125d7565b81146125fd57600080fd5b50565b60008135905061260f816125e9565b92915050565b6000819050919050565b61262881612615565b811461263357600080fd5b50565b6000813590506126458161261f565b92915050565b60008060408385031215612662576126616125b2565b5b600061267085828601612600565b925050602061268185828601612636565b9150509250929050565b60008115159050919050565b6126a08161268b565b82525050565b60006020820190506126bb6000830184612697565b92915050565b6000819050919050565b60006126e66126e16126dc846125b7565b6126c1565b6125b7565b9050919050565b60006126f8826126cb565b9050919050565b600061270a826126ed565b9050919050565b61271a816126ff565b82525050565b60006020820190506127356000830184612711565b92915050565b61274481612615565b82525050565b600060208201905061275f600083018461273b565b92915050565b60008060006060848603121561277e5761277d6125b2565b5b600061278c86828701612600565b935050602061279d86828701612600565b92505060406127ae86828701612636565b9150509250925092565b600060ff82169050919050565b6127ce816127b8565b82525050565b60006020820190506127e960008301846127c5565b92915050565b600060208284031215612805576128046125b2565b5b600061281384828501612600565b91505092915050565b600060208284031215612832576128316125b2565b5b600061284084828501612636565b91505092915050565b612852816125d7565b82525050565b600060208201905061286d6000830184612849565b92915050565b600061287e826125b7565b9050919050565b61288e81612873565b82525050565b60006020820190506128a96000830184612885565b92915050565b6128b88161268b565b81146128c357600080fd5b50565b6000813590506128d5816128af565b92915050565b6000602082840312156128f1576128f06125b2565b5b60006128ff848285016128c6565b91505092915050565b6000806040838503121561291f5761291e6125b2565b5b600061292d85828601612600565b925050602061293e85828601612600565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006129a460288361250b565b91506129af82612948565b604082019050919050565b600060208201905081810360008301526129d381612997565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a1482612615565b9150612a1f83612615565b9250828203905081811115612a3757612a366129da565b5b92915050565b6000612a4882612615565b9150612a5383612615565b9250828201905080821115612a6b57612a6a6129da565b5b92915050565b7f5468652077616c6c657420697320616c7265616479206578636c756465642100600082015250565b6000612aa7601f8361250b565b9150612ab282612a71565b602082019050919050565b60006020820190508181036000830152612ad681612a9a565b9050919050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612b39602e8361250b565b9150612b4482612add565b604082019050919050565b60006040820190508181036000830152612b6881612b2c565b9050612b776020830184612849565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b6000612bd960278361250b565b9150612be482612b7d565b604082019050919050565b60006020820190508181036000830152612c0881612bcc565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b6000612c6b602b8361250b565b9150612c7682612c0f565b604082019050919050565b60006040820190508181036000830152612c9a81612c5e565b9050612ca9602083018461273b565b92915050565b7f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612ce560188361250b565b9150612cf082612caf565b602082019050919050565b60006020820190508181036000830152612d1481612cd8565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612d7760248361250b565b9150612d8282612d1b565b604082019050919050565b6000612d98826126ed565b9050919050565b612da881612d8d565b82525050565b60006040820190508181036000830152612dc781612d6a565b9050612dd66020830184612d9f565b92915050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000612e1260188361250b565b9150612e1d82612ddc565b602082019050919050565b60006020820190508181036000830152612e4181612e05565b9050919050565b7f5765206861766520456e61626c652054726164696e6720616e64204175746f6d60008201527f617469632053776170733a000000000000000000000000000000000000000000602082015250565b6000612ea4602b8361250b565b9150612eaf82612e48565b604082019050919050565b60006040820190508181036000830152612ed381612e97565b9050612ee26020830184612849565b92915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000612f1e60118361250b565b9150612f2982612ee8565b602082019050919050565b60006020820190508181036000830152612f4d81612f11565b9050919050565b600081905092915050565b50565b6000612f6f600083612f54565b9150612f7a82612f5f565b600082019050919050565b6000612f9082612f62565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612fd0600f8361250b565b9150612fdb82612f9a565b602082019050919050565b60006020820190508181036000830152612fff81612fc3565b9050919050565b7f57652068617665207265636f7665722074686520737475636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b6000613062602c8361250b565b915061306d82613006565b604082019050919050565b6000604082019050818103600083015261309181613055565b90506130a06020830184612d9f565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b600061310260368361250b565b915061310d826130a6565b604082019050919050565b60006020820190508181036000830152613131816130f5565b9050919050565b600060408201905061314d6000830185612d9f565b61315a602083018461273b565b9392505050565b600081519050613170816128af565b92915050565b60006020828403121561318c5761318b6125b2565b5b600061319a84828501613161565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b60006131ff60278361250b565b915061320a826131a3565b604082019050919050565b6000604082019050818103600083015261322e816131f2565b905061323d602083018461273b565b92915050565b7f5468652077616c6c657420697320616c726561647920696e636c756465642100600082015250565b6000613279601f8361250b565b915061328482613243565b602082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b600061330b602f8361250b565b9150613316826132af565b604082019050919050565b6000604082019050818103600083015261333a816132fe565b90506133496020830184612849565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133ab60268361250b565b91506133b68261334f565b604082019050919050565b600060208201905081810360008301526133da8161339e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061343d60248361250b565b9150613448826133e1565b604082019050919050565b6000602082019050818103600083015261346c81613430565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006134cf60228361250b565b91506134da82613473565b604082019050919050565b600060208201905081810360008301526134fe816134c2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061356160258361250b565b915061356c82613505565b604082019050919050565b6000602082019050818103600083015261359081613554565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135f360238361250b565b91506135fe82613597565b604082019050919050565b60006020820190508181036000830152613622816135e6565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061368560298361250b565b915061369082613629565b604082019050919050565b600060208201905081810360008301526136b481613678565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061371760268361250b565b9150613722826136bb565b604082019050919050565b600060208201905081810360008301526137468161370a565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b600061378360188361250b565b915061378e8261374d565b602082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b60006137c482612615565b91506137cf83612615565b92508282026137dd81612615565b915082820484148315176137f4576137f36129da565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383582612615565b915061384083612615565b9250826138505761384f6137fb565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061389160208361250b565b915061389c8261385b565b602082019050919050565b600060208201905081810360008301526138c081613884565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061394a61394561394084613925565b6126c1565b612615565b9050919050565b61395a8161392f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613995816125d7565b82525050565b60006139a7838361398c565b60208301905092915050565b6000602082019050919050565b60006139cb82613960565b6139d5818561396b565b93506139e08361397c565b8060005b83811015613a115781516139f8888261399b565b9750613a03836139b3565b9250506001810190506139e4565b5085935050505092915050565b600060a082019050613a33600083018861273b565b613a406020830187613951565b8181036040830152613a5281866139c0565b9050613a616060830185612849565b613a6e608083018461273b565b9695505050505050565b6000604082019050613a8d600083018561273b565b8181036020830152613a9f81846139c0565b90509392505050565b7f5472616e73666572205374617475730000000000000000000000000000000000600082015250565b6000613ade600f8361250b565b9150613ae982613aa8565b602082019050919050565b60006040820190508181036000830152613b0d81613ad1565b9050613b1c6020830184612697565b9291505056fea26469706673582212203e27fa4ba79e28f87dc67c3baefc171aa7b3e5dbdfe8cad1b687e62fa3b1058264736f6c63430008130033

Deployed Bytecode Sourcemap

22897:15485:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24485:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28695:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25090:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27965:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25280:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28926:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23117:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24679:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24581:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29454:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24764:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34139:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34875:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24648:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25148:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25315:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25019:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33925:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35601:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24927:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24714:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28068:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13017:103;;;;;;;;;;;;;:::i;:::-;;23226:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23068:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23544:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38037:268;;;;;;;;;;;;;:::i;:::-;;12369:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24534:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23015:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29794:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28235:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32459:303;;;;;;;;;;;;;:::i;:::-;;35311:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37080:359;;;;;;;;;;;;;:::i;:::-;;23402:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24821:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28477:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37516:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34506:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13275:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24485:42;;;;;;;;;;;;;;;;;;;:::o;28695:186::-;28795:4;28812:39;28821:12;:10;:12::i;:::-;28835:7;28844:6;28812:8;:39::i;:::-;28869:4;28862:11;;28695:186;;;;:::o;25090:51::-;;;:::o;27965:95::-;28018:7;28045;;28038:14;;27965:95;:::o;25280:28::-;;;;;;;;;;;;;:::o;28926:478::-;29058:4;29075:21;29099:11;:19;29111:6;29099:19;;;;;;;;;;;;;;;:33;29119:12;:10;:12::i;:::-;29099:33;;;;;;;;;;;;;;;;29075:57;;29185:6;29165:16;:26;;29143:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;29270:36;29280:6;29288:9;29299:6;29270:9;:36::i;:::-;29317:57;29326:6;29334:12;:10;:12::i;:::-;29367:6;29348:16;:25;;;;:::i;:::-;29317:8;:57::i;:::-;29392:4;29385:11;;;28926:478;;;;;:::o;23117:50::-;;;;;;;;;;;;;;;;;;;:::o;24679:26::-;;;;:::o;24581:35::-;24614:2;24581:35;:::o;29454:290::-;29567:4;29584:130;29607:12;:10;:12::i;:::-;29634:7;29693:10;29656:11;:25;29668:12;:10;:12::i;:::-;29656:25;;;;;;;;;;;;;;;:34;29682:7;29656:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;29584:8;:130::i;:::-;29732:4;29725:11;;29454:290;;;;:::o;24764:48::-;;;;:::o;34139:323::-;12255:13;:11;:13::i;:::-;34249:4:::1;34218:35;;:18;:27;34237:7;34218:27;;;;;;;;;;;;;;;;;;;;;;;;;:35;;::::0;34210:79:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34330:4;34300:18;:27;34319:7;34300:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34350:104;34436:7;34350:104;;;;;;:::i;:::-;;;;;;;;34139:323:::0;:::o;34875:428::-;12255:13;:11;:13::i;:::-;35030:9:::1;35002:24;:37;;34980:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;35143:24;35117:23;:50;;;;35183:112;35261:23;;35183:112;;;;;;:::i;:::-;;;;;;;;34875:428:::0;:::o;24648:22::-;;;;:::o;25148:38::-;;;:::o;25315:41::-;;;;;;;;;;;;;:::o;25019:26::-;;;;;;;;;;;;;:::o;33925:126::-;33992:4;34016:18;:27;34035:7;34016:27;;;;;;;;;;;;;;;;;;;;;;;;;34009:34;;33925:126;;;:::o;35601:294::-;12255:13;:11;:13::i;:::-;35721:1:::1;35693:30;;:16;:30;;::::0;35685:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35789:16;35763:15;;:43;;;;;;;;;;;;;;;;;;35822:65;35871:15;;;;;;;;;;;35822:65;;;;;;:::i;:::-;;;;;;;;35601:294:::0;:::o;24927:29::-;;;;:::o;24714:43::-;;;;:::o;28068:117::-;28134:7;28161;:16;28169:7;28161:16;;;;;;;;;;;;;;;;28154:23;;28068:117;;;:::o;13017:103::-;12255:13;:11;:13::i;:::-;13082:30:::1;13109:1;13082:18;:30::i;:::-;13017:103::o:0;23226:101::-;;;;;;;;;;;;;:::o;23068:42::-;;;;;;;;;;;;;;;;;;;:::o;23544:88::-;23590:42;23544:88;:::o;38037:268::-;12255:13;:11;:13::i;:::-;38100:14:::1;;;;;;;;;;;38099:15;38091:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38171:4;38154:14;;:21;;;;;;;;;;;;;;;;;;38210:4;38186:21;;:28;;;;;;;;;;;;;;;;;;38230:67;38286:10;38230:67;;;;;;:::i;:::-;;;;;;;;38037:268::o:0;12369:87::-;12415:7;12442:6;;;;;;;;;;;12435:13;;12369:87;:::o;24534:40::-;;;;;;;;;;;;;;;;;;;:::o;23015:46::-;;;;;;;;;;;;;;;;;;;:::o;29794:300::-;29912:4;29929:135;29952:12;:10;:12::i;:::-;29979:7;30038:15;30001:11;:25;30013:12;:10;:12::i;:::-;30001:25;;;;;;;;;;;;;;;:34;30027:7;30001:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;29929:8;:135::i;:::-;30082:4;30075:11;;29794:300;;;;:::o;28235:192::-;28338:4;28355:42;28365:12;:10;:12::i;:::-;28379:9;28390:6;28355:9;:42::i;:::-;28415:4;28408:11;;28235:192;;;;:::o;32459:303::-;25418:4;25399:16;;:23;;;;;;;;;;;;;;;;;;32515:19:::1;32537:24;32555:4;32537:9;:24::i;:::-;32515:46;;32572:29;32589:11;32572:16;:29::i;:::-;32612:15;32630:21;32612:39;;32664:49;32685:15;;;;;;;;;;;32702:10;32664:20;:49::i;:::-;32753:1;32726:24;:28;;;;32504:258;;25464:5:::0;25445:16;;:24;;;;;;;;;;;;;;;;;;32459:303::o;35311:247::-;12255:13;:11;:13::i;:::-;35423:8:::1;35398:33;;:21;;;;;;;;;;;:33;;::::0;35390:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35488:8;35464:21;;:32;;;;;;;;;;;;;;;;;;35512:38;35541:8;35512:38;;;;;;:::i;:::-;;;;;;;;35311:247:::0;:::o;37080:359::-;12255:13;:11;:13::i;:::-;37144:15:::1;37162:21;37144:39;;37195:9;37218:15;;;;;;;;;;;37210:29;;37247:10;37210:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37194:68;;;37281:4;37273:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;37321:110;37405:15;;;;;;;;;;;37321:110;;;;;;:::i;:::-;;;;;;;;37133:306;;37080:359::o:0;23402:96::-;;;;;;;;;;;;;:::o;24821:53::-;;;;:::o;28477:170::-;28584:7;28611:11;:19;28623:6;28611:19;;;;;;;;;;;;;;;:28;28631:7;28611:28;;;;;;;;;;;;;;;;28604:35;;28477:170;;;;:::o;37516:465::-;12255:13;:11;:13::i;:::-;37693:4:::1;37668:30;;:13;:30;;::::0;37646:134:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37791:9;37810:13;37803:30;;;37834:15;;;;;;;;;;;37851:7;37803:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37791:68;;37878:4;37870:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;37918:55;37965:7;37918:55;;;;;;:::i;:::-;;;;;;;;37635:346;37516:465:::0;;:::o;34506:324::-;12255:13;:11;:13::i;:::-;34614:5:::1;34583:36;;:18;:27;34602:7;34583:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;::::0;34575:80:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34696:5;34666:18;:27;34685:7;34666:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34717:105;34804:7;34717:105;;;;;;:::i;:::-;;;;;;;;34506:324:::0;:::o;13275:238::-;12255:13;:11;:13::i;:::-;13398:1:::1;13378:22;;:8;:22;;::::0;13356:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13477:28;13496:8;13477:18;:28::i;:::-;13275:238:::0;:::o;100:98::-;153:7;180:10;173:17;;100:98;:::o;30126:341::-;30238:1;30220:20;;:6;:20;;;30212:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30319:1;30300:21;;:7;:21;;;30292:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30404:6;30373:11;:19;30385:6;30373:19;;;;;;;;;;;;;;;:28;30393:7;30373:28;;;;;;;;;;;;;;;:37;;;;30443:7;30426:33;;30435:6;30426:33;;;30452:6;30426:33;;;;;;:::i;:::-;;;;;;;;30126:341;;;:::o;30600:1624::-;30704:1;30688:18;;:4;:18;;;30680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30781:1;30767:16;;:2;:16;;;30759:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30851:1;30842:6;:10;30834:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30948:6;30931:7;:13;30939:4;30931:13;;;;;;;;;;;;;;;;:23;;30909:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31087:14;;;;;;;;;;;:42;;;;31105:18;:24;31124:4;31105:24;;;;;;;;;;;;;;;;;;;;;;;;;31087:42;:68;;;;31133:18;:22;31152:2;31133:22;;;;;;;;;;;;;;;;;;;;;;;;;31087:68;31079:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;31241:28;31272:24;31290:4;31272:9;:24::i;:::-;31241:55;;31307:28;31375:23;;31338:20;:60;;31307:91;;31409:8;31535:16;;;;;;;;;;;31534:17;:55;;;;;31576:13;31568:21;;:4;:21;;;;31534:55;:95;;;;;31606:23;31534:95;:133;;;;;31646:21;;;;;;;;;;;31534:133;31516:206;;;31694:16;:14;:16::i;:::-;31516:206;31742:13;31736:19;;:2;:19;;;:48;;;;;31760:18;:24;31779:4;31760:24;;;;;;;;;;;;;;;;;;;;;;;;;31759:25;31736:48;31732:111;;;31828:3;31818:6;31808:7;;:16;;;;:::i;:::-;31807:24;;;;:::i;:::-;31801:30;;31732:111;31865:13;31857:21;;:4;:21;;;:48;;;;;31883:18;:22;31902:2;31883:22;;;;;;;;;;;;;;;;;;;;;;;;;31882:23;31857:48;31853:110;;;31948:3;31938:6;31929;;:15;;;;:::i;:::-;31928:23;;;;:::i;:::-;31922:29;;31853:110;31983:3;31973:13;;;;;:::i;:::-;;;32007:1;32001:3;:7;31997:177;;;32025:40;32040:4;32054;32061:3;32025:14;:40::i;:::-;32108:3;32080:24;;:31;;;;;;;:::i;:::-;;;;;;;;32159:3;32126:29;;:36;;;;;;;:::i;:::-;;;;;;;;31997:177;32184:32;32199:4;32205:2;32209:6;32184:14;:32::i;:::-;30669:1555;;;30600:1624;;;:::o;12534:132::-;12609:12;:10;:12::i;:::-;12598:23;;:7;:5;:7::i;:::-;:23;;;12590:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12534:132::o;13673:191::-;13747:16;13766:6;;;;;;;;;;;13747:25;;13792:8;13783:6;;:17;;;;;;;;;;;;;;;;;;13847:8;13816:40;;13837:8;13816:40;;;;;;;;;;;;13736:128;13673:191;:::o;32890:638::-;33016:21;33054:1;33040:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33016:40;;33085:4;33067;33072:1;33067:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33111:4;33101;33106:1;33101:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33126:62;33143:4;33158:15;33176:11;33126:8;:62::i;:::-;33227:15;:66;;;33308:11;33334:1;33378:4;33405;33441:15;33227:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33485:35;33502:11;33515:4;33485:35;;;;;;;:::i;:::-;;;;;;;;32945:583;32890:638;:::o;35905:263::-;36036:1;36026:6;:11;36022:24;36039:7;36022:24;36057:9;36072;:14;;36094:6;36072:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36056:49;;;36121:39;36154:4;36121:39;;;;;;:::i;:::-;;;;;;;;36011:157;35905:263;;;:::o;33664:253::-;33811:6;33792:7;:15;33800:6;33792:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;33850:6;33828:7;:18;33836:9;33828:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;33891:9;33874:35;;33883:6;33874:35;;;33902:6;33874:35;;;;;;:::i;:::-;;;;;;;;33664:253;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:86::-;5436:7;5476:4;5469:5;5465:16;5454:27;;5401:86;;;:::o;5493:112::-;5576:22;5592:5;5576:22;:::i;:::-;5571:3;5564:35;5493:112;;:::o;5611:214::-;5700:4;5738:2;5727:9;5723:18;5715:26;;5751:67;5815:1;5804:9;5800:17;5791:6;5751:67;:::i;:::-;5611:214;;;;:::o;5831:329::-;5890:6;5939:2;5927:9;5918:7;5914:23;5910:32;5907:119;;;5945:79;;:::i;:::-;5907:119;6065:1;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6036:117;5831:329;;;;:::o;6166:::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:104::-;6898:7;6927:24;6945:5;6927:24;:::i;:::-;6916:35;;6853:104;;;:::o;6963:142::-;7066:32;7092:5;7066:32;:::i;:::-;7061:3;7054:45;6963:142;;:::o;7111:254::-;7220:4;7258:2;7247:9;7243:18;7235:26;;7271:87;7355:1;7344:9;7340:17;7331:6;7271:87;:::i;:::-;7111:254;;;;:::o;7371:116::-;7441:21;7456:5;7441:21;:::i;:::-;7434:5;7431:32;7421:60;;7477:1;7474;7467:12;7421:60;7371:116;:::o;7493:133::-;7536:5;7574:6;7561:20;7552:29;;7590:30;7614:5;7590:30;:::i;:::-;7493:133;;;;:::o;7632:323::-;7688:6;7737:2;7725:9;7716:7;7712:23;7708:32;7705:119;;;7743:79;;:::i;:::-;7705:119;7863:1;7888:50;7930:7;7921:6;7910:9;7906:22;7888:50;:::i;:::-;7878:60;;7834:114;7632:323;;;;:::o;7961:474::-;8029:6;8037;8086:2;8074:9;8065:7;8061:23;8057:32;8054:119;;;8092:79;;:::i;:::-;8054:119;8212:1;8237:53;8282:7;8273:6;8262:9;8258:22;8237:53;:::i;:::-;8227:63;;8183:117;8339:2;8365:53;8410:7;8401:6;8390:9;8386:22;8365:53;:::i;:::-;8355:63;;8310:118;7961:474;;;;;:::o;8441:227::-;8581:34;8577:1;8569:6;8565:14;8558:58;8650:10;8645:2;8637:6;8633:15;8626:35;8441:227;:::o;8674:366::-;8816:3;8837:67;8901:2;8896:3;8837:67;:::i;:::-;8830:74;;8913:93;9002:3;8913:93;:::i;:::-;9031:2;9026:3;9022:12;9015:19;;8674:366;;;:::o;9046:419::-;9212:4;9250:2;9239:9;9235:18;9227:26;;9299:9;9293:4;9289:20;9285:1;9274:9;9270:17;9263:47;9327:131;9453:4;9327:131;:::i;:::-;9319:139;;9046:419;;;:::o;9471:180::-;9519:77;9516:1;9509:88;9616:4;9613:1;9606:15;9640:4;9637:1;9630:15;9657:194;9697:4;9717:20;9735:1;9717:20;:::i;:::-;9712:25;;9751:20;9769:1;9751:20;:::i;:::-;9746:25;;9795:1;9792;9788:9;9780:17;;9819:1;9813:4;9810:11;9807:37;;;9824:18;;:::i;:::-;9807:37;9657:194;;;;:::o;9857:191::-;9897:3;9916:20;9934:1;9916:20;:::i;:::-;9911:25;;9950:20;9968:1;9950:20;:::i;:::-;9945:25;;9993:1;9990;9986:9;9979:16;;10014:3;10011:1;10008:10;10005:36;;;10021:18;;:::i;:::-;10005:36;9857:191;;;;:::o;10054:181::-;10194:33;10190:1;10182:6;10178:14;10171:57;10054:181;:::o;10241:366::-;10383:3;10404:67;10468:2;10463:3;10404:67;:::i;:::-;10397:74;;10480:93;10569:3;10480:93;:::i;:::-;10598:2;10593:3;10589:12;10582:19;;10241:366;;;:::o;10613:419::-;10779:4;10817:2;10806:9;10802:18;10794:26;;10866:9;10860:4;10856:20;10852:1;10841:9;10837:17;10830:47;10894:131;11020:4;10894:131;:::i;:::-;10886:139;;10613:419;;;:::o;11038:233::-;11178:34;11174:1;11166:6;11162:14;11155:58;11247:16;11242:2;11234:6;11230:15;11223:41;11038:233;:::o;11277:366::-;11419:3;11440:67;11504:2;11499:3;11440:67;:::i;:::-;11433:74;;11516:93;11605:3;11516:93;:::i;:::-;11634:2;11629:3;11625:12;11618:19;;11277:366;;;:::o;11649:529::-;11843:4;11881:2;11870:9;11866:18;11858:26;;11930:9;11924:4;11920:20;11916:1;11905:9;11901:17;11894:47;11958:131;12084:4;11958:131;:::i;:::-;11950:139;;12099:72;12167:2;12156:9;12152:18;12143:6;12099:72;:::i;:::-;11649:529;;;;:::o;12184:226::-;12324:34;12320:1;12312:6;12308:14;12301:58;12393:9;12388:2;12380:6;12376:15;12369:34;12184:226;:::o;12416:366::-;12558:3;12579:67;12643:2;12638:3;12579:67;:::i;:::-;12572:74;;12655:93;12744:3;12655:93;:::i;:::-;12773:2;12768:3;12764:12;12757:19;;12416:366;;;:::o;12788:419::-;12954:4;12992:2;12981:9;12977:18;12969:26;;13041:9;13035:4;13031:20;13027:1;13016:9;13012:17;13005:47;13069:131;13195:4;13069:131;:::i;:::-;13061:139;;12788:419;;;:::o;13213:230::-;13353:34;13349:1;13341:6;13337:14;13330:58;13422:13;13417:2;13409:6;13405:15;13398:38;13213:230;:::o;13449:366::-;13591:3;13612:67;13676:2;13671:3;13612:67;:::i;:::-;13605:74;;13688:93;13777:3;13688:93;:::i;:::-;13806:2;13801:3;13797:12;13790:19;;13449:366;;;:::o;13821:529::-;14015:4;14053:2;14042:9;14038:18;14030:26;;14102:9;14096:4;14092:20;14088:1;14077:9;14073:17;14066:47;14130:131;14256:4;14130:131;:::i;:::-;14122:139;;14271:72;14339:2;14328:9;14324:18;14315:6;14271:72;:::i;:::-;13821:529;;;;:::o;14356:174::-;14496:26;14492:1;14484:6;14480:14;14473:50;14356:174;:::o;14536:366::-;14678:3;14699:67;14763:2;14758:3;14699:67;:::i;:::-;14692:74;;14775:93;14864:3;14775:93;:::i;:::-;14893:2;14888:3;14884:12;14877:19;;14536:366;;;:::o;14908:419::-;15074:4;15112:2;15101:9;15097:18;15089:26;;15161:9;15155:4;15151:20;15147:1;15136:9;15132:17;15125:47;15189:131;15315:4;15189:131;:::i;:::-;15181:139;;14908:419;;;:::o;15333:223::-;15473:34;15469:1;15461:6;15457:14;15450:58;15542:6;15537:2;15529:6;15525:15;15518:31;15333:223;:::o;15562:366::-;15704:3;15725:67;15789:2;15784:3;15725:67;:::i;:::-;15718:74;;15801:93;15890:3;15801:93;:::i;:::-;15919:2;15914:3;15910:12;15903:19;;15562:366;;;:::o;15934:134::-;15992:9;16025:37;16056:5;16025:37;:::i;:::-;16012:50;;15934:134;;;:::o;16074:147::-;16169:45;16208:5;16169:45;:::i;:::-;16164:3;16157:58;16074:147;;:::o;16227:545::-;16429:4;16467:2;16456:9;16452:18;16444:26;;16516:9;16510:4;16506:20;16502:1;16491:9;16487:17;16480:47;16544:131;16670:4;16544:131;:::i;:::-;16536:139;;16685:80;16761:2;16750:9;16746:18;16737:6;16685:80;:::i;:::-;16227:545;;;;:::o;16778:174::-;16918:26;16914:1;16906:6;16902:14;16895:50;16778:174;:::o;16958:366::-;17100:3;17121:67;17185:2;17180:3;17121:67;:::i;:::-;17114:74;;17197:93;17286:3;17197:93;:::i;:::-;17315:2;17310:3;17306:12;17299:19;;16958:366;;;:::o;17330:419::-;17496:4;17534:2;17523:9;17519:18;17511:26;;17583:9;17577:4;17573:20;17569:1;17558:9;17554:17;17547:47;17611:131;17737:4;17611:131;:::i;:::-;17603:139;;17330:419;;;:::o;17755:230::-;17895:34;17891:1;17883:6;17879:14;17872:58;17964:13;17959:2;17951:6;17947:15;17940:38;17755:230;:::o;17991:366::-;18133:3;18154:67;18218:2;18213:3;18154:67;:::i;:::-;18147:74;;18230:93;18319:3;18230:93;:::i;:::-;18348:2;18343:3;18339:12;18332:19;;17991:366;;;:::o;18363:529::-;18557:4;18595:2;18584:9;18580:18;18572:26;;18644:9;18638:4;18634:20;18630:1;18619:9;18615:17;18608:47;18672:131;18798:4;18672:131;:::i;:::-;18664:139;;18813:72;18881:2;18870:9;18866:18;18857:6;18813:72;:::i;:::-;18363:529;;;;:::o;18898:167::-;19038:19;19034:1;19026:6;19022:14;19015:43;18898:167;:::o;19071:366::-;19213:3;19234:67;19298:2;19293:3;19234:67;:::i;:::-;19227:74;;19310:93;19399:3;19310:93;:::i;:::-;19428:2;19423:3;19419:12;19412:19;;19071:366;;;:::o;19443:419::-;19609:4;19647:2;19636:9;19632:18;19624:26;;19696:9;19690:4;19686:20;19682:1;19671:9;19667:17;19660:47;19724:131;19850:4;19724:131;:::i;:::-;19716:139;;19443:419;;;:::o;19868:147::-;19969:11;20006:3;19991:18;;19868:147;;;;:::o;20021:114::-;;:::o;20141:398::-;20300:3;20321:83;20402:1;20397:3;20321:83;:::i;:::-;20314:90;;20413:93;20502:3;20413:93;:::i;:::-;20531:1;20526:3;20522:11;20515:18;;20141:398;;;:::o;20545:379::-;20729:3;20751:147;20894:3;20751:147;:::i;:::-;20744:154;;20915:3;20908:10;;20545:379;;;:::o;20930:165::-;21070:17;21066:1;21058:6;21054:14;21047:41;20930:165;:::o;21101:366::-;21243:3;21264:67;21328:2;21323:3;21264:67;:::i;:::-;21257:74;;21340:93;21429:3;21340:93;:::i;:::-;21458:2;21453:3;21449:12;21442:19;;21101:366;;;:::o;21473:419::-;21639:4;21677:2;21666:9;21662:18;21654:26;;21726:9;21720:4;21716:20;21712:1;21701:9;21697:17;21690:47;21754:131;21880:4;21754:131;:::i;:::-;21746:139;;21473:419;;;:::o;21898:231::-;22038:34;22034:1;22026:6;22022:14;22015:58;22107:14;22102:2;22094:6;22090:15;22083:39;21898:231;:::o;22135:366::-;22277:3;22298:67;22362:2;22357:3;22298:67;:::i;:::-;22291:74;;22374:93;22463:3;22374:93;:::i;:::-;22492:2;22487:3;22483:12;22476:19;;22135:366;;;:::o;22507:545::-;22709:4;22747:2;22736:9;22732:18;22724:26;;22796:9;22790:4;22786:20;22782:1;22771:9;22767:17;22760:47;22824:131;22950:4;22824:131;:::i;:::-;22816:139;;22965:80;23041:2;23030:9;23026:18;23017:6;22965:80;:::i;:::-;22507:545;;;;:::o;23058:241::-;23198:34;23194:1;23186:6;23182:14;23175:58;23267:24;23262:2;23254:6;23250:15;23243:49;23058:241;:::o;23305:366::-;23447:3;23468:67;23532:2;23527:3;23468:67;:::i;:::-;23461:74;;23544:93;23633:3;23544:93;:::i;:::-;23662:2;23657:3;23653:12;23646:19;;23305:366;;;:::o;23677:419::-;23843:4;23881:2;23870:9;23866:18;23858:26;;23930:9;23924:4;23920:20;23916:1;23905:9;23901:17;23894:47;23958:131;24084:4;23958:131;:::i;:::-;23950:139;;23677:419;;;:::o;24102:348::-;24231:4;24269:2;24258:9;24254:18;24246:26;;24282:79;24358:1;24347:9;24343:17;24334:6;24282:79;:::i;:::-;24371:72;24439:2;24428:9;24424:18;24415:6;24371:72;:::i;:::-;24102:348;;;;;:::o;24456:137::-;24510:5;24541:6;24535:13;24526:22;;24557:30;24581:5;24557:30;:::i;:::-;24456:137;;;;:::o;24599:345::-;24666:6;24715:2;24703:9;24694:7;24690:23;24686:32;24683:119;;;24721:79;;:::i;:::-;24683:119;24841:1;24866:61;24919:7;24910:6;24899:9;24895:22;24866:61;:::i;:::-;24856:71;;24812:125;24599:345;;;;:::o;24950:226::-;25090:34;25086:1;25078:6;25074:14;25067:58;25159:9;25154:2;25146:6;25142:15;25135:34;24950:226;:::o;25182:366::-;25324:3;25345:67;25409:2;25404:3;25345:67;:::i;:::-;25338:74;;25421:93;25510:3;25421:93;:::i;:::-;25539:2;25534:3;25530:12;25523:19;;25182:366;;;:::o;25554:529::-;25748:4;25786:2;25775:9;25771:18;25763:26;;25835:9;25829:4;25825:20;25821:1;25810:9;25806:17;25799:47;25863:131;25989:4;25863:131;:::i;:::-;25855:139;;26004:72;26072:2;26061:9;26057:18;26048:6;26004:72;:::i;:::-;25554:529;;;;:::o;26089:181::-;26229:33;26225:1;26217:6;26213:14;26206:57;26089:181;:::o;26276:366::-;26418:3;26439:67;26503:2;26498:3;26439:67;:::i;:::-;26432:74;;26515:93;26604:3;26515:93;:::i;:::-;26633:2;26628:3;26624:12;26617:19;;26276:366;;;:::o;26648:419::-;26814:4;26852:2;26841:9;26837:18;26829:26;;26901:9;26895:4;26891:20;26887:1;26876:9;26872:17;26865:47;26929:131;27055:4;26929:131;:::i;:::-;26921:139;;26648:419;;;:::o;27073:234::-;27213:34;27209:1;27201:6;27197:14;27190:58;27282:17;27277:2;27269:6;27265:15;27258:42;27073:234;:::o;27313:366::-;27455:3;27476:67;27540:2;27535:3;27476:67;:::i;:::-;27469:74;;27552:93;27641:3;27552:93;:::i;:::-;27670:2;27665:3;27661:12;27654:19;;27313:366;;;:::o;27685:529::-;27879:4;27917:2;27906:9;27902:18;27894:26;;27966:9;27960:4;27956:20;27952:1;27941:9;27937:17;27930:47;27994:131;28120:4;27994:131;:::i;:::-;27986:139;;28135:72;28203:2;28192:9;28188:18;28179:6;28135:72;:::i;:::-;27685:529;;;;:::o;28220:225::-;28360:34;28356:1;28348:6;28344:14;28337:58;28429:8;28424:2;28416:6;28412:15;28405:33;28220:225;:::o;28451:366::-;28593:3;28614:67;28678:2;28673:3;28614:67;:::i;:::-;28607:74;;28690:93;28779:3;28690:93;:::i;:::-;28808:2;28803:3;28799:12;28792:19;;28451:366;;;:::o;28823:419::-;28989:4;29027:2;29016:9;29012:18;29004:26;;29076:9;29070:4;29066:20;29062:1;29051:9;29047:17;29040:47;29104:131;29230:4;29104:131;:::i;:::-;29096:139;;28823:419;;;:::o;29248:223::-;29388:34;29384:1;29376:6;29372:14;29365:58;29457:6;29452:2;29444:6;29440:15;29433:31;29248:223;:::o;29477:366::-;29619:3;29640:67;29704:2;29699:3;29640:67;:::i;:::-;29633:74;;29716:93;29805:3;29716:93;:::i;:::-;29834:2;29829:3;29825:12;29818:19;;29477:366;;;:::o;29849:419::-;30015:4;30053:2;30042:9;30038:18;30030:26;;30102:9;30096:4;30092:20;30088:1;30077:9;30073:17;30066:47;30130:131;30256:4;30130:131;:::i;:::-;30122:139;;29849:419;;;:::o;30274:221::-;30414:34;30410:1;30402:6;30398:14;30391:58;30483:4;30478:2;30470:6;30466:15;30459:29;30274:221;:::o;30501:366::-;30643:3;30664:67;30728:2;30723:3;30664:67;:::i;:::-;30657:74;;30740:93;30829:3;30740:93;:::i;:::-;30858:2;30853:3;30849:12;30842:19;;30501:366;;;:::o;30873:419::-;31039:4;31077:2;31066:9;31062:18;31054:26;;31126:9;31120:4;31116:20;31112:1;31101:9;31097:17;31090:47;31154:131;31280:4;31154:131;:::i;:::-;31146:139;;30873:419;;;:::o;31298:224::-;31438:34;31434:1;31426:6;31422:14;31415:58;31507:7;31502:2;31494:6;31490:15;31483:32;31298:224;:::o;31528:366::-;31670:3;31691:67;31755:2;31750:3;31691:67;:::i;:::-;31684:74;;31767:93;31856:3;31767:93;:::i;:::-;31885:2;31880:3;31876:12;31869:19;;31528:366;;;:::o;31900:419::-;32066:4;32104:2;32093:9;32089:18;32081:26;;32153:9;32147:4;32143:20;32139:1;32128:9;32124:17;32117:47;32181:131;32307:4;32181:131;:::i;:::-;32173:139;;31900:419;;;:::o;32325:222::-;32465:34;32461:1;32453:6;32449:14;32442:58;32534:5;32529:2;32521:6;32517:15;32510:30;32325:222;:::o;32553:366::-;32695:3;32716:67;32780:2;32775:3;32716:67;:::i;:::-;32709:74;;32792:93;32881:3;32792:93;:::i;:::-;32910:2;32905:3;32901:12;32894:19;;32553:366;;;:::o;32925:419::-;33091:4;33129:2;33118:9;33114:18;33106:26;;33178:9;33172:4;33168:20;33164:1;33153:9;33149:17;33142:47;33206:131;33332:4;33206:131;:::i;:::-;33198:139;;32925:419;;;:::o;33350:228::-;33490:34;33486:1;33478:6;33474:14;33467:58;33559:11;33554:2;33546:6;33542:15;33535:36;33350:228;:::o;33584:366::-;33726:3;33747:67;33811:2;33806:3;33747:67;:::i;:::-;33740:74;;33823:93;33912:3;33823:93;:::i;:::-;33941:2;33936:3;33932:12;33925:19;;33584:366;;;:::o;33956:419::-;34122:4;34160:2;34149:9;34145:18;34137:26;;34209:9;34203:4;34199:20;34195:1;34184:9;34180:17;34173:47;34237:131;34363:4;34237:131;:::i;:::-;34229:139;;33956:419;;;:::o;34381:225::-;34521:34;34517:1;34509:6;34505:14;34498:58;34590:8;34585:2;34577:6;34573:15;34566:33;34381:225;:::o;34612:366::-;34754:3;34775:67;34839:2;34834:3;34775:67;:::i;:::-;34768:74;;34851:93;34940:3;34851:93;:::i;:::-;34969:2;34964:3;34960:12;34953:19;;34612:366;;;:::o;34984:419::-;35150:4;35188:2;35177:9;35173:18;35165:26;;35237:9;35231:4;35227:20;35223:1;35212:9;35208:17;35201:47;35265:131;35391:4;35265:131;:::i;:::-;35257:139;;34984:419;;;:::o;35409:174::-;35549:26;35545:1;35537:6;35533:14;35526:50;35409:174;:::o;35589:366::-;35731:3;35752:67;35816:2;35811:3;35752:67;:::i;:::-;35745:74;;35828:93;35917:3;35828:93;:::i;:::-;35946:2;35941:3;35937:12;35930:19;;35589:366;;;:::o;35961:419::-;36127:4;36165:2;36154:9;36150:18;36142:26;;36214:9;36208:4;36204:20;36200:1;36189:9;36185:17;36178:47;36242:131;36368:4;36242:131;:::i;:::-;36234:139;;35961:419;;;:::o;36386:410::-;36426:7;36449:20;36467:1;36449:20;:::i;:::-;36444:25;;36483:20;36501:1;36483:20;:::i;:::-;36478:25;;36538:1;36535;36531:9;36560:30;36578:11;36560:30;:::i;:::-;36549:41;;36739:1;36730:7;36726:15;36723:1;36720:22;36700:1;36693:9;36673:83;36650:139;;36769:18;;:::i;:::-;36650:139;36434:362;36386:410;;;;:::o;36802:180::-;36850:77;36847:1;36840:88;36947:4;36944:1;36937:15;36971:4;36968:1;36961:15;36988:185;37028:1;37045:20;37063:1;37045:20;:::i;:::-;37040:25;;37079:20;37097:1;37079:20;:::i;:::-;37074:25;;37118:1;37108:35;;37123:18;;:::i;:::-;37108:35;37165:1;37162;37158:9;37153:14;;36988:185;;;;:::o;37179:182::-;37319:34;37315:1;37307:6;37303:14;37296:58;37179:182;:::o;37367:366::-;37509:3;37530:67;37594:2;37589:3;37530:67;:::i;:::-;37523:74;;37606:93;37695:3;37606:93;:::i;:::-;37724:2;37719:3;37715:12;37708:19;;37367:366;;;:::o;37739:419::-;37905:4;37943:2;37932:9;37928:18;37920:26;;37992:9;37986:4;37982:20;37978:1;37967:9;37963:17;37956:47;38020:131;38146:4;38020:131;:::i;:::-;38012:139;;37739:419;;;:::o;38164:180::-;38212:77;38209:1;38202:88;38309:4;38306:1;38299:15;38333:4;38330:1;38323:15;38350:180;38398:77;38395:1;38388:88;38495:4;38492:1;38485:15;38519:4;38516:1;38509:15;38536:85;38581:7;38610:5;38599:16;;38536:85;;;:::o;38627:158::-;38685:9;38718:61;38736:42;38745:32;38771:5;38745:32;:::i;:::-;38736:42;:::i;:::-;38718:61;:::i;:::-;38705:74;;38627:158;;;:::o;38791:147::-;38886:45;38925:5;38886:45;:::i;:::-;38881:3;38874:58;38791:147;;:::o;38944:114::-;39011:6;39045:5;39039:12;39029:22;;38944:114;;;:::o;39064:184::-;39163:11;39197:6;39192:3;39185:19;39237:4;39232:3;39228:14;39213:29;;39064:184;;;;:::o;39254:132::-;39321:4;39344:3;39336:11;;39374:4;39369:3;39365:14;39357:22;;39254:132;;;:::o;39392:108::-;39469:24;39487:5;39469:24;:::i;:::-;39464:3;39457:37;39392:108;;:::o;39506:179::-;39575:10;39596:46;39638:3;39630:6;39596:46;:::i;:::-;39674:4;39669:3;39665:14;39651:28;;39506:179;;;;:::o;39691:113::-;39761:4;39793;39788:3;39784:14;39776:22;;39691:113;;;:::o;39840:732::-;39959:3;39988:54;40036:5;39988:54;:::i;:::-;40058:86;40137:6;40132:3;40058:86;:::i;:::-;40051:93;;40168:56;40218:5;40168:56;:::i;:::-;40247:7;40278:1;40263:284;40288:6;40285:1;40282:13;40263:284;;;40364:6;40358:13;40391:63;40450:3;40435:13;40391:63;:::i;:::-;40384:70;;40477:60;40530:6;40477:60;:::i;:::-;40467:70;;40323:224;40310:1;40307;40303:9;40298:14;;40263:284;;;40267:14;40563:3;40556:10;;39964:608;;;39840:732;;;;:::o;40578:831::-;40841:4;40879:3;40868:9;40864:19;40856:27;;40893:71;40961:1;40950:9;40946:17;40937:6;40893:71;:::i;:::-;40974:80;41050:2;41039:9;41035:18;41026:6;40974:80;:::i;:::-;41101:9;41095:4;41091:20;41086:2;41075:9;41071:18;41064:48;41129:108;41232:4;41223:6;41129:108;:::i;:::-;41121:116;;41247:72;41315:2;41304:9;41300:18;41291:6;41247:72;:::i;:::-;41329:73;41397:3;41386:9;41382:19;41373:6;41329:73;:::i;:::-;40578:831;;;;;;;;:::o;41415:483::-;41586:4;41624:2;41613:9;41609:18;41601:26;;41637:71;41705:1;41694:9;41690:17;41681:6;41637:71;:::i;:::-;41755:9;41749:4;41745:20;41740:2;41729:9;41725:18;41718:48;41783:108;41886:4;41877:6;41783:108;:::i;:::-;41775:116;;41415:483;;;;;:::o;41904:165::-;42044:17;42040:1;42032:6;42028:14;42021:41;41904:165;:::o;42075:366::-;42217:3;42238:67;42302:2;42297:3;42238:67;:::i;:::-;42231:74;;42314:93;42403:3;42314:93;:::i;:::-;42432:2;42427:3;42423:12;42416:19;;42075:366;;;:::o;42447:517::-;42635:4;42673:2;42662:9;42658:18;42650:26;;42722:9;42716:4;42712:20;42708:1;42697:9;42693:17;42686:47;42750:131;42876:4;42750:131;:::i;:::-;42742:139;;42891:66;42953:2;42942:9;42938:18;42929:6;42891:66;:::i;:::-;42447:517;;;;:::o

Swarm Source

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