ETH Price: $1,936.45 (-1.84%)
Gas: 0.04 Gwei
 

Overview

Max Total Supply

8,000,000,000 CORN

Holders

213

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Cornbit

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-05-29
*/

pragma solidity 0.8.27;

// SPDX-License-Identifier: MIT

// Context provides information about the current execution context, including the sender of the transaction.
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode
        return msg.data;
    }
}

// Interface for ERC20 standard functions and events
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

// Implementation of the ERC20 standard with additional features
contract ERC20 is Context, IERC20, IERC20Metadata {
    // Mapping to store balances of each address
    mapping(address => uint256) private _balances;

    // Mapping to store allowances
    mapping(address => mapping(address => uint256)) private _allowances;

    // Total supply of the token
    uint256 private _totalSupply;

    // Token name and symbol
    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(from, to, amount);
    }

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

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

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

// Ownable contract to manage ownership and transfer of ownership
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    // Returns the address of the current owner
    function owner() public view returns (address) {
        return _owner;
    }

    // Modifier to restrict access to only the owner
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    // Allows the owner to renounce ownership
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

// Library for address-related functions
library Address {
    // Checks if an address is a contract
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    // Sends ETH to a recipient address
    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");
    }

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

    // Performs a low-level function call with a custom error message
    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);
        }
    }
}

// Library for safe ERC20 operations
library SafeERC20 {
    using Address for address;

    // Safely transfers tokens
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    // Safely transfers tokens from one address to another
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    // Internal function to call a function and check the return value
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    // Safely approves a spender
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

// Interface for a decentralized exchange router
interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
}

// Interface for a decentralized exchange factory
interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

