ETH Price: $3,428.58 (-1.54%)
Gas: 4 Gwei

Token

X: $2,030.84 (X: $2,030.84)
 

Overview

Max Total Supply

1,000,000,000 X: $2,030.84

Holders

350

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 X: $2,030.84

Value
$0.00
0xe53ed4ecd8505c374b007121a71c7cc0ce30f0c2
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:
ETHPriceToken

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-09
*/

// TG: https://t.me/TokenNameequalETHprice


/**
 *Submitted for verification at Etherscan.io on 2023-10-01
 */

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function WETH() external pure returns (address);

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;

    uint256 public tokensForDev;

    address private USDC;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    bytes16 private constant HEX_DIGITS = "0123456789abcdef";

    constructor(
        address _usdcAddress,
        address _routerAddress
    ) ERC20(unicode"", unicode"") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            _routerAddress
        );

        USDC = _usdcAddress;
        address weth = _uniswapV2Router.WETH();

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), weth);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyDevFee = 25;
        uint256 _sellDevFee = 60;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18;
        maxWallet = 20_000_000 * 1e18; //
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        buyDevFee = _buyDevFee;
        buyTotalFees = buyDevFee;

        sellDevFee = _sellDevFee;
        sellTotalFees = sellDevFee;

        marketingWallet = address(msg.sender); // set as marketing wallet
        devWallet = address(msg.sender); // set as dev wallet

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    function formatNumberWithCommas(
        string memory number
    ) internal pure returns (string memory) {
        // This function assumes `number` is a valid representation of a positive integer
        bytes memory numberBytes = bytes(number);
        uint len = numberBytes.length;

        // Calculate the length of the new string
        uint commas = (len - 1) / 3;
        bytes memory formatted = new bytes(len + commas);

        uint j = 1; // Counter for the new string
        for (uint i = 0; i < len; ++i) {
            // Copy the character from the original number
            formatted[len + commas - j] = numberBytes[len - i - 1];
            // Insert a comma every three characters, except at the end
            if (i % 3 == 2 && i != len - 1) {
                j++; // Skip the position for the comma
                formatted[len + commas - j] = bytes1(",");
                j++; // Increment for the next number character
            } else {
                j++; // Increment for the next number character
            }
        }

        return string(formatted);
    }

    function formatNumberWithCommasAndDecimals(
        string memory number
    ) internal pure returns (string memory) {
        bytes memory numberBytes = bytes(number);
        uint len = numberBytes.length;

        // Separate the last two digits
        string memory decimals = new string(2);
        bytes memory decimalsBytes = bytes(decimals);

        // Boundary check: Ensure there's enough length for the decimal part
        if (len > 2) {
            decimalsBytes[0] = numberBytes[len - 2];
            decimalsBytes[1] = numberBytes[len - 1];

            // Create a new string for the whole number part without the last two digits
            string memory wholeNumberPart = new string(len - 2);
            bytes memory wholeNumberBytes = bytes(wholeNumberPart);

            for (uint i = 0; i < len - 2; i++) {
                wholeNumberBytes[i] = numberBytes[i];
            }

            // Format the whole number part with commas
            wholeNumberPart = formatNumberWithCommas(string(wholeNumberBytes));

            // Concatenate the whole number part with the decimal part
            return string(abi.encodePacked(wholeNumberPart, ".", decimals));
        } else {
            // If the length is less or equal to 2, we don't have a whole number part
            // We assume the number is already in the format "0.xx" or "x.xx"
            return string(abi.encodePacked("0.", number));
        }
    }

    function symbol() public view override returns (string memory) {
        uint256 usdcDecimals = IERC20Metadata(USDC).decimals();

        address wethAddress = uniswapV2Router.WETH();
        address ethLpPair = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(USDC, wethAddress);

        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(ethLpPair)
            .getReserves();

        (uint256 reserveETH, uint256 reserveUSDC) = wethAddress < USDC
            ? (reserve0, reserve1)
            : (reserve1, reserve0);

        uint256 ethPrice = reserveUSDC.div(10 ** (usdcDecimals - 2)).div(
            reserveETH.div(1e18)
        );

        string memory startString = "X: $";

        return
            string.concat(
                startString,
                formatNumberWithCommasAndDecimals(toString(ethPrice))
            );
    }

    function name() public view override returns (string memory) {
        return symbol();
    }

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _devFee) external onlyOwner {
        buyDevFee = _devFee;
        buyTotalFees = buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateSellFees(uint256 _devFee) external onlyOwner {
        sellDevFee = _devFee;
        sellTotalFees = sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (
                    transferDelayEnabled &&
                    to != owner() &&
                    to != address(uniswapV2Router) &&
                    !automatedMarketMakerPairs[to]
                ) {
                    require(
                        _holderLastTransferTimestamp[tx.origin] < block.number,
                        "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                    );
                    _holderLastTransferTimestamp[tx.origin] = block.number;
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += fees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += fees;
            }

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

            amount -= fees;
        }

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        tokensForDev = 0;

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

    function manualSwapBack(uint256 amount) external onlyOwner {
        swapTokensForEth(amount);

        address(devWallet).call{value: address(this).balance}("");
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b5060405162006c9338038062006c938339818101604052810190620000cf919062000baa565b604051806020016040528060008152506040518060200160405280600081525081600390805190602001906200010792919062000a90565b5080600490805190602001906200012092919062000a90565b50505062000143620001376200055160201b60201c565b6200055960201b60201c565b600081905082601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000bf1565b9050620002128260016200061f60201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062000bf1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b8152600401620002f492919062000c34565b6020604051808303816000875af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062000bf1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038260a05160016200061f60201b60201c565b6200039760a05160016200070960201b60201c565b6000601990506000603c905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a81905550612710600582620003ea919062000c9a565b620003f6919062000d2a565b600981905550826017819055506017546014819055508160198190555060195460188190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004c0620004b2620007aa60201b60201c565b6001620007d460201b60201c565b620004d3306001620007d460201b60201c565b620004e861dead6001620007d460201b60201c565b6200050a620004fc620007aa60201b60201c565b60016200061f60201b60201c565b6200051d3060016200061f60201b60201c565b6200053261dead60016200061f60201b60201c565b6200054433826200090e60201b60201c565b5050505050505062000f80565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200062f6200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000655620007aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006a59062000dc3565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007e46200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200080a620007aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085a9062000dc3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000902919062000e02565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009779062000e6f565b60405180910390fd5b620009946000838362000a8660201b60201c565b8060026000828254620009a8919062000e91565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ff919062000e91565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a66919062000eff565b60405180910390a362000a826000838362000a8b60201b60201c565b5050565b505050565b505050565b82805462000a9e9062000f4b565b90600052602060002090601f01602090048101928262000ac2576000855562000b0e565b82601f1062000add57805160ff191683800117855562000b0e565b8280016001018555821562000b0e579182015b8281111562000b0d57825182559160200191906001019062000af0565b5b50905062000b1d919062000b21565b5090565b5b8082111562000b3c57600081600090555060010162000b22565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b728262000b45565b9050919050565b62000b848162000b65565b811462000b9057600080fd5b50565b60008151905062000ba48162000b79565b92915050565b6000806040838503121562000bc45762000bc362000b40565b5b600062000bd48582860162000b93565b925050602062000be78582860162000b93565b9150509250929050565b60006020828403121562000c0a5762000c0962000b40565b5b600062000c1a8482850162000b93565b91505092915050565b62000c2e8162000b65565b82525050565b600060408201905062000c4b600083018562000c23565b62000c5a602083018462000c23565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca78262000c61565b915062000cb48362000c61565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cf05762000cef62000c6b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d378262000c61565b915062000d448362000c61565b92508262000d575762000d5662000cfb565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dab60208362000d62565b915062000db88262000d73565b602082019050919050565b6000602082019050818103600083015262000dde8162000d9c565b9050919050565b60008115159050919050565b62000dfc8162000de5565b82525050565b600060208201905062000e19600083018462000df1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e57601f8362000d62565b915062000e648262000e1f565b602082019050919050565b6000602082019050818103600083015262000e8a8162000e48565b9050919050565b600062000e9e8262000c61565b915062000eab8362000c61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee35762000ee262000c6b565b5b828201905092915050565b62000ef98162000c61565b82525050565b600060208201905062000f16600083018462000eee565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f6457607f821691505b60208210810362000f7a5762000f7962000f1c565b5b50919050565b60805160a051615cbc62000fd7600039600081816111f70152611cb9015260008181610e22015281816118aa0152818161193d01528181612d1901528181613ad401528181613bb50152613bdc0152615cbc6000f3fe6080604052600436106103855760003560e01c80638ea5220f116101d1578063bffda98211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d2b578063f11a24d314610d54578063f2fde38b14610d7f578063f8b45b0514610da85761038c565b8063d85ba06314610c6d578063dd62ed3e14610c98578063e2f4560514610cd5578063e884f26014610d005761038c565b8063c876d0b9116100dc578063c876d0b914610bc3578063c8c8ebe414610bee578063c9567bf914610c19578063d257b34f14610c305761038c565b8063bffda98214610b48578063c024666814610b71578063c18bc19514610b9a5761038c565b8063a0d82dc51161016f578063a9059cbb11610149578063a9059cbb14610a7a578063aacebbe314610ab7578063b62496f514610ae0578063bbc0c74214610b1d5761038c565b8063a0d82dc5146109e7578063a457c2d714610a12578063a4c82a0014610a4f5761038c565b80639a7a23d6116101ab5780639a7a23d61461093d5780639c3b4fdc146109665780639ec22c0e146109915780639fccce32146109bc5761038c565b80638ea5220f146108be578063924de9b7146108e957806395d89b41146109125761038c565b806339509351116102b6578063715018a6116102545780637571336a116102235780637571336a1461081457806375f0a8741461083d5780637bce5a04146108685780638da5cb5b146108935761038c565b8063715018a61461078057806371fc468814610797578063730c1888146107c0578063751039fc146107e95761038c565b80634fbee193116102905780634fbee193146106b05780636a486a8e146106ed5780636ddd17131461071857806370a08231146107435761038c565b8063395093511461061d57806349bd5a5e1461065a5780634a62bb65146106855761038c565b8063199ffc721161032357806327c8f835116102fd57806327c8f835146105715780632c3e486c1461059c5780632e82f1a0146105c7578063313ce567146105f25761038c565b8063199ffc72146104e0578063203e727e1461050b57806323b872dd146105345761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd146104615780631816467f1461048c578063184c16c5146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd3565b6040516103b3919061441a565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906144d5565b610de2565b6040516103f09190614530565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b919061454b565b610e00565b60405161042d9190614530565b60405180910390f35b34801561044257600080fd5b5061044b610e20565b60405161045891906145d7565b60405180910390f35b34801561046d57600080fd5b50610476610e44565b6040516104839190614601565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae919061454b565b610e4e565b005b3480156104c157600080fd5b506104ca610f0e565b6040516104d79190614601565b60405180910390f35b3480156104ec57600080fd5b506104f5610f14565b6040516105029190614601565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d919061461c565b610f1a565b005b34801561054057600080fd5b5061055b60048036038101906105569190614649565b611029565b6040516105689190614530565b60405180910390f35b34801561057d57600080fd5b50610586611121565b60405161059391906146ab565b60405180910390f35b3480156105a857600080fd5b506105b1611127565b6040516105be9190614601565b60405180910390f35b3480156105d357600080fd5b506105dc61112d565b6040516105e99190614530565b60405180910390f35b3480156105fe57600080fd5b50610607611140565b60405161061491906146e2565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906144d5565b611149565b6040516106519190614530565b60405180910390f35b34801561066657600080fd5b5061066f6111f5565b60405161067c91906146ab565b60405180910390f35b34801561069157600080fd5b5061069a611219565b6040516106a79190614530565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061454b565b61122c565b6040516106e49190614530565b60405180910390f35b3480156106f957600080fd5b50610702611282565b60405161070f9190614601565b60405180910390f35b34801561072457600080fd5b5061072d611288565b60405161073a9190614530565b60405180910390f35b34801561074f57600080fd5b5061076a6004803603810190610765919061454b565b61129b565b6040516107779190614601565b60405180910390f35b34801561078c57600080fd5b506107956112e3565b005b3480156107a357600080fd5b506107be60048036038101906107b9919061461c565b61136b565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190614729565b611440565b005b3480156107f557600080fd5b506107fe611580565b60405161080b9190614530565b60405180910390f35b34801561082057600080fd5b5061083b6004803603810190610836919061477c565b611620565b005b34801561084957600080fd5b506108526116f7565b60405161085f91906146ab565b60405180910390f35b34801561087457600080fd5b5061087d61171d565b60405161088a9190614601565b60405180910390f35b34801561089f57600080fd5b506108a8611723565b6040516108b591906146ab565b60405180910390f35b3480156108ca57600080fd5b506108d361174d565b6040516108e091906146ab565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b91906147bc565b611773565b005b34801561091e57600080fd5b5061092761180c565b604051610934919061441a565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f919061477c565b611c3b565b005b34801561097257600080fd5b5061097b611d53565b6040516109889190614601565b60405180910390f35b34801561099d57600080fd5b506109a6611d59565b6040516109b39190614601565b60405180910390f35b3480156109c857600080fd5b506109d1611d5f565b6040516109de9190614601565b60405180910390f35b3480156109f357600080fd5b506109fc611d65565b604051610a099190614601565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a3491906144d5565b611d6b565b604051610a469190614530565b60405180910390f35b348015610a5b57600080fd5b50610a64611e56565b604051610a719190614601565b60405180910390f35b348015610a8657600080fd5b50610aa16004803603810190610a9c91906144d5565b611e5c565b604051610aae9190614530565b60405180910390f35b348015610ac357600080fd5b50610ade6004803603810190610ad9919061454b565b611e7a565b005b348015610aec57600080fd5b50610b076004803603810190610b02919061454b565b611f3a565b604051610b149190614530565b60405180910390f35b348015610b2957600080fd5b50610b32611f5a565b604051610b3f9190614530565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a919061461c565b611f6d565b005b348015610b7d57600080fd5b50610b986004803603810190610b93919061477c565b612080565b005b348015610ba657600080fd5b50610bc16004803603810190610bbc919061461c565b6121a5565b005b348015610bcf57600080fd5b50610bd86122b4565b604051610be59190614530565b60405180910390f35b348015610bfa57600080fd5b50610c036122c7565b604051610c109190614601565b60405180910390f35b348015610c2557600080fd5b50610c2e6122cd565b005b348015610c3c57600080fd5b50610c576004803603810190610c52919061461c565b612388565b604051610c649190614530565b60405180910390f35b348015610c7957600080fd5b50610c826124dd565b604051610c8f9190614601565b60405180910390f35b348015610ca457600080fd5b50610cbf6004803603810190610cba91906147e9565b6124e3565b604051610ccc9190614601565b60405180910390f35b348015610ce157600080fd5b50610cea61256a565b604051610cf79190614601565b60405180910390f35b348015610d0c57600080fd5b50610d15612570565b604051610d229190614530565b60405180910390f35b348015610d3757600080fd5b50610d526004803603810190610d4d919061461c565b612610565b005b348015610d6057600080fd5b50610d696126e5565b604051610d769190614601565b60405180910390f35b348015610d8b57600080fd5b50610da66004803603810190610da1919061454b565b6126eb565b005b348015610db457600080fd5b50610dbd6127e2565b604051610dca9190614601565b60405180910390f35b6060610ddd61180c565b905090565b6000610df6610def6127e8565b84846127f0565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e566127e8565b73ffffffffffffffffffffffffffffffffffffffff16610e74611723565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190614875565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f226127e8565b73ffffffffffffffffffffffffffffffffffffffff16610f40611723565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90614875565b60405180910390fd5b670de0b6b3a76400006103e86001610fac610e44565b610fb691906148c4565b610fc0919061494d565b610fca919061494d565b81101561100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906149f0565b60405180910390fd5b670de0b6b3a76400008161102091906148c4565b60088190555050565b60006110368484846129b9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110816127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890614a82565b60405180910390fd5b6111158561110d6127e8565b8584036127f0565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006111eb6111566127e8565b8484600160006111646127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e69190614aa2565b6127f0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112eb6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611309611723565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614875565b60405180910390fd5b6113696000613550565b565b6113736127e8565b73ffffffffffffffffffffffffffffffffffffffff16611391611723565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614875565b60405180910390fd5b806017819055506017546014819055506063601454111561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614b44565b60405180910390fd5b50565b6114486127e8565b73ffffffffffffffffffffffffffffffffffffffff16611466611723565b73ffffffffffffffffffffffffffffffffffffffff16146114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b390614875565b60405180910390fd5b610258831015611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614bd6565b60405180910390fd5b6103e88211158015611514575060008210155b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90614c68565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061158a6127e8565b73ffffffffffffffffffffffffffffffffffffffff166115a8611723565b73ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614875565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116286127e8565b73ffffffffffffffffffffffffffffffffffffffff16611646611723565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390614875565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61177b6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611799611723565b73ffffffffffffffffffffffffffffffffffffffff16146117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690614875565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a19190614cb4565b60ff16905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119379190614cf6565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ca9190614cf6565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611a26929190614d23565b602060405180830381865afa158015611a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a679190614cf6565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adb9190614dce565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611b5f578284611b62565b83835b915091506000611bbf611b86670de0b6b3a76400008561361690919063ffffffff16565b611bb160028b611b969190614e21565b600a611ba29190614f88565b8561361690919063ffffffff16565b61361690919063ffffffff16565b905060006040518060400160405280600481526020017f583a202400000000000000000000000000000000000000000000000000000000815250905080611c0d611c088461362c565b6136fa565b604051602001611c1e92919061500f565b604051602081830303815290604052995050505050505050505090565b611c436127e8565b73ffffffffffffffffffffffffffffffffffffffff16611c61611723565b73ffffffffffffffffffffffffffffffffffffffff1614611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90614875565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c906150a5565b60405180910390fd5b611d4f8282613994565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611d7a6127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90615137565b60405180910390fd5b611e4b611e426127e8565b858584036127f0565b600191505092915050565b600e5481565b6000611e70611e696127e8565b84846129b9565b6001905092915050565b611e826127e8565b73ffffffffffffffffffffffffffffffffffffffff16611ea0611723565b73ffffffffffffffffffffffffffffffffffffffff1614611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90614875565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f756127e8565b73ffffffffffffffffffffffffffffffffffffffff16611f93611723565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614875565b60405180910390fd5b611ff281613a35565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161203890615188565b60006040518083038185875af1925050503d8060008114612075576040519150601f19603f3d011682016040523d82523d6000602084013e61207a565b606091505b50505050565b6120886127e8565b73ffffffffffffffffffffffffffffffffffffffff166120a6611723565b73ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614875565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121999190614530565b60405180910390a25050565b6121ad6127e8565b73ffffffffffffffffffffffffffffffffffffffff166121cb611723565b73ffffffffffffffffffffffffffffffffffffffff1614612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890614875565b60405180910390fd5b670de0b6b3a76400006103e86005612237610e44565b61224191906148c4565b61224b919061494d565b612255919061494d565b811015612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061520f565b60405180910390fd5b670de0b6b3a7640000816122ab91906148c4565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6122d56127e8565b73ffffffffffffffffffffffffffffffffffffffff166122f3611723565b73ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614875565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006123926127e8565b73ffffffffffffffffffffffffffffffffffffffff166123b0611723565b73ffffffffffffffffffffffffffffffffffffffff1614612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614875565b60405180910390fd5b620186a06001612414610e44565b61241e91906148c4565b612428919061494d565b82101561246a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612461906152a1565b60405180910390fd5b6103e86005612477610e44565b61248191906148c4565b61248b919061494d565b8211156124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490615333565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061257a6127e8565b73ffffffffffffffffffffffffffffffffffffffff16612598611723565b73ffffffffffffffffffffffffffffffffffffffff16146125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e590614875565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6126186127e8565b73ffffffffffffffffffffffffffffffffffffffff16612636611723565b73ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614875565b60405180910390fd5b80601981905550601954601881905550606360185411156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d990614b44565b60405180910390fd5b50565b60165481565b6126f36127e8565b73ffffffffffffffffffffffffffffffffffffffff16612711611723565b73ffffffffffffffffffffffffffffffffffffffff1614612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e90614875565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd906153c5565b60405180910390fd5b6127df81613550565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285690615457565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c5906154e9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129ac9190614601565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061557b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e9061560d565b60405180910390fd5b60008103612ab057612aab83836000613c72565b61354b565b601160009054906101000a900460ff161561317357612acd611723565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b3b5750612b0b611723565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b745750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bae575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc75750600560149054906101000a900460ff16155b1561317257601160019054906101000a900460ff16612cc157601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c815750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790615679565b60405180910390fd5b5b601360009054906101000a900460ff168015612d105750612ce0611723565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbe5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e895743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3b90615731565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2c5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fd357600854811115612f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6d906157c3565b60405180910390fd5b600a54612f828361129b565b82612f8d9190614aa2565b1115612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc59061582f565b60405180910390fd5b613171565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130765750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c5576008548111156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b7906158c1565b60405180910390fd5b613170565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661316f57600a546131228361129b565b8261312d9190614aa2565b111561316e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131659061582f565b60405180910390fd5b5b5b5b5b5b600061317e3061129b565b9050600060095482101590508080156131a35750601160029054906101000a900460ff165b80156131bc5750600560149054906101000a900460ff16155b80156132125750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132685750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132be5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613302576001600560146101000a81548160ff0219169083151502179055506132e6613ef1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133b85750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133c257600090505b6000811561353b57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342557506000601854115b1561347257613452606461344460185488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a60008282546134669190614aa2565b92505081905550613517565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134cd57506000601454115b15613516576134fa60646134ec60145488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a600082825461350e9190614aa2565b925050819055505b5b600081111561352c5761352b873083613c72565b5b80856135389190614e21565b94505b613546878787613c72565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183613624919061494d565b905092915050565b60606000600161363b8461400b565b01905060008167ffffffffffffffff81111561365a576136596158e1565b5b6040519080825280601f01601f19166020018201604052801561368c5781602001600182028036833780820191505090505b509050600082602001820190505b6001156136ef578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816136e3576136e261491e565b5b0494506000850361369a575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff811115613724576137236158e1565b5b6040519080825280601f01601f1916602001820160405280156137565781602001600182028036833780820191505090505b5090506000819050600283111561396857836002846137759190614e21565b8151811061378657613785615910565b5b602001015160f81c60f81b816000815181106137a5576137a4615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350836001846137e29190614e21565b815181106137f3576137f2615910565b5b602001015160f81c60f81b8160018151811061381257613811615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006002846138509190614e21565b67ffffffffffffffff811115613869576138686158e1565b5b6040519080825280601f01601f19166020018201604052801561389b5781602001600182028036833780820191505090505b509050600081905060005b6002866138b39190614e21565b81101561392d578681815181106138cd576138cc615910565b5b602001015160f81c60f81b8282815181106138eb576138ea615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806139259061593f565b9150506138a6565b506139378161415e565b9150818460405160200161394c9291906159d3565b604051602081830303815290604052965050505050505061398f565b856040516020016139799190615a4e565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613a5257613a516158e1565b5b604051908082528060200260200182016040528015613a805781602001602082028036833780820191505090505b5090503081600081518110613a9857613a97615910565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b619190614cf6565b81600181518110613b7557613b74615910565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bda307f0000000000000000000000000000000000000000000000000000000000000000846127f0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c3c959493929190615b69565b600060405180830381600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd89061557b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d479061560d565b60405180910390fd5b613d5b838383614377565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd890615c35565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e749190614aa2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ed89190614601565b60405180910390a3613eeb84848461437c565b50505050565b6000613efc3061129b565b90506000601a549050600080831480613f155750600082145b15613f2257505050613ff3565b6014600954613f3191906148c4565b831115613f4a576014600954613f4791906148c4565b92505b6000839050613f5881613a35565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa690615188565b60006040518083038185875af1925050503d8060008114613fe3576040519150601f19603f3d011682016040523d82523d6000602084013e613fe8565b606091505b505080925050505050505b565b6000818361400391906148c4565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614069577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161405f5761405e61491e565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106140a6576d04ee2d6d415b85acef8100000000838161409c5761409b61491e565b5b0492506020810190505b662386f26fc1000083106140d557662386f26fc1000083816140cb576140ca61491e565b5b0492506010810190505b6305f5e10083106140fe576305f5e10083816140f4576140f361491e565b5b0492506008810190505b61271083106141235761271083816141195761411861491e565b5b0492506004810190505b60648310614146576064838161413c5761413b61491e565b5b0492506002810190505b600a8310614155576001810190505b80915050919050565b606060008290506000815190506000600360018361417c9190614e21565b614186919061494d565b9050600081836141969190614aa2565b67ffffffffffffffff8111156141af576141ae6158e1565b5b6040519080825280601f01601f1916602001820160405280156141e15781602001600182028036833780820191505090505b50905060006001905060005b848110156143695785600182876142049190614e21565b61420e9190614e21565b8151811061421f5761421e615910565b5b602001015160f81c60f81b838386886142389190614aa2565b6142429190614e21565b8151811061425357614252615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060026003826142919190615c55565b1480156142aa57506001856142a69190614e21565b8114155b156143495781806142ba9061593f565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886142ec9190614aa2565b6142f69190614e21565b8151811061430757614306615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806143419061593f565b925050614358565b81806143549061593f565b9250505b806143629061593f565b90506141ed565b508195505050505050919050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143bb5780820151818401526020810190506143a0565b838111156143ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006143ec82614381565b6143f6818561438c565b935061440681856020860161439d565b61440f816143d0565b840191505092915050565b6000602082019050818103600083015261443481846143e1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061446c82614441565b9050919050565b61447c81614461565b811461448757600080fd5b50565b60008135905061449981614473565b92915050565b6000819050919050565b6144b28161449f565b81146144bd57600080fd5b50565b6000813590506144cf816144a9565b92915050565b600080604083850312156144ec576144eb61443c565b5b60006144fa8582860161448a565b925050602061450b858286016144c0565b9150509250929050565b60008115159050919050565b61452a81614515565b82525050565b60006020820190506145456000830184614521565b92915050565b6000602082840312156145615761456061443c565b5b600061456f8482850161448a565b91505092915050565b6000819050919050565b600061459d61459861459384614441565b614578565b614441565b9050919050565b60006145af82614582565b9050919050565b60006145c1826145a4565b9050919050565b6145d1816145b6565b82525050565b60006020820190506145ec60008301846145c8565b92915050565b6145fb8161449f565b82525050565b600060208201905061461660008301846145f2565b92915050565b6000602082840312156146325761463161443c565b5b6000614640848285016144c0565b91505092915050565b6000806000606084860312156146625761466161443c565b5b60006146708682870161448a565b93505060206146818682870161448a565b9250506040614692868287016144c0565b9150509250925092565b6146a581614461565b82525050565b60006020820190506146c0600083018461469c565b92915050565b600060ff82169050919050565b6146dc816146c6565b82525050565b60006020820190506146f760008301846146d3565b92915050565b61470681614515565b811461471157600080fd5b50565b600081359050614723816146fd565b92915050565b6000806000606084860312156147425761474161443c565b5b6000614750868287016144c0565b9350506020614761868287016144c0565b925050604061477286828701614714565b9150509250925092565b600080604083850312156147935761479261443c565b5b60006147a18582860161448a565b92505060206147b285828601614714565b9150509250929050565b6000602082840312156147d2576147d161443c565b5b60006147e084828501614714565b91505092915050565b60008060408385031215614800576147ff61443c565b5b600061480e8582860161448a565b925050602061481f8582860161448a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485f60208361438c565b915061486a82614829565b602082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148cf8261449f565b91506148da8361449f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491357614912614895565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149588261449f565b91506149638361449f565b9250826149735761497261491e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149da602f8361438c565b91506149e58261497e565b604082019050919050565b60006020820190508181036000830152614a09816149cd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614a6c60288361438c565b9150614a7782614a10565b604082019050919050565b60006020820190508181036000830152614a9b81614a5f565b9050919050565b6000614aad8261449f565b9150614ab88361449f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614aed57614aec614895565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b2e601d8361438c565b9150614b3982614af8565b602082019050919050565b60006020820190508181036000830152614b5d81614b21565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614bc060338361438c565b9150614bcb82614b64565b604082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614c5260308361438c565b9150614c5d82614bf6565b604082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b614c91816146c6565b8114614c9c57600080fd5b50565b600081519050614cae81614c88565b92915050565b600060208284031215614cca57614cc961443c565b5b6000614cd884828501614c9f565b91505092915050565b600081519050614cf081614473565b92915050565b600060208284031215614d0c57614d0b61443c565b5b6000614d1a84828501614ce1565b91505092915050565b6000604082019050614d38600083018561469c565b614d45602083018461469c565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b614d6f81614d4c565b8114614d7a57600080fd5b50565b600081519050614d8c81614d66565b92915050565b600063ffffffff82169050919050565b614dab81614d92565b8114614db657600080fd5b50565b600081519050614dc881614da2565b92915050565b600080600060608486031215614de757614de661443c565b5b6000614df586828701614d7d565b9350506020614e0686828701614d7d565b9250506040614e1786828701614db9565b9150509250925092565b6000614e2c8261449f565b9150614e378361449f565b925082821015614e4a57614e49614895565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614eac57808604811115614e8857614e87614895565b5b6001851615614e975780820291505b8081029050614ea585614e55565b9450614e6c565b94509492505050565b600082614ec55760019050614f81565b81614ed35760009050614f81565b8160018114614ee95760028114614ef357614f22565b6001915050614f81565b60ff841115614f0557614f04614895565b5b8360020a915084821115614f1c57614f1b614895565b5b50614f81565b5060208310610133831016604e8410600b8410161715614f575782820a905083811115614f5257614f51614895565b5b614f81565b614f648484846001614e62565b92509050818404811115614f7b57614f7a614895565b5b81810290505b9392505050565b6000614f938261449f565b9150614f9e8361449f565b9250614fcb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614eb5565b905092915050565b600081905092915050565b6000614fe982614381565b614ff38185614fd3565b935061500381856020860161439d565b80840191505092915050565b600061501b8285614fde565b91506150278284614fde565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508f60398361438c565b915061509a82615033565b604082019050919050565b600060208201905081810360008301526150be81615082565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061512160258361438c565b915061512c826150c5565b604082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b600081905092915050565b50565b6000615172600083615157565b915061517d82615162565b600082019050919050565b600061519382615165565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006151f960248361438c565b91506152048261519d565b604082019050919050565b60006020820190508181036000830152615228816151ec565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061528b60358361438c565b91506152968261522f565b604082019050919050565b600060208201905081810360008301526152ba8161527e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061531d60348361438c565b9150615328826152c1565b604082019050919050565b6000602082019050818103600083015261534c81615310565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153af60268361438c565b91506153ba82615353565b604082019050919050565b600060208201905081810360008301526153de816153a2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061544160248361438c565b915061544c826153e5565b604082019050919050565b6000602082019050818103600083015261547081615434565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d360228361438c565b91506154de82615477565b604082019050919050565b60006020820190508181036000830152615502816154c6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061556560258361438c565b915061557082615509565b604082019050919050565b6000602082019050818103600083015261559481615558565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155f760238361438c565b91506156028261559b565b604082019050919050565b60006020820190508181036000830152615626816155ea565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061566360168361438c565b915061566e8261562d565b602082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061571b60498361438c565b915061572682615699565b606082019050919050565b6000602082019050818103600083015261574a8161570e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157ad60358361438c565b91506157b882615751565b604082019050919050565b600060208201905081810360008301526157dc816157a0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061581960138361438c565b9150615824826157e3565b602082019050919050565b600060208201905081810360008301526158488161580c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158ab60368361438c565b91506158b68261584f565b604082019050919050565b600060208201905081810360008301526158da8161589e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061594a8261449f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361597c5761597b614895565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b60006159bd600183614fd3565b91506159c882615987565b600182019050919050565b60006159df8285614fde565b91506159ea826159b0565b91506159f68284614fde565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615a38600283614fd3565b9150615a4382615a02565b600282019050919050565b6000615a5982615a2b565b9150615a658284614fde565b915081905092915050565b6000819050919050565b6000615a95615a90615a8b84615a70565b614578565b61449f565b9050919050565b615aa581615a7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ae081614461565b82525050565b6000615af28383615ad7565b60208301905092915050565b6000602082019050919050565b6000615b1682615aab565b615b208185615ab6565b9350615b2b83615ac7565b8060005b83811015615b5c578151615b438882615ae6565b9750615b4e83615afe565b925050600181019050615b2f565b5085935050505092915050565b600060a082019050615b7e60008301886145f2565b615b8b6020830187615a9c565b8181036040830152615b9d8186615b0b565b9050615bac606083018561469c565b615bb960808301846145f2565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615c1f60268361438c565b9150615c2a82615bc3565b604082019050919050565b60006020820190508181036000830152615c4e81615c12565b9050919050565b6000615c608261449f565b9150615c6b8361449f565b925082615c7b57615c7a61491e565b5b82820690509291505056fea2646970667358221220f968f23a7ea324047d693a82f19ed315afae0a073bd7dadad6a07bb074b2de9b64736f6c634300080d0033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638ea5220f116101d1578063bffda98211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d2b578063f11a24d314610d54578063f2fde38b14610d7f578063f8b45b0514610da85761038c565b8063d85ba06314610c6d578063dd62ed3e14610c98578063e2f4560514610cd5578063e884f26014610d005761038c565b8063c876d0b9116100dc578063c876d0b914610bc3578063c8c8ebe414610bee578063c9567bf914610c19578063d257b34f14610c305761038c565b8063bffda98214610b48578063c024666814610b71578063c18bc19514610b9a5761038c565b8063a0d82dc51161016f578063a9059cbb11610149578063a9059cbb14610a7a578063aacebbe314610ab7578063b62496f514610ae0578063bbc0c74214610b1d5761038c565b8063a0d82dc5146109e7578063a457c2d714610a12578063a4c82a0014610a4f5761038c565b80639a7a23d6116101ab5780639a7a23d61461093d5780639c3b4fdc146109665780639ec22c0e146109915780639fccce32146109bc5761038c565b80638ea5220f146108be578063924de9b7146108e957806395d89b41146109125761038c565b806339509351116102b6578063715018a6116102545780637571336a116102235780637571336a1461081457806375f0a8741461083d5780637bce5a04146108685780638da5cb5b146108935761038c565b8063715018a61461078057806371fc468814610797578063730c1888146107c0578063751039fc146107e95761038c565b80634fbee193116102905780634fbee193146106b05780636a486a8e146106ed5780636ddd17131461071857806370a08231146107435761038c565b8063395093511461061d57806349bd5a5e1461065a5780634a62bb65146106855761038c565b8063199ffc721161032357806327c8f835116102fd57806327c8f835146105715780632c3e486c1461059c5780632e82f1a0146105c7578063313ce567146105f25761038c565b8063199ffc72146104e0578063203e727e1461050b57806323b872dd146105345761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd146104615780631816467f1461048c578063184c16c5146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd3565b6040516103b3919061441a565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906144d5565b610de2565b6040516103f09190614530565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b919061454b565b610e00565b60405161042d9190614530565b60405180910390f35b34801561044257600080fd5b5061044b610e20565b60405161045891906145d7565b60405180910390f35b34801561046d57600080fd5b50610476610e44565b6040516104839190614601565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae919061454b565b610e4e565b005b3480156104c157600080fd5b506104ca610f0e565b6040516104d79190614601565b60405180910390f35b3480156104ec57600080fd5b506104f5610f14565b6040516105029190614601565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d919061461c565b610f1a565b005b34801561054057600080fd5b5061055b60048036038101906105569190614649565b611029565b6040516105689190614530565b60405180910390f35b34801561057d57600080fd5b50610586611121565b60405161059391906146ab565b60405180910390f35b3480156105a857600080fd5b506105b1611127565b6040516105be9190614601565b60405180910390f35b3480156105d357600080fd5b506105dc61112d565b6040516105e99190614530565b60405180910390f35b3480156105fe57600080fd5b50610607611140565b60405161061491906146e2565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906144d5565b611149565b6040516106519190614530565b60405180910390f35b34801561066657600080fd5b5061066f6111f5565b60405161067c91906146ab565b60405180910390f35b34801561069157600080fd5b5061069a611219565b6040516106a79190614530565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061454b565b61122c565b6040516106e49190614530565b60405180910390f35b3480156106f957600080fd5b50610702611282565b60405161070f9190614601565b60405180910390f35b34801561072457600080fd5b5061072d611288565b60405161073a9190614530565b60405180910390f35b34801561074f57600080fd5b5061076a6004803603810190610765919061454b565b61129b565b6040516107779190614601565b60405180910390f35b34801561078c57600080fd5b506107956112e3565b005b3480156107a357600080fd5b506107be60048036038101906107b9919061461c565b61136b565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190614729565b611440565b005b3480156107f557600080fd5b506107fe611580565b60405161080b9190614530565b60405180910390f35b34801561082057600080fd5b5061083b6004803603810190610836919061477c565b611620565b005b34801561084957600080fd5b506108526116f7565b60405161085f91906146ab565b60405180910390f35b34801561087457600080fd5b5061087d61171d565b60405161088a9190614601565b60405180910390f35b34801561089f57600080fd5b506108a8611723565b6040516108b591906146ab565b60405180910390f35b3480156108ca57600080fd5b506108d361174d565b6040516108e091906146ab565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b91906147bc565b611773565b005b34801561091e57600080fd5b5061092761180c565b604051610934919061441a565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f919061477c565b611c3b565b005b34801561097257600080fd5b5061097b611d53565b6040516109889190614601565b60405180910390f35b34801561099d57600080fd5b506109a6611d59565b6040516109b39190614601565b60405180910390f35b3480156109c857600080fd5b506109d1611d5f565b6040516109de9190614601565b60405180910390f35b3480156109f357600080fd5b506109fc611d65565b604051610a099190614601565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a3491906144d5565b611d6b565b604051610a469190614530565b60405180910390f35b348015610a5b57600080fd5b50610a64611e56565b604051610a719190614601565b60405180910390f35b348015610a8657600080fd5b50610aa16004803603810190610a9c91906144d5565b611e5c565b604051610aae9190614530565b60405180910390f35b348015610ac357600080fd5b50610ade6004803603810190610ad9919061454b565b611e7a565b005b348015610aec57600080fd5b50610b076004803603810190610b02919061454b565b611f3a565b604051610b149190614530565b60405180910390f35b348015610b2957600080fd5b50610b32611f5a565b604051610b3f9190614530565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a919061461c565b611f6d565b005b348015610b7d57600080fd5b50610b986004803603810190610b93919061477c565b612080565b005b348015610ba657600080fd5b50610bc16004803603810190610bbc919061461c565b6121a5565b005b348015610bcf57600080fd5b50610bd86122b4565b604051610be59190614530565b60405180910390f35b348015610bfa57600080fd5b50610c036122c7565b604051610c109190614601565b60405180910390f35b348015610c2557600080fd5b50610c2e6122cd565b005b348015610c3c57600080fd5b50610c576004803603810190610c52919061461c565b612388565b604051610c649190614530565b60405180910390f35b348015610c7957600080fd5b50610c826124dd565b604051610c8f9190614601565b60405180910390f35b348015610ca457600080fd5b50610cbf6004803603810190610cba91906147e9565b6124e3565b604051610ccc9190614601565b60405180910390f35b348015610ce157600080fd5b50610cea61256a565b604051610cf79190614601565b60405180910390f35b348015610d0c57600080fd5b50610d15612570565b604051610d229190614530565b60405180910390f35b348015610d3757600080fd5b50610d526004803603810190610d4d919061461c565b612610565b005b348015610d6057600080fd5b50610d696126e5565b604051610d769190614601565b60405180910390f35b348015610d8b57600080fd5b50610da66004803603810190610da1919061454b565b6126eb565b005b348015610db457600080fd5b50610dbd6127e2565b604051610dca9190614601565b60405180910390f35b6060610ddd61180c565b905090565b6000610df6610def6127e8565b84846127f0565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e566127e8565b73ffffffffffffffffffffffffffffffffffffffff16610e74611723565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190614875565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f226127e8565b73ffffffffffffffffffffffffffffffffffffffff16610f40611723565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90614875565b60405180910390fd5b670de0b6b3a76400006103e86001610fac610e44565b610fb691906148c4565b610fc0919061494d565b610fca919061494d565b81101561100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906149f0565b60405180910390fd5b670de0b6b3a76400008161102091906148c4565b60088190555050565b60006110368484846129b9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110816127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890614a82565b60405180910390fd5b6111158561110d6127e8565b8584036127f0565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006111eb6111566127e8565b8484600160006111646127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e69190614aa2565b6127f0565b6001905092915050565b7f0000000000000000000000001118004600da2a8ab3337fc3d2f0709d04eaee6a81565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112eb6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611309611723565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614875565b60405180910390fd5b6113696000613550565b565b6113736127e8565b73ffffffffffffffffffffffffffffffffffffffff16611391611723565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614875565b60405180910390fd5b806017819055506017546014819055506063601454111561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614b44565b60405180910390fd5b50565b6114486127e8565b73ffffffffffffffffffffffffffffffffffffffff16611466611723565b73ffffffffffffffffffffffffffffffffffffffff16146114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b390614875565b60405180910390fd5b610258831015611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614bd6565b60405180910390fd5b6103e88211158015611514575060008210155b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90614c68565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061158a6127e8565b73ffffffffffffffffffffffffffffffffffffffff166115a8611723565b73ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614875565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116286127e8565b73ffffffffffffffffffffffffffffffffffffffff16611646611723565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390614875565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61177b6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611799611723565b73ffffffffffffffffffffffffffffffffffffffff16146117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690614875565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a19190614cb4565b60ff16905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119379190614cf6565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ca9190614cf6565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611a26929190614d23565b602060405180830381865afa158015611a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a679190614cf6565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adb9190614dce565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611b5f578284611b62565b83835b915091506000611bbf611b86670de0b6b3a76400008561361690919063ffffffff16565b611bb160028b611b969190614e21565b600a611ba29190614f88565b8561361690919063ffffffff16565b61361690919063ffffffff16565b905060006040518060400160405280600481526020017f583a202400000000000000000000000000000000000000000000000000000000815250905080611c0d611c088461362c565b6136fa565b604051602001611c1e92919061500f565b604051602081830303815290604052995050505050505050505090565b611c436127e8565b73ffffffffffffffffffffffffffffffffffffffff16611c61611723565b73ffffffffffffffffffffffffffffffffffffffff1614611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90614875565b60405180910390fd5b7f0000000000000000000000001118004600da2a8ab3337fc3d2f0709d04eaee6a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c906150a5565b60405180910390fd5b611d4f8282613994565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611d7a6127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90615137565b60405180910390fd5b611e4b611e426127e8565b858584036127f0565b600191505092915050565b600e5481565b6000611e70611e696127e8565b84846129b9565b6001905092915050565b611e826127e8565b73ffffffffffffffffffffffffffffffffffffffff16611ea0611723565b73ffffffffffffffffffffffffffffffffffffffff1614611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90614875565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f756127e8565b73ffffffffffffffffffffffffffffffffffffffff16611f93611723565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe090614875565b60405180910390fd5b611ff281613a35565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161203890615188565b60006040518083038185875af1925050503d8060008114612075576040519150601f19603f3d011682016040523d82523d6000602084013e61207a565b606091505b50505050565b6120886127e8565b73ffffffffffffffffffffffffffffffffffffffff166120a6611723565b73ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614875565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121999190614530565b60405180910390a25050565b6121ad6127e8565b73ffffffffffffffffffffffffffffffffffffffff166121cb611723565b73ffffffffffffffffffffffffffffffffffffffff1614612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890614875565b60405180910390fd5b670de0b6b3a76400006103e86005612237610e44565b61224191906148c4565b61224b919061494d565b612255919061494d565b811015612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e9061520f565b60405180910390fd5b670de0b6b3a7640000816122ab91906148c4565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6122d56127e8565b73ffffffffffffffffffffffffffffffffffffffff166122f3611723565b73ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614875565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006123926127e8565b73ffffffffffffffffffffffffffffffffffffffff166123b0611723565b73ffffffffffffffffffffffffffffffffffffffff1614612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614875565b60405180910390fd5b620186a06001612414610e44565b61241e91906148c4565b612428919061494d565b82101561246a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612461906152a1565b60405180910390fd5b6103e86005612477610e44565b61248191906148c4565b61248b919061494d565b8211156124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490615333565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061257a6127e8565b73ffffffffffffffffffffffffffffffffffffffff16612598611723565b73ffffffffffffffffffffffffffffffffffffffff16146125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e590614875565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6126186127e8565b73ffffffffffffffffffffffffffffffffffffffff16612636611723565b73ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614875565b60405180910390fd5b80601981905550601954601881905550606360185411156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d990614b44565b60405180910390fd5b50565b60165481565b6126f36127e8565b73ffffffffffffffffffffffffffffffffffffffff16612711611723565b73ffffffffffffffffffffffffffffffffffffffff1614612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e90614875565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd906153c5565b60405180910390fd5b6127df81613550565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285690615457565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c5906154e9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129ac9190614601565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061557b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e9061560d565b60405180910390fd5b60008103612ab057612aab83836000613c72565b61354b565b601160009054906101000a900460ff161561317357612acd611723565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b3b5750612b0b611723565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b745750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bae575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc75750600560149054906101000a900460ff16155b1561317257601160019054906101000a900460ff16612cc157601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c815750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790615679565b60405180910390fd5b5b601360009054906101000a900460ff168015612d105750612ce0611723565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbe5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e895743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3b90615731565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2c5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fd357600854811115612f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6d906157c3565b60405180910390fd5b600a54612f828361129b565b82612f8d9190614aa2565b1115612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc59061582f565b60405180910390fd5b613171565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130765750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c5576008548111156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b7906158c1565b60405180910390fd5b613170565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661316f57600a546131228361129b565b8261312d9190614aa2565b111561316e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131659061582f565b60405180910390fd5b5b5b5b5b5b600061317e3061129b565b9050600060095482101590508080156131a35750601160029054906101000a900460ff165b80156131bc5750600560149054906101000a900460ff16155b80156132125750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132685750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132be5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613302576001600560146101000a81548160ff0219169083151502179055506132e6613ef1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133b85750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133c257600090505b6000811561353b57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342557506000601854115b1561347257613452606461344460185488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a60008282546134669190614aa2565b92505081905550613517565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134cd57506000601454115b15613516576134fa60646134ec60145488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a600082825461350e9190614aa2565b925050819055505b5b600081111561352c5761352b873083613c72565b5b80856135389190614e21565b94505b613546878787613c72565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183613624919061494d565b905092915050565b60606000600161363b8461400b565b01905060008167ffffffffffffffff81111561365a576136596158e1565b5b6040519080825280601f01601f19166020018201604052801561368c5781602001600182028036833780820191505090505b509050600082602001820190505b6001156136ef578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816136e3576136e261491e565b5b0494506000850361369a575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff811115613724576137236158e1565b5b6040519080825280601f01601f1916602001820160405280156137565781602001600182028036833780820191505090505b5090506000819050600283111561396857836002846137759190614e21565b8151811061378657613785615910565b5b602001015160f81c60f81b816000815181106137a5576137a4615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350836001846137e29190614e21565b815181106137f3576137f2615910565b5b602001015160f81c60f81b8160018151811061381257613811615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006002846138509190614e21565b67ffffffffffffffff811115613869576138686158e1565b5b6040519080825280601f01601f19166020018201604052801561389b5781602001600182028036833780820191505090505b509050600081905060005b6002866138b39190614e21565b81101561392d578681815181106138cd576138cc615910565b5b602001015160f81c60f81b8282815181106138eb576138ea615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806139259061593f565b9150506138a6565b506139378161415e565b9150818460405160200161394c9291906159d3565b604051602081830303815290604052965050505050505061398f565b856040516020016139799190615a4e565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613a5257613a516158e1565b5b604051908082528060200260200182016040528015613a805781602001602082028036833780820191505090505b5090503081600081518110613a9857613a97615910565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b619190614cf6565b81600181518110613b7557613b74615910565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bda307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127f0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c3c959493929190615b69565b600060405180830381600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd89061557b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d479061560d565b60405180910390fd5b613d5b838383614377565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd890615c35565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e749190614aa2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ed89190614601565b60405180910390a3613eeb84848461437c565b50505050565b6000613efc3061129b565b90506000601a549050600080831480613f155750600082145b15613f2257505050613ff3565b6014600954613f3191906148c4565b831115613f4a576014600954613f4791906148c4565b92505b6000839050613f5881613a35565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa690615188565b60006040518083038185875af1925050503d8060008114613fe3576040519150601f19603f3d011682016040523d82523d6000602084013e613fe8565b606091505b505080925050505050505b565b6000818361400391906148c4565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614069577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161405f5761405e61491e565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106140a6576d04ee2d6d415b85acef8100000000838161409c5761409b61491e565b5b0492506020810190505b662386f26fc1000083106140d557662386f26fc1000083816140cb576140ca61491e565b5b0492506010810190505b6305f5e10083106140fe576305f5e10083816140f4576140f361491e565b5b0492506008810190505b61271083106141235761271083816141195761411861491e565b5b0492506004810190505b60648310614146576064838161413c5761413b61491e565b5b0492506002810190505b600a8310614155576001810190505b80915050919050565b606060008290506000815190506000600360018361417c9190614e21565b614186919061494d565b9050600081836141969190614aa2565b67ffffffffffffffff8111156141af576141ae6158e1565b5b6040519080825280601f01601f1916602001820160405280156141e15781602001600182028036833780820191505090505b50905060006001905060005b848110156143695785600182876142049190614e21565b61420e9190614e21565b8151811061421f5761421e615910565b5b602001015160f81c60f81b838386886142389190614aa2565b6142429190614e21565b8151811061425357614252615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060026003826142919190615c55565b1480156142aa57506001856142a69190614e21565b8114155b156143495781806142ba9061593f565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886142ec9190614aa2565b6142f69190614e21565b8151811061430757614306615910565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806143419061593f565b925050614358565b81806143549061593f565b9250505b806143629061593f565b90506141ed565b508195505050505050919050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143bb5780820151818401526020810190506143a0565b838111156143ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006143ec82614381565b6143f6818561438c565b935061440681856020860161439d565b61440f816143d0565b840191505092915050565b6000602082019050818103600083015261443481846143e1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061446c82614441565b9050919050565b61447c81614461565b811461448757600080fd5b50565b60008135905061449981614473565b92915050565b6000819050919050565b6144b28161449f565b81146144bd57600080fd5b50565b6000813590506144cf816144a9565b92915050565b600080604083850312156144ec576144eb61443c565b5b60006144fa8582860161448a565b925050602061450b858286016144c0565b9150509250929050565b60008115159050919050565b61452a81614515565b82525050565b60006020820190506145456000830184614521565b92915050565b6000602082840312156145615761456061443c565b5b600061456f8482850161448a565b91505092915050565b6000819050919050565b600061459d61459861459384614441565b614578565b614441565b9050919050565b60006145af82614582565b9050919050565b60006145c1826145a4565b9050919050565b6145d1816145b6565b82525050565b60006020820190506145ec60008301846145c8565b92915050565b6145fb8161449f565b82525050565b600060208201905061461660008301846145f2565b92915050565b6000602082840312156146325761463161443c565b5b6000614640848285016144c0565b91505092915050565b6000806000606084860312156146625761466161443c565b5b60006146708682870161448a565b93505060206146818682870161448a565b9250506040614692868287016144c0565b9150509250925092565b6146a581614461565b82525050565b60006020820190506146c0600083018461469c565b92915050565b600060ff82169050919050565b6146dc816146c6565b82525050565b60006020820190506146f760008301846146d3565b92915050565b61470681614515565b811461471157600080fd5b50565b600081359050614723816146fd565b92915050565b6000806000606084860312156147425761474161443c565b5b6000614750868287016144c0565b9350506020614761868287016144c0565b925050604061477286828701614714565b9150509250925092565b600080604083850312156147935761479261443c565b5b60006147a18582860161448a565b92505060206147b285828601614714565b9150509250929050565b6000602082840312156147d2576147d161443c565b5b60006147e084828501614714565b91505092915050565b60008060408385031215614800576147ff61443c565b5b600061480e8582860161448a565b925050602061481f8582860161448a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485f60208361438c565b915061486a82614829565b602082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148cf8261449f565b91506148da8361449f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491357614912614895565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149588261449f565b91506149638361449f565b9250826149735761497261491e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149da602f8361438c565b91506149e58261497e565b604082019050919050565b60006020820190508181036000830152614a09816149cd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614a6c60288361438c565b9150614a7782614a10565b604082019050919050565b60006020820190508181036000830152614a9b81614a5f565b9050919050565b6000614aad8261449f565b9150614ab88361449f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614aed57614aec614895565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b2e601d8361438c565b9150614b3982614af8565b602082019050919050565b60006020820190508181036000830152614b5d81614b21565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614bc060338361438c565b9150614bcb82614b64565b604082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614c5260308361438c565b9150614c5d82614bf6565b604082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b614c91816146c6565b8114614c9c57600080fd5b50565b600081519050614cae81614c88565b92915050565b600060208284031215614cca57614cc961443c565b5b6000614cd884828501614c9f565b91505092915050565b600081519050614cf081614473565b92915050565b600060208284031215614d0c57614d0b61443c565b5b6000614d1a84828501614ce1565b91505092915050565b6000604082019050614d38600083018561469c565b614d45602083018461469c565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b614d6f81614d4c565b8114614d7a57600080fd5b50565b600081519050614d8c81614d66565b92915050565b600063ffffffff82169050919050565b614dab81614d92565b8114614db657600080fd5b50565b600081519050614dc881614da2565b92915050565b600080600060608486031215614de757614de661443c565b5b6000614df586828701614d7d565b9350506020614e0686828701614d7d565b9250506040614e1786828701614db9565b9150509250925092565b6000614e2c8261449f565b9150614e378361449f565b925082821015614e4a57614e49614895565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614eac57808604811115614e8857614e87614895565b5b6001851615614e975780820291505b8081029050614ea585614e55565b9450614e6c565b94509492505050565b600082614ec55760019050614f81565b81614ed35760009050614f81565b8160018114614ee95760028114614ef357614f22565b6001915050614f81565b60ff841115614f0557614f04614895565b5b8360020a915084821115614f1c57614f1b614895565b5b50614f81565b5060208310610133831016604e8410600b8410161715614f575782820a905083811115614f5257614f51614895565b5b614f81565b614f648484846001614e62565b92509050818404811115614f7b57614f7a614895565b5b81810290505b9392505050565b6000614f938261449f565b9150614f9e8361449f565b9250614fcb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614eb5565b905092915050565b600081905092915050565b6000614fe982614381565b614ff38185614fd3565b935061500381856020860161439d565b80840191505092915050565b600061501b8285614fde565b91506150278284614fde565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508f60398361438c565b915061509a82615033565b604082019050919050565b600060208201905081810360008301526150be81615082565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061512160258361438c565b915061512c826150c5565b604082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b600081905092915050565b50565b6000615172600083615157565b915061517d82615162565b600082019050919050565b600061519382615165565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006151f960248361438c565b91506152048261519d565b604082019050919050565b60006020820190508181036000830152615228816151ec565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061528b60358361438c565b91506152968261522f565b604082019050919050565b600060208201905081810360008301526152ba8161527e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061531d60348361438c565b9150615328826152c1565b604082019050919050565b6000602082019050818103600083015261534c81615310565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153af60268361438c565b91506153ba82615353565b604082019050919050565b600060208201905081810360008301526153de816153a2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061544160248361438c565b915061544c826153e5565b604082019050919050565b6000602082019050818103600083015261547081615434565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d360228361438c565b91506154de82615477565b604082019050919050565b60006020820190508181036000830152615502816154c6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061556560258361438c565b915061557082615509565b604082019050919050565b6000602082019050818103600083015261559481615558565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155f760238361438c565b91506156028261559b565b604082019050919050565b60006020820190508181036000830152615626816155ea565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061566360168361438c565b915061566e8261562d565b602082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061571b60498361438c565b915061572682615699565b606082019050919050565b6000602082019050818103600083015261574a8161570e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157ad60358361438c565b91506157b882615751565b604082019050919050565b600060208201905081810360008301526157dc816157a0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061581960138361438c565b9150615824826157e3565b602082019050919050565b600060208201905081810360008301526158488161580c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158ab60368361438c565b91506158b68261584f565b604082019050919050565b600060208201905081810360008301526158da8161589e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061594a8261449f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361597c5761597b614895565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b60006159bd600183614fd3565b91506159c882615987565b600182019050919050565b60006159df8285614fde565b91506159ea826159b0565b91506159f68284614fde565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615a38600283614fd3565b9150615a4382615a02565b600282019050919050565b6000615a5982615a2b565b9150615a658284614fde565b915081905092915050565b6000819050919050565b6000615a95615a90615a8b84615a70565b614578565b61449f565b9050919050565b615aa581615a7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ae081614461565b82525050565b6000615af28383615ad7565b60208301905092915050565b6000602082019050919050565b6000615b1682615aab565b615b208185615ab6565b9350615b2b83615ac7565b8060005b83811015615b5c578151615b438882615ae6565b9750615b4e83615afe565b925050600181019050615b2f565b5085935050505092915050565b600060a082019050615b7e60008301886145f2565b615b8b6020830187615a9c565b8181036040830152615b9d8186615b0b565b9050615bac606083018561469c565b615bb960808301846145f2565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615c1f60268361438c565b9150615c2a82615bc3565b604082019050919050565b60006020820190508181036000830152615c4e81615c12565b9050919050565b6000615c608261449f565b9150615c6b8361449f565b925082615c7b57615c7a61491e565b5b82820690509291505056fea2646970667358221220f968f23a7ea324047d693a82f19ed315afae0a073bd7dadad6a07bb074b2de9b64736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

19543:19037:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28643:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4405:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21051:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19626:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3746:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32081:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20192:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20006:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29873:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4607:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19729:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20102:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20062:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3645:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19684:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20290:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32192:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20777:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20370:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3862:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;951:103;;;;;;;;;;;;;:::i;:::-;;30797:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38022:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28997:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30424:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19821:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20670;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;728:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19858:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30689:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27739:896;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31414:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20744:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20246:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20846:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20812:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5442:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20154:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4013:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31924:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21272:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20330:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37842:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31224:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30158:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20588:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19891:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28792:153;;;;;;;;;;;;;:::i;:::-;;29384:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20636:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4221:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19933:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29179:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31008:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20707:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1062:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19973:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28643:95;28689:13;28722:8;:6;:8::i;:::-;28715:15;;28643:95;:::o;4405:194::-;4513:4;4530:39;4539:12;:10;:12::i;:::-;4553:7;4562:6;4530:8;:39::i;:::-;4587:4;4580:11;;4405:194;;;;:::o;21051:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19626:51::-;;;:::o;3746:108::-;3807:7;3834:12;;3827:19;;3746:108;:::o;32081:103::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32167:9:::1;32155;;:21;;;;;;;;;;;;;;;;;;32081:103:::0;:::o;20192:47::-;;;;:::o;20006:36::-;;;;:::o;29873:277::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30010:4:::1;30002;29997:1;29981:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29980:26;;;;:::i;:::-;29979:35;;;;:::i;:::-;29969:6;:45;;29947:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30133:8;30123:6;:19;;;;:::i;:::-;30100:20;:42;;;;29873:277:::0;:::o;4607:529::-;4747:4;4764:36;4774:6;4782:9;4793:6;4764:9;:36::i;:::-;4813:24;4840:11;:19;4852:6;4840:19;;;;;;;;;;;;;;;:33;4860:12;:10;:12::i;:::-;4840:33;;;;;;;;;;;;;;;;4813:60;;4926:6;4906:16;:26;;4884:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;5036:57;5045:6;5053:12;:10;:12::i;:::-;5086:6;5067:16;:25;5036:8;:57::i;:::-;5124:4;5117:11;;;4607:529;;;;;:::o;19729:53::-;19775:6;19729:53;:::o;20102:45::-;;;;:::o;20062:33::-;;;;;;;;;;;;;:::o;3645:93::-;3703:5;3728:2;3721:9;;3645:93;:::o;5144:290::-;5257:4;5274:130;5297:12;:10;:12::i;:::-;5324:7;5383:10;5346:11;:25;5358:12;:10;:12::i;:::-;5346:25;;;;;;;;;;;;;;;:34;5372:7;5346:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5274:8;:130::i;:::-;5422:4;5415:11;;5144:290;;;;:::o;19684:38::-;;;:::o;20290:33::-;;;;;;;;;;;;;:::o;32192:126::-;32258:4;32282:19;:28;32302:7;32282:28;;;;;;;;;;;;;;;;;;;;;;;;;32275:35;;32192:126;;;:::o;20777:28::-;;;;:::o;20370:31::-;;;;;;;;;;;;;:::o;3862:143::-;3952:7;3979:9;:18;3989:7;3979:18;;;;;;;;;;;;;;;;3972:25;;3862:143;;;:::o;951:103::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1016:30:::1;1043:1;1016:18;:30::i;:::-;951:103::o:0;30797:203::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30879:7:::1;30867:9;:19;;;;30912:9;;30897:12;:24;;;;30956:2;30940:12;;:18;;30932:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30797:203:::0;:::o;38022:555::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38224:3:::1;38201:19;:26;;38179:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;38351:4;38339:8;:16;;:33;;;;;38371:1;38359:8;:13;;38339:33;38317:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38477:19;38459:15;:37;;;;38526:8;38507:16;:27;;;;38561:8;38545:13;;:24;;;;;;;;;;;;;;;;;;38022:555:::0;;;:::o;28997:121::-;29049:4;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29083:5:::1;29066:14;;:22;;;;;;;;;;;;;;;;;;29106:4;29099:11;;28997:121:::0;:::o;30424:169::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30581:4:::1;30539:31;:39;30571:6;30539:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30424:169:::0;;:::o;19821:30::-;;;;;;;;;;;;;:::o;20670:::-;;;;:::o;728:87::-;774:7;801:6;;;;;;;;;;;794:13;;728:87;:::o;19858:24::-;;;;;;;;;;;;;:::o;30689:100::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30774:7:::1;30760:11;;:21;;;;;;;;;;;;;;;;;;30689:100:::0;:::o;27739:896::-;27787:13;27813:20;27851:4;;;;;;;;;;;27836:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27813:54;;;;27880:19;27902:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27880:44;;27935:17;27973:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27955:66;;;28022:4;;;;;;;;;;;28028:11;27955:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27935:105;;28054:16;28072;28109:9;28094:51;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28053:94;;;;;;;;;28161:18;28181:19;28218:4;;;;;;;;;;;28204:18;;:11;:18;;;:90;;28275:8;28285;28204:90;;;28239:8;28249;28204:90;28160:134;;;;28307:16;28326:91;28386:20;28401:4;28386:10;:14;;:20;;;;:::i;:::-;28326:41;28364:1;28349:12;:16;;;;:::i;:::-;28342:2;:24;;;;:::i;:::-;28326:11;:15;;:41;;;;:::i;:::-;:45;;:91;;;;:::i;:::-;28307:110;;28430:25;:34;;;;;;;;;;;;;;;;;;;28529:11;28559:53;28593:18;28602:8;28593;:18::i;:::-;28559:33;:53::i;:::-;28497:130;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28477:150;;;;;;;;;;;27739:896;:::o;31414:306::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31560:13:::1;31552:21;;:4;:21;;::::0;31530:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31671:41;31700:4;31706:5;31671:28;:41::i;:::-;31414:306:::0;;:::o;20744:24::-;;;;:::o;20246:35::-;;;;:::o;20846:27::-;;;;:::o;20812:25::-;;;;:::o;5442:475::-;5560:4;5577:24;5604:11;:25;5616:12;:10;:12::i;:::-;5604:25;;;;;;;;;;;;;;;:34;5630:7;5604:34;;;;;;;;;;;;;;;;5577:61;;5691:15;5671:16;:35;;5649:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5807:67;5816:12;:10;:12::i;:::-;5830:7;5858:15;5839:16;:34;5807:8;:67::i;:::-;5905:4;5898:11;;;5442:475;;;;:::o;20154:29::-;;;;:::o;4013:200::-;4124:4;4141:42;4151:12;:10;:12::i;:::-;4165:9;4176:6;4141:9;:42::i;:::-;4201:4;4194:11;;4013:200;;;;:::o;31924:149::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32047:18:::1;32029:15;;:36;;;;;;;;;;;;;;;;;;31924:149:::0;:::o;21272:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20330:33::-;;;;;;;;;;;;;:::o;37842:172::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37912:24:::1;37929:6;37912:16;:24::i;:::-;37957:9;;;;;;;;;;;37949:23;;37980:21;37949:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37842:172:::0;:::o;31224:182::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31340:8:::1;31309:19;:28;31329:7;31309:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31380:7;31364:34;;;31389:8;31364:34;;;;;;:::i;:::-;;;;;;;;31224:182:::0;;:::o;30158:258::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30298:4:::1;30290;30285:1;30269:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30268:26;;;;:::i;:::-;30267:35;;;;:::i;:::-;30257:6;:45;;30235:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30399:8;30389:6;:19;;;;:::i;:::-;30377:9;:31;;;;30158:258:::0;:::o;20588:39::-;;;;;;;;;;;;;:::o;19891:35::-;;;;:::o;28792:153::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28861:4:::1;28845:13;;:20;;;;;;;;;;;;;;;;;;28890:4;28876:11;;:18;;;;;;;;;;;;;;;;;;28922:15;28905:14;:32;;;;28792:153::o:0;29384:481::-;29481:4;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29555:6:::1;29550:1;29534:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29533:28;;;;:::i;:::-;29520:9;:41;;29498:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29710:4;29705:1;29689:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29688:26;;;;:::i;:::-;29675:9;:39;;29653:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29826:9;29805:18;:30;;;;29853:4;29846:11;;29384:481:::0;;;:::o;20636:27::-;;;;:::o;4221:176::-;4335:7;4362:11;:18;4374:5;4362:18;;;;;;;;;;;;;;;:27;4381:7;4362:27;;;;;;;;;;;;;;;;4355:34;;4221:176;;;;:::o;19933:33::-;;;;:::o;29179:135::-;29239:4;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29279:5:::1;29256:20;;:28;;;;;;;;;;;;;;;;;;29302:4;29295:11;;29179:135:::0;:::o;31008:208::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31092:7:::1;31079:10;:20;;;;31126:10;;31110:13;:26;;;;31172:2;31155:13;;:19;;31147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31008:208:::0;:::o;20707:30::-;;;;:::o;1062:238::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1185:1:::1;1165:22;;:8;:22;;::::0;1143:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1264:28;1283:8;1264:18;:28::i;:::-;1062:238:::0;:::o;19973:24::-;;;;:::o;249:98::-;302:7;329:10;322:17;;249:98;:::o;7709:380::-;7862:1;7845:19;;:5;:19;;;7837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7943:1;7924:21;;:7;:21;;;7916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8027:6;7997:11;:18;8009:5;7997:18;;;;;;;;;;;;;;;:27;8016:7;7997:27;;;;;;;;;;;;;;;:36;;;;8065:7;8049:32;;8058:5;8049:32;;;8074:6;8049:32;;;;;;:::i;:::-;;;;;;;;7709:380;;;:::o;32376:4239::-;32524:1;32508:18;;:4;:18;;;32500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32601:1;32587:16;;:2;:16;;;32579:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32670:1;32660:6;:11;32656:93;;32688:28;32704:4;32710:2;32714:1;32688:15;:28::i;:::-;32731:7;;32656:93;32765:14;;;;;;;;;;;32761:2393;;;32826:7;:5;:7::i;:::-;32818:15;;:4;:15;;;;:49;;;;;32860:7;:5;:7::i;:::-;32854:13;;:2;:13;;;;32818:49;:86;;;;;32902:1;32888:16;;:2;:16;;;;32818:86;:128;;;;;32939:6;32925:21;;:2;:21;;;;32818:128;:158;;;;;32968:8;;;;;;;;;;;32967:9;32818:158;32796:2347;;;33016:13;;;;;;;;;;;33011:223;;33088:19;:25;33108:4;33088:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33117:19;:23;33137:2;33117:23;;;;;;;;;;;;;;;;;;;;;;;;;33088:52;33054:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33011:223;33412:20;;;;;;;;;;;:58;;;;;33463:7;:5;:7::i;:::-;33457:13;;:2;:13;;;;33412:58;:113;;;;;33509:15;33495:30;;:2;:30;;;;33412:113;:168;;;;;33551:25;:29;33577:2;33551:29;;;;;;;;;;;;;;;;;;;;;;;;;33550:30;33412:168;33386:547;;;33699:12;33657:28;:39;33686:9;33657:39;;;;;;;;;;;;;;;;:54;33623:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;33901:12;33859:28;:39;33888:9;33859:39;;;;;;;;;;;;;;;:54;;;;33386:547;34007:25;:31;34033:4;34007:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34064:31;:35;34096:2;34064:35;;;;;;;;;;;;;;;;;;;;;;;;;34063:36;34007:92;33981:1147;;;34186:20;;34176:6;:30;;34142:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34394:9;;34377:13;34387:2;34377:9;:13::i;:::-;34368:6;:22;;;;:::i;:::-;:35;;34334:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33981:1147;;;34572:25;:29;34598:2;34572:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34627:31;:37;34659:4;34627:37;;;;;;;;;;;;;;;;;;;;;;;;;34626:38;34572:92;34546:582;;;34751:20;;34741:6;:30;;34707:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34546:582;;;34908:31;:35;34940:2;34908:35;;;;;;;;;;;;;;;;;;;;;;;;;34903:225;;35028:9;;35011:13;35021:2;35011:9;:13::i;:::-;35002:6;:22;;;;:::i;:::-;:35;;34968:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34903:225;34546:582;33981:1147;32796:2347;32761:2393;35166:28;35197:24;35215:4;35197:9;:24::i;:::-;35166:55;;35234:12;35273:18;;35249:20;:42;;35234:57;;35322:7;:35;;;;;35346:11;;;;;;;;;;;35322:35;:61;;;;;35375:8;;;;;;;;;;;35374:9;35322:61;:110;;;;;35401:25;:31;35427:4;35401:31;;;;;;;;;;;;;;;;;;;;;;;;;35400:32;35322:110;:153;;;;;35450:19;:25;35470:4;35450:25;;;;;;;;;;;;;;;;;;;;;;;;;35449:26;35322:153;:194;;;;;35493:19;:23;35513:2;35493:23;;;;;;;;;;;;;;;;;;;;;;;;;35492:24;35322:194;35304:326;;;35554:4;35543:8;;:15;;;;;;;;;;;;;;;;;;35575:10;:8;:10::i;:::-;35613:5;35602:8;;:16;;;;;;;;;;;;;;;;;;35304:326;35642:12;35658:8;;;;;;;;;;;35657:9;35642:24;;35768:19;:25;35788:4;35768:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35797:19;:23;35817:2;35797:23;;;;;;;;;;;;;;;;;;;;;;;;;35768:52;35764:100;;;35847:5;35837:15;;35764:100;35876:12;35981:7;35977:585;;;36033:25;:29;36059:2;36033:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36082:1;36066:13;;:17;36033:50;36029:384;;;36111:34;36141:3;36111:25;36122:13;;36111:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36104:41;;36180:4;36164:12;;:20;;;;;;;:::i;:::-;;;;;;;;36029:384;;;36246:25;:31;36272:4;36246:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36296:1;36281:12;;:16;36246:51;36242:171;;;36325:33;36354:3;36325:24;36336:12;;36325:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36318:40;;36393:4;36377:12;;:20;;;;;;;:::i;:::-;;;;;;;;36242:171;36029:384;36440:1;36433:4;:8;36429:91;;;36462:42;36478:4;36492;36499;36462:15;:42::i;:::-;36429:91;36546:4;36536:14;;;;;:::i;:::-;;;35977:585;36574:33;36590:4;36596:2;36600:6;36574:15;:33::i;:::-;32489:4126;;;;32376:4239;;;;:::o;1308:191::-;1382:16;1401:6;;;;;;;;;;;1382:25;;1427:8;1418:6;;:17;;;;;;;;;;;;;;;;;;1482:8;1451:40;;1472:8;1451:40;;;;;;;;;;;;1371:128;1308:191;:::o;11974:98::-;12032:7;12063:1;12059;:5;;;;:::i;:::-;12052:12;;11974:98;;;;:::o;23449:713::-;23505:13;23556:14;23588:1;23573:12;23579:5;23573;:12::i;:::-;:16;23556:33;;23604:20;23638:6;23627:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23604:41;;23660:11;23789:6;23785:2;23781:15;23773:6;23769:28;23762:35;;23826:290;23833:4;23826:290;;;23858:5;;;;;;;;24000:10;23995:2;23988:5;23984:14;23979:32;23974:3;23966:46;24058:2;24049:11;;;;;;:::i;:::-;;;;;24092:1;24083:5;:10;23826:290;24079:21;23826:290;24137:6;24130:13;;;;;23449:713;;;:::o;26258:1473::-;26362:13;26388:24;26421:6;26388:40;;26439:8;26450:11;:18;26439:29;;26522:22;26558:1;26547:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26522:38;;26571:26;26606:8;26571:44;;26716:1;26710:3;:7;26706:1018;;;26753:11;26771:1;26765:3;:7;;;;:::i;:::-;26753:20;;;;;;;;:::i;:::-;;;;;;;;;;26734:13;26748:1;26734:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;26807:11;26825:1;26819:3;:7;;;;:::i;:::-;26807:20;;;;;;;;:::i;:::-;;;;;;;;;;26788:13;26802:1;26788:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;26934:29;26983:1;26977:3;:7;;;;:::i;:::-;26966:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26934:51;;27000:29;27038:15;27000:54;;27076:6;27071:106;27098:1;27092:3;:7;;;;:::i;:::-;27088:1;:11;27071:106;;;27147:11;27159:1;27147:14;;;;;;;;:::i;:::-;;;;;;;;;;27125:16;27142:1;27125:19;;;;;;;;:::i;:::-;;;;;:36;;;;;;;;;;;27101:3;;;;;:::i;:::-;;;;27071:106;;;;27268:48;27298:16;27268:22;:48::i;:::-;27250:66;;27436:15;27458:8;27419:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27405:63;;;;;;;;;;26706:1018;27704:6;27681:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;27667:45;;;;;;26258:1473;;;;:::o;31728:188::-;31845:5;31811:25;:31;31837:4;31811:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31902:5;31868:40;;31896:4;31868:40;;;;;;;;;;;;31728:188;;:::o;36623:589::-;36749:21;36787:1;36773:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36749:40;;36818:4;36800;36805:1;36800:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36844:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36834:4;36839:1;36834:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36879:62;36896:4;36911:15;36929:11;36879:8;:62::i;:::-;36980:15;:66;;;37061:11;37087:1;37131:4;37158;37178:15;36980:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36678:534;36623:589;:::o;5925:770::-;6083:1;6065:20;;:6;:20;;;6057:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6167:1;6146:23;;:9;:23;;;6138:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6222:47;6243:6;6251:9;6262:6;6222:20;:47::i;:::-;6282:21;6306:9;:17;6316:6;6306:17;;;;;;;;;;;;;;;;6282:41;;6373:6;6356:13;:23;;6334:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6517:6;6501:13;:22;6481:9;:17;6491:6;6481:17;;;;;;;;;;;;;;;:42;;;;6569:6;6545:9;:20;6555:9;6545:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6610:9;6593:35;;6602:6;6593:35;;;6621:6;6593:35;;;;;;:::i;:::-;;;;;;;;6641:46;6661:6;6669:9;6680:6;6641:19;:46::i;:::-;6046:649;5925:770;;;:::o;37220:614::-;37259:23;37285:24;37303:4;37285:9;:24::i;:::-;37259:50;;37320:25;37348:12;;37320:40;;37371:12;37419:1;37400:15;:20;:46;;;;37445:1;37424:17;:22;37400:46;37396:85;;;37463:7;;;;;37396:85;37536:2;37515:18;;:23;;;;:::i;:::-;37497:15;:41;37493:115;;;37594:2;37573:18;;:23;;;;:::i;:::-;37555:41;;37493:115;37620:26;37649:15;37620:44;;37677:36;37694:18;37677:16;:36::i;:::-;37741:1;37726:12;:16;;;;37777:9;;;;;;;;;;;37769:23;;37800:21;37769:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37755:71;;;;;37248:586;;;;37220:614;:::o;11575:98::-;11633:7;11664:1;11660;:5;;;;:::i;:::-;11653:12;;11575:98;;;;:::o;24170:948::-;24223:7;24243:14;24260:1;24243:18;;24310:8;24301:5;:17;24297:106;;24348:8;24339:17;;;;;;:::i;:::-;;;;;24385:2;24375:12;;;;24297:106;24430:8;24421:5;:17;24417:106;;24468:8;24459:17;;;;;;:::i;:::-;;;;;24505:2;24495:12;;;;24417:106;24550:8;24541:5;:17;24537:106;;24588:8;24579:17;;;;;;:::i;:::-;;;;;24625:2;24615:12;;;;24537:106;24670:7;24661:5;:16;24657:103;;24707:7;24698:16;;;;;;:::i;:::-;;;;;24743:1;24733:11;;;;24657:103;24787:7;24778:5;:16;24774:103;;24824:7;24815:16;;;;;;:::i;:::-;;;;;24860:1;24850:11;;;;24774:103;24904:7;24895:5;:16;24891:103;;24941:7;24932:16;;;;;;:::i;:::-;;;;;24977:1;24967:11;;;;24891:103;25021:7;25012:5;:16;25008:68;;25059:1;25049:11;;;;25008:68;25104:6;25097:13;;;24170:948;;;:::o;25126:1124::-;25219:13;25336:24;25369:6;25336:40;;25387:8;25398:11;:18;25387:29;;25480:11;25506:1;25501;25495:3;:7;;;;:::i;:::-;25494:13;;;;:::i;:::-;25480:27;;25518:22;25559:6;25553:3;:12;;;;:::i;:::-;25543:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25518:48;;25579:6;25588:1;25579:10;;25635:6;25630:576;25651:3;25647:1;:7;25630:576;;;25766:11;25788:1;25784;25778:3;:7;;;;:::i;:::-;:11;;;;:::i;:::-;25766:24;;;;;;;;:::i;:::-;;;;;;;;;;25736:9;25761:1;25752:6;25746:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25736:27;;;;;;;;:::i;:::-;;;;;:54;;;;;;;;;;;25891:1;25886;25882;:5;;;;:::i;:::-;:10;:26;;;;;25907:1;25901:3;:7;;;;:::i;:::-;25896:1;:12;;25882:26;25878:317;;;25929:3;;;;;:::i;:::-;;;;26016:11;25986:9;26011:1;26002:6;25996:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25986:27;;;;;;;;:::i;:::-;;;;;:41;;;;;;;;;;;26046:3;;;;;:::i;:::-;;;;25878:317;;;26133:3;;;;;:::i;:::-;;;;25878:317;25656:3;;;;:::i;:::-;;;25630:576;;;;26232:9;26218:24;;;;;;;25126:1124;;;:::o;8097:125::-;;;;:::o;8230:124::-;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:323::-;8311:6;8360:2;8348:9;8339:7;8335:23;8331:32;8328:119;;;8366:79;;:::i;:::-;8328:119;8486:1;8511:50;8553:7;8544:6;8533:9;8529:22;8511:50;:::i;:::-;8501:60;;8457:114;8255:323;;;;:::o;8584:474::-;8652:6;8660;8709:2;8697:9;8688:7;8684:23;8680:32;8677:119;;;8715:79;;:::i;:::-;8677:119;8835:1;8860:53;8905:7;8896:6;8885:9;8881:22;8860:53;:::i;:::-;8850:63;;8806:117;8962:2;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8933:118;8584:474;;;;;:::o;9064:182::-;9204:34;9200:1;9192:6;9188:14;9181:58;9064:182;:::o;9252:366::-;9394:3;9415:67;9479:2;9474:3;9415:67;:::i;:::-;9408:74;;9491:93;9580:3;9491:93;:::i;:::-;9609:2;9604:3;9600:12;9593:19;;9252:366;;;:::o;9624:419::-;9790:4;9828:2;9817:9;9813:18;9805:26;;9877:9;9871:4;9867:20;9863:1;9852:9;9848:17;9841:47;9905:131;10031:4;9905:131;:::i;:::-;9897:139;;9624:419;;;:::o;10049:180::-;10097:77;10094:1;10087:88;10194:4;10191:1;10184:15;10218:4;10215:1;10208:15;10235:348;10275:7;10298:20;10316:1;10298:20;:::i;:::-;10293:25;;10332:20;10350:1;10332:20;:::i;:::-;10327:25;;10520:1;10452:66;10448:74;10445:1;10442:81;10437:1;10430:9;10423:17;10419:105;10416:131;;;10527:18;;:::i;:::-;10416:131;10575:1;10572;10568:9;10557:20;;10235:348;;;;:::o;10589:180::-;10637:77;10634:1;10627:88;10734:4;10731:1;10724:15;10758:4;10755:1;10748:15;10775:185;10815:1;10832:20;10850:1;10832:20;:::i;:::-;10827:25;;10866:20;10884:1;10866:20;:::i;:::-;10861:25;;10905:1;10895:35;;10910:18;;:::i;:::-;10895:35;10952:1;10949;10945:9;10940:14;;10775:185;;;;:::o;10966:234::-;11106:34;11102:1;11094:6;11090:14;11083:58;11175:17;11170:2;11162:6;11158:15;11151:42;10966:234;:::o;11206:366::-;11348:3;11369:67;11433:2;11428:3;11369:67;:::i;:::-;11362:74;;11445:93;11534:3;11445:93;:::i;:::-;11563:2;11558:3;11554:12;11547:19;;11206:366;;;:::o;11578:419::-;11744:4;11782:2;11771:9;11767:18;11759:26;;11831:9;11825:4;11821:20;11817:1;11806:9;11802:17;11795:47;11859:131;11985:4;11859:131;:::i;:::-;11851:139;;11578:419;;;:::o;12003:227::-;12143:34;12139:1;12131:6;12127:14;12120:58;12212:10;12207:2;12199:6;12195:15;12188:35;12003:227;:::o;12236:366::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:419::-;12774:4;12812:2;12801:9;12797:18;12789:26;;12861:9;12855:4;12851:20;12847:1;12836:9;12832:17;12825:47;12889:131;13015:4;12889:131;:::i;:::-;12881:139;;12608:419;;;:::o;13033:305::-;13073:3;13092:20;13110:1;13092:20;:::i;:::-;13087:25;;13126:20;13144:1;13126:20;:::i;:::-;13121:25;;13280:1;13212:66;13208:74;13205:1;13202:81;13199:107;;;13286:18;;:::i;:::-;13199:107;13330:1;13327;13323:9;13316:16;;13033:305;;;;:::o;13344:179::-;13484:31;13480:1;13472:6;13468:14;13461:55;13344:179;:::o;13529:366::-;13671:3;13692:67;13756:2;13751:3;13692:67;:::i;:::-;13685:74;;13768:93;13857:3;13768:93;:::i;:::-;13886:2;13881:3;13877:12;13870:19;;13529:366;;;:::o;13901:419::-;14067:4;14105:2;14094:9;14090:18;14082:26;;14154:9;14148:4;14144:20;14140:1;14129:9;14125:17;14118:47;14182:131;14308:4;14182:131;:::i;:::-;14174:139;;13901:419;;;:::o;14326:238::-;14466:34;14462:1;14454:6;14450:14;14443:58;14535:21;14530:2;14522:6;14518:15;14511:46;14326:238;:::o;14570:366::-;14712:3;14733:67;14797:2;14792:3;14733:67;:::i;:::-;14726:74;;14809:93;14898:3;14809:93;:::i;:::-;14927:2;14922:3;14918:12;14911:19;;14570:366;;;:::o;14942:419::-;15108:4;15146:2;15135:9;15131:18;15123:26;;15195:9;15189:4;15185:20;15181:1;15170:9;15166:17;15159:47;15223:131;15349:4;15223:131;:::i;:::-;15215:139;;14942:419;;;:::o;15367:235::-;15507:34;15503:1;15495:6;15491:14;15484:58;15576:18;15571:2;15563:6;15559:15;15552:43;15367:235;:::o;15608:366::-;15750:3;15771:67;15835:2;15830:3;15771:67;:::i;:::-;15764:74;;15847:93;15936:3;15847:93;:::i;:::-;15965:2;15960:3;15956:12;15949:19;;15608:366;;;:::o;15980:419::-;16146:4;16184:2;16173:9;16169:18;16161:26;;16233:9;16227:4;16223:20;16219:1;16208:9;16204:17;16197:47;16261:131;16387:4;16261:131;:::i;:::-;16253:139;;15980:419;;;:::o;16405:118::-;16476:22;16492:5;16476:22;:::i;:::-;16469:5;16466:33;16456:61;;16513:1;16510;16503:12;16456:61;16405:118;:::o;16529:139::-;16584:5;16615:6;16609:13;16600:22;;16631:31;16656:5;16631:31;:::i;:::-;16529:139;;;;:::o;16674:347::-;16742:6;16791:2;16779:9;16770:7;16766:23;16762:32;16759:119;;;16797:79;;:::i;:::-;16759:119;16917:1;16942:62;16996:7;16987:6;16976:9;16972:22;16942:62;:::i;:::-;16932:72;;16888:126;16674:347;;;;:::o;17027:143::-;17084:5;17115:6;17109:13;17100:22;;17131:33;17158:5;17131:33;:::i;:::-;17027:143;;;;:::o;17176:351::-;17246:6;17295:2;17283:9;17274:7;17270:23;17266:32;17263:119;;;17301:79;;:::i;:::-;17263:119;17421:1;17446:64;17502:7;17493:6;17482:9;17478:22;17446:64;:::i;:::-;17436:74;;17392:128;17176:351;;;;:::o;17533:332::-;17654:4;17692:2;17681:9;17677:18;17669:26;;17705:71;17773:1;17762:9;17758:17;17749:6;17705:71;:::i;:::-;17786:72;17854:2;17843:9;17839:18;17830:6;17786:72;:::i;:::-;17533:332;;;;;:::o;17871:114::-;17908:7;17948:30;17941:5;17937:42;17926:53;;17871:114;;;:::o;17991:122::-;18064:24;18082:5;18064:24;:::i;:::-;18057:5;18054:35;18044:63;;18103:1;18100;18093:12;18044:63;17991:122;:::o;18119:143::-;18176:5;18207:6;18201:13;18192:22;;18223:33;18250:5;18223:33;:::i;:::-;18119:143;;;;:::o;18268:93::-;18304:7;18344:10;18337:5;18333:22;18322:33;;18268:93;;;:::o;18367:120::-;18439:23;18456:5;18439:23;:::i;:::-;18432:5;18429:34;18419:62;;18477:1;18474;18467:12;18419:62;18367:120;:::o;18493:141::-;18549:5;18580:6;18574:13;18565:22;;18596:32;18622:5;18596:32;:::i;:::-;18493:141;;;;:::o;18640:661::-;18727:6;18735;18743;18792:2;18780:9;18771:7;18767:23;18763:32;18760:119;;;18798:79;;:::i;:::-;18760:119;18918:1;18943:64;18999:7;18990:6;18979:9;18975:22;18943:64;:::i;:::-;18933:74;;18889:128;19056:2;19082:64;19138:7;19129:6;19118:9;19114:22;19082:64;:::i;:::-;19072:74;;19027:129;19195:2;19221:63;19276:7;19267:6;19256:9;19252:22;19221:63;:::i;:::-;19211:73;;19166:128;18640:661;;;;;:::o;19307:191::-;19347:4;19367:20;19385:1;19367:20;:::i;:::-;19362:25;;19401:20;19419:1;19401:20;:::i;:::-;19396:25;;19440:1;19437;19434:8;19431:34;;;19445:18;;:::i;:::-;19431:34;19490:1;19487;19483:9;19475:17;;19307:191;;;;:::o;19504:102::-;19546:8;19593:5;19590:1;19586:13;19565:34;;19504:102;;;:::o;19612:848::-;19673:5;19680:4;19704:6;19695:15;;19728:5;19719:14;;19742:712;19763:1;19753:8;19750:15;19742:712;;;19858:4;19853:3;19849:14;19843:4;19840:24;19837:50;;;19867:18;;:::i;:::-;19837:50;19917:1;19907:8;19903:16;19900:451;;;20332:4;20325:5;20321:16;20312:25;;19900:451;20382:4;20376;20372:15;20364:23;;20412:32;20435:8;20412:32;:::i;:::-;20400:44;;19742:712;;;19612:848;;;;;;;:::o;20466:1073::-;20520:5;20711:8;20701:40;;20732:1;20723:10;;20734:5;;20701:40;20760:4;20750:36;;20777:1;20768:10;;20779:5;;20750:36;20846:4;20894:1;20889:27;;;;20930:1;20925:191;;;;20839:277;;20889:27;20907:1;20898:10;;20909:5;;;20925:191;20970:3;20960:8;20957:17;20954:43;;;20977:18;;:::i;:::-;20954:43;21026:8;21023:1;21019:16;21010:25;;21061:3;21054:5;21051:14;21048:40;;;21068:18;;:::i;:::-;21048:40;21101:5;;;20839:277;;21225:2;21215:8;21212:16;21206:3;21200:4;21197:13;21193:36;21175:2;21165:8;21162:16;21157:2;21151:4;21148:12;21144:35;21128:111;21125:246;;;21281:8;21275:4;21271:19;21262:28;;21316:3;21309:5;21306:14;21303:40;;;21323:18;;:::i;:::-;21303:40;21356:5;;21125:246;21396:42;21434:3;21424:8;21418:4;21415:1;21396:42;:::i;:::-;21381:57;;;;21470:4;21465:3;21461:14;21454:5;21451:25;21448:51;;;21479:18;;:::i;:::-;21448:51;21528:4;21521:5;21517:16;21508:25;;20466:1073;;;;;;:::o;21545:285::-;21605:5;21629:23;21647:4;21629:23;:::i;:::-;21621:31;;21673:27;21691:8;21673:27;:::i;:::-;21661:39;;21719:104;21756:66;21746:8;21740:4;21719:104;:::i;:::-;21710:113;;21545:285;;;;:::o;21836:148::-;21938:11;21975:3;21960:18;;21836:148;;;;:::o;21990:377::-;22096:3;22124:39;22157:5;22124:39;:::i;:::-;22179:89;22261:6;22256:3;22179:89;:::i;:::-;22172:96;;22277:52;22322:6;22317:3;22310:4;22303:5;22299:16;22277:52;:::i;:::-;22354:6;22349:3;22345:16;22338:23;;22100:267;21990:377;;;;:::o;22373:435::-;22553:3;22575:95;22666:3;22657:6;22575:95;:::i;:::-;22568:102;;22687:95;22778:3;22769:6;22687:95;:::i;:::-;22680:102;;22799:3;22792:10;;22373:435;;;;;:::o;22814:244::-;22954:34;22950:1;22942:6;22938:14;22931:58;23023:27;23018:2;23010:6;23006:15;22999:52;22814:244;:::o;23064:366::-;23206:3;23227:67;23291:2;23286:3;23227:67;:::i;:::-;23220:74;;23303:93;23392:3;23303:93;:::i;:::-;23421:2;23416:3;23412:12;23405:19;;23064:366;;;:::o;23436:419::-;23602:4;23640:2;23629:9;23625:18;23617:26;;23689:9;23683:4;23679:20;23675:1;23664:9;23660:17;23653:47;23717:131;23843:4;23717:131;:::i;:::-;23709:139;;23436:419;;;:::o;23861:224::-;24001:34;23997:1;23989:6;23985:14;23978:58;24070:7;24065:2;24057:6;24053:15;24046:32;23861:224;:::o;24091:366::-;24233:3;24254:67;24318:2;24313:3;24254:67;:::i;:::-;24247:74;;24330:93;24419:3;24330:93;:::i;:::-;24448:2;24443:3;24439:12;24432:19;;24091:366;;;:::o;24463:419::-;24629:4;24667:2;24656:9;24652:18;24644:26;;24716:9;24710:4;24706:20;24702:1;24691:9;24687:17;24680:47;24744:131;24870:4;24744:131;:::i;:::-;24736:139;;24463:419;;;:::o;24888:147::-;24989:11;25026:3;25011:18;;24888:147;;;;:::o;25041:114::-;;:::o;25161:398::-;25320:3;25341:83;25422:1;25417:3;25341:83;:::i;:::-;25334:90;;25433:93;25522:3;25433:93;:::i;:::-;25551:1;25546:3;25542:11;25535:18;;25161:398;;;:::o;25565:379::-;25749:3;25771:147;25914:3;25771:147;:::i;:::-;25764:154;;25935:3;25928:10;;25565:379;;;:::o;25950:223::-;26090:34;26086:1;26078:6;26074:14;26067:58;26159:6;26154:2;26146:6;26142:15;26135:31;25950:223;:::o;26179:366::-;26321:3;26342:67;26406:2;26401:3;26342:67;:::i;:::-;26335:74;;26418:93;26507:3;26418:93;:::i;:::-;26536:2;26531:3;26527:12;26520:19;;26179:366;;;:::o;26551:419::-;26717:4;26755:2;26744:9;26740:18;26732:26;;26804:9;26798:4;26794:20;26790:1;26779:9;26775:17;26768:47;26832:131;26958:4;26832:131;:::i;:::-;26824:139;;26551:419;;;:::o;26976:240::-;27116:34;27112:1;27104:6;27100:14;27093:58;27185:23;27180:2;27172:6;27168:15;27161:48;26976:240;:::o;27222:366::-;27364:3;27385:67;27449:2;27444:3;27385:67;:::i;:::-;27378:74;;27461:93;27550:3;27461:93;:::i;:::-;27579:2;27574:3;27570:12;27563:19;;27222:366;;;:::o;27594:419::-;27760:4;27798:2;27787:9;27783:18;27775:26;;27847:9;27841:4;27837:20;27833:1;27822:9;27818:17;27811:47;27875:131;28001:4;27875:131;:::i;:::-;27867:139;;27594:419;;;:::o;28019:239::-;28159:34;28155:1;28147:6;28143:14;28136:58;28228:22;28223:2;28215:6;28211:15;28204:47;28019:239;:::o;28264:366::-;28406:3;28427:67;28491:2;28486:3;28427:67;:::i;:::-;28420:74;;28503:93;28592:3;28503:93;:::i;:::-;28621:2;28616:3;28612:12;28605:19;;28264:366;;;:::o;28636:419::-;28802:4;28840:2;28829:9;28825:18;28817:26;;28889:9;28883:4;28879:20;28875:1;28864:9;28860:17;28853:47;28917:131;29043:4;28917:131;:::i;:::-;28909:139;;28636:419;;;:::o;29061:225::-;29201:34;29197:1;29189:6;29185:14;29178:58;29270:8;29265:2;29257:6;29253:15;29246:33;29061:225;:::o;29292:366::-;29434:3;29455:67;29519:2;29514:3;29455:67;:::i;:::-;29448:74;;29531:93;29620:3;29531:93;:::i;:::-;29649:2;29644:3;29640:12;29633:19;;29292:366;;;:::o;29664:419::-;29830:4;29868:2;29857:9;29853:18;29845:26;;29917:9;29911:4;29907:20;29903:1;29892:9;29888:17;29881:47;29945:131;30071:4;29945:131;:::i;:::-;29937:139;;29664:419;;;:::o;30089:223::-;30229:34;30225:1;30217:6;30213:14;30206:58;30298:6;30293:2;30285:6;30281:15;30274:31;30089:223;:::o;30318:366::-;30460:3;30481:67;30545:2;30540:3;30481:67;:::i;:::-;30474:74;;30557:93;30646:3;30557:93;:::i;:::-;30675:2;30670:3;30666:12;30659:19;;30318:366;;;:::o;30690:419::-;30856:4;30894:2;30883:9;30879:18;30871:26;;30943:9;30937:4;30933:20;30929:1;30918:9;30914:17;30907:47;30971:131;31097:4;30971:131;:::i;:::-;30963:139;;30690:419;;;:::o;31115:221::-;31255:34;31251:1;31243:6;31239:14;31232:58;31324:4;31319:2;31311:6;31307:15;31300:29;31115:221;:::o;31342:366::-;31484:3;31505:67;31569:2;31564:3;31505:67;:::i;:::-;31498:74;;31581:93;31670:3;31581:93;:::i;:::-;31699:2;31694:3;31690:12;31683:19;;31342:366;;;:::o;31714:419::-;31880:4;31918:2;31907:9;31903:18;31895:26;;31967:9;31961:4;31957:20;31953:1;31942:9;31938:17;31931:47;31995:131;32121:4;31995:131;:::i;:::-;31987:139;;31714:419;;;:::o;32139:224::-;32279:34;32275:1;32267:6;32263:14;32256:58;32348:7;32343:2;32335:6;32331:15;32324:32;32139:224;:::o;32369:366::-;32511:3;32532:67;32596:2;32591:3;32532:67;:::i;:::-;32525:74;;32608:93;32697:3;32608:93;:::i;:::-;32726:2;32721:3;32717:12;32710:19;;32369:366;;;:::o;32741:419::-;32907:4;32945:2;32934:9;32930:18;32922:26;;32994:9;32988:4;32984:20;32980:1;32969:9;32965:17;32958:47;33022:131;33148:4;33022:131;:::i;:::-;33014:139;;32741:419;;;:::o;33166:222::-;33306:34;33302:1;33294:6;33290:14;33283:58;33375:5;33370:2;33362:6;33358:15;33351:30;33166:222;:::o;33394:366::-;33536:3;33557:67;33621:2;33616:3;33557:67;:::i;:::-;33550:74;;33633:93;33722:3;33633:93;:::i;:::-;33751:2;33746:3;33742:12;33735:19;;33394:366;;;:::o;33766:419::-;33932:4;33970:2;33959:9;33955:18;33947:26;;34019:9;34013:4;34009:20;34005:1;33994:9;33990:17;33983:47;34047:131;34173:4;34047:131;:::i;:::-;34039:139;;33766:419;;;:::o;34191:172::-;34331:24;34327:1;34319:6;34315:14;34308:48;34191:172;:::o;34369:366::-;34511:3;34532:67;34596:2;34591:3;34532:67;:::i;:::-;34525:74;;34608:93;34697:3;34608:93;:::i;:::-;34726:2;34721:3;34717:12;34710:19;;34369:366;;;:::o;34741:419::-;34907:4;34945:2;34934:9;34930:18;34922:26;;34994:9;34988:4;34984:20;34980:1;34969:9;34965:17;34958:47;35022:131;35148:4;35022:131;:::i;:::-;35014:139;;34741:419;;;:::o;35166:297::-;35306:34;35302:1;35294:6;35290:14;35283:58;35375:34;35370:2;35362:6;35358:15;35351:59;35444:11;35439:2;35431:6;35427:15;35420:36;35166:297;:::o;35469:366::-;35611:3;35632:67;35696:2;35691:3;35632:67;:::i;:::-;35625:74;;35708:93;35797:3;35708:93;:::i;:::-;35826:2;35821:3;35817:12;35810:19;;35469:366;;;:::o;35841:419::-;36007:4;36045:2;36034:9;36030:18;36022:26;;36094:9;36088:4;36084:20;36080:1;36069:9;36065:17;36058:47;36122:131;36248:4;36122:131;:::i;:::-;36114:139;;35841:419;;;:::o;36266:240::-;36406:34;36402:1;36394:6;36390:14;36383:58;36475:23;36470:2;36462:6;36458:15;36451:48;36266:240;:::o;36512:366::-;36654:3;36675:67;36739:2;36734:3;36675:67;:::i;:::-;36668:74;;36751:93;36840:3;36751:93;:::i;:::-;36869:2;36864:3;36860:12;36853:19;;36512:366;;;:::o;36884:419::-;37050:4;37088:2;37077:9;37073:18;37065:26;;37137:9;37131:4;37127:20;37123:1;37112:9;37108:17;37101:47;37165:131;37291:4;37165:131;:::i;:::-;37157:139;;36884:419;;;:::o;37309:169::-;37449:21;37445:1;37437:6;37433:14;37426:45;37309:169;:::o;37484:366::-;37626:3;37647:67;37711:2;37706:3;37647:67;:::i;:::-;37640:74;;37723:93;37812:3;37723:93;:::i;:::-;37841:2;37836:3;37832:12;37825:19;;37484:366;;;:::o;37856:419::-;38022:4;38060:2;38049:9;38045:18;38037:26;;38109:9;38103:4;38099:20;38095:1;38084:9;38080:17;38073:47;38137:131;38263:4;38137:131;:::i;:::-;38129:139;;37856:419;;;:::o;38281:241::-;38421:34;38417:1;38409:6;38405:14;38398:58;38490:24;38485:2;38477:6;38473:15;38466:49;38281:241;:::o;38528:366::-;38670:3;38691:67;38755:2;38750:3;38691:67;:::i;:::-;38684:74;;38767:93;38856:3;38767:93;:::i;:::-;38885:2;38880:3;38876:12;38869:19;;38528:366;;;:::o;38900:419::-;39066:4;39104:2;39093:9;39089:18;39081:26;;39153:9;39147:4;39143:20;39139:1;39128:9;39124:17;39117:47;39181:131;39307:4;39181:131;:::i;:::-;39173:139;;38900:419;;;:::o;39325:180::-;39373:77;39370:1;39363:88;39470:4;39467:1;39460:15;39494:4;39491:1;39484:15;39511:180;39559:77;39556:1;39549:88;39656:4;39653:1;39646:15;39680:4;39677:1;39670:15;39697:233;39736:3;39759:24;39777:5;39759:24;:::i;:::-;39750:33;;39805:66;39798:5;39795:77;39792:103;;39875:18;;:::i;:::-;39792:103;39922:1;39915:5;39911:13;39904:20;;39697:233;;;:::o;39936:151::-;40076:3;40072:1;40064:6;40060:14;40053:27;39936:151;:::o;40093:400::-;40253:3;40274:84;40356:1;40351:3;40274:84;:::i;:::-;40267:91;;40367:93;40456:3;40367:93;:::i;:::-;40485:1;40480:3;40476:11;40469:18;;40093:400;;;:::o;40499:701::-;40780:3;40802:95;40893:3;40884:6;40802:95;:::i;:::-;40795:102;;40914:148;41058:3;40914:148;:::i;:::-;40907:155;;41079:95;41170:3;41161:6;41079:95;:::i;:::-;41072:102;;41191:3;41184:10;;40499:701;;;;;:::o;41206:152::-;41346:4;41342:1;41334:6;41330:14;41323:28;41206:152;:::o;41364:400::-;41524:3;41545:84;41627:1;41622:3;41545:84;:::i;:::-;41538:91;;41638:93;41727:3;41638:93;:::i;:::-;41756:1;41751:3;41747:11;41740:18;;41364:400;;;:::o;41770:541::-;42003:3;42025:148;42169:3;42025:148;:::i;:::-;42018:155;;42190:95;42281:3;42272:6;42190:95;:::i;:::-;42183:102;;42302:3;42295:10;;41770:541;;;;:::o;42317:85::-;42362:7;42391:5;42380:16;;42317:85;;;:::o;42408:158::-;42466:9;42499:61;42517:42;42526:32;42552:5;42526:32;:::i;:::-;42517:42;:::i;:::-;42499:61;:::i;:::-;42486:74;;42408:158;;;:::o;42572:147::-;42667:45;42706:5;42667:45;:::i;:::-;42662:3;42655:58;42572:147;;:::o;42725:114::-;42792:6;42826:5;42820:12;42810:22;;42725:114;;;:::o;42845:184::-;42944:11;42978:6;42973:3;42966:19;43018:4;43013:3;43009:14;42994:29;;42845:184;;;;:::o;43035:132::-;43102:4;43125:3;43117:11;;43155:4;43150:3;43146:14;43138:22;;43035:132;;;:::o;43173:108::-;43250:24;43268:5;43250:24;:::i;:::-;43245:3;43238:37;43173:108;;:::o;43287:179::-;43356:10;43377:46;43419:3;43411:6;43377:46;:::i;:::-;43455:4;43450:3;43446:14;43432:28;;43287:179;;;;:::o;43472:113::-;43542:4;43574;43569:3;43565:14;43557:22;;43472:113;;;:::o;43621:732::-;43740:3;43769:54;43817:5;43769:54;:::i;:::-;43839:86;43918:6;43913:3;43839:86;:::i;:::-;43832:93;;43949:56;43999:5;43949:56;:::i;:::-;44028:7;44059:1;44044:284;44069:6;44066:1;44063:13;44044:284;;;44145:6;44139:13;44172:63;44231:3;44216:13;44172:63;:::i;:::-;44165:70;;44258:60;44311:6;44258:60;:::i;:::-;44248:70;;44104:224;44091:1;44088;44084:9;44079:14;;44044:284;;;44048:14;44344:3;44337:10;;43745:608;;;43621:732;;;;:::o;44359:831::-;44622:4;44660:3;44649:9;44645:19;44637:27;;44674:71;44742:1;44731:9;44727:17;44718:6;44674:71;:::i;:::-;44755:80;44831:2;44820:9;44816:18;44807:6;44755:80;:::i;:::-;44882:9;44876:4;44872:20;44867:2;44856:9;44852:18;44845:48;44910:108;45013:4;45004:6;44910:108;:::i;:::-;44902:116;;45028:72;45096:2;45085:9;45081:18;45072:6;45028:72;:::i;:::-;45110:73;45178:3;45167:9;45163:19;45154:6;45110:73;:::i;:::-;44359:831;;;;;;;;:::o;45196:225::-;45336:34;45332:1;45324:6;45320:14;45313:58;45405:8;45400:2;45392:6;45388:15;45381:33;45196:225;:::o;45427:366::-;45569:3;45590:67;45654:2;45649:3;45590:67;:::i;:::-;45583:74;;45666:93;45755:3;45666:93;:::i;:::-;45784:2;45779:3;45775:12;45768:19;;45427:366;;;:::o;45799:419::-;45965:4;46003:2;45992:9;45988:18;45980:26;;46052:9;46046:4;46042:20;46038:1;46027:9;46023:17;46016:47;46080:131;46206:4;46080:131;:::i;:::-;46072:139;;45799:419;;;:::o;46224:176::-;46256:1;46273:20;46291:1;46273:20;:::i;:::-;46268:25;;46307:20;46325:1;46307:20;:::i;:::-;46302:25;;46346:1;46336:35;;46351:18;;:::i;:::-;46336:35;46392:1;46389;46385:9;46380:14;;46224:176;;;;:::o

Swarm Source

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