// Main token contract with additional features
contract Cornbit is ERC20, Ownable {

    // Mappings to store fee and limit exemptions
    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    // Flag to indicate if trading is allowed
    bool public tradingAllowed;

    // Mapping to store AMM pairs
    mapping (address => bool) public isAMMPair;

    // Addresses for tax distribution
    address public walletOne;
    address public walletTwo;
    address public walletThree;

    // Tax rates for buying and selling
    uint24 public buyTax;
    uint24 public sellTax;  

    // Last block when swap back occurred
    uint256 public lastSwapBackBlock;
    mapping(address => uint256) private holderLastTransferBlock;

    // Flag and limit for wallet restrictions
    bool public limited = true;
    uint256 public maxWallet;
    
    // Minimum amount of tokens to trigger a swap
    uint256 public immutable swapTokensAtAmount;

    // Address of the liquidity pair and router
    address public immutable lpPair;
    IDexRouter public immutable dexRouter;
    address public immutable WETH;

    // Constant for fee divisor
    uint64 public constant FEE_DIVISOR = 10000;

    // Timestamp for contract launch
    uint256 public launchTimestamp;

    // Flag for transfer delay
    bool public transferDelayEnabled = false;

    // Events for various actions
    event UpdatedWalletLimit(uint newMax);
    event SetExcludedFromFees(address _address, bool _isExcluded);
    event SetExcludedFromLimits(address _address, bool _isExcluded);
    event RemovedLimits();
    event TaxUpdated(uint24 buyTax_, uint24 sellTax_);

    // Constructor to initialize the token and set up the router and pair
    constructor()
        ERC20("Cornbit", "CORN")
    {   
        uint256 totalSupply_ = 8_000_000_000 * 1e18;
       
        walletOne = 0x26E409240879ccD3b6d4c2d5F715401eE98d0440; 
        walletTwo = 0x36a31864F65d34e51Df68453B7d9d1263772d7A7;
        walletThree = 0x76a3e1eb142D080C2dCBdd983fEfdDba1B24C6a2;

        address v2Router;

        // Set the router address based on the chain ID
        if(block.chainid == 1){
            v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 8453){ // BASE
            v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        } else if(block.chainid == 56){ // BNB CHAIN
            v2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(v2Router);

        _mint(address(msg.sender), totalSupply_);
        swapTokensAtAmount = totalSupply() * 25 / 100000;

        buyTax = 5000;
        sellTax = 5000;
        maxWallet = uint128(totalSupply() * 5 / 1000);

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[address(0xdead)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[address(dexRouter)] = true;
        exemptFromFees[address(0xdead)] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    // Internal transfer function with tax and limit checks
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingAllowed, "Trading not active");
            amount -= handleTax(from, to, amount);
            checkLimits(from, to, amount);
        }

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

    // Checks and enforces wallet limits
    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);

            // Enforce max wallet limit on buys
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount + balanceOfTo <= maxWallet, "Max Wallet");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= maxWallet, "Max Wallet");
            }

            // Enforce transfer delay if enabled
            if(transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(holderLastTransferBlock[tx.origin] < block.number, "Transfer Delay");
                    if(from == address(lpPair)){
                        require(tx.origin == to, "no buying to external wallets yet");
                    }
                    holderLastTransferBlock[to] = block.number;
                    holderLastTransferBlock[tx.origin] = block.number;
                }
            }
        }
    }

    // Handles tax deduction and conversion
    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        uint256 contractBalance = balanceOf(address(this));
        if(contractBalance >= swapTokensAtAmount && !isAMMPair[from] && lastSwapBackBlock + 1 <= block.number) {
            if(contractBalance > swapTokensAtAmount * 20){
                contractBalance = swapTokensAtAmount * 20;
            }
            convertTaxes(contractBalance);
        }
        
        uint256 tax = 0;

        uint24 taxes;

        // Determine tax rate based on transaction type
        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }

        // Calculate and transfer tax
        if(taxes > 0){
            tax = amount * taxes / FEE_DIVISOR;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    // Swaps tokens for ETH
    function swapTokensForETH(uint256 tokenAmt) private {

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    // Converts collected taxes to ETH and distributes to wallets
    function convertTaxes(uint256 amount) private {

        uint256 contractBalance = amount;
        
        if(amount == 0) {return;}

        lastSwapBackBlock = block.number;

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            // Distribute ETH to wallets
            uint256 amountForWallet = ethBalance / 3;
            
            (success,) = walletOne.call{value: amountForWallet}("");
            (success,) = walletTwo.call{value: amountForWallet}("");
            (success,) = walletThree.call{value: address(this).balance}("");
        }
    }

    // Owner functions

    // Sets fee exemption for an address
    function setExemptFromFee(address _address, bool _isExcluded) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexclude contract");
        exemptFromFees[_address] = _isExcluded;
        emit SetExcludedFromFees(_address, _isExcluded);
    }

    // Sets limit exemption for an address
    function setExemptFromLimits(address _address, bool _isExcluded) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExcluded){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExcluded;
        emit SetExcludedFromLimits(_address, _isExcluded);
    }

    // Enables trading
    function enableTrading() external onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        tradingAllowed = true;
        launchTimestamp = block.timestamp;
        transferDelayEnabled = true;
    }

    // Updates the maximum wallet limit
    function updateMaxWallet(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens * (10**decimals()) >= maxWallet, "Too low");
        maxWallet = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(maxWallet);
    }

    // Updates the buy and sell tax rates
    function updateTax(uint24 _buyTax, uint24 _sellTax) external onlyOwner {
        require(_buyTax < buyTax || _buyTax <= 500, "Cannot raise buy tax over 5%");
        require(_sellTax < sellTax || _sellTax <= 500, "Cannot raise sell tax over 5%");
        buyTax = _buyTax;
        sellTax = _sellTax;
        emit TaxUpdated(_buyTax, _sellTax);
    }

    // Removes wallet limits
    function removeLimits() external onlyOwner {
        require(limited, "Limits already removed");
        limited = false;
        emit RemovedLimits();
    }

    // Disables transfer delay
    function removeTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    // Updates the address for wallet one
    function updateWalletOne(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        walletOne = _address;
    }

    // Updates the address for wallet two
    function updateWalletTwo(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        walletTwo = _address;
    }

    // Updates the address for wallet three
    function updateWalletThree(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        walletThree = _address;
    }

    // Manually converts a percentage of the contract's token balance to ETH
    function manualConvert(uint256 percentToConvert) external onlyOwner {
        require(percentToConvert <= 10000, "Cannot convert more than 100%");
        uint256 contractBalance = balanceOf(address(this));
        convertTaxes(contractBalance * percentToConvert / FEE_DIVISOR);
    }

    // Fallback function to receive ETH
    receive() payable external {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"SetExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"SetExcludedFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"buyTax_","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"sellTax_","type":"uint24"}],"name":"TaxUpdated","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":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"buyTax","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentToConvert","type":"uint256"}],"name":"manualConvert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_buyTax","type":"uint24"},{"internalType":"uint24","name":"_sellTax","type":"uint24"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateWalletOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateWalletThree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateWalletTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletOne","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletThree","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletTwo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101006040526001600f5f6101000a81548160ff0219169083151502179055505f60125f6101000a81548160ff021916908315150217905550348015610043575f5ffd5b506040518060400160405280600781526020017f436f726e626974000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f434f524e0000000000000000000000000000000000000000000000000000000081525081600390816100bf9190610e92565b5080600490816100cf9190610e92565b5050505f6100e161094a60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f6b19d971e4fe8401e74000000090507326e409240879ccd3b6d4c2d5f715401ee98d0440600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507336a31864f65d34e51df68453b7d9d1263772d7a7600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507376a3e1eb142d080c2dcbdd983fefddba1b24c6a2600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600146036102af57737a250d5630b4cf539739df2c5dacb4c659f2488d9050610335565b61210546036102d457734752ba5dbc23f44d87826276bf6fd6b1c372ad249050610334565b603846036102f8577310ed43c718714eb63d5aa57b78b54704e256024e9050610333565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032a90610fbb565b60405180910390fd5b5b5b8073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050610379338361095160201b60201c565b620186a0601961038d610a8960201b60201c565b6103979190611006565b6103a19190611074565b60808181525050611388600c60146101000a81548162ffffff021916908362ffffff160217905550611388600c60176101000a81548162ffffff021916908362ffffff1602179055506103e860056103fd610a8960201b60201c565b6104079190611006565b6104119190611074565b6fffffffffffffffffffffffffffffffff1660108190555060c05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610474573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104989190611102565b73ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff168152505060c05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610516573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053a9190611102565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060e0516040518363ffffffff1660e01b815260040161057692919061113c565b6020604051808303815f875af1158015610592573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b69190611102565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600160095f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506109233060c0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a9260201b60201c565b6109433360c051610938610a8960201b60201c565b610a9260201b60201c565b5050611342565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b6906111ad565b60405180910390fd5b8060025f8282546109d091906111cb565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a7d919061120d565b60405180910390a35050565b5f600254905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790611296565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6590611324565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c48919061120d565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610cd057607f821691505b602082108103610ce357610ce2610c8c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610d0a565b610d4f8683610d0a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610d93610d8e610d8984610d67565b610d70565b610d67565b9050919050565b5f819050919050565b610dac83610d79565b610dc0610db882610d9a565b848454610d16565b825550505050565b5f5f905090565b610dd7610dc8565b610de2818484610da3565b505050565b5b81811015610e0557610dfa5f82610dcf565b600181019050610de8565b5050565b601f821115610e4a57610e1b81610ce9565b610e2484610cfb565b81016020851015610e33578190505b610e47610e3f85610cfb565b830182610de7565b50505b505050565b5f82821c905092915050565b5f610e6a5f1984600802610e4f565b1980831691505092915050565b5f610e828383610e5b565b9150826002028217905092915050565b610e9b82610c55565b67ffffffffffffffff811115610eb457610eb3610c5f565b5b610ebe8254610cb9565b610ec9828285610e09565b5f60209050601f831160018114610efa575f8415610ee8578287015190505b610ef28582610e77565b865550610f59565b601f198416610f0886610ce9565b5f5b82811015610f2f57848901518255600182019150602085019450602081019050610f0a565b86831015610f4c5784890151610f48601f891682610e5b565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f436861696e206e6f7420636f6e666967757265640000000000000000000000005f82015250565b5f610fa5601483610f61565b9150610fb082610f71565b602082019050919050565b5f6020820190508181035f830152610fd281610f99565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61101082610d67565b915061101b83610d67565b925082820261102981610d67565b915082820484148315176110405761103f610fd9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61107e82610d67565b915061108983610d67565b92508261109957611098611047565b5b828204905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110d1826110a8565b9050919050565b6110e1816110c7565b81146110eb575f5ffd5b50565b5f815190506110fc816110d8565b92915050565b5f60208284031215611117576111166110a4565b5b5f611124848285016110ee565b91505092915050565b611136816110c7565b82525050565b5f60408201905061114f5f83018561112d565b61115c602083018461112d565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611197601f83610f61565b91506111a282611163565b602082019050919050565b5f6020820190508181035f8301526111c48161118b565b9050919050565b5f6111d582610d67565b91506111e083610d67565b92508282019050808211156111f8576111f7610fd9565b5b92915050565b61120781610d67565b82525050565b5f6020820190506112205f8301846111fe565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611280602483610f61565b915061128b82611226565b604082019050919050565b5f6020820190508181035f8301526112ad81611274565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61130e602283610f61565b9150611319826112b4565b604082019050919050565b5f6020820190508181035f83015261133b81611302565b9050919050565b60805160a05160c05160e05161464e6113b45f395f81816119ce015261303a01525f8181610a9101528181612acd01526130a901525f8181610e4f0152818161181701528181612b240152612bf901525f8181611f1801528181612721015281816127b901526127ed015261464e5ff3fe60806040526004361061026a575f3560e01c8063751039fc11610143578063b0249cc6116100b5578063d65e6fb611610079578063d65e6fb614610909578063dd62ed3e14610931578063e2f456051461096d578063f2fde38b14610997578063f8686f07146109bf578063f8b45b05146109d557610271565b8063b0249cc614610829578063bedafd0114610865578063c1f87afc1461088d578063c876d0b9146108b5578063cc1776d3146108df57610271565b806395d89b411161010757806395d89b411461070b5780639e93ad8e14610735578063a13d1a2b1461075f578063a457c2d714610787578063a9059cbb146107c3578063ad5c4648146107ff57610271565b8063751039fc1461064f578063860a32ec146106655780638a8c523c1461068f5780638d3e6e40146106a55780638da5cb5b146106e157610271565b806339509351116101dc57806353371be0116101a057806353371be0146105455780635a90a49e1461056f578063638cb6af146105ab57806365cf7c9b146105d357806370a08231146105fd578063715018a61461063957610271565b80633950935114610463578063432e95a51461049f578063452ed4f1146104c95780634b356f47146104f35780634f7041a51461051b57610271565b8063196101781161022e57806319610178146103575780631cdce2001461037f5780632272f879146103a957806323b872dd146103d35780632594b3431461040f578063313ce5671461043957610271565b806306fdde03146102755780630758d9241461029f578063076dc80c146102c9578063095ea7b3146102f157806318160ddd1461032d57610271565b3661027157005b5f5ffd5b348015610280575f5ffd5b506102896109ff565b60405161029691906131a9565b60405180910390f35b3480156102aa575f5ffd5b506102b3610a8f565b6040516102c09190613243565b60405180910390f35b3480156102d4575f5ffd5b506102ef60048036038101906102ea919061329b565b610ab3565b005b3480156102fc575f5ffd5b50610317600480360381019061031291906132f9565b610bfa565b6040516103249190613351565b60405180910390f35b348015610338575f5ffd5b50610341610c1c565b60405161034e9190613379565b60405180910390f35b348015610362575f5ffd5b5061037d6004803603810190610378919061329b565b610c25565b005b34801561038a575f5ffd5b50610393610d6c565b6040516103a091906133a1565b60405180910390f35b3480156103b4575f5ffd5b506103bd610d91565b6040516103ca91906133a1565b60405180910390f35b3480156103de575f5ffd5b506103f960048036038101906103f491906133ba565b610db6565b6040516104069190613351565b60405180910390f35b34801561041a575f5ffd5b50610423610de4565b60405161043091906133a1565b60405180910390f35b348015610444575f5ffd5b5061044d610e09565b60405161045a9190613425565b60405180910390f35b34801561046e575f5ffd5b50610489600480360381019061048491906132f9565b610e11565b6040516104969190613351565b60405180910390f35b3480156104aa575f5ffd5b506104b3610e47565b6040516104c09190613379565b60405180910390f35b3480156104d4575f5ffd5b506104dd610e4d565b6040516104ea91906133a1565b60405180910390f35b3480156104fe575f5ffd5b5061051960048036038101906105149190613476565b610e71565b005b348015610526575f5ffd5b5061052f611060565b60405161053c91906134c3565b60405180910390f35b348015610550575f5ffd5b50610559611075565b6040516105669190613351565b60405180910390f35b34801561057a575f5ffd5b506105956004803603810190610590919061329b565b611087565b6040516105a29190613351565b60405180910390f35b3480156105b6575f5ffd5b506105d160048036038101906105cc9190613521565b6110a4565b005b3480156105de575f5ffd5b506105e7611234565b6040516105f49190613379565b60405180910390f35b348015610608575f5ffd5b50610623600480360381019061061e919061329b565b61123a565b6040516106309190613379565b60405180910390f35b348015610644575f5ffd5b5061064d61127f565b005b34801561065a575f5ffd5b506106636113d2565b005b348015610670575f5ffd5b506106796114fd565b6040516106869190613351565b60405180910390f35b34801561069a575f5ffd5b506106a361150f565b005b3480156106b0575f5ffd5b506106cb60048036038101906106c6919061329b565b611631565b6040516106d89190613351565b60405180910390f35b3480156106ec575f5ffd5b506106f561164e565b60405161070291906133a1565b60405180910390f35b348015610716575f5ffd5b5061071f611676565b60405161072c91906131a9565b60405180910390f35b348015610740575f5ffd5b50610749611706565b604051610756919061356e565b60405180910390f35b34801561076a575f5ffd5b50610785600480360381019061078091906135b1565b61170c565b005b348015610792575f5ffd5b506107ad60048036038101906107a891906132f9565b611935565b6040516107ba9190613351565b60405180910390f35b3480156107ce575f5ffd5b506107e960048036038101906107e491906132f9565b6119aa565b6040516107f69190613351565b60405180910390f35b34801561080a575f5ffd5b506108136119cc565b60405161082091906133a1565b60405180910390f35b348015610834575f5ffd5b5061084f600480360381019061084a919061329b565b6119f0565b60405161085c9190613351565b60405180910390f35b348015610870575f5ffd5b5061088b600480360381019061088691906135b1565b611a0d565b005b348015610898575f5ffd5b506108b360048036038101906108ae91906135ef565b611c10565b005b3480156108c0575f5ffd5b506108c9611d26565b6040516108d69190613351565b60405180910390f35b3480156108ea575f5ffd5b506108f3611d38565b60405161090091906134c3565b60405180910390f35b348015610914575f5ffd5b5061092f600480360381019061092a919061329b565b611d4d565b005b34801561093c575f5ffd5b506109576004803603810190610952919061361a565b611e94565b6040516109649190613379565b60405180910390f35b348015610978575f5ffd5b50610981611f16565b60405161098e9190613379565b60405180910390f35b3480156109a2575f5ffd5b506109bd60048036038101906109b8919061329b565b611f3a565b005b3480156109ca575f5ffd5b506109d36120fc565b005b3480156109e0575f5ffd5b506109e96121ad565b6040516109f69190613379565b60405180910390f35b606060038054610a0e90613685565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3a90613685565b8015610a855780601f10610a5c57610100808354040283529160200191610a85565b820191905f5260205f20905b815481529060010190602001808311610a6857829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610abb6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b40906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613767565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f610c046121b3565b9050610c118185856121ba565b600191505092915050565b5f600254905090565b610c2d6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb2906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613767565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f610dc06121b3565b9050610dcd85828561237d565b610dd8858585612408565b60019150509392505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f5f610e1b6121b3565b9050610e3c818585610e2d8589611e94565b610e3791906137b2565b6121ba565b600191505092915050565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610e796121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe906136ff565b60405180910390fd5b600c60149054906101000a900462ffffff1662ffffff168262ffffff161080610f3757506101f48262ffffff1611155b610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d9061382f565b60405180910390fd5b600c60179054906101000a900462ffffff1662ffffff168162ffffff161080610fa657506101f48162ffffff1611155b610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90613897565b60405180910390fd5b81600c60146101000a81548162ffffff021916908362ffffff16021790555080600c60176101000a81548162ffffff021916908362ffffff1602179055507f365d5f75a9bc29d89636efe82a2f86cfd2837de54d93735f78ea4a60fd84879d82826040516110549291906138b5565b60405180910390a15050565b600c60149054906101000a900462ffffff1681565b60085f9054906101000a900460ff1681565b6006602052805f5260405f205f915054906101000a900460ff1681565b6110ac6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611131906136ff565b60405180910390fd5b601054611145610e09565b600a6111519190613a0b565b826fffffffffffffffffffffffffffffffff1661116e9190613a55565b10156111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690613ae0565b60405180910390fd5b6111b7610e09565b600a6111c39190613a0b565b816fffffffffffffffffffffffffffffffff166111e09190613a55565b6fffffffffffffffffffffffffffffffff166010819055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade07886010546040516112299190613379565b60405180910390a150565b60115481565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112876121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113da6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f906136ff565b60405180910390fd5b600f5f9054906101000a900460ff166114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613b48565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b600f5f9054906101000a900460ff1681565b6115176121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906136ff565b60405180910390fd5b60085f9054906101000a900460ff16156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90613bb0565b60405180910390fd5b600160085f6101000a81548160ff02191690831515021790555042601181905550600160125f6101000a81548160ff021916908315150217905550565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461168590613685565b80601f01602080910402602001604051908101604052809291908181526020018280546116b190613685565b80156116fc5780601f106116d3576101008083540402835291602001916116fc565b820191905f5260205f20905b8154815290600101906020018083116116df57829003601f168201915b5050505050905090565b61271081565b6117146121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611799906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790613c18565b60405180910390fd5b806118a4577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90613c80565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f0712a8411c7892e205c3d35c5d2beabe76bb0b484bec43945f2024cd28eaae8d8282604051611929929190613c9e565b60405180910390a15050565b5f5f61193f6121b3565b90505f61194c8286611e94565b905083811015611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890613d35565b60405180910390fd5b61199e82868684036121ba565b60019250505092915050565b5f5f6119b46121b3565b90506119c1818585612408565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052805f5260405f205f915054906101000a900460ff1681565b611a156121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890613c18565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690613d9d565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fc4eea32423e96d678d53f47ddd9b7a5103eea02606d7daa81c77038c54dc8edb8282604051611c04929190613c9e565b60405180910390a15050565b611c186121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d906136ff565b60405180910390fd5b612710811115611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613e05565b60405180910390fd5b5f611cf53061123a565b9050611d2261271067ffffffffffffffff168383611d139190613a55565b611d1d9190613e50565b61252d565b5050565b60125f9054906101000a900460ff1681565b600c60179054906101000a900462ffffff1681565b611d556121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613767565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611f426121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613ef0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121046121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612189906136ff565b60405180910390fd5b5f60125f6101000a81548160ff021916908315150217905550565b60105481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f90613f7e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d9061400c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123709190613379565b60405180910390a3505050565b5f6123888484611e94565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461240257818110156123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614074565b60405180910390fd5b61240184848484036121ba565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124a6575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251d5760085f9054906101000a900460ff166124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f0906140dc565b60405180910390fd5b612504838383612712565b8161250f91906140fa565b905061251c838383612945565b5b612528838383612d47565b505050565b5f8190505f820361253e575061270f565b43600d819055505f81111561270d5761255681612f9d565b5f4790505f5f6003836125699190613e50565b9050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516125b09061415a565b5f6040518083038185875af1925050503d805f81146125ea576040519150601f19603f3d011682016040523d82523d5f602084013e6125ef565b606091505b505080925050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161263a9061415a565b5f6040518083038185875af1925050503d805f8114612674576040519150601f19603f3d011682016040523d82523d5f602084013e612679565b606091505b505080925050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516126c49061415a565b5f6040518083038185875af1925050503d805f81146126fe576040519150601f19603f3d011682016040523d82523d5f602084013e612703565b606091505b5050809250505050505b505b50565b5f5f61271d3061123a565b90507f00000000000000000000000000000000000000000000000000000000000000008110158015612796575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127b05750436001600d546127ad91906137b2565b11155b156128235760147f00000000000000000000000000000000000000000000000000000000000000006127e29190613a55565b8111156128195760147f00000000000000000000000000000000000000000000000000000000000000006128169190613a55565b90505b6128228161252d565b5b5f5f90505f60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561289057600c60179054906101000a900462ffffff1690506128f5565b60095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128f457600c60149054906101000a900462ffffff1690505b5b5f8162ffffff1611156129385761271067ffffffffffffffff168162ffffff16866129209190613a55565b61292a9190613e50565b9150612937873084612d47565b5b8193505050509392505050565b600f5f9054906101000a900460ff1615612d42575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f6129b08461123a565b905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a06575081155b15612a60576010548184612a1a91906137b2565b1115612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a52906141b8565b60405180910390fd5b612ab7565b81612ab6576010548184612a7491906137b2565b1115612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac906141b8565b60405180910390fd5b5b5b60125f9054906101000a900460ff1615612d3f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612b7357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612d3e5743600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614220565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612cb9578373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612caf906142ae565b60405180910390fd5b5b43600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061433c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1a906143ca565b60405180910390fd5b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9d90614458565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f8f9190613379565b60405180910390a350505050565b5f600267ffffffffffffffff811115612fb957612fb8614476565b5b604051908082528060200260200182016040528015612fe75781602001602082028036833780820191505090505b50905030815f81518110612ffe57612ffd6144a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061306d5761306c6144a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131089594939291906145c0565b5f604051808303815f87803b15801561311f575f5ffd5b505af1158015613131573d5f5f3e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61317b82613139565b6131858185613143565b9350613195818560208601613153565b61319e81613161565b840191505092915050565b5f6020820190508181035f8301526131c18184613171565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61320b613206613201846131c9565b6131e8565b6131c9565b9050919050565b5f61321c826131f1565b9050919050565b5f61322d82613212565b9050919050565b61323d81613223565b82525050565b5f6020820190506132565f830184613234565b92915050565b5f5ffd5b5f61326a826131c9565b9050919050565b61327a81613260565b8114613284575f5ffd5b50565b5f8135905061329581613271565b92915050565b5f602082840312156132b0576132af61325c565b5b5f6132bd84828501613287565b91505092915050565b5f819050919050565b6132d8816132c6565b81146132e2575f5ffd5b50565b5f813590506132f3816132cf565b92915050565b5f5f6040838503121561330f5761330e61325c565b5b5f61331c85828601613287565b925050602061332d858286016132e5565b9150509250929050565b5f8115159050919050565b61334b81613337565b82525050565b5f6020820190506133645f830184613342565b92915050565b613373816132c6565b82525050565b5f60208201905061338c5f83018461336a565b92915050565b61339b81613260565b82525050565b5f6020820190506133b45f830184613392565b92915050565b5f5f5f606084860312156133d1576133d061325c565b5b5f6133de86828701613287565b93505060206133ef86828701613287565b9250506040613400868287016132e5565b9150509250925092565b5f60ff82169050919050565b61341f8161340a565b82525050565b5f6020820190506134385f830184613416565b92915050565b5f62ffffff82169050919050565b6134558161343e565b811461345f575f5ffd5b50565b5f813590506134708161344c565b92915050565b5f5f6040838503121561348c5761348b61325c565b5b5f61349985828601613462565b92505060206134aa85828601613462565b9150509250929050565b6134bd8161343e565b82525050565b5f6020820190506134d65f8301846134b4565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b613500816134dc565b811461350a575f5ffd5b50565b5f8135905061351b816134f7565b92915050565b5f602082840312156135365761353561325c565b5b5f6135438482850161350d565b91505092915050565b5f67ffffffffffffffff82169050919050565b6135688161354c565b82525050565b5f6020820190506135815f83018461355f565b92915050565b61359081613337565b811461359a575f5ffd5b50565b5f813590506135ab81613587565b92915050565b5f5f604083850312156135c7576135c661325c565b5b5f6135d485828601613287565b92505060206135e58582860161359d565b9150509250929050565b5f602082840312156136045761360361325c565b5b5f613611848285016132e5565b91505092915050565b5f5f604083850312156136305761362f61325c565b5b5f61363d85828601613287565b925050602061364e85828601613287565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061369c57607f821691505b6020821081036136af576136ae613658565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136e9602083613143565b91506136f4826136b5565b602082019050919050565b5f6020820190508181035f830152613716816136dd565b9050919050565b7f7a65726f206164647265737300000000000000000000000000000000000000005f82015250565b5f613751600c83613143565b915061375c8261371d565b602082019050919050565b5f6020820190508181035f83015261377e81613745565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137bc826132c6565b91506137c7836132c6565b92508282019050808211156137df576137de613785565b5b92915050565b7f43616e6e6f742072616973652062757920746178206f766572203525000000005f82015250565b5f613819601c83613143565b9150613824826137e5565b602082019050919050565b5f6020820190508181035f8301526138468161380d565b9050919050565b7f43616e6e6f742072616973652073656c6c20746178206f7665722035250000005f82015250565b5f613881601d83613143565b915061388c8261384d565b602082019050919050565b5f6020820190508181035f8301526138ae81613875565b9050919050565b5f6040820190506138c85f8301856134b4565b6138d560208301846134b4565b9392505050565b5f8160011c9050919050565b5f5f8291508390505b60018511156139315780860481111561390d5761390c613785565b5b600185161561391c5780820291505b808102905061392a856138dc565b94506138f1565b94509492505050565b5f826139495760019050613a04565b81613956575f9050613a04565b816001811461396c5760028114613976576139a5565b6001915050613a04565b60ff84111561398857613987613785565b5b8360020a91508482111561399f5761399e613785565b5b50613a04565b5060208310610133831016604e8410600b84101617156139da5782820a9050838111156139d5576139d4613785565b5b613a04565b6139e784848460016138e8565b925090508184048111156139fe576139fd613785565b5b81810290505b9392505050565b5f613a15826132c6565b9150613a208361340a565b9250613a4d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461393a565b905092915050565b5f613a5f826132c6565b9150613a6a836132c6565b9250828202613a78816132c6565b91508282048414831517613a8f57613a8e613785565b5b5092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f613aca600783613143565b9150613ad582613a96565b602082019050919050565b5f6020820190508181035f830152613af781613abe565b9050919050565b7f4c696d69747320616c72656164792072656d6f766564000000000000000000005f82015250565b5f613b32601683613143565b9150613b3d82613afe565b602082019050919050565b5f6020820190508181035f830152613b5f81613b26565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f613b9a601783613143565b9150613ba582613b66565b602082019050919050565b5f6020820190508181035f830152613bc781613b8e565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f613c02600c83613143565b9150613c0d82613bce565b602082019050919050565b5f6020820190508181035f830152613c2f81613bf6565b9050919050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f613c6a601283613143565b9150613c7582613c36565b602082019050919050565b5f6020820190508181035f830152613c9781613c5e565b9050919050565b5f604082019050613cb15f830185613392565b613cbe6020830184613342565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613d1f602583613143565b9150613d2a82613cc5565b604082019050919050565b5f6020820190508181035f830152613d4c81613d13565b9050919050565b7f43616e6e6f7420756e6578636c75646520636f6e7472616374000000000000005f82015250565b5f613d87601983613143565b9150613d9282613d53565b602082019050919050565b5f6020820190508181035f830152613db481613d7b565b9050919050565b7f43616e6e6f7420636f6e76657274206d6f7265207468616e20313030250000005f82015250565b5f613def601d83613143565b9150613dfa82613dbb565b602082019050919050565b5f6020820190508181035f830152613e1c81613de3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e5a826132c6565b9150613e65836132c6565b925082613e7557613e74613e23565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613eda602683613143565b9150613ee582613e80565b604082019050919050565b5f6020820190508181035f830152613f0781613ece565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f68602483613143565b9150613f7382613f0e565b604082019050919050565b5f6020820190508181035f830152613f9581613f5c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ff6602283613143565b915061400182613f9c565b604082019050919050565b5f6020820190508181035f83015261402381613fea565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61405e601d83613143565b91506140698261402a565b602082019050919050565b5f6020820190508181035f83015261408b81614052565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f6140c6601283613143565b91506140d182614092565b602082019050919050565b5f6020820190508181035f8301526140f3816140ba565b9050919050565b5f614104826132c6565b915061410f836132c6565b925082820390508181111561412757614126613785565b5b92915050565b5f81905092915050565b50565b5f6141455f8361412d565b915061415082614137565b5f82019050919050565b5f6141648261413a565b9150819050919050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6141a2600a83613143565b91506141ad8261416e565b602082019050919050565b5f6020820190508181035f8301526141cf81614196565b9050919050565b7f5472616e736665722044656c61790000000000000000000000000000000000005f82015250565b5f61420a600e83613143565b9150614215826141d6565b602082019050919050565b5f6020820190508181035f830152614237816141fe565b9050919050565b7f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079655f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f614298602183613143565b91506142a38261423e565b604082019050919050565b5f6020820190508181035f8301526142c58161428c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614326602583613143565b9150614331826142cc565b604082019050919050565b5f6020820190508181035f8301526143538161431a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143b4602383613143565b91506143bf8261435a565b604082019050919050565b5f6020820190508181035f8301526143e1816143a8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614442602683613143565b915061444d826143e8565b604082019050919050565b5f6020820190508181035f83015261446f81614436565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6144f36144ee6144e9846144d0565b6131e8565b6132c6565b9050919050565b614503816144d9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61453b81613260565b82525050565b5f61454c8383614532565b60208301905092915050565b5f602082019050919050565b5f61456e82614509565b6145788185614513565b935061458383614523565b805f5b838110156145b357815161459a8882614541565b97506145a583614558565b925050600181019050614586565b5085935050505092915050565b5f60a0820190506145d35f83018861336a565b6145e060208301876144fa565b81810360408301526145f28186614564565b90506146016060830185613392565b61460e608083018461336a565b969550505050505056fea26469706673582212201c0fce8df9dd7ec6122a9fdf42d18656cc3875863ef3c75ebdb174e6507a919064736f6c634300081b0033

Deployed Bytecode

0x60806040526004361061026a575f3560e01c8063751039fc11610143578063b0249cc6116100b5578063d65e6fb611610079578063d65e6fb614610909578063dd62ed3e14610931578063e2f456051461096d578063f2fde38b14610997578063f8686f07146109bf578063f8b45b05146109d557610271565b8063b0249cc614610829578063bedafd0114610865578063c1f87afc1461088d578063c876d0b9146108b5578063cc1776d3146108df57610271565b806395d89b411161010757806395d89b411461070b5780639e93ad8e14610735578063a13d1a2b1461075f578063a457c2d714610787578063a9059cbb146107c3578063ad5c4648146107ff57610271565b8063751039fc1461064f578063860a32ec146106655780638a8c523c1461068f5780638d3e6e40146106a55780638da5cb5b146106e157610271565b806339509351116101dc57806353371be0116101a057806353371be0146105455780635a90a49e1461056f578063638cb6af146105ab57806365cf7c9b146105d357806370a08231146105fd578063715018a61461063957610271565b80633950935114610463578063432e95a51461049f578063452ed4f1146104c95780634b356f47146104f35780634f7041a51461051b57610271565b8063196101781161022e57806319610178146103575780631cdce2001461037f5780632272f879146103a957806323b872dd146103d35780632594b3431461040f578063313ce5671461043957610271565b806306fdde03146102755780630758d9241461029f578063076dc80c146102c9578063095ea7b3146102f157806318160ddd1461032d57610271565b3661027157005b5f5ffd5b348015610280575f5ffd5b506102896109ff565b60405161029691906131a9565b60405180910390f35b3480156102aa575f5ffd5b506102b3610a8f565b6040516102c09190613243565b60405180910390f35b3480156102d4575f5ffd5b506102ef60048036038101906102ea919061329b565b610ab3565b005b3480156102fc575f5ffd5b50610317600480360381019061031291906132f9565b610bfa565b6040516103249190613351565b60405180910390f35b348015610338575f5ffd5b50610341610c1c565b60405161034e9190613379565b60405180910390f35b348015610362575f5ffd5b5061037d6004803603810190610378919061329b565b610c25565b005b34801561038a575f5ffd5b50610393610d6c565b6040516103a091906133a1565b60405180910390f35b3480156103b4575f5ffd5b506103bd610d91565b6040516103ca91906133a1565b60405180910390f35b3480156103de575f5ffd5b506103f960048036038101906103f491906133ba565b610db6565b6040516104069190613351565b60405180910390f35b34801561041a575f5ffd5b50610423610de4565b60405161043091906133a1565b60405180910390f35b348015610444575f5ffd5b5061044d610e09565b60405161045a9190613425565b60405180910390f35b34801561046e575f5ffd5b50610489600480360381019061048491906132f9565b610e11565b6040516104969190613351565b60405180910390f35b3480156104aa575f5ffd5b506104b3610e47565b6040516104c09190613379565b60405180910390f35b3480156104d4575f5ffd5b506104dd610e4d565b6040516104ea91906133a1565b60405180910390f35b3480156104fe575f5ffd5b5061051960048036038101906105149190613476565b610e71565b005b348015610526575f5ffd5b5061052f611060565b60405161053c91906134c3565b60405180910390f35b348015610550575f5ffd5b50610559611075565b6040516105669190613351565b60405180910390f35b34801561057a575f5ffd5b506105956004803603810190610590919061329b565b611087565b6040516105a29190613351565b60405180910390f35b3480156105b6575f5ffd5b506105d160048036038101906105cc9190613521565b6110a4565b005b3480156105de575f5ffd5b506105e7611234565b6040516105f49190613379565b60405180910390f35b348015610608575f5ffd5b50610623600480360381019061061e919061329b565b61123a565b6040516106309190613379565b60405180910390f35b348015610644575f5ffd5b5061064d61127f565b005b34801561065a575f5ffd5b506106636113d2565b005b348015610670575f5ffd5b506106796114fd565b6040516106869190613351565b60405180910390f35b34801561069a575f5ffd5b506106a361150f565b005b3480156106b0575f5ffd5b506106cb60048036038101906106c6919061329b565b611631565b6040516106d89190613351565b60405180910390f35b3480156106ec575f5ffd5b506106f561164e565b60405161070291906133a1565b60405180910390f35b348015610716575f5ffd5b5061071f611676565b60405161072c91906131a9565b60405180910390f35b348015610740575f5ffd5b50610749611706565b604051610756919061356e565b60405180910390f35b34801561076a575f5ffd5b50610785600480360381019061078091906135b1565b61170c565b005b348015610792575f5ffd5b506107ad60048036038101906107a891906132f9565b611935565b6040516107ba9190613351565b60405180910390f35b3480156107ce575f5ffd5b506107e960048036038101906107e491906132f9565b6119aa565b6040516107f69190613351565b60405180910390f35b34801561080a575f5ffd5b506108136119cc565b60405161082091906133a1565b60405180910390f35b348015610834575f5ffd5b5061084f600480360381019061084a919061329b565b6119f0565b60405161085c9190613351565b60405180910390f35b348015610870575f5ffd5b5061088b600480360381019061088691906135b1565b611a0d565b005b348015610898575f5ffd5b506108b360048036038101906108ae91906135ef565b611c10565b005b3480156108c0575f5ffd5b506108c9611d26565b6040516108d69190613351565b60405180910390f35b3480156108ea575f5ffd5b506108f3611d38565b60405161090091906134c3565b60405180910390f35b348015610914575f5ffd5b5061092f600480360381019061092a919061329b565b611d4d565b005b34801561093c575f5ffd5b506109576004803603810190610952919061361a565b611e94565b6040516109649190613379565b60405180910390f35b348015610978575f5ffd5b50610981611f16565b60405161098e9190613379565b60405180910390f35b3480156109a2575f5ffd5b506109bd60048036038101906109b8919061329b565b611f3a565b005b3480156109ca575f5ffd5b506109d36120fc565b005b3480156109e0575f5ffd5b506109e96121ad565b6040516109f69190613379565b60405180910390f35b606060038054610a0e90613685565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3a90613685565b8015610a855780601f10610a5c57610100808354040283529160200191610a85565b820191905f5260205f20905b815481529060010190602001808311610a6857829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b610abb6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b40906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613767565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f610c046121b3565b9050610c118185856121ba565b600191505092915050565b5f600254905090565b610c2d6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb2906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613767565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f610dc06121b3565b9050610dcd85828561237d565b610dd8858585612408565b60019150509392505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f5f610e1b6121b3565b9050610e3c818585610e2d8589611e94565b610e3791906137b2565b6121ba565b600191505092915050565b600d5481565b7f000000000000000000000000a3f3dd5887a857b2c334a12d1c85f3120f1537e781565b610e796121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe906136ff565b60405180910390fd5b600c60149054906101000a900462ffffff1662ffffff168262ffffff161080610f3757506101f48262ffffff1611155b610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d9061382f565b60405180910390fd5b600c60179054906101000a900462ffffff1662ffffff168162ffffff161080610fa657506101f48162ffffff1611155b610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90613897565b60405180910390fd5b81600c60146101000a81548162ffffff021916908362ffffff16021790555080600c60176101000a81548162ffffff021916908362ffffff1602179055507f365d5f75a9bc29d89636efe82a2f86cfd2837de54d93735f78ea4a60fd84879d82826040516110549291906138b5565b60405180910390a15050565b600c60149054906101000a900462ffffff1681565b60085f9054906101000a900460ff1681565b6006602052805f5260405f205f915054906101000a900460ff1681565b6110ac6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611131906136ff565b60405180910390fd5b601054611145610e09565b600a6111519190613a0b565b826fffffffffffffffffffffffffffffffff1661116e9190613a55565b10156111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690613ae0565b60405180910390fd5b6111b7610e09565b600a6111c39190613a0b565b816fffffffffffffffffffffffffffffffff166111e09190613a55565b6fffffffffffffffffffffffffffffffff166010819055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade07886010546040516112299190613379565b60405180910390a150565b60115481565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112876121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113da6121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f906136ff565b60405180910390fd5b600f5f9054906101000a900460ff166114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613b48565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b600f5f9054906101000a900460ff1681565b6115176121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906136ff565b60405180910390fd5b60085f9054906101000a900460ff16156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90613bb0565b60405180910390fd5b600160085f6101000a81548160ff02191690831515021790555042601181905550600160125f6101000a81548160ff021916908315150217905550565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461168590613685565b80601f01602080910402602001604051908101604052809291908181526020018280546116b190613685565b80156116fc5780601f106116d3576101008083540402835291602001916116fc565b820191905f5260205f20905b8154815290600101906020018083116116df57829003601f168201915b5050505050905090565b61271081565b6117146121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611799906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790613c18565b60405180910390fd5b806118a4577f000000000000000000000000a3f3dd5887a857b2c334a12d1c85f3120f1537e773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90613c80565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f0712a8411c7892e205c3d35c5d2beabe76bb0b484bec43945f2024cd28eaae8d8282604051611929929190613c9e565b60405180910390a15050565b5f5f61193f6121b3565b90505f61194c8286611e94565b905083811015611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890613d35565b60405180910390fd5b61199e82868684036121ba565b60019250505092915050565b5f5f6119b46121b3565b90506119c1818585612408565b600191505092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6009602052805f5260405f205f915054906101000a900460ff1681565b611a156121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890613c18565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690613d9d565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fc4eea32423e96d678d53f47ddd9b7a5103eea02606d7daa81c77038c54dc8edb8282604051611c04929190613c9e565b60405180910390a15050565b611c186121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d906136ff565b60405180910390fd5b612710811115611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613e05565b60405180910390fd5b5f611cf53061123a565b9050611d2261271067ffffffffffffffff168383611d139190613a55565b611d1d9190613e50565b61252d565b5050565b60125f9054906101000a900460ff1681565b600c60179054906101000a900462ffffff1681565b611d556121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613767565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f00000000000000000000000000000000000000000001a784379d99db4200000081565b611f426121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906136ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613ef0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121046121b3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612189906136ff565b60405180910390fd5b5f60125f6101000a81548160ff021916908315150217905550565b60105481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f90613f7e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d9061400c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123709190613379565b60405180910390a3505050565b5f6123888484611e94565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461240257818110156123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614074565b60405180910390fd5b61240184848484036121ba565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124a6575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251d5760085f9054906101000a900460ff166124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f0906140dc565b60405180910390fd5b612504838383612712565b8161250f91906140fa565b905061251c838383612945565b5b612528838383612d47565b505050565b5f8190505f820361253e575061270f565b43600d819055505f81111561270d5761255681612f9d565b5f4790505f5f6003836125699190613e50565b9050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516125b09061415a565b5f6040518083038185875af1925050503d805f81146125ea576040519150601f19603f3d011682016040523d82523d5f602084013e6125ef565b606091505b505080925050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161263a9061415a565b5f6040518083038185875af1925050503d805f8114612674576040519150601f19603f3d011682016040523d82523d5f602084013e612679565b606091505b505080925050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516126c49061415a565b5f6040518083038185875af1925050503d805f81146126fe576040519150601f19603f3d011682016040523d82523d5f602084013e612703565b606091505b5050809250505050505b505b50565b5f5f61271d3061123a565b90507f00000000000000000000000000000000000000000001a784379d99db420000008110158015612796575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127b05750436001600d546127ad91906137b2565b11155b156128235760147f00000000000000000000000000000000000000000001a784379d99db420000006127e29190613a55565b8111156128195760147f00000000000000000000000000000000000000000001a784379d99db420000006128169190613a55565b90505b6128228161252d565b5b5f5f90505f60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561289057600c60179054906101000a900462ffffff1690506128f5565b60095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128f457600c60149054906101000a900462ffffff1690505b5b5f8162ffffff1611156129385761271067ffffffffffffffff168162ffffff16866129209190613a55565b61292a9190613e50565b9150612937873084612d47565b5b8193505050509392505050565b600f5f9054906101000a900460ff1615612d42575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f6129b08461123a565b905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a06575081155b15612a60576010548184612a1a91906137b2565b1115612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a52906141b8565b60405180910390fd5b612ab7565b81612ab6576010548184612a7491906137b2565b1115612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac906141b8565b60405180910390fd5b5b5b60125f9054906101000a900460ff1615612d3f577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612b7357507f000000000000000000000000a3f3dd5887a857b2c334a12d1c85f3120f1537e773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612d3e5743600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614220565b60405180910390fd5b7f000000000000000000000000a3f3dd5887a857b2c334a12d1c85f3120f1537e773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612cb9578373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612caf906142ae565b60405180910390fd5b5b43600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061433c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1a906143ca565b60405180910390fd5b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9d90614458565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f8f9190613379565b60405180910390a350505050565b5f600267ffffffffffffffff811115612fb957612fb8614476565b5b604051908082528060200260200182016040528015612fe75781602001602082028036833780820191505090505b50905030815f81518110612ffe57612ffd6144a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061306d5761306c6144a3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131089594939291906145c0565b5f604051808303815f87803b15801561311f575f5ffd5b505af1158015613131573d5f5f3e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61317b82613139565b6131858185613143565b9350613195818560208601613153565b61319e81613161565b840191505092915050565b5f6020820190508181035f8301526131c18184613171565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61320b613206613201846131c9565b6131e8565b6131c9565b9050919050565b5f61321c826131f1565b9050919050565b5f61322d82613212565b9050919050565b61323d81613223565b82525050565b5f6020820190506132565f830184613234565b92915050565b5f5ffd5b5f61326a826131c9565b9050919050565b61327a81613260565b8114613284575f5ffd5b50565b5f8135905061329581613271565b92915050565b5f602082840312156132b0576132af61325c565b5b5f6132bd84828501613287565b91505092915050565b5f819050919050565b6132d8816132c6565b81146132e2575f5ffd5b50565b5f813590506132f3816132cf565b92915050565b5f5f6040838503121561330f5761330e61325c565b5b5f61331c85828601613287565b925050602061332d858286016132e5565b9150509250929050565b5f8115159050919050565b61334b81613337565b82525050565b5f6020820190506133645f830184613342565b92915050565b613373816132c6565b82525050565b5f60208201905061338c5f83018461336a565b92915050565b61339b81613260565b82525050565b5f6020820190506133b45f830184613392565b92915050565b5f5f5f606084860312156133d1576133d061325c565b5b5f6133de86828701613287565b93505060206133ef86828701613287565b9250506040613400868287016132e5565b9150509250925092565b5f60ff82169050919050565b61341f8161340a565b82525050565b5f6020820190506134385f830184613416565b92915050565b5f62ffffff82169050919050565b6134558161343e565b811461345f575f5ffd5b50565b5f813590506134708161344c565b92915050565b5f5f6040838503121561348c5761348b61325c565b5b5f61349985828601613462565b92505060206134aa85828601613462565b9150509250929050565b6134bd8161343e565b82525050565b5f6020820190506134d65f8301846134b4565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b613500816134dc565b811461350a575f5ffd5b50565b5f8135905061351b816134f7565b92915050565b5f602082840312156135365761353561325c565b5b5f6135438482850161350d565b91505092915050565b5f67ffffffffffffffff82169050919050565b6135688161354c565b82525050565b5f6020820190506135815f83018461355f565b92915050565b61359081613337565b811461359a575f5ffd5b50565b5f813590506135ab81613587565b92915050565b5f5f604083850312156135c7576135c661325c565b5b5f6135d485828601613287565b92505060206135e58582860161359d565b9150509250929050565b5f602082840312156136045761360361325c565b5b5f613611848285016132e5565b91505092915050565b5f5f604083850312156136305761362f61325c565b5b5f61363d85828601613287565b925050602061364e85828601613287565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061369c57607f821691505b6020821081036136af576136ae613658565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136e9602083613143565b91506136f4826136b5565b602082019050919050565b5f6020820190508181035f830152613716816136dd565b9050919050565b7f7a65726f206164647265737300000000000000000000000000000000000000005f82015250565b5f613751600c83613143565b915061375c8261371d565b602082019050919050565b5f6020820190508181035f83015261377e81613745565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137bc826132c6565b91506137c7836132c6565b92508282019050808211156137df576137de613785565b5b92915050565b7f43616e6e6f742072616973652062757920746178206f766572203525000000005f82015250565b5f613819601c83613143565b9150613824826137e5565b602082019050919050565b5f6020820190508181035f8301526138468161380d565b9050919050565b7f43616e6e6f742072616973652073656c6c20746178206f7665722035250000005f82015250565b5f613881601d83613143565b915061388c8261384d565b602082019050919050565b5f6020820190508181035f8301526138ae81613875565b9050919050565b5f6040820190506138c85f8301856134b4565b6138d560208301846134b4565b9392505050565b5f8160011c9050919050565b5f5f8291508390505b60018511156139315780860481111561390d5761390c613785565b5b600185161561391c5780820291505b808102905061392a856138dc565b94506138f1565b94509492505050565b5f826139495760019050613a04565b81613956575f9050613a04565b816001811461396c5760028114613976576139a5565b6001915050613a04565b60ff84111561398857613987613785565b5b8360020a91508482111561399f5761399e613785565b5b50613a04565b5060208310610133831016604e8410600b84101617156139da5782820a9050838111156139d5576139d4613785565b5b613a04565b6139e784848460016138e8565b925090508184048111156139fe576139fd613785565b5b81810290505b9392505050565b5f613a15826132c6565b9150613a208361340a565b9250613a4d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461393a565b905092915050565b5f613a5f826132c6565b9150613a6a836132c6565b9250828202613a78816132c6565b91508282048414831517613a8f57613a8e613785565b5b5092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f613aca600783613143565b9150613ad582613a96565b602082019050919050565b5f6020820190508181035f830152613af781613abe565b9050919050565b7f4c696d69747320616c72656164792072656d6f766564000000000000000000005f82015250565b5f613b32601683613143565b9150613b3d82613afe565b602082019050919050565b5f6020820190508181035f830152613b5f81613b26565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f613b9a601783613143565b9150613ba582613b66565b602082019050919050565b5f6020820190508181035f830152613bc781613b8e565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f613c02600c83613143565b9150613c0d82613bce565b602082019050919050565b5f6020820190508181035f830152613c2f81613bf6565b9050919050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f613c6a601283613143565b9150613c7582613c36565b602082019050919050565b5f6020820190508181035f830152613c9781613c5e565b9050919050565b5f604082019050613cb15f830185613392565b613cbe6020830184613342565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613d1f602583613143565b9150613d2a82613cc5565b604082019050919050565b5f6020820190508181035f830152613d4c81613d13565b9050919050565b7f43616e6e6f7420756e6578636c75646520636f6e7472616374000000000000005f82015250565b5f613d87601983613143565b9150613d9282613d53565b602082019050919050565b5f6020820190508181035f830152613db481613d7b565b9050919050565b7f43616e6e6f7420636f6e76657274206d6f7265207468616e20313030250000005f82015250565b5f613def601d83613143565b9150613dfa82613dbb565b602082019050919050565b5f6020820190508181035f830152613e1c81613de3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e5a826132c6565b9150613e65836132c6565b925082613e7557613e74613e23565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613eda602683613143565b9150613ee582613e80565b604082019050919050565b5f6020820190508181035f830152613f0781613ece565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f68602483613143565b9150613f7382613f0e565b604082019050919050565b5f6020820190508181035f830152613f9581613f5c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ff6602283613143565b915061400182613f9c565b604082019050919050565b5f6020820190508181035f83015261402381613fea565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61405e601d83613143565b91506140698261402a565b602082019050919050565b5f6020820190508181035f83015261408b81614052565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f6140c6601283613143565b91506140d182614092565b602082019050919050565b5f6020820190508181035f8301526140f3816140ba565b9050919050565b5f614104826132c6565b915061410f836132c6565b925082820390508181111561412757614126613785565b5b92915050565b5f81905092915050565b50565b5f6141455f8361412d565b915061415082614137565b5f82019050919050565b5f6141648261413a565b9150819050919050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6141a2600a83613143565b91506141ad8261416e565b602082019050919050565b5f6020820190508181035f8301526141cf81614196565b9050919050565b7f5472616e736665722044656c61790000000000000000000000000000000000005f82015250565b5f61420a600e83613143565b9150614215826141d6565b602082019050919050565b5f6020820190508181035f830152614237816141fe565b9050919050565b7f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079655f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f614298602183613143565b91506142a38261423e565b604082019050919050565b5f6020820190508181035f8301526142c58161428c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614326602583613143565b9150614331826142cc565b604082019050919050565b5f6020820190508181035f8301526143538161431a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143b4602383613143565b91506143bf8261435a565b604082019050919050565b5f6020820190508181035f8301526143e1816143a8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614442602683613143565b915061444d826143e8565b604082019050919050565b5f6020820190508181035f83015261446f81614436565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6144f36144ee6144e9846144d0565b6131e8565b6132c6565b9050919050565b614503816144d9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61453b81613260565b82525050565b5f61454c8383614532565b60208301905092915050565b5f602082019050919050565b5f61456e82614509565b6145788185614513565b935061458383614523565b805f5b838110156145b357815161459a8882614541565b97506145a583614558565b925050600181019050614586565b5085935050505092915050565b5f60a0820190506145d35f83018861336a565b6145e060208301876144fa565b81810360408301526145f28186614564565b90506146016060830185613392565b61460e608083018461336a565b969550505050505056fea26469706673582212201c0fce8df9dd7ec6122a9fdf42d18656cc3875863ef3c75ebdb174e6507a919064736f6c634300081b0033

Deployed Bytecode Sourcemap

22928:10647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4559:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23996:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32535:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6919:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5688:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32745:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23342:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23404:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7700:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23373:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5530:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8370:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23582:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23958:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31792:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23480:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23182:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23023:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31478:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24200:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5859:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13690:148;;;;;;;;;;;;;:::i;:::-;;32186:161;;;;;;;;;;;;;:::i;:::-;;23736:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31201:228;;;;;;;;;;;;;:::i;:::-;;23077:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13375:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4778:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24111:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30806:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9111:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6192:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24040:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23252:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30426:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33206:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24271:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23507:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32957:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6448:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23857:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13910:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32387:97;;;;;;;;;;;;;:::i;:::-;;23769:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4559:100;4613:13;4646:5;4639:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4559:100;:::o;23996:37::-;;;:::o;32535:159::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32636:1:::1;32616:22;;:8;:22;;::::0;32608:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32678:8;32666:9;;:20;;;;;;;;;;;;;;;;;;32535:159:::0;:::o;6919:201::-;7002:4;7019:13;7035:12;:10;:12::i;:::-;7019:28;;7058:32;7067:5;7074:7;7083:6;7058:8;:32::i;:::-;7108:4;7101:11;;;6919:201;;;;:::o;5688:108::-;5749:7;5776:12;;5769:19;;5688:108;:::o;32745:159::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32846:1:::1;32826:22;;:8;:22;;::::0;32818:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32888:8;32876:9;;:20;;;;;;;;;;;;;;;;;;32745:159:::0;:::o;23342:24::-;;;;;;;;;;;;;:::o;23404:26::-;;;;;;;;;;;;;:::o;7700:261::-;7797:4;7814:15;7832:12;:10;:12::i;:::-;7814:30;;7855:38;7871:4;7877:7;7886:6;7855:15;:38::i;:::-;7904:27;7914:4;7920:2;7924:6;7904:9;:27::i;:::-;7949:4;7942:11;;;7700:261;;;;;:::o;23373:24::-;;;;;;;;;;;;;:::o;5530:93::-;5588:5;5613:2;5606:9;;5530:93;:::o;8370:238::-;8458:4;8475:13;8491:12;:10;:12::i;:::-;8475:28;;8514:64;8523:5;8530:7;8567:10;8539:25;8549:5;8556:7;8539:9;:25::i;:::-;:38;;;;:::i;:::-;8514:8;:64::i;:::-;8596:4;8589:11;;;8370:238;;;;:::o;23582:32::-;;;;:::o;23958:31::-;;;:::o;31792:356::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31892:6:::1;;;;;;;;;;;31882:16;;:7;:16;;;:34;;;;31913:3;31902:7;:14;;;;31882:34;31874:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31979:7;;;;;;;;;;;31968:18;;:8;:18;;;:37;;;;32002:3;31990:8;:15;;;;31968:37;31960:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;32059:7;32050:6;;:16;;;;;;;;;;;;;;;;;;32087:8;32077:7;;:18;;;;;;;;;;;;;;;;;;32111:29;32122:7;32131:8;32111:29;;;;;;;:::i;:::-;;;;;;;;31792:356:::0;;:::o;23480:20::-;;;;;;;;;;;;;:::o;23182:26::-;;;;;;;;;;;;;:::o;23023:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;31478:263::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31602:9:::1;;31587:10;:8;:10::i;:::-;31583:2;:14;;;;:::i;:::-;31565;:33;;;;;;:::i;:::-;:46;;31557:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31676:10;:8;:10::i;:::-;31672:2;:14;;;;:::i;:::-;31654;:33;;;;;;:::i;:::-;31634:54;;:9;:54;;;;31704:29;31723:9;;31704:29;;;;;;:::i;:::-;;;;;;;;31478:263:::0;:::o;24200:30::-;;;;:::o;5859:127::-;5933:7;5960:9;:18;5970:7;5960:18;;;;;;;;;;;;;;;;5953:25;;5859:127;;;:::o;13690:148::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13797:1:::1;13760:40;;13781:6;;;;;;;;;;;13760:40;;;;;;;;;;;;13828:1;13811:6;;:19;;;;;;;;;;;;;;;;;;13690:148::o:0;32186:161::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32248:7:::1;;;;;;;;;;;32240:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32303:5;32293:7;;:15;;;;;;;;;;;;;;;;;;32324;;;;;;;;;;32186:161::o:0;23736:26::-;;;;;;;;;;;;;:::o;31201:228::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31265:14:::1;;;;;;;;;;;31264:15;31256:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;31335:4;31318:14;;:21;;;;;;;;;;;;;;;;;;31368:15;31350;:33;;;;31417:4;31394:20;;:27;;;;;;;;;;;;;;;;;;31201:228::o:0;23077:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;13375:79::-;13413:7;13440:6;;;;;;;;;;;13433:13;;13375:79;:::o;4778:104::-;4834:13;4867:7;4860:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4778:104;:::o;24111:42::-;24148:5;24111:42;:::o;30806:363::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30929:1:::1;30909:22;;:8;:22;;::::0;30901:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30963:11;30959:92;;31010:6;30998:18;;:8;:18;;::::0;30990:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30959:92;31090:11;31061:16;:26;31078:8;31061:26;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;31117:44;31139:8;31149:11;31117:44;;;;;;;:::i;:::-;;;;;;;;30806:363:::0;;:::o;9111:436::-;9204:4;9221:13;9237:12;:10;:12::i;:::-;9221:28;;9260:24;9287:25;9297:5;9304:7;9287:9;:25::i;:::-;9260:52;;9351:15;9331:16;:35;;9323:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9444:60;9453:5;9460:7;9488:15;9469:16;:34;9444:8;:60::i;:::-;9535:4;9528:11;;;;9111:436;;;;:::o;6192:193::-;6271:4;6288:13;6304:12;:10;:12::i;:::-;6288:28;;6327;6337:5;6344:2;6348:6;6327:9;:28::i;:::-;6373:4;6366:11;;;6192:193;;;;:::o;24040:29::-;;;:::o;23252:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;30426:328::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30546:1:::1;30526:22;;:8;:22;;::::0;30518:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30604:4;30584:25;;:8;:25;;::::0;30576:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30677:11;30650:14;:24;30665:8;30650:24;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30704:42;30724:8;30734:11;30704:42;;;;;;;:::i;:::-;;;;;;;;30426:328:::0;;:::o;33206:288::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33313:5:::1;33293:16;:25;;33285:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33363:23;33389:24;33407:4;33389:9;:24::i;:::-;33363:50;;33424:62;24148:5;33437:48;;33455:16;33437:15;:34;;;;:::i;:::-;:48;;;;:::i;:::-;33424:12;:62::i;:::-;33274:220;33206:288:::0;:::o;24271:40::-;;;;;;;;;;;;;:::o;23507:21::-;;;;;;;;;;;;;:::o;32957:163::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33060:1:::1;33040:22;;:8;:22;;::::0;33032:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33104:8;33090:11;;:22;;;;;;;;;;;;;;;;;;32957:163:::0;:::o;6448:151::-;6537:7;6564:11;:18;6576:5;6564:18;;;;;;;;;;;;;;;:27;6583:7;6564:27;;;;;;;;;;;;;;;;6557:34;;6448:151;;;;:::o;23857:43::-;;;:::o;13910:244::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14019:1:::1;13999:22;;:8;:22;;::::0;13991:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14109:8;14080:38;;14101:6;;;;;;;;;;;14080:38;;;;;;;;;;;;14138:8;14129:6;;:17;;;;;;;;;;;;;;;;;;13910:244:::0;:::o;32387:97::-;13566:12;:10;:12::i;:::-;13556:22;;:6;;;;;;;;;;;:22;;;13548:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32471:5:::1;32448:20;;:28;;;;;;;;;;;;;;;;;;32387:97::o:0;23769:24::-;;;;:::o;206:98::-;259:7;286:10;279:17;;206:98;:::o;11872:346::-;11991:1;11974:19;;:5;:19;;;11966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12072:1;12053:21;;:7;:21;;;12045:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12156:6;12126:11;:18;12138:5;12126:18;;;;;;;;;;;;;;;:27;12145:7;12126:27;;;;;;;;;;;;;;;:36;;;;12194:7;12178:32;;12187:5;12178:32;;;12203:6;12178:32;;;;;;:::i;:::-;;;;;;;;11872:346;;;:::o;12509:419::-;12610:24;12637:25;12647:5;12654:7;12637:9;:25::i;:::-;12610:52;;12697:17;12677:16;:37;12673:248;;12759:6;12739:16;:26;;12731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12843:51;12852:5;12859:7;12887:6;12868:16;:25;12843:8;:51::i;:::-;12673:248;12599:329;12509:419;;;:::o;26552:409::-;26698:14;:20;26713:4;26698:20;;;;;;;;;;;;;;;;;;;;;;;;;26697:21;:44;;;;;26723:14;:18;26738:2;26723:18;;;;;;;;;;;;;;;;;;;;;;;;;26722:19;26697:44;26694:216;;;26765:14;;;;;;;;;;;26757:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;26827:27;26837:4;26843:2;26847:6;26827:9;:27::i;:::-;26817:37;;;;;:::i;:::-;;;26869:29;26881:4;26887:2;26891:6;26869:11;:29::i;:::-;26694:216;26922:31;26938:4;26943:2;26946:6;26922:15;:31::i;:::-;26552:409;;;:::o;29633:717::-;29692:23;29718:6;29692:32;;29758:1;29748:6;:11;29745:25;;29762:7;;;29745:25;29802:12;29782:17;:32;;;;29848:1;29830:15;:19;29827:516;;;29867:33;29884:15;29867:16;:33::i;:::-;29929:18;29950:21;29929:42;;29988:12;30059:23;30098:1;30085:10;:14;;;;:::i;:::-;30059:40;;30141:9;;;;;;;;;;;:14;;30163:15;30141:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30128:55;;;;;30211:9;;;;;;;;;;;:14;;30233:15;30211:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30198:55;;;;;30281:11;;;;;;;;;;;:16;;30305:21;30281:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30268:63;;;;;29850:493;;;29827:516;29679:671;29633:717;;:::o;28219:930::-;28298:7;28319:23;28345:24;28363:4;28345:9;:24::i;:::-;28319:50;;28402:18;28383:15;:37;;:57;;;;;28425:9;:15;28435:4;28425:15;;;;;;;;;;;;;;;;;;;;;;;;;28424:16;28383:57;:98;;;;;28469:12;28464:1;28444:17;;:21;;;;:::i;:::-;:37;;28383:98;28380:294;;;28540:2;28519:18;:23;;;;:::i;:::-;28501:15;:41;28498:121;;;28601:2;28580:18;:23;;;;:::i;:::-;28562:41;;28498:121;28633:29;28646:15;28633:12;:29::i;:::-;28380:294;28694:11;28708:1;28694:15;;28722:12;28808:9;:13;28818:2;28808:13;;;;;;;;;;;;;;;;;;;;;;;;;28804:126;;;28845:7;;;;;;;;;;;28837:15;;28804:126;;;28873:9;:15;28883:4;28873:15;;;;;;;;;;;;;;;;;;;;;;;;;28870:60;;;28912:6;;;;;;;;;;;28904:14;;28870:60;28804:126;28992:1;28984:5;:9;;;28981:130;;;24148:5;29015:28;;29024:5;29015:14;;:6;:14;;;;:::i;:::-;:28;;;;:::i;:::-;29009:34;;29058:41;29074:4;29088;29095:3;29058:15;:41::i;:::-;28981:130;29138:3;29131:10;;;;;28219:930;;;;;:::o;27011:1155::-;27097:7;;;;;;;;;;;27094:1065;;;27134:19;27156:16;:20;27173:2;27156:20;;;;;;;;;;;;;;;;;;;;;;;;;27134:42;;27191:19;27213:13;27223:2;27213:9;:13::i;:::-;27191:35;;27296:9;:15;27306:4;27296:15;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;27316:14;27315:15;27296:34;27292:261;;;27383:9;;27368:11;27359:6;:20;;;;:::i;:::-;:33;;27351:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27292:261;;;27446:14;27442:111;;27513:9;;27498:11;27489:6;:20;;;;:::i;:::-;:33;;27481:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27442:111;27292:261;27622:20;;;;;;;;;;;27619:529;;;27680:9;27666:24;;:2;:24;;;;:49;;;;;27708:6;27694:21;;:2;:21;;;;27666:49;27662:471;;;27784:12;27747:23;:34;27771:9;27747:34;;;;;;;;;;;;;;;;:49;27739:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27857:6;27841:23;;:4;:23;;;27838:139;;27913:2;27900:15;;:9;:15;;;27892:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27838:139;28029:12;27999:23;:27;28023:2;27999:27;;;;;;;;;;;;;;;:42;;;;28101:12;28064:23;:34;28088:9;28064:34;;;;;;;;;;;;;;;:49;;;;27662:471;27619:529;27105:1054;;27094:1065;27011:1155;;;:::o;10017:705::-;10130:1;10114:18;;:4;:18;;;10106:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10207:1;10193:16;;:2;:16;;;10185:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10262:19;10284:9;:15;10294:4;10284:15;;;;;;;;;;;;;;;;10262:37;;10333:6;10318:11;:21;;10310:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10450:6;10436:11;:20;10418:9;:15;10428:4;10418:15;;;;;;;;;;;;;;;:38;;;;10653:6;10636:9;:13;10646:2;10636:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10703:2;10688:26;;10697:4;10688:26;;;10707:6;10688:26;;;;;;:::i;:::-;;;;;;;;10095:627;10017:705;;;:::o;29186:372::-;29251:21;29289:1;29275:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29251:40;;29320:4;29302;29307:1;29302:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29346:4;29336;29341:1;29336:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;29363:9;:60;;;29438:8;29461:1;29477:4;29504;29524:15;29363:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29238:320;29186:372;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:126::-;1279:7;1319:42;1312:5;1308:54;1297:65;;1242:126;;;:::o;1374:60::-;1402:3;1423:5;1416:12;;1374:60;;;:::o;1440:142::-;1490:9;1523:53;1541:34;1550:24;1568:5;1550:24;:::i;:::-;1541:34;:::i;:::-;1523:53;:::i;:::-;1510:66;;1440:142;;;:::o;1588:126::-;1638:9;1671:37;1702:5;1671:37;:::i;:::-;1658:50;;1588:126;;;:::o;1720:145::-;1789:9;1822:37;1853:5;1822:37;:::i;:::-;1809:50;;1720:145;;;:::o;1871:169::-;1977:56;2027:5;1977:56;:::i;:::-;1972:3;1965:69;1871:169;;:::o;2046:260::-;2158:4;2196:2;2185:9;2181:18;2173:26;;2209:90;2296:1;2285:9;2281:17;2272:6;2209:90;:::i;:::-;2046:260;;;;:::o;2393:117::-;2502:1;2499;2492:12;2639:96;2676:7;2705:24;2723:5;2705:24;:::i;:::-;2694:35;;2639:96;;;:::o;2741:122::-;2814:24;2832:5;2814:24;:::i;:::-;2807:5;2804:35;2794:63;;2853:1;2850;2843:12;2794:63;2741:122;:::o;2869:139::-;2915:5;2953:6;2940:20;2931:29;;2969:33;2996:5;2969:33;:::i;:::-;2869:139;;;;:::o;3014:329::-;3073:6;3122:2;3110:9;3101:7;3097:23;3093:32;3090:119;;;3128:79;;:::i;:::-;3090:119;3248:1;3273:53;3318:7;3309:6;3298:9;3294:22;3273:53;:::i;:::-;3263:63;;3219:117;3014:329;;;;:::o;3349:77::-;3386:7;3415:5;3404:16;;3349:77;;;:::o;3432:122::-;3505:24;3523:5;3505:24;:::i;:::-;3498:5;3495:35;3485:63;;3544:1;3541;3534:12;3485:63;3432:122;:::o;3560:139::-;3606:5;3644:6;3631:20;3622:29;;3660:33;3687:5;3660:33;:::i;:::-;3560:139;;;;:::o;3705:474::-;3773:6;3781;3830:2;3818:9;3809:7;3805:23;3801:32;3798:119;;;3836:79;;:::i;:::-;3798:119;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;3705:474;;;;;:::o;4185:90::-;4219:7;4262:5;4255:13;4248:21;4237:32;;4185:90;;;:::o;4281:109::-;4362:21;4377:5;4362:21;:::i;:::-;4357:3;4350:34;4281:109;;:::o;4396:210::-;4483:4;4521:2;4510:9;4506:18;4498:26;;4534:65;4596:1;4585:9;4581:17;4572:6;4534:65;:::i;:::-;4396:210;;;;:::o;4612:118::-;4699:24;4717:5;4699:24;:::i;:::-;4694:3;4687:37;4612:118;;:::o;4736:222::-;4829:4;4867:2;4856:9;4852:18;4844:26;;4880:71;4948:1;4937:9;4933:17;4924:6;4880:71;:::i;:::-;4736:222;;;;:::o;4964:118::-;5051:24;5069:5;5051:24;:::i;:::-;5046:3;5039:37;4964:118;;:::o;5088:222::-;5181:4;5219:2;5208:9;5204:18;5196:26;;5232:71;5300:1;5289:9;5285:17;5276:6;5232:71;:::i;:::-;5088:222;;;;:::o;5316:619::-;5393:6;5401;5409;5458:2;5446:9;5437:7;5433:23;5429:32;5426:119;;;5464:79;;:::i;:::-;5426:119;5584:1;5609:53;5654:7;5645:6;5634:9;5630:22;5609:53;:::i;:::-;5599:63;;5555:117;5711:2;5737:53;5782:7;5773:6;5762:9;5758:22;5737:53;:::i;:::-;5727:63;;5682:118;5839:2;5865:53;5910:7;5901:6;5890:9;5886:22;5865:53;:::i;:::-;5855:63;;5810:118;5316:619;;;;;:::o;5941:86::-;5976:7;6016:4;6009:5;6005:16;5994:27;;5941:86;;;:::o;6033:112::-;6116:22;6132:5;6116:22;:::i;:::-;6111:3;6104:35;6033:112;;:::o;6151:214::-;6240:4;6278:2;6267:9;6263:18;6255:26;;6291:67;6355:1;6344:9;6340:17;6331:6;6291:67;:::i;:::-;6151:214;;;;:::o;6371:91::-;6407:7;6447:8;6440:5;6436:20;6425:31;;6371:91;;;:::o;6468:120::-;6540:23;6557:5;6540:23;:::i;:::-;6533:5;6530:34;6520:62;;6578:1;6575;6568:12;6520:62;6468:120;:::o;6594:137::-;6639:5;6677:6;6664:20;6655:29;;6693:32;6719:5;6693:32;:::i;:::-;6594:137;;;;:::o;6737:470::-;6803:6;6811;6860:2;6848:9;6839:7;6835:23;6831:32;6828:119;;;6866:79;;:::i;:::-;6828:119;6986:1;7011:52;7055:7;7046:6;7035:9;7031:22;7011:52;:::i;:::-;7001:62;;6957:116;7112:2;7138:52;7182:7;7173:6;7162:9;7158:22;7138:52;:::i;:::-;7128:62;;7083:117;6737:470;;;;;:::o;7213:115::-;7298:23;7315:5;7298:23;:::i;:::-;7293:3;7286:36;7213:115;;:::o;7334:218::-;7425:4;7463:2;7452:9;7448:18;7440:26;;7476:69;7542:1;7531:9;7527:17;7518:6;7476:69;:::i;:::-;7334:218;;;;:::o;7558:118::-;7595:7;7635:34;7628:5;7624:46;7613:57;;7558:118;;;:::o;7682:122::-;7755:24;7773:5;7755:24;:::i;:::-;7748:5;7745:35;7735:63;;7794:1;7791;7784:12;7735:63;7682:122;:::o;7810:139::-;7856:5;7894:6;7881:20;7872:29;;7910:33;7937:5;7910:33;:::i;:::-;7810:139;;;;:::o;7955:329::-;8014:6;8063:2;8051:9;8042:7;8038:23;8034:32;8031:119;;;8069:79;;:::i;:::-;8031:119;8189:1;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8160:117;7955:329;;;;:::o;8290:101::-;8326:7;8366:18;8359:5;8355:30;8344:41;;8290:101;;;:::o;8397:115::-;8482:23;8499:5;8482:23;:::i;:::-;8477:3;8470:36;8397:115;;:::o;8518:218::-;8609:4;8647:2;8636:9;8632:18;8624:26;;8660:69;8726:1;8715:9;8711:17;8702:6;8660:69;:::i;:::-;8518:218;;;;:::o;8742:116::-;8812:21;8827:5;8812:21;:::i;:::-;8805:5;8802:32;8792:60;;8848:1;8845;8838:12;8792:60;8742:116;:::o;8864:133::-;8907:5;8945:6;8932:20;8923:29;;8961:30;8985:5;8961:30;:::i;:::-;8864:133;;;;:::o;9003:468::-;9068:6;9076;9125:2;9113:9;9104:7;9100:23;9096:32;9093:119;;;9131:79;;:::i;:::-;9093:119;9251:1;9276:53;9321:7;9312:6;9301:9;9297:22;9276:53;:::i;:::-;9266:63;;9222:117;9378:2;9404:50;9446:7;9437:6;9426:9;9422:22;9404:50;:::i;:::-;9394:60;;9349:115;9003:468;;;;;:::o;9477:329::-;9536:6;9585:2;9573:9;9564:7;9560:23;9556:32;9553:119;;;9591:79;;:::i;:::-;9553:119;9711:1;9736:53;9781:7;9772:6;9761:9;9757:22;9736:53;:::i;:::-;9726:63;;9682:117;9477:329;;;;:::o;9812:474::-;9880:6;9888;9937:2;9925:9;9916:7;9912:23;9908:32;9905:119;;;9943:79;;:::i;:::-;9905:119;10063:1;10088:53;10133:7;10124:6;10113:9;10109:22;10088:53;:::i;:::-;10078:63;;10034:117;10190:2;10216:53;10261:7;10252:6;10241:9;10237:22;10216:53;:::i;:::-;10206:63;;10161:118;9812:474;;;;;:::o;10292:180::-;10340:77;10337:1;10330:88;10437:4;10434:1;10427:15;10461:4;10458:1;10451:15;10478:320;10522:6;10559:1;10553:4;10549:12;10539:22;;10606:1;10600:4;10596:12;10627:18;10617:81;;10683:4;10675:6;10671:17;10661:27;;10617:81;10745:2;10737:6;10734:14;10714:18;10711:38;10708:84;;10764:18;;:::i;:::-;10708:84;10529:269;10478:320;;;:::o;10804:182::-;10944:34;10940:1;10932:6;10928:14;10921:58;10804:182;:::o;10992:366::-;11134:3;11155:67;11219:2;11214:3;11155:67;:::i;:::-;11148:74;;11231:93;11320:3;11231:93;:::i;:::-;11349:2;11344:3;11340:12;11333:19;;10992:366;;;:::o;11364:419::-;11530:4;11568:2;11557:9;11553:18;11545:26;;11617:9;11611:4;11607:20;11603:1;11592:9;11588:17;11581:47;11645:131;11771:4;11645:131;:::i;:::-;11637:139;;11364:419;;;:::o;11789:162::-;11929:14;11925:1;11917:6;11913:14;11906:38;11789:162;:::o;11957:366::-;12099:3;12120:67;12184:2;12179:3;12120:67;:::i;:::-;12113:74;;12196:93;12285:3;12196:93;:::i;:::-;12314:2;12309:3;12305:12;12298:19;;11957:366;;;:::o;12329:419::-;12495:4;12533:2;12522:9;12518:18;12510:26;;12582:9;12576:4;12572:20;12568:1;12557:9;12553:17;12546:47;12610:131;12736:4;12610:131;:::i;:::-;12602:139;;12329:419;;;:::o;12754:180::-;12802:77;12799:1;12792:88;12899:4;12896:1;12889:15;12923:4;12920:1;12913:15;12940:191;12980:3;12999:20;13017:1;12999:20;:::i;:::-;12994:25;;13033:20;13051:1;13033:20;:::i;:::-;13028:25;;13076:1;13073;13069:9;13062:16;;13097:3;13094:1;13091:10;13088:36;;;13104:18;;:::i;:::-;13088:36;12940:191;;;;:::o;13137:178::-;13277:30;13273:1;13265:6;13261:14;13254:54;13137:178;:::o;13321:366::-;13463:3;13484:67;13548:2;13543:3;13484:67;:::i;:::-;13477:74;;13560:93;13649:3;13560:93;:::i;:::-;13678:2;13673:3;13669:12;13662:19;;13321:366;;;:::o;13693:419::-;13859:4;13897:2;13886:9;13882:18;13874:26;;13946:9;13940:4;13936:20;13932:1;13921:9;13917:17;13910:47;13974:131;14100:4;13974:131;:::i;:::-;13966:139;;13693:419;;;:::o;14118:179::-;14258:31;14254:1;14246:6;14242:14;14235:55;14118:179;:::o;14303:366::-;14445:3;14466:67;14530:2;14525:3;14466:67;:::i;:::-;14459:74;;14542:93;14631:3;14542:93;:::i;:::-;14660:2;14655:3;14651:12;14644:19;;14303:366;;;:::o;14675:419::-;14841:4;14879:2;14868:9;14864:18;14856:26;;14928:9;14922:4;14918:20;14914:1;14903:9;14899:17;14892:47;14956:131;15082:4;14956:131;:::i;:::-;14948:139;;14675:419;;;:::o;15100:324::-;15217:4;15255:2;15244:9;15240:18;15232:26;;15268:69;15334:1;15323:9;15319:17;15310:6;15268:69;:::i;:::-;15347:70;15413:2;15402:9;15398:18;15389:6;15347:70;:::i;:::-;15100:324;;;;;:::o;15430:102::-;15472:8;15519:5;15516:1;15512:13;15491:34;;15430:102;;;:::o;15538:848::-;15599:5;15606:4;15630:6;15621:15;;15654:5;15645:14;;15668:712;15689:1;15679:8;15676:15;15668:712;;;15784:4;15779:3;15775:14;15769:4;15766:24;15763:50;;;15793:18;;:::i;:::-;15763:50;15843:1;15833:8;15829:16;15826:451;;;16258:4;16251:5;16247:16;16238:25;;15826:451;16308:4;16302;16298:15;16290:23;;16338:32;16361:8;16338:32;:::i;:::-;16326:44;;15668:712;;;15538:848;;;;;;;:::o;16392:1073::-;16446:5;16637:8;16627:40;;16658:1;16649:10;;16660:5;;16627:40;16686:4;16676:36;;16703:1;16694:10;;16705:5;;16676:36;16772:4;16820:1;16815:27;;;;16856:1;16851:191;;;;16765:277;;16815:27;16833:1;16824:10;;16835:5;;;16851:191;16896:3;16886:8;16883:17;16880:43;;;16903:18;;:::i;:::-;16880:43;16952:8;16949:1;16945:16;16936:25;;16987:3;16980:5;16977:14;16974:40;;;16994:18;;:::i;:::-;16974:40;17027:5;;;16765:277;;17151:2;17141:8;17138:16;17132:3;17126:4;17123:13;17119:36;17101:2;17091:8;17088:16;17083:2;17077:4;17074:12;17070:35;17054:111;17051:246;;;17207:8;17201:4;17197:19;17188:28;;17242:3;17235:5;17232:14;17229:40;;;17249:18;;:::i;:::-;17229:40;17282:5;;17051:246;17322:42;17360:3;17350:8;17344:4;17341:1;17322:42;:::i;:::-;17307:57;;;;17396:4;17391:3;17387:14;17380:5;17377:25;17374:51;;;17405:18;;:::i;:::-;17374:51;17454:4;17447:5;17443:16;17434:25;;16392:1073;;;;;;:::o;17471:281::-;17529:5;17553:23;17571:4;17553:23;:::i;:::-;17545:31;;17597:25;17613:8;17597:25;:::i;:::-;17585:37;;17641:104;17678:66;17668:8;17662:4;17641:104;:::i;:::-;17632:113;;17471:281;;;;:::o;17758:410::-;17798:7;17821:20;17839:1;17821:20;:::i;:::-;17816:25;;17855:20;17873:1;17855:20;:::i;:::-;17850:25;;17910:1;17907;17903:9;17932:30;17950:11;17932:30;:::i;:::-;17921:41;;18111:1;18102:7;18098:15;18095:1;18092:22;18072:1;18065:9;18045:83;18022:139;;18141:18;;:::i;:::-;18022:139;17806:362;17758:410;;;;:::o;18174:157::-;18314:9;18310:1;18302:6;18298:14;18291:33;18174:157;:::o;18337:365::-;18479:3;18500:66;18564:1;18559:3;18500:66;:::i;:::-;18493:73;;18575:93;18664:3;18575:93;:::i;:::-;18693:2;18688:3;18684:12;18677:19;;18337:365;;;:::o;18708:419::-;18874:4;18912:2;18901:9;18897:18;18889:26;;18961:9;18955:4;18951:20;18947:1;18936:9;18932:17;18925:47;18989:131;19115:4;18989:131;:::i;:::-;18981:139;;18708:419;;;:::o;19133:172::-;19273:24;19269:1;19261:6;19257:14;19250:48;19133:172;:::o;19311:366::-;19453:3;19474:67;19538:2;19533:3;19474:67;:::i;:::-;19467:74;;19550:93;19639:3;19550:93;:::i;:::-;19668:2;19663:3;19659:12;19652:19;;19311:366;;;:::o;19683:419::-;19849:4;19887:2;19876:9;19872:18;19864:26;;19936:9;19930:4;19926:20;19922:1;19911:9;19907:17;19900:47;19964:131;20090:4;19964:131;:::i;:::-;19956:139;;19683:419;;;:::o;20108:173::-;20248:25;20244:1;20236:6;20232:14;20225:49;20108:173;:::o;20287:366::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:419::-;20825:4;20863:2;20852:9;20848:18;20840:26;;20912:9;20906:4;20902:20;20898:1;20887:9;20883:17;20876:47;20940:131;21066:4;20940:131;:::i;:::-;20932:139;;20659:419;;;:::o;21084:162::-;21224:14;21220:1;21212:6;21208:14;21201:38;21084:162;:::o;21252:366::-;21394:3;21415:67;21479:2;21474:3;21415:67;:::i;:::-;21408:74;;21491:93;21580:3;21491:93;:::i;:::-;21609:2;21604:3;21600:12;21593:19;;21252:366;;;:::o;21624:419::-;21790:4;21828:2;21817:9;21813:18;21805:26;;21877:9;21871:4;21867:20;21863:1;21852:9;21848:17;21841:47;21905:131;22031:4;21905:131;:::i;:::-;21897:139;;21624:419;;;:::o;22049:168::-;22189:20;22185:1;22177:6;22173:14;22166:44;22049:168;:::o;22223:366::-;22365:3;22386:67;22450:2;22445:3;22386:67;:::i;:::-;22379:74;;22462:93;22551:3;22462:93;:::i;:::-;22580:2;22575:3;22571:12;22564:19;;22223:366;;;:::o;22595:419::-;22761:4;22799:2;22788:9;22784:18;22776:26;;22848:9;22842:4;22838:20;22834:1;22823:9;22819:17;22812:47;22876:131;23002:4;22876:131;:::i;:::-;22868:139;;22595:419;;;:::o;23020:320::-;23135:4;23173:2;23162:9;23158:18;23150:26;;23186:71;23254:1;23243:9;23239:17;23230:6;23186:71;:::i;:::-;23267:66;23329:2;23318:9;23314:18;23305:6;23267:66;:::i;:::-;23020:320;;;;;:::o;23346:224::-;23486:34;23482:1;23474:6;23470:14;23463:58;23555:7;23550:2;23542:6;23538:15;23531:32;23346:224;:::o;23576:366::-;23718:3;23739:67;23803:2;23798:3;23739:67;:::i;:::-;23732:74;;23815:93;23904:3;23815:93;:::i;:::-;23933:2;23928:3;23924:12;23917:19;;23576:366;;;:::o;23948:419::-;24114:4;24152:2;24141:9;24137:18;24129:26;;24201:9;24195:4;24191:20;24187:1;24176:9;24172:17;24165:47;24229:131;24355:4;24229:131;:::i;:::-;24221:139;;23948:419;;;:::o;24373:175::-;24513:27;24509:1;24501:6;24497:14;24490:51;24373:175;:::o;24554:366::-;24696:3;24717:67;24781:2;24776:3;24717:67;:::i;:::-;24710:74;;24793:93;24882:3;24793:93;:::i;:::-;24911:2;24906:3;24902:12;24895:19;;24554:366;;;:::o;24926:419::-;25092:4;25130:2;25119:9;25115:18;25107:26;;25179:9;25173:4;25169:20;25165:1;25154:9;25150:17;25143:47;25207:131;25333:4;25207:131;:::i;:::-;25199:139;;24926:419;;;:::o;25351:179::-;25491:31;25487:1;25479:6;25475:14;25468:55;25351:179;:::o;25536:366::-;25678:3;25699:67;25763:2;25758:3;25699:67;:::i;:::-;25692:74;;25775:93;25864:3;25775:93;:::i;:::-;25893:2;25888:3;25884:12;25877:19;;25536:366;;;:::o;25908:419::-;26074:4;26112:2;26101:9;26097:18;26089:26;;26161:9;26155:4;26151:20;26147:1;26136:9;26132:17;26125:47;26189:131;26315:4;26189:131;:::i;:::-;26181:139;;25908:419;;;:::o;26333:180::-;26381:77;26378:1;26371:88;26478:4;26475:1;26468:15;26502:4;26499:1;26492:15;26519:185;26559:1;26576:20;26594:1;26576:20;:::i;:::-;26571:25;;26610:20;26628:1;26610:20;:::i;:::-;26605:25;;26649:1;26639:35;;26654:18;;:::i;:::-;26639:35;26696:1;26693;26689:9;26684:14;;26519:185;;;;:::o;26710:225::-;26850:34;26846:1;26838:6;26834:14;26827:58;26919:8;26914:2;26906:6;26902:15;26895:33;26710:225;:::o;26941:366::-;27083:3;27104:67;27168:2;27163:3;27104:67;:::i;:::-;27097:74;;27180:93;27269:3;27180:93;:::i;:::-;27298:2;27293:3;27289:12;27282:19;;26941:366;;;:::o;27313:419::-;27479:4;27517:2;27506:9;27502:18;27494:26;;27566:9;27560:4;27556:20;27552:1;27541:9;27537:17;27530:47;27594:131;27720:4;27594:131;:::i;:::-;27586:139;;27313:419;;;:::o;27738:223::-;27878:34;27874:1;27866:6;27862:14;27855:58;27947:6;27942:2;27934:6;27930:15;27923:31;27738:223;:::o;27967:366::-;28109:3;28130:67;28194:2;28189:3;28130:67;:::i;:::-;28123:74;;28206:93;28295:3;28206:93;:::i;:::-;28324:2;28319:3;28315:12;28308:19;;27967:366;;;:::o;28339:419::-;28505:4;28543:2;28532:9;28528:18;28520:26;;28592:9;28586:4;28582:20;28578:1;28567:9;28563:17;28556:47;28620:131;28746:4;28620:131;:::i;:::-;28612:139;;28339:419;;;:::o;28764:221::-;28904:34;28900:1;28892:6;28888:14;28881:58;28973:4;28968:2;28960:6;28956:15;28949:29;28764:221;:::o;28991:366::-;29133:3;29154:67;29218:2;29213:3;29154:67;:::i;:::-;29147:74;;29230:93;29319:3;29230:93;:::i;:::-;29348:2;29343:3;29339:12;29332:19;;28991:366;;;:::o;29363:419::-;29529:4;29567:2;29556:9;29552:18;29544:26;;29616:9;29610:4;29606:20;29602:1;29591:9;29587:17;29580:47;29644:131;29770:4;29644:131;:::i;:::-;29636:139;;29363:419;;;:::o;29788:179::-;29928:31;29924:1;29916:6;29912:14;29905:55;29788:179;:::o;29973:366::-;30115:3;30136:67;30200:2;30195:3;30136:67;:::i;:::-;30129:74;;30212:93;30301:3;30212:93;:::i;:::-;30330:2;30325:3;30321:12;30314:19;;29973:366;;;:::o;30345:419::-;30511:4;30549:2;30538:9;30534:18;30526:26;;30598:9;30592:4;30588:20;30584:1;30573:9;30569:17;30562:47;30626:131;30752:4;30626:131;:::i;:::-;30618:139;;30345:419;;;:::o;30770:168::-;30910:20;30906:1;30898:6;30894:14;30887:44;30770:168;:::o;30944:366::-;31086:3;31107:67;31171:2;31166:3;31107:67;:::i;:::-;31100:74;;31183:93;31272:3;31183:93;:::i;:::-;31301:2;31296:3;31292:12;31285:19;;30944:366;;;:::o;31316:419::-;31482:4;31520:2;31509:9;31505:18;31497:26;;31569:9;31563:4;31559:20;31555:1;31544:9;31540:17;31533:47;31597:131;31723:4;31597:131;:::i;:::-;31589:139;;31316:419;;;:::o;31741:194::-;31781:4;31801:20;31819:1;31801:20;:::i;:::-;31796:25;;31835:20;31853:1;31835:20;:::i;:::-;31830:25;;31879:1;31876;31872:9;31864:17;;31903:1;31897:4;31894:11;31891:37;;;31908:18;;:::i;:::-;31891:37;31741:194;;;;:::o;31941:147::-;32042:11;32079:3;32064:18;;31941:147;;;;:::o;32094:114::-;;:::o;32214:398::-;32373:3;32394:83;32475:1;32470:3;32394:83;:::i;:::-;32387:90;;32486:93;32575:3;32486:93;:::i;:::-;32604:1;32599:3;32595:11;32588:18;;32214:398;;;:::o;32618:379::-;32802:3;32824:147;32967:3;32824:147;:::i;:::-;32817:154;;32988:3;32981:10;;32618:379;;;:::o;33003:160::-;33143:12;33139:1;33131:6;33127:14;33120:36;33003:160;:::o;33169:366::-;33311:3;33332:67;33396:2;33391:3;33332:67;:::i;:::-;33325:74;;33408:93;33497:3;33408:93;:::i;:::-;33526:2;33521:3;33517:12;33510:19;;33169:366;;;:::o;33541:419::-;33707:4;33745:2;33734:9;33730:18;33722:26;;33794:9;33788:4;33784:20;33780:1;33769:9;33765:17;33758:47;33822:131;33948:4;33822:131;:::i;:::-;33814:139;;33541:419;;;:::o;33966:164::-;34106:16;34102:1;34094:6;34090:14;34083:40;33966:164;:::o;34136:366::-;34278:3;34299:67;34363:2;34358:3;34299:67;:::i;:::-;34292:74;;34375:93;34464:3;34375:93;:::i;:::-;34493:2;34488:3;34484:12;34477:19;;34136:366;;;:::o;34508:419::-;34674:4;34712:2;34701:9;34697:18;34689:26;;34761:9;34755:4;34751:20;34747:1;34736:9;34732:17;34725:47;34789:131;34915:4;34789:131;:::i;:::-;34781:139;;34508:419;;;:::o;34933:220::-;35073:34;35069:1;35061:6;35057:14;35050:58;35142:3;35137:2;35129:6;35125:15;35118:28;34933:220;:::o;35159:366::-;35301:3;35322:67;35386:2;35381:3;35322:67;:::i;:::-;35315:74;;35398:93;35487:3;35398:93;:::i;:::-;35516:2;35511:3;35507:12;35500:19;;35159:366;;;:::o;35531:419::-;35697:4;35735:2;35724:9;35720:18;35712:26;;35784:9;35778:4;35774:20;35770:1;35759:9;35755:17;35748:47;35812:131;35938:4;35812:131;:::i;:::-;35804:139;;35531:419;;;:::o;35956:224::-;36096:34;36092:1;36084:6;36080:14;36073:58;36165:7;36160:2;36152:6;36148:15;36141:32;35956:224;:::o;36186:366::-;36328:3;36349:67;36413:2;36408:3;36349:67;:::i;:::-;36342:74;;36425:93;36514:3;36425:93;:::i;:::-;36543:2;36538:3;36534:12;36527:19;;36186:366;;;:::o;36558:419::-;36724:4;36762:2;36751:9;36747:18;36739:26;;36811:9;36805:4;36801:20;36797:1;36786:9;36782:17;36775:47;36839:131;36965:4;36839:131;:::i;:::-;36831:139;;36558:419;;;:::o;36983:222::-;37123:34;37119:1;37111:6;37107:14;37100:58;37192:5;37187:2;37179:6;37175:15;37168:30;36983:222;:::o;37211:366::-;37353:3;37374:67;37438:2;37433:3;37374:67;:::i;:::-;37367:74;;37450:93;37539:3;37450:93;:::i;:::-;37568:2;37563:3;37559:12;37552:19;;37211:366;;;:::o;37583:419::-;37749:4;37787:2;37776:9;37772:18;37764:26;;37836:9;37830:4;37826:20;37822:1;37811:9;37807:17;37800:47;37864:131;37990:4;37864:131;:::i;:::-;37856:139;;37583:419;;;:::o;38008:225::-;38148:34;38144:1;38136:6;38132:14;38125:58;38217:8;38212:2;38204:6;38200:15;38193:33;38008:225;:::o;38239:366::-;38381:3;38402:67;38466:2;38461:3;38402:67;:::i;:::-;38395:74;;38478:93;38567:3;38478:93;:::i;:::-;38596:2;38591:3;38587:12;38580:19;;38239:366;;;:::o;38611:419::-;38777:4;38815:2;38804:9;38800:18;38792:26;;38864:9;38858:4;38854:20;38850:1;38839:9;38835:17;38828:47;38892:131;39018:4;38892:131;:::i;:::-;38884:139;;38611:419;;;:::o;39036:180::-;39084:77;39081:1;39074:88;39181:4;39178:1;39171:15;39205:4;39202:1;39195:15;39222:180;39270:77;39267:1;39260:88;39367:4;39364:1;39357:15;39391:4;39388:1;39381:15;39408:85;39453:7;39482:5;39471:16;;39408:85;;;:::o;39499:158::-;39557:9;39590:61;39608:42;39617:32;39643:5;39617:32;:::i;:::-;39608:42;:::i;:::-;39590:61;:::i;:::-;39577:74;;39499:158;;;:::o;39663:147::-;39758:45;39797:5;39758:45;:::i;:::-;39753:3;39746:58;39663:147;;:::o;39816:114::-;39883:6;39917:5;39911:12;39901:22;;39816:114;;;:::o;39936:184::-;40035:11;40069:6;40064:3;40057:19;40109:4;40104:3;40100:14;40085:29;;39936:184;;;;:::o;40126:132::-;40193:4;40216:3;40208:11;;40246:4;40241:3;40237:14;40229:22;;40126:132;;;:::o;40264:108::-;40341:24;40359:5;40341:24;:::i;:::-;40336:3;40329:37;40264:108;;:::o;40378:179::-;40447:10;40468:46;40510:3;40502:6;40468:46;:::i;:::-;40546:4;40541:3;40537:14;40523:28;;40378:179;;;;:::o;40563:113::-;40633:4;40665;40660:3;40656:14;40648:22;;40563:113;;;:::o;40712:732::-;40831:3;40860:54;40908:5;40860:54;:::i;:::-;40930:86;41009:6;41004:3;40930:86;:::i;:::-;40923:93;;41040:56;41090:5;41040:56;:::i;:::-;41119:7;41150:1;41135:284;41160:6;41157:1;41154:13;41135:284;;;41236:6;41230:13;41263:63;41322:3;41307:13;41263:63;:::i;:::-;41256:70;;41349:60;41402:6;41349:60;:::i;:::-;41339:70;;41195:224;41182:1;41179;41175:9;41170:14;;41135:284;;;41139:14;41435:3;41428:10;;40836:608;;;40712:732;;;;:::o;41450:831::-;41713:4;41751:3;41740:9;41736:19;41728:27;;41765:71;41833:1;41822:9;41818:17;41809:6;41765:71;:::i;:::-;41846:80;41922:2;41911:9;41907:18;41898:6;41846:80;:::i;:::-;41973:9;41967:4;41963:20;41958:2;41947:9;41943:18;41936:48;42001:108;42104:4;42095:6;42001:108;:::i;:::-;41993:116;;42119:72;42187:2;42176:9;42172:18;42163:6;42119:72;:::i;:::-;42201:73;42269:3;42258:9;42254:19;42245:6;42201:73;:::i;:::-;41450:831;;;;;;;;:::o

Swarm Source

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