ETH Price: $3,262.36 (-0.65%)
Gas: 1 Gwei

Token

SELENA (SEL)
 

Overview

Max Total Supply

1,000,000,000,000,000,000 SEL

Holders

459 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
894,281,135,048,060.505428073 SEL

Value
$0.00
0x3dae49229763f51cf7d95604d4dabc0d57f5fd80
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Selena aims to be the stakeholder’s go-to community token and is committed to deliver a wholesome crypto community with a profound social platform that screams convenience.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Selena

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-19
*/

pragma solidity ^0.8.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract Selena is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isExchangeWallet;
    mapping (address => bool) private allowAirDrops;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10 ** 6 * 10 ** 9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "SELENA";
    string private _symbol = "SEL";
    uint8 private _decimals = 9;

    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public _maxBuyAmount = 1000000000000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 200000000000000 * 10**9;
    uint256 private _largeSellNumOfTokens = 2000000000000000 * 10**9;
    address public marketingWallet = 0x72B75111d243Cba98C8746cE261E390366616aA9;
    address public investmentWallet = 0x800C3C9b2b132543917cbB5a54A6E99d47e39A7B;
    address public devWallet = 0x16ce829696166C382e1Dbbb5A1E23e4203Bd06D1;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Distribution {
        uint256 sharePercentage;
        uint256 marketingFeePercentage;
        uint256 investmentFeePercentage;
        uint256 devFeePercentage;
    }

    struct TaxFees {
        uint256 reflectionFee;
        uint256 liquidityFee;
        uint256 sellReflectionFee;
        uint256 sellLiquidityFee;
        uint256 superSellOffFee;
    }
    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[investmentWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        taxFees = TaxFees(1,7,1,3,21);
        distribution = Distribution(75, 33, 34, 33);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by Saja team");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false);
            iterator += 1;
        }
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, true);
    }

    function includeInFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, false);
    }

    function addExchange(address[] calldata addresses) public onlyOwner {
        addRemoveExchange(addresses, true);
    }

    function removeExchange(address[] calldata addresses) public onlyOwner {
        addRemoveExchange(addresses, false);
    }

    function addRemoveExchange(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            isExchangeWallet[addr] = flag;
        }
    }
    
    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }
    
    function setSellNumOfTokens(uint256 largeSellNumOfTokens) external onlyOwner {
        _largeSellNumOfTokens = largeSellNumOfTokens * 10**9;
    }

    function setTaxFees(uint256 reflectionFee, uint256 liquidityFee, uint256 sellReflectionFee, uint256 sellLiquidityFee, uint256 superSellOffFee) external onlyOwner {
        taxFees.reflectionFee = reflectionFee;
        taxFees.liquidityFee = liquidityFee;
        taxFees.sellLiquidityFee = sellLiquidityFee;
        taxFees.sellReflectionFee = sellReflectionFee;
        taxFees.superSellOffFee = superSellOffFee;
    }

    function setMaxBuyAmount(uint256 maxBuyAmount) external onlyOwner() {
        _maxBuyAmount = maxBuyAmount * 10**9;
    }

    function setDistribution(uint256 marketingFeePercentage, uint256 investmentFeePercentage, uint256 devFeePercentage,
        uint256 sharePercentage) external onlyOwner {
        require(marketingFeePercentage.add(investmentFeePercentage).add(devFeePercentage) == 100, "Fee percentage must equal 100");
        distribution.marketingFeePercentage = marketingFeePercentage;
        distribution.investmentFeePercentage = investmentFeePercentage;
        distribution.devFeePercentage = devFeePercentage;
        distribution.sharePercentage = sharePercentage;
    }

    function setNumTokensToSell(uint256 numTokensSellToAddToLiquidity_) external onlyOwner {
        numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity_ * 10**9;
    }

    function setWallets(address _marketingWallet, address _investmentWallet, address _devWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        investmentWallet = _investmentWallet;
        devWallet = _devWallet;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function claimTokens() external onlyOwner() {
        uint256 numberOfTokensToSell = balanceOf(address(this));
        distributeShares(numberOfTokensToSell);
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function getContractTokenBalance() public view returns (uint256) {
        return balanceOf(address(this));
    }

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

    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        uint256 reflectionFee = 0;
        if(doTakeFees) {
            reflectionFee = taxFees.reflectionFee;
            if(isSellTxn) {
                reflectionFee = reflectionFee.add(taxFees.sellReflectionFee);
            }
        }
        return _amount.mul(reflectionFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 totalLiquidityFee = 0;
        if(doTakeFees) {
            totalLiquidityFee = taxFees.liquidityFee;
            if(isSellTxn) {
                totalLiquidityFee = totalLiquidityFee.add(taxFees.sellLiquidityFee);
                if(_amount >= _largeSellNumOfTokens) {
                    totalLiquidityFee = totalLiquidityFee.add(taxFees.superSellOffFee);
                }
            }
        }
        return _amount.mul(totalLiquidityFee).div(10**2);
    }

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

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool isSell = false;
        
        //block the bots, but allow them to transfer to dead wallet if they are blocked    
        if(from != owner() && to != owner() && to != deadWallet) {            
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");        
        }
        if(from == uniswapV2Pair || isExchangeWallet[from]) {
            require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
       
        if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) {
            takeFees = false;
        }
        _tokenTransfer(from, to, amount, takeFees, isSell);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && swapAndLiquifyEnabled) {
            //distribution shares is the percentage to be shared between marketing, investment, and dev wallets
            //remainder will be for the liquidity pool
            uint256 balanceToShareTokens = contractTokenBalance.mul(distribution.sharePercentage).div(100);
            uint256 liquidityPoolTokens = contractTokenBalance.sub(balanceToShareTokens);

            //just in case distribution Share Percentage is set to 100%, there will be no tokens to be swapped for liquidity pool
            if(liquidityPoolTokens > 0) {
                //add liquidity
                swapAndLiquify(liquidityPoolTokens);
            }
            //send eth to wallets (marketing, investment, dev)
            distributeShares(balanceToShareTokens);
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 balanceToShare = address(this).balance;
        uint256 marketingShare = balanceToShare.mul(distribution.marketingFeePercentage).div(100);
        uint256 investmentShare = balanceToShare.mul(distribution.investmentFeePercentage).div(100);
        uint256 devShare = balanceToShare.mul(distribution.devFeePercentage).div(100);
        payable(marketingWallet).transfer(marketingShare);
        payable(investmentWallet).transfer(investmentShare);
        payable(devWallet).transfer(devShare);

    }

    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
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell) private {
        doTakeFees = takeFees;
        isSellTxn = isSell;
        _transferStandard(sender, recipient, amount);
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"sharePercentage","type":"uint256"},{"internalType":"uint256","name":"marketingFeePercentage","type":"uint256"},{"internalType":"uint256","name":"investmentFeePercentage","type":"uint256"},{"internalType":"uint256","name":"devFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFeePercentage","type":"uint256"},{"internalType":"uint256","name":"investmentFeePercentage","type":"uint256"},{"internalType":"uint256","name":"devFeePercentage","type":"uint256"},{"internalType":"uint256","name":"sharePercentage","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity_","type":"uint256"}],"name":"setNumTokensToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"largeSellNumOfTokens","type":"uint256"}],"name":"setSellNumOfTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"superSellOffFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_investmentWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"superSellOffFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b033b2e3c9fd0803ce800000060085560085460001962000026919062000a53565b60001962000035919062000aba565b6009556040518060400160405280600681526020017f53454c454e410000000000000000000000000000000000000000000000000000815250600b9080519060200190620000859291906200096a565b506040518060400160405280600381526020017f53454c0000000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000d39291906200096a565b506009600d60006101000a81548160ff021916908360ff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60156101000a81548160ff02191690831515021790555069d3c21bcecceda1000000600f55692a5a058fc295ed0000006010556a01a784379d99db420000006011557372b75111d243cba98c8746ce261e390366616aa9601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073800c3c9b2b132543917cbb5a54a6e99d47e39a7b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507316ce829696166c382e1dbbb5a1e23e4203bd06d1601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620002da57600080fd5b506000620002ed6200093960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460016000620003a26200093960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160056000620003f66200094160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560006200045d6200093960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060a00160405280600181526020016007815260200160018152602001600381526020016015815250601660008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060800160405280604b815260200160218152602001602281526020016021815250601b60008201518160000155602082015181600101556040820151816002015560608201518160030155905050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200073f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000765919062000b5f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000815919062000b5f565b6040518363ffffffff1660e01b81526004016200083492919062000ba2565b6020604051808303816000875af115801562000854573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200087a919062000b5f565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008ca6200093960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200092b919062000be0565b60405180910390a362000c62565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620009789062000c2c565b90600052602060002090601f0160209004810192826200099c5760008555620009e8565b82601f10620009b757805160ff1916838001178555620009e8565b82800160010185558215620009e8579182015b82811115620009e7578251825591602001919060010190620009ca565b5b509050620009f79190620009fb565b5090565b5b8082111562000a16576000816000905550600101620009fc565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a608262000a1a565b915062000a6d8362000a1a565b92508262000a805762000a7f62000a24565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ac78262000a1a565b915062000ad48362000a1a565b92508282101562000aea5762000ae962000a8b565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b278262000afa565b9050919050565b62000b398162000b1a565b811462000b4557600080fd5b50565b60008151905062000b598162000b2e565b92915050565b60006020828403121562000b785762000b7762000af5565b5b600062000b888482850162000b48565b91505092915050565b62000b9c8162000b1a565b82525050565b600060408201905062000bb9600083018562000b91565b62000bc8602083018462000b91565b9392505050565b62000bda8162000a1a565b82525050565b600060208201905062000bf7600083018462000bcf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4557607f821691505b6020821081141562000c5c5762000c5b62000bfd565b5b50919050565b61550c8062000c726000396000f3fe60806040526004361061028b5760003560e01c806370a082311161015a578063a457c2d7116100c1578063dc0aa9cf1161007a578063dc0aa9cf146109e3578063dcda6af314610a0c578063dd62ed3e14610a35578063e7dad4f914610a72578063f2fde38b14610aaf578063f34eb0b814610ad857610292565b8063a457c2d7146108c1578063a9059cbb146108fe578063ab0d8b851461093b578063b6fa37bc14610964578063c49b9a801461098f578063d12a7688146109b857610292565b806385141a771161011357806385141a77146107c357806385d4787b146107ee5780638da5cb5b146108175780638ea5220f1461084257806395d89b411461086d5780639b0e2e861461089857610292565b806370a08231146106c9578063715018a61461070657806371b9189c1461071d57806375cb1bd11461074657806375f0a8741461076f5780637ca2ea441461079a57610292565b806323b872dd116101fe5780634549b039116101b75780634549b039146105b457806348c54b9d146105f157806349bd5a5e146106085780634a74bb02146106335780635342acb41461065e5780635ee58efc1461069b57610292565b806323b872dd1461047e5780632d838119146104bb578063313ce567146104f8578063317d945314610523578063395093511461054e5780633bd5d1731461058b57610292565b8063095ea7b311610250578063095ea7b3146103685780630ddc0976146103a55780630fc709e5146103d457806313114a9d146103fd5780631694505e1461042857806318160ddd1461045357610292565b806224153b14610297578063024022f7146102c0578063035ae135146102e95780630492f0551461031257806306fdde031461033d57610292565b3661029257005b600080fd5b3480156102a357600080fd5b506102be60048036038101906102b99190613e29565b610b01565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190613ebb565b610baf565b005b3480156102f557600080fd5b50610310600480360381019061030b9190613ebb565b610c54565b005b34801561031e57600080fd5b50610327610cf9565b6040516103349190613f17565b60405180910390f35b34801561034957600080fd5b50610352610cff565b60405161035f9190613fcb565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a919061404b565b610d91565b60405161039c91906140a6565b60405180910390f35b3480156103b157600080fd5b506103ba610daf565b6040516103cb9594939291906140c1565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190614114565b610dd3565b005b34801561040957600080fd5b50610412610efd565b60405161041f9190613f17565b60405180910390f35b34801561043457600080fd5b5061043d610f07565b60405161044a91906141da565b60405180910390f35b34801561045f57600080fd5b50610468610f2d565b6040516104759190613f17565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906141f5565b610f37565b6040516104b291906140a6565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613e29565b611010565b6040516104ef9190613f17565b60405180910390f35b34801561050457600080fd5b5061050d61107e565b60405161051a9190614264565b60405180910390f35b34801561052f57600080fd5b50610538611095565b6040516105459190613f17565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061404b565b6110a5565b60405161058291906140a6565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190613e29565b611158565b005b3480156105c057600080fd5b506105db60048036038101906105d691906142ab565b611246565b6040516105e89190613f17565b60405180910390f35b3480156105fd57600080fd5b506106066112ca565b005b34801561061457600080fd5b5061061d611378565b60405161062a91906142fa565b60405180910390f35b34801561063f57600080fd5b5061064861139e565b60405161065591906140a6565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190614315565b6113b1565b60405161069291906140a6565b60405180910390f35b3480156106a757600080fd5b506106b0611407565b6040516106c09493929190614342565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190614315565b611425565b6040516106fd9190613f17565b60405180910390f35b34801561071257600080fd5b5061071b611476565b005b34801561072957600080fd5b50610744600480360381019061073f9190613ebb565b6115c9565b005b34801561075257600080fd5b5061076d60048036038101906107689190614387565b61166e565b005b34801561077b57600080fd5b506107846117cb565b60405161079191906142fa565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613e29565b6117f1565b005b3480156107cf57600080fd5b506107d861189f565b6040516107e591906142fa565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190614518565b6118c5565b005b34801561082357600080fd5b5061082c611968565b60405161083991906142fa565b60405180910390f35b34801561084e57600080fd5b50610857611991565b60405161086491906142fa565b60405180910390f35b34801561087957600080fd5b506108826119b7565b60405161088f9190613fcb565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190614518565b611a49565b005b3480156108cd57600080fd5b506108e860048036038101906108e3919061404b565b611aec565b6040516108f591906140a6565b60405180910390f35b34801561090a57600080fd5b506109256004803603810190610920919061404b565b611bb9565b60405161093291906140a6565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d9190613ebb565b611bd7565b005b34801561097057600080fd5b50610979611c7c565b60405161098691906142fa565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b19190614561565b611ca2565b005b3480156109c457600080fd5b506109cd611d8b565b6040516109da9190613f17565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a05919061458e565b611d91565b005b348015610a1857600080fd5b50610a336004803603810190610a2e919061465f565b611e5f565b005b348015610a4157600080fd5b50610a5c6004803603810190610a5791906146e0565b611fc7565b604051610a699190613f17565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614315565b61204e565b604051610aa691906140a6565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614315565b6120a4565b005b348015610ae457600080fd5b50610aff6004803603810190610afa9190613e29565b612266565b005b610b09612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d9061476c565b60405180910390fd5b633b9aca0081610ba691906147bb565b60118190555050565b610bb7612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b9061476c565b60405180910390fd5b610c508282600061231c565b5050565b610c5c612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce09061476c565b60405180910390fd5b610cf5828260016123c7565b5050565b600f5481565b6060600b8054610d0e90614844565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90614844565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e612314565b8484612472565b6001905092915050565b60168060000154908060010154908060020154908060030154908060040154905085565b610ddb612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061476c565b60405180910390fd5b6064610e8f83610e81868861263d90919063ffffffff16565b61263d90919063ffffffff16565b14610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906148c2565b60405180910390fd5b83601b6001018190555082601b6002018190555081601b6003018190555080601b6000018190555050505050565b6000600a54905090565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610f4484848461269b565b61100584610f50612314565b6110008560405180606001604052806028815260200161548a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fb6612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6c9092919063ffffffff16565b612472565b600190509392505050565b6000600954821115611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90614954565b60405180910390fd5b6000611061612ed0565b90506110768184612efb90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b60006110a030611425565b905090565b600061114e6110b2612314565b8461114985600360006110c3612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263d90919063ffffffff16565b612472565b6001905092915050565b6000611162612314565b9050600061116f83612f45565b505050505090506111c881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061122081600954612fa190919063ffffffff16565b60098190555061123b83600a5461263d90919063ffffffff16565b600a81905550505050565b600060085483111561128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906149c0565b60405180910390fd5b816112ad57600061129d84612f45565b50505050509050809150506112c4565b60006112b884612f45565b50505050915050809150505b92915050565b6112d2612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113569061476c565b60405180910390fd5b600061136a30611425565b905061137581612feb565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601b8060000154908060010154908060020154908060030154905084565b600061146f600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611010565b9050919050565b61147e612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d1612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116559061476c565b60405180910390fd5b61166a8282600161231c565b5050565b611676612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061476c565b60405180910390fd5b82601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117f9612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d9061476c565b60405180910390fd5b633b9aca008161189691906147bb565b60108190555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118cd612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061476c565b60405180910390fd5b6119658160016131fe565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c80546119c690614844565b80601f01602080910402602001604051908101604052809291908181526020018280546119f290614844565b8015611a3f5780601f10611a1457610100808354040283529160200191611a3f565b820191906000526020600020905b815481529060010190602001808311611a2257829003601f168201915b5050505050905090565b611a51612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad59061476c565b60405180910390fd5b611ae98160006131fe565b50565b6000611baf611af9612314565b84611baa856040518060600160405280602581526020016154b26025913960036000611b23612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6c9092919063ffffffff16565b612472565b6001905092915050565b6000611bcd611bc6612314565b848461269b565b6001905092915050565b611bdf612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061476c565b60405180910390fd5b611c78828260006123c7565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611caa612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e9061476c565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d8091906140a6565b60405180910390a150565b60105481565b611d99612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061476c565b60405180910390fd5b84601660000181905550836016600101819055508160166003018190555082601660020181905550806016600401819055505050505050565b600060056000611e6d612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb90614a52565b60405180910390fd5b828290508585905014611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614ae4565b60405180910390fd5b5b84849050811015611fc057611fac611f53612314565b868684818110611f6657611f65614b04565b5b9050602002016020810190611f7b9190614315565b633b9aca00868686818110611f9357611f92614b04565b5b90506020020135611fa491906147bb565b6000806132f5565b600181611fb99190614b33565b9050611f3d565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6120ac612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121309061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614bfb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61226e612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f29061476c565b60405180910390fd5b633b9aca008161230b91906147bb565b600f8190555050565b600033905090565b60005b838390508110156123c157600084848381811061233f5761233e614b04565b5b90506020020160208101906123549190614315565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806123b990614c1b565b91505061231f565b50505050565b60005b8383905081101561246c5760008484838181106123ea576123e9614b04565b5b90506020020160208101906123ff9190614315565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061246490614c1b565b9150506123ca565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990614cd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254990614d68565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126309190613f17565b60405180910390a3505050565b600080828461264c9190614b33565b905083811015612691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268890614dd4565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290614e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614ef8565b60405180910390fd5b600081116127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614f8a565b60405180910390fd5b60006127c8611968565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156128365750612806611968565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128905750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561297957600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129395750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f9061501c565b60405180910390fd5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a1e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a6957600f54821115612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906150ae565b60405180910390fd5b5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b0f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b4e5750612b1e611968565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b8d5750612b5d611968565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612c3a5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612ce45750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ce35750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612cf65760019150612cf561333a565b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612da25750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612df85750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e4e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5857600090505b612e6585858584866132f5565b5050505050565b6000838311158290612eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eab9190613fcb565b60405180910390fd5b5060008385612ec391906150ce565b9050809150509392505050565b6000806000612edd6133eb565b91509150612ef48183612efb90919063ffffffff16565b9250505090565b6000612f3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613438565b905092915050565b6000806000806000806000806000612f5c8a61349b565b9250925092506000806000612f7a8d8686612f75612ed0565b6134f5565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612fe383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e6c565b905092915050565b6001600e60146101000a81548160ff02191690831515021790555061300f8161357e565b600047905060006130416064613033601b60010154856137c190919063ffffffff16565b612efb90919063ffffffff16565b905060006130706064613062601b60020154866137c190919063ffffffff16565b612efb90919063ffffffff16565b9050600061309f6064613091601b60030154876137c190919063ffffffff16565b612efb90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613109573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613172573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131db573d6000803e3d6000fd5b50505050506000600e60146101000a81548160ff02191690831515021790555050565b60005b82518110156132f057600083828151811061321f5761321e614b04565b5b60200260200101519050821561328c576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506132dc565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806132e890614c1b565b915050613201565b505050565b81601560146101000a81548160ff021916908315150217905550806015806101000a81548160ff02191690831515021790555061333385858561383c565b5050505050565b600061334530611425565b905060105481101580156133665750600e60149054906101000a900460ff16155b801561337e5750600e60159054906101000a900460ff165b156133e85760006133b060646133a2601b60000154856137c190919063ffffffff16565b612efb90919063ffffffff16565b905060006133c78284612fa190919063ffffffff16565b905060008111156133dc576133db81613a07565b5b6133e582612feb565b50505b50565b6000806000600954905060006008549050613413600854600954612efb90919063ffffffff16565b82101561342b57600954600854935093505050613434565b81819350935050505b9091565b6000808311829061347f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134769190613fcb565b60405180910390fd5b506000838561348e9190615131565b9050809150509392505050565b6000806000806134aa85613add565b905060006134b786613b5e565b905060006134e0826134d2858a612fa190919063ffffffff16565b612fa190919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061350e85896137c190919063ffffffff16565b9050600061352586896137c190919063ffffffff16565b9050600061353c87896137c190919063ffffffff16565b90506000613565826135578587612fa190919063ffffffff16565b612fa190919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561359b5761359a6143da565b5b6040519080825280602002602001820160405280156135c95781602001602082028036833780820191505090505b50905030816000815181106135e1576135e0614b04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ac9190615177565b816001815181106136c0576136bf614b04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061372730600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612472565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161378b95949392919061529d565b600060405180830381600087803b1580156137a557600080fd5b505af11580156137b9573d6000803e3d6000fd5b505050505050565b6000808314156137d45760009050613836565b600082846137e291906147bb565b90508284826137f19190615131565b14613831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382890615369565b60405180910390fd5b809150505b92915050565b60008060008060008061384e87612f45565b9550955095509550955095506138ac86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061398d81613c03565b6139978483613cc0565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139f49190613f17565b60405180910390a3505050505050505050565b6001600e60146101000a81548160ff0219169083151502179055506000613a38600283612efb90919063ffffffff16565b90506000613a4f8284612fa190919063ffffffff16565b90506000479050613a5f8361357e565b6000613a748247612fa190919063ffffffff16565b9050613a808382613cfa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613ab393929190615389565b60405180910390a1505050506000600e60146101000a81548160ff02191690831515021790555050565b60008060009050601560149054906101000a900460ff1615613b3057601660000154905060158054906101000a900460ff1615613b2f57613b2c6016600201548261263d90919063ffffffff16565b90505b5b613b566064613b4883866137c190919063ffffffff16565b612efb90919063ffffffff16565b915050919050565b60008060009050601560149054906101000a900460ff1615613bd557601660010154905060158054906101000a900460ff1615613bd457613bad6016600301548261263d90919063ffffffff16565b90506011548310613bd357613bd06016600401548261263d90919063ffffffff16565b90505b5b5b613bfb6064613bed83866137c190919063ffffffff16565b612efb90919063ffffffff16565b915050919050565b6000613c0d612ed0565b90506000613c2482846137c190919063ffffffff16565b9050613c7881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613cd582600954612fa190919063ffffffff16565b600981905550613cf081600a5461263d90919063ffffffff16565b600a819055505050565b613d2730600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612472565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613d73611968565b426040518863ffffffff1660e01b8152600401613d95969594939291906153c0565b60606040518083038185885af1158015613db3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613dd89190615436565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613e0681613df3565b8114613e1157600080fd5b50565b600081359050613e2381613dfd565b92915050565b600060208284031215613e3f57613e3e613de9565b5b6000613e4d84828501613e14565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7b57613e7a613e56565b5b8235905067ffffffffffffffff811115613e9857613e97613e5b565b5b602083019150836020820283011115613eb457613eb3613e60565b5b9250929050565b60008060208385031215613ed257613ed1613de9565b5b600083013567ffffffffffffffff811115613ef057613eef613dee565b5b613efc85828601613e65565b92509250509250929050565b613f1181613df3565b82525050565b6000602082019050613f2c6000830184613f08565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f6c578082015181840152602081019050613f51565b83811115613f7b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f9d82613f32565b613fa78185613f3d565b9350613fb7818560208601613f4e565b613fc081613f81565b840191505092915050565b60006020820190508181036000830152613fe58184613f92565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061401882613fed565b9050919050565b6140288161400d565b811461403357600080fd5b50565b6000813590506140458161401f565b92915050565b6000806040838503121561406257614061613de9565b5b600061407085828601614036565b925050602061408185828601613e14565b9150509250929050565b60008115159050919050565b6140a08161408b565b82525050565b60006020820190506140bb6000830184614097565b92915050565b600060a0820190506140d66000830188613f08565b6140e36020830187613f08565b6140f06040830186613f08565b6140fd6060830185613f08565b61410a6080830184613f08565b9695505050505050565b6000806000806080858703121561412e5761412d613de9565b5b600061413c87828801613e14565b945050602061414d87828801613e14565b935050604061415e87828801613e14565b925050606061416f87828801613e14565b91505092959194509250565b6000819050919050565b60006141a061419b61419684613fed565b61417b565b613fed565b9050919050565b60006141b282614185565b9050919050565b60006141c4826141a7565b9050919050565b6141d4816141b9565b82525050565b60006020820190506141ef60008301846141cb565b92915050565b60008060006060848603121561420e5761420d613de9565b5b600061421c86828701614036565b935050602061422d86828701614036565b925050604061423e86828701613e14565b9150509250925092565b600060ff82169050919050565b61425e81614248565b82525050565b60006020820190506142796000830184614255565b92915050565b6142888161408b565b811461429357600080fd5b50565b6000813590506142a58161427f565b92915050565b600080604083850312156142c2576142c1613de9565b5b60006142d085828601613e14565b92505060206142e185828601614296565b9150509250929050565b6142f48161400d565b82525050565b600060208201905061430f60008301846142eb565b92915050565b60006020828403121561432b5761432a613de9565b5b600061433984828501614036565b91505092915050565b60006080820190506143576000830187613f08565b6143646020830186613f08565b6143716040830185613f08565b61437e6060830184613f08565b95945050505050565b6000806000606084860312156143a05761439f613de9565b5b60006143ae86828701614036565b93505060206143bf86828701614036565b92505060406143d086828701614036565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61441282613f81565b810181811067ffffffffffffffff82111715614431576144306143da565b5b80604052505050565b6000614444613ddf565b90506144508282614409565b919050565b600067ffffffffffffffff8211156144705761446f6143da565b5b602082029050602081019050919050565b600061449461448f84614455565b61443a565b905080838252602082019050602084028301858111156144b7576144b6613e60565b5b835b818110156144e057806144cc8882614036565b8452602084019350506020810190506144b9565b5050509392505050565b600082601f8301126144ff576144fe613e56565b5b813561450f848260208601614481565b91505092915050565b60006020828403121561452e5761452d613de9565b5b600082013567ffffffffffffffff81111561454c5761454b613dee565b5b614558848285016144ea565b91505092915050565b60006020828403121561457757614576613de9565b5b600061458584828501614296565b91505092915050565b600080600080600060a086880312156145aa576145a9613de9565b5b60006145b888828901613e14565b95505060206145c988828901613e14565b94505060406145da88828901613e14565b93505060606145eb88828901613e14565b92505060806145fc88828901613e14565b9150509295509295909350565b60008083601f84011261461f5761461e613e56565b5b8235905067ffffffffffffffff81111561463c5761463b613e5b565b5b60208301915083602082028301111561465857614657613e60565b5b9250929050565b6000806000806040858703121561467957614678613de9565b5b600085013567ffffffffffffffff81111561469757614696613dee565b5b6146a387828801613e65565b9450945050602085013567ffffffffffffffff8111156146c6576146c5613dee565b5b6146d287828801614609565b925092505092959194509250565b600080604083850312156146f7576146f6613de9565b5b600061470585828601614036565b925050602061471685828601614036565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614756602083613f3d565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c682613df3565b91506147d183613df3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561480a5761480961478c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485c57607f821691505b602082108114156148705761486f614815565b5b50919050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b60006148ac601d83613f3d565b91506148b782614876565b602082019050919050565b600060208201905081810360008301526148db8161489f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061493e602a83613f3d565b9150614949826148e2565b604082019050919050565b6000602082019050818103600083015261496d81614931565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006149aa601f83613f3d565b91506149b582614974565b602082019050919050565b600060208201905081810360008301526149d98161499d565b9050919050565b7f41697264726f702063616e206f6e6c7920626520646f6e652062792053616a6160008201527f207465616d000000000000000000000000000000000000000000000000000000602082015250565b6000614a3c602583613f3d565b9150614a47826149e0565b604082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000614ace602a83613f3d565b9150614ad982614a72565b604082019050919050565b60006020820190508181036000830152614afd81614ac1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b3e82613df3565b9150614b4983613df3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b7e57614b7d61478c565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614be5602683613f3d565b9150614bf082614b89565b604082019050919050565b60006020820190508181036000830152614c1481614bd8565b9050919050565b6000614c2682613df3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c5957614c5861478c565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc0602483613f3d565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d52602283613f3d565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614dbe601b83613f3d565b9150614dc982614d88565b602082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e50602583613f3d565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ee2602383613f3d565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614f74602983613f3d565b9150614f7f82614f18565b604082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615006602f83613f3d565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615098602883613f3d565b91506150a38261503c565b604082019050919050565b600060208201905081810360008301526150c78161508b565b9050919050565b60006150d982613df3565b91506150e483613df3565b9250828210156150f7576150f661478c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061513c82613df3565b915061514783613df3565b92508261515757615156615102565b5b828204905092915050565b6000815190506151718161401f565b92915050565b60006020828403121561518d5761518c613de9565b5b600061519b84828501615162565b91505092915050565b6000819050919050565b60006151c96151c46151bf846151a4565b61417b565b613df3565b9050919050565b6151d9816151ae565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152148161400d565b82525050565b6000615226838361520b565b60208301905092915050565b6000602082019050919050565b600061524a826151df565b61525481856151ea565b935061525f836151fb565b8060005b83811015615290578151615277888261521a565b975061528283615232565b925050600181019050615263565b5085935050505092915050565b600060a0820190506152b26000830188613f08565b6152bf60208301876151d0565b81810360408301526152d1818661523f565b90506152e060608301856142eb565b6152ed6080830184613f08565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615353602183613f3d565b915061535e826152f7565b604082019050919050565b6000602082019050818103600083015261538281615346565b9050919050565b600060608201905061539e6000830186613f08565b6153ab6020830185613f08565b6153b86040830184613f08565b949350505050565b600060c0820190506153d560008301896142eb565b6153e26020830188613f08565b6153ef60408301876151d0565b6153fc60608301866151d0565b61540960808301856142eb565b61541660a0830184613f08565b979650505050505050565b60008151905061543081613dfd565b92915050565b60008060006060848603121561544f5761544e613de9565b5b600061545d86828701615421565b935050602061546e86828701615421565b925050604061547f86828701615421565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aaf4b8438aa3acfffff5b0d8c50e8edd6893022a90b71f9a49d3e8c0effbe39e64736f6c634300080c0033

Deployed Bytecode

0x60806040526004361061028b5760003560e01c806370a082311161015a578063a457c2d7116100c1578063dc0aa9cf1161007a578063dc0aa9cf146109e3578063dcda6af314610a0c578063dd62ed3e14610a35578063e7dad4f914610a72578063f2fde38b14610aaf578063f34eb0b814610ad857610292565b8063a457c2d7146108c1578063a9059cbb146108fe578063ab0d8b851461093b578063b6fa37bc14610964578063c49b9a801461098f578063d12a7688146109b857610292565b806385141a771161011357806385141a77146107c357806385d4787b146107ee5780638da5cb5b146108175780638ea5220f1461084257806395d89b411461086d5780639b0e2e861461089857610292565b806370a08231146106c9578063715018a61461070657806371b9189c1461071d57806375cb1bd11461074657806375f0a8741461076f5780637ca2ea441461079a57610292565b806323b872dd116101fe5780634549b039116101b75780634549b039146105b457806348c54b9d146105f157806349bd5a5e146106085780634a74bb02146106335780635342acb41461065e5780635ee58efc1461069b57610292565b806323b872dd1461047e5780632d838119146104bb578063313ce567146104f8578063317d945314610523578063395093511461054e5780633bd5d1731461058b57610292565b8063095ea7b311610250578063095ea7b3146103685780630ddc0976146103a55780630fc709e5146103d457806313114a9d146103fd5780631694505e1461042857806318160ddd1461045357610292565b806224153b14610297578063024022f7146102c0578063035ae135146102e95780630492f0551461031257806306fdde031461033d57610292565b3661029257005b600080fd5b3480156102a357600080fd5b506102be60048036038101906102b99190613e29565b610b01565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190613ebb565b610baf565b005b3480156102f557600080fd5b50610310600480360381019061030b9190613ebb565b610c54565b005b34801561031e57600080fd5b50610327610cf9565b6040516103349190613f17565b60405180910390f35b34801561034957600080fd5b50610352610cff565b60405161035f9190613fcb565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a919061404b565b610d91565b60405161039c91906140a6565b60405180910390f35b3480156103b157600080fd5b506103ba610daf565b6040516103cb9594939291906140c1565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190614114565b610dd3565b005b34801561040957600080fd5b50610412610efd565b60405161041f9190613f17565b60405180910390f35b34801561043457600080fd5b5061043d610f07565b60405161044a91906141da565b60405180910390f35b34801561045f57600080fd5b50610468610f2d565b6040516104759190613f17565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906141f5565b610f37565b6040516104b291906140a6565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613e29565b611010565b6040516104ef9190613f17565b60405180910390f35b34801561050457600080fd5b5061050d61107e565b60405161051a9190614264565b60405180910390f35b34801561052f57600080fd5b50610538611095565b6040516105459190613f17565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061404b565b6110a5565b60405161058291906140a6565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190613e29565b611158565b005b3480156105c057600080fd5b506105db60048036038101906105d691906142ab565b611246565b6040516105e89190613f17565b60405180910390f35b3480156105fd57600080fd5b506106066112ca565b005b34801561061457600080fd5b5061061d611378565b60405161062a91906142fa565b60405180910390f35b34801561063f57600080fd5b5061064861139e565b60405161065591906140a6565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190614315565b6113b1565b60405161069291906140a6565b60405180910390f35b3480156106a757600080fd5b506106b0611407565b6040516106c09493929190614342565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190614315565b611425565b6040516106fd9190613f17565b60405180910390f35b34801561071257600080fd5b5061071b611476565b005b34801561072957600080fd5b50610744600480360381019061073f9190613ebb565b6115c9565b005b34801561075257600080fd5b5061076d60048036038101906107689190614387565b61166e565b005b34801561077b57600080fd5b506107846117cb565b60405161079191906142fa565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613e29565b6117f1565b005b3480156107cf57600080fd5b506107d861189f565b6040516107e591906142fa565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190614518565b6118c5565b005b34801561082357600080fd5b5061082c611968565b60405161083991906142fa565b60405180910390f35b34801561084e57600080fd5b50610857611991565b60405161086491906142fa565b60405180910390f35b34801561087957600080fd5b506108826119b7565b60405161088f9190613fcb565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190614518565b611a49565b005b3480156108cd57600080fd5b506108e860048036038101906108e3919061404b565b611aec565b6040516108f591906140a6565b60405180910390f35b34801561090a57600080fd5b506109256004803603810190610920919061404b565b611bb9565b60405161093291906140a6565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d9190613ebb565b611bd7565b005b34801561097057600080fd5b50610979611c7c565b60405161098691906142fa565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b19190614561565b611ca2565b005b3480156109c457600080fd5b506109cd611d8b565b6040516109da9190613f17565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a05919061458e565b611d91565b005b348015610a1857600080fd5b50610a336004803603810190610a2e919061465f565b611e5f565b005b348015610a4157600080fd5b50610a5c6004803603810190610a5791906146e0565b611fc7565b604051610a699190613f17565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614315565b61204e565b604051610aa691906140a6565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614315565b6120a4565b005b348015610ae457600080fd5b50610aff6004803603810190610afa9190613e29565b612266565b005b610b09612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d9061476c565b60405180910390fd5b633b9aca0081610ba691906147bb565b60118190555050565b610bb7612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b9061476c565b60405180910390fd5b610c508282600061231c565b5050565b610c5c612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce09061476c565b60405180910390fd5b610cf5828260016123c7565b5050565b600f5481565b6060600b8054610d0e90614844565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90614844565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e612314565b8484612472565b6001905092915050565b60168060000154908060010154908060020154908060030154908060040154905085565b610ddb612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061476c565b60405180910390fd5b6064610e8f83610e81868861263d90919063ffffffff16565b61263d90919063ffffffff16565b14610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906148c2565b60405180910390fd5b83601b6001018190555082601b6002018190555081601b6003018190555080601b6000018190555050505050565b6000600a54905090565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610f4484848461269b565b61100584610f50612314565b6110008560405180606001604052806028815260200161548a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fb6612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6c9092919063ffffffff16565b612472565b600190509392505050565b6000600954821115611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90614954565b60405180910390fd5b6000611061612ed0565b90506110768184612efb90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b60006110a030611425565b905090565b600061114e6110b2612314565b8461114985600360006110c3612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263d90919063ffffffff16565b612472565b6001905092915050565b6000611162612314565b9050600061116f83612f45565b505050505090506111c881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061122081600954612fa190919063ffffffff16565b60098190555061123b83600a5461263d90919063ffffffff16565b600a81905550505050565b600060085483111561128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906149c0565b60405180910390fd5b816112ad57600061129d84612f45565b50505050509050809150506112c4565b60006112b884612f45565b50505050915050809150505b92915050565b6112d2612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113569061476c565b60405180910390fd5b600061136a30611425565b905061137581612feb565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601b8060000154908060010154908060020154908060030154905084565b600061146f600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611010565b9050919050565b61147e612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d1612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116559061476c565b60405180910390fd5b61166a8282600161231c565b5050565b611676612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061476c565b60405180910390fd5b82601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117f9612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d9061476c565b60405180910390fd5b633b9aca008161189691906147bb565b60108190555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118cd612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061476c565b60405180910390fd5b6119658160016131fe565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c80546119c690614844565b80601f01602080910402602001604051908101604052809291908181526020018280546119f290614844565b8015611a3f5780601f10611a1457610100808354040283529160200191611a3f565b820191906000526020600020905b815481529060010190602001808311611a2257829003601f168201915b5050505050905090565b611a51612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad59061476c565b60405180910390fd5b611ae98160006131fe565b50565b6000611baf611af9612314565b84611baa856040518060600160405280602581526020016154b26025913960036000611b23612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6c9092919063ffffffff16565b612472565b6001905092915050565b6000611bcd611bc6612314565b848461269b565b6001905092915050565b611bdf612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061476c565b60405180910390fd5b611c78828260006123c7565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611caa612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e9061476c565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d8091906140a6565b60405180910390a150565b60105481565b611d99612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061476c565b60405180910390fd5b84601660000181905550836016600101819055508160166003018190555082601660020181905550806016600401819055505050505050565b600060056000611e6d612314565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb90614a52565b60405180910390fd5b828290508585905014611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614ae4565b60405180910390fd5b5b84849050811015611fc057611fac611f53612314565b868684818110611f6657611f65614b04565b5b9050602002016020810190611f7b9190614315565b633b9aca00868686818110611f9357611f92614b04565b5b90506020020135611fa491906147bb565b6000806132f5565b600181611fb99190614b33565b9050611f3d565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6120ac612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121309061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614bfb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61226e612314565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f29061476c565b60405180910390fd5b633b9aca008161230b91906147bb565b600f8190555050565b600033905090565b60005b838390508110156123c157600084848381811061233f5761233e614b04565b5b90506020020160208101906123549190614315565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806123b990614c1b565b91505061231f565b50505050565b60005b8383905081101561246c5760008484838181106123ea576123e9614b04565b5b90506020020160208101906123ff9190614315565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061246490614c1b565b9150506123ca565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990614cd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254990614d68565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126309190613f17565b60405180910390a3505050565b600080828461264c9190614b33565b905083811015612691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268890614dd4565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290614e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614ef8565b60405180910390fd5b600081116127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614f8a565b60405180910390fd5b60006127c8611968565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156128365750612806611968565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128905750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561297957600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129395750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f9061501c565b60405180910390fd5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a1e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a6957600f54821115612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906150ae565b60405180910390fd5b5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b0f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b4e5750612b1e611968565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b8d5750612b5d611968565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612c3a5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612ce45750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ce35750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612cf65760019150612cf561333a565b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612da25750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612df85750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e4e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5857600090505b612e6585858584866132f5565b5050505050565b6000838311158290612eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eab9190613fcb565b60405180910390fd5b5060008385612ec391906150ce565b9050809150509392505050565b6000806000612edd6133eb565b91509150612ef48183612efb90919063ffffffff16565b9250505090565b6000612f3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613438565b905092915050565b6000806000806000806000806000612f5c8a61349b565b9250925092506000806000612f7a8d8686612f75612ed0565b6134f5565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612fe383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e6c565b905092915050565b6001600e60146101000a81548160ff02191690831515021790555061300f8161357e565b600047905060006130416064613033601b60010154856137c190919063ffffffff16565b612efb90919063ffffffff16565b905060006130706064613062601b60020154866137c190919063ffffffff16565b612efb90919063ffffffff16565b9050600061309f6064613091601b60030154876137c190919063ffffffff16565b612efb90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613109573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613172573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131db573d6000803e3d6000fd5b50505050506000600e60146101000a81548160ff02191690831515021790555050565b60005b82518110156132f057600083828151811061321f5761321e614b04565b5b60200260200101519050821561328c576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506132dc565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806132e890614c1b565b915050613201565b505050565b81601560146101000a81548160ff021916908315150217905550806015806101000a81548160ff02191690831515021790555061333385858561383c565b5050505050565b600061334530611425565b905060105481101580156133665750600e60149054906101000a900460ff16155b801561337e5750600e60159054906101000a900460ff165b156133e85760006133b060646133a2601b60000154856137c190919063ffffffff16565b612efb90919063ffffffff16565b905060006133c78284612fa190919063ffffffff16565b905060008111156133dc576133db81613a07565b5b6133e582612feb565b50505b50565b6000806000600954905060006008549050613413600854600954612efb90919063ffffffff16565b82101561342b57600954600854935093505050613434565b81819350935050505b9091565b6000808311829061347f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134769190613fcb565b60405180910390fd5b506000838561348e9190615131565b9050809150509392505050565b6000806000806134aa85613add565b905060006134b786613b5e565b905060006134e0826134d2858a612fa190919063ffffffff16565b612fa190919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061350e85896137c190919063ffffffff16565b9050600061352586896137c190919063ffffffff16565b9050600061353c87896137c190919063ffffffff16565b90506000613565826135578587612fa190919063ffffffff16565b612fa190919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561359b5761359a6143da565b5b6040519080825280602002602001820160405280156135c95781602001602082028036833780820191505090505b50905030816000815181106135e1576135e0614b04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ac9190615177565b816001815181106136c0576136bf614b04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061372730600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612472565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161378b95949392919061529d565b600060405180830381600087803b1580156137a557600080fd5b505af11580156137b9573d6000803e3d6000fd5b505050505050565b6000808314156137d45760009050613836565b600082846137e291906147bb565b90508284826137f19190615131565b14613831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382890615369565b60405180910390fd5b809150505b92915050565b60008060008060008061384e87612f45565b9550955095509550955095506138ac86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061398d81613c03565b6139978483613cc0565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139f49190613f17565b60405180910390a3505050505050505050565b6001600e60146101000a81548160ff0219169083151502179055506000613a38600283612efb90919063ffffffff16565b90506000613a4f8284612fa190919063ffffffff16565b90506000479050613a5f8361357e565b6000613a748247612fa190919063ffffffff16565b9050613a808382613cfa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613ab393929190615389565b60405180910390a1505050506000600e60146101000a81548160ff02191690831515021790555050565b60008060009050601560149054906101000a900460ff1615613b3057601660000154905060158054906101000a900460ff1615613b2f57613b2c6016600201548261263d90919063ffffffff16565b90505b5b613b566064613b4883866137c190919063ffffffff16565b612efb90919063ffffffff16565b915050919050565b60008060009050601560149054906101000a900460ff1615613bd557601660010154905060158054906101000a900460ff1615613bd457613bad6016600301548261263d90919063ffffffff16565b90506011548310613bd357613bd06016600401548261263d90919063ffffffff16565b90505b5b5b613bfb6064613bed83866137c190919063ffffffff16565b612efb90919063ffffffff16565b915050919050565b6000613c0d612ed0565b90506000613c2482846137c190919063ffffffff16565b9050613c7881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613cd582600954612fa190919063ffffffff16565b600981905550613cf081600a5461263d90919063ffffffff16565b600a819055505050565b613d2730600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612472565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613d73611968565b426040518863ffffffff1660e01b8152600401613d95969594939291906153c0565b60606040518083038185885af1158015613db3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613dd89190615436565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613e0681613df3565b8114613e1157600080fd5b50565b600081359050613e2381613dfd565b92915050565b600060208284031215613e3f57613e3e613de9565b5b6000613e4d84828501613e14565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7b57613e7a613e56565b5b8235905067ffffffffffffffff811115613e9857613e97613e5b565b5b602083019150836020820283011115613eb457613eb3613e60565b5b9250929050565b60008060208385031215613ed257613ed1613de9565b5b600083013567ffffffffffffffff811115613ef057613eef613dee565b5b613efc85828601613e65565b92509250509250929050565b613f1181613df3565b82525050565b6000602082019050613f2c6000830184613f08565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f6c578082015181840152602081019050613f51565b83811115613f7b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f9d82613f32565b613fa78185613f3d565b9350613fb7818560208601613f4e565b613fc081613f81565b840191505092915050565b60006020820190508181036000830152613fe58184613f92565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061401882613fed565b9050919050565b6140288161400d565b811461403357600080fd5b50565b6000813590506140458161401f565b92915050565b6000806040838503121561406257614061613de9565b5b600061407085828601614036565b925050602061408185828601613e14565b9150509250929050565b60008115159050919050565b6140a08161408b565b82525050565b60006020820190506140bb6000830184614097565b92915050565b600060a0820190506140d66000830188613f08565b6140e36020830187613f08565b6140f06040830186613f08565b6140fd6060830185613f08565b61410a6080830184613f08565b9695505050505050565b6000806000806080858703121561412e5761412d613de9565b5b600061413c87828801613e14565b945050602061414d87828801613e14565b935050604061415e87828801613e14565b925050606061416f87828801613e14565b91505092959194509250565b6000819050919050565b60006141a061419b61419684613fed565b61417b565b613fed565b9050919050565b60006141b282614185565b9050919050565b60006141c4826141a7565b9050919050565b6141d4816141b9565b82525050565b60006020820190506141ef60008301846141cb565b92915050565b60008060006060848603121561420e5761420d613de9565b5b600061421c86828701614036565b935050602061422d86828701614036565b925050604061423e86828701613e14565b9150509250925092565b600060ff82169050919050565b61425e81614248565b82525050565b60006020820190506142796000830184614255565b92915050565b6142888161408b565b811461429357600080fd5b50565b6000813590506142a58161427f565b92915050565b600080604083850312156142c2576142c1613de9565b5b60006142d085828601613e14565b92505060206142e185828601614296565b9150509250929050565b6142f48161400d565b82525050565b600060208201905061430f60008301846142eb565b92915050565b60006020828403121561432b5761432a613de9565b5b600061433984828501614036565b91505092915050565b60006080820190506143576000830187613f08565b6143646020830186613f08565b6143716040830185613f08565b61437e6060830184613f08565b95945050505050565b6000806000606084860312156143a05761439f613de9565b5b60006143ae86828701614036565b93505060206143bf86828701614036565b92505060406143d086828701614036565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61441282613f81565b810181811067ffffffffffffffff82111715614431576144306143da565b5b80604052505050565b6000614444613ddf565b90506144508282614409565b919050565b600067ffffffffffffffff8211156144705761446f6143da565b5b602082029050602081019050919050565b600061449461448f84614455565b61443a565b905080838252602082019050602084028301858111156144b7576144b6613e60565b5b835b818110156144e057806144cc8882614036565b8452602084019350506020810190506144b9565b5050509392505050565b600082601f8301126144ff576144fe613e56565b5b813561450f848260208601614481565b91505092915050565b60006020828403121561452e5761452d613de9565b5b600082013567ffffffffffffffff81111561454c5761454b613dee565b5b614558848285016144ea565b91505092915050565b60006020828403121561457757614576613de9565b5b600061458584828501614296565b91505092915050565b600080600080600060a086880312156145aa576145a9613de9565b5b60006145b888828901613e14565b95505060206145c988828901613e14565b94505060406145da88828901613e14565b93505060606145eb88828901613e14565b92505060806145fc88828901613e14565b9150509295509295909350565b60008083601f84011261461f5761461e613e56565b5b8235905067ffffffffffffffff81111561463c5761463b613e5b565b5b60208301915083602082028301111561465857614657613e60565b5b9250929050565b6000806000806040858703121561467957614678613de9565b5b600085013567ffffffffffffffff81111561469757614696613dee565b5b6146a387828801613e65565b9450945050602085013567ffffffffffffffff8111156146c6576146c5613dee565b5b6146d287828801614609565b925092505092959194509250565b600080604083850312156146f7576146f6613de9565b5b600061470585828601614036565b925050602061471685828601614036565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614756602083613f3d565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c682613df3565b91506147d183613df3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561480a5761480961478c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485c57607f821691505b602082108114156148705761486f614815565b5b50919050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b60006148ac601d83613f3d565b91506148b782614876565b602082019050919050565b600060208201905081810360008301526148db8161489f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061493e602a83613f3d565b9150614949826148e2565b604082019050919050565b6000602082019050818103600083015261496d81614931565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006149aa601f83613f3d565b91506149b582614974565b602082019050919050565b600060208201905081810360008301526149d98161499d565b9050919050565b7f41697264726f702063616e206f6e6c7920626520646f6e652062792053616a6160008201527f207465616d000000000000000000000000000000000000000000000000000000602082015250565b6000614a3c602583613f3d565b9150614a47826149e0565b604082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000614ace602a83613f3d565b9150614ad982614a72565b604082019050919050565b60006020820190508181036000830152614afd81614ac1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b3e82613df3565b9150614b4983613df3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b7e57614b7d61478c565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614be5602683613f3d565b9150614bf082614b89565b604082019050919050565b60006020820190508181036000830152614c1481614bd8565b9050919050565b6000614c2682613df3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c5957614c5861478c565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc0602483613f3d565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d52602283613f3d565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614dbe601b83613f3d565b9150614dc982614d88565b602082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e50602583613f3d565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ee2602383613f3d565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614f74602983613f3d565b9150614f7f82614f18565b604082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615006602f83613f3d565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615098602883613f3d565b91506150a38261503c565b604082019050919050565b600060208201905081810360008301526150c78161508b565b9050919050565b60006150d982613df3565b91506150e483613df3565b9250828210156150f7576150f661478c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061513c82613df3565b915061514783613df3565b92508261515757615156615102565b5b828204905092915050565b6000815190506151718161401f565b92915050565b60006020828403121561518d5761518c613de9565b5b600061519b84828501615162565b91505092915050565b6000819050919050565b60006151c96151c46151bf846151a4565b61417b565b613df3565b9050919050565b6151d9816151ae565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152148161400d565b82525050565b6000615226838361520b565b60208301905092915050565b6000602082019050919050565b600061524a826151df565b61525481856151ea565b935061525f836151fb565b8060005b83811015615290578151615277888261521a565b975061528283615232565b925050600181019050615263565b5085935050505092915050565b600060a0820190506152b26000830188613f08565b6152bf60208301876151d0565b81810360408301526152d1818661523f565b90506152e060608301856142eb565b6152ed6080830184613f08565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615353602183613f3d565b915061535e826152f7565b604082019050919050565b6000602082019050818103600083015261538281615346565b9050919050565b600060608201905061539e6000830186613f08565b6153ab6020830185613f08565b6153b86040830184613f08565b949350505050565b600060c0820190506153d560008301896142eb565b6153e26020830188613f08565b6153ef60408301876151d0565b6153fc60608301866151d0565b61540960808301856142eb565b61541660a0830184613f08565b979650505050505050565b60008151905061543081613dfd565b92915050565b60008060006060848603121561544f5761544e613de9565b5b600061545d86828701615421565b935050602061546e86828701615421565b925050604061547f86828701615421565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aaf4b8438aa3acfffff5b0d8c50e8edd6893022a90b71f9a49d3e8c0effbe39e64736f6c634300080c0033

Deployed Bytecode Sourcemap

17513:20088:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25636:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24749:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24875:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18880:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20520:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21372:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19854:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;26357:570;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22365:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18657:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20797:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21541:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23719:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20706:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28293:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21862:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22978:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23275:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27489:167;;;;;;;;;;;;;:::i;:::-;;18770:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18833:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31641:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19883:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;20900:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16195:148;;;;;;;;;;;;;:::i;:::-;;24622:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27119:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19090:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26935:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19331:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27664:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15559:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19255:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20611:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27800:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22088:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21046:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25004:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19172:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28416:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18942:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25792:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22460:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21221:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27372:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16498:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26226:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25636:148;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25771:5:::1;25748:20;:28;;;;:::i;:::-;25724:21;:52;;;;25636:148:::0;:::o;24749:118::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24829:30:::1;24842:9;;24853:5;24829:12;:30::i;:::-;24749:118:::0;;:::o;24875:121::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24954:34:::1;24972:9;;24983:4;24954:17;:34::i;:::-;24875:121:::0;;:::o;18880:55::-;;;;:::o;20520:83::-;20557:13;20590:5;20583:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20520:83;:::o;21372:161::-;21447:4;21464:39;21473:12;:10;:12::i;:::-;21487:7;21496:6;21464:8;:39::i;:::-;21521:4;21514:11;;21372:161;;;;:::o;19854:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26357:570::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26622:3:::1;26545:73;26601:16;26545:51;26572:23;26545:22;:26;;:51;;;;:::i;:::-;:55;;:73;;;;:::i;:::-;:80;26537:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;26708:22;26670:12;:35;;:60;;;;26780:23;26741:12;:36;;:62;;;;26846:16;26814:12;:29;;:48;;;;26904:15;26873:12;:28;;:46;;;;26357:570:::0;;;;:::o;22365:87::-;22407:7;22434:10;;22427:17;;22365:87;:::o;18657:106::-;;;;;;;;;;;;;:::o;20797:95::-;20850:7;20877;;20870:14;;20797:95;:::o;21541:313::-;21639:4;21656:36;21666:6;21674:9;21685:6;21656:9;:36::i;:::-;21703:121;21712:6;21720:12;:10;:12::i;:::-;21734:89;21772:6;21734:89;;;;;;;;;;;;;;;;;:11;:19;21746:6;21734:19;;;;;;;;;;;;;;;:33;21754:12;:10;:12::i;:::-;21734:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21703:8;:121::i;:::-;21842:4;21835:11;;21541:313;;;;;:::o;23719:253::-;23785:7;23824;;23813;:18;;23805:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23889:19;23912:10;:8;:10::i;:::-;23889:33;;23940:24;23952:11;23940:7;:11;;:24;;;;:::i;:::-;23933:31;;;23719:253;;;:::o;20706:83::-;20747:5;20772:9;;;;;;;;;;;20765:16;;20706:83;:::o;28293:115::-;28349:7;28376:24;28394:4;28376:9;:24::i;:::-;28369:31;;28293:115;:::o;21862:218::-;21950:4;21967:83;21976:12;:10;:12::i;:::-;21990:7;21999:50;22038:10;21999:11;:25;22011:12;:10;:12::i;:::-;21999:25;;;;;;;;;;;;;;;:34;22025:7;21999:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21967:8;:83::i;:::-;22068:4;22061:11;;21862:218;;;;:::o;22978:289::-;23030:14;23047:12;:10;:12::i;:::-;23030:29;;23071:15;23095:19;23106:7;23095:10;:19::i;:::-;23070:44;;;;;;;23143:28;23163:7;23143;:15;23151:6;23143:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23125:7;:15;23133:6;23125:15;;;;;;;;;;;;;;;:46;;;;23192:20;23204:7;23192;;:11;;:20;;;;:::i;:::-;23182:7;:30;;;;23236:23;23251:7;23236:10;;:14;;:23;;;;:::i;:::-;23223:10;:36;;;;23019:248;;22978:289;:::o;23275:436::-;23365:7;23404;;23393;:18;;23385:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23463:17;23458:246;;23498:15;23522:19;23533:7;23522:10;:19::i;:::-;23497:44;;;;;;;23563:7;23556:14;;;;;23458:246;23605:23;23636:19;23647:7;23636:10;:19::i;:::-;23603:52;;;;;;;23677:15;23670:22;;;23275:436;;;;;:::o;27489:167::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27544:28:::1;27575:24;27593:4;27575:9;:24::i;:::-;27544:55;;27610:38;27627:20;27610:16;:38::i;:::-;27533:123;27489:167::o:0;18770:28::-;;;;;;;;;;;;;:::o;18833:40::-;;;;;;;;;;;;;:::o;31641:123::-;31705:4;31729:18;:27;31748:7;31729:27;;;;;;;;;;;;;;;;;;;;;;;;;31722:34;;31641:123;;;:::o;19883:32::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20900:138::-;20966:7;20993:37;21013:7;:16;21021:7;21013:16;;;;;;;;;;;;;;;;20993:19;:37::i;:::-;20986:44;;20900:138;;;:::o;16195:148::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16302:1:::1;16265:40;;16286:6;::::0;::::1;;;;;;;;16265:40;;;;;;;;;;;;16333:1;16316:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16195:148::o:0;24622:119::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24704:29:::1;24717:9;;24728:4;24704:12;:29::i;:::-;24622:119:::0;;:::o;27119:245::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27260:16:::1;27242:15;;:34;;;;;;;;;;;;;;;;;;27306:17;27287:16;;:36;;;;;;;;;;;;;;;;;;27346:10;27334:9;;:22;;;;;;;;;;;;;;;;;;27119:245:::0;;;:::o;19090:75::-;;;;;;;;;;;;;:::o;26935:176::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27098:5:::1;27065:30;:38;;;;:::i;:::-;27033:29;:70;;;;26935:176:::0;:::o;19331:70::-;;;;;;;;;;;;;:::o;27664:128::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27748:36:::1;27768:9;27779:4;27748:19;:36::i;:::-;27664:128:::0;:::o;15559:79::-;15597:7;15624:6;;;;;;;;;;;15617:13;;15559:79;:::o;19255:69::-;;;;;;;;;;;;;:::o;20611:87::-;20650:13;20683:7;20676:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20611:87;:::o;27800:131::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27886:37:::1;27906:9;27917:5;27886:19;:37::i;:::-;27800:131:::0;:::o;22088:269::-;22181:4;22198:129;22207:12;:10;:12::i;:::-;22221:7;22230:96;22269:15;22230:96;;;;;;;;;;;;;;;;;:11;:25;22242:12;:10;:12::i;:::-;22230:25;;;;;;;;;;;;;;;:34;22256:7;22230:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;22198:8;:129::i;:::-;22345:4;22338:11;;22088:269;;;;:::o;21046:167::-;21124:4;21141:42;21151:12;:10;:12::i;:::-;21165:9;21176:6;21141:9;:42::i;:::-;21201:4;21194:11;;21046:167;;;;:::o;25004:125::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25086:35:::1;25104:9;;25115:5;25086:17;:35::i;:::-;25004:125:::0;;:::o;19172:76::-;;;;;;;;;;;;;:::o;28416:171::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28517:8:::1;28493:21;;:32;;;;;;;;;;;;;;;;;;28541:38;28570:8;28541:38;;;;;;:::i;:::-;;;;;;;;28416:171:::0;:::o;18942:70::-;;;;:::o;25792:426::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25989:13:::1;25965:7;:21;;:37;;;;26036:12;26013:7;:20;;:35;;;;26086:16;26059:7;:24;;:43;;;;26141:17;26113:7;:25;;:45;;;;26195:15;26169:7;:23;;:41;;;;25792:426:::0;;;;;:::o;22460:510::-;22557:16;22596:18;:32;22615:12;:10;:12::i;:::-;22596:32;;;;;;;;;;;;;;;;;;;;;;;;;22588:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;22710:7;;:14;;22689:10;;:17;;:35;22681:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22782:181;22799:10;;:17;;22788:8;:28;22782:181;;;22832:91;22847:12;:10;:12::i;:::-;22861:10;;22872:8;22861:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22903:5;22883:7;;22891:8;22883:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;22910:5;22917;22832:14;:91::i;:::-;22950:1;22938:13;;;;;:::i;:::-;;;22782:181;;;22546:424;22460:510;;;;:::o;21221:143::-;21302:7;21329:11;:18;21341:5;21329:18;;;;;;;;;;;;;;;:27;21348:7;21329:27;;;;;;;;;;;;;;;;21322:34;;21221:143;;;;:::o;27372:109::-;27433:4;27457:10;:16;27468:4;27457:16;;;;;;;;;;;;;;;;;;;;;;;;;27450:23;;27372:109;;;:::o;16498:244::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16607:1:::1;16587:22;;:8;:22;;;;16579:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16697:8;16668:38;;16689:6;::::0;::::1;;;;;;;;16668:38;;;;;;;;;;;;16726:8;16717:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16498:244:::0;:::o;26226:123::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26336:5:::1;26321:12;:20;;;;:::i;:::-;26305:13;:36;;;;26226:123:::0;:::o;8051:98::-;8104:7;8131:10;8124:17;;8051:98;:::o;25388:236::-;25475:9;25470:147;25494:9;;:16;;25490:1;:20;25470:147;;;25532:12;25547:9;;25557:1;25547:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25532:27;;25601:4;25574:18;:24;25593:4;25574:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;25517:100;25512:3;;;;;:::i;:::-;;;;25470:147;;;;25388:236;;;:::o;25137:239::-;25229:9;25224:145;25248:9;;:16;;25244:1;:20;25224:145;;;25286:12;25301:9;;25311:1;25301:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25286:27;;25353:4;25328:16;:22;25345:4;25328:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25271:98;25266:3;;;;;:::i;:::-;;;;25224:145;;;;25137:239;;;:::o;31772:337::-;31882:1;31865:19;;:5;:19;;;;31857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:1;31944:21;;:7;:21;;;;31936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32047:6;32017:11;:18;32029:5;32017:18;;;;;;;;;;;;;;;:27;32036:7;32017:27;;;;;;;;;;;;;;;:36;;;;32085:7;32069:32;;32078:5;32069:32;;;32094:6;32069:32;;;;;;:::i;:::-;;;;;;;;31772:337;;;:::o;3479:181::-;3537:7;3557:9;3573:1;3569;:5;;;;:::i;:::-;3557:17;;3598:1;3593;:6;;3585:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3651:1;3644:8;;;3479:181;;;;:::o;32117:1405::-;32221:1;32205:18;;:4;:18;;;;32197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32298:1;32284:16;;:2;:16;;;;32276:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32368:1;32359:6;:10;32351:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32426:11;32570:7;:5;:7::i;:::-;32562:15;;:4;:15;;;;:32;;;;;32587:7;:5;:7::i;:::-;32581:13;;:2;:13;;;;32562:32;:52;;;;;32604:10;;;;;;;;;;;32598:16;;:2;:16;;;;32562:52;32559:200;;;32652:10;:16;32663:4;32652:16;;;;;;;;;;;;;;;;;;;;;;;;;32651:17;:36;;;;;32673:10;:14;32684:2;32673:14;;;;;;;;;;;;;;;;;;;;;;;;;32672:15;32651:36;32643:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;32559:200;32780:13;;;;;;;;;;;32772:21;;:4;:21;;;:47;;;;32797:16;:22;32814:4;32797:22;;;;;;;;;;;;;;;;;;;;;;;;;32772:47;32769:155;;;32854:13;;32844:6;:23;;32836:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32769:155;32934:13;32951:18;:24;32970:4;32951:24;;;;;;;;;;;;;;;;;;;;;;;;;32950:25;:52;;;;;32980:18;:22;32999:2;32980:22;;;;;;;;;;;;;;;;;;;;;;;;;32979:23;32950:52;:71;;;;;33014:7;:5;:7::i;:::-;33006:15;;:4;:15;;;;32950:71;:88;;;;;33031:7;:5;:7::i;:::-;33025:13;;:2;:13;;;;32950:88;32934:104;;33069:13;;;;;;;;;;;33061:21;;:4;:21;;;;:44;;;;;33092:13;;;;;;;;;;;33086:19;;:2;:19;;;33061:44;:97;;;;33111:16;:22;33128:4;33111:22;;;;;;;;;;;;;;;;;;;;;;;;;33110:23;:47;;;;;33137:16;:20;33154:2;33137:20;;;;;;;;;;;;;;;;;;;;;;;;;33110:47;33061:97;33058:242;;;33254:4;33245:13;;33273:15;:13;:15::i;:::-;33058:242;33321:13;;;;;;;;;;;33313:21;;:4;:21;;;;:44;;;;;33344:13;;;;;;;;;;;33338:19;;:2;:19;;;;33313:44;:71;;;;;33362:16;:22;33379:4;33362:22;;;;;;;;;;;;;;;;;;;;;;;;;33361:23;33313:71;:96;;;;;33389:16;:20;33406:2;33389:20;;;;;;;;;;;;;;;;;;;;;;;;;33388:21;33313:96;33310:144;;;33437:5;33426:16;;33310:144;33464:50;33479:4;33485:2;33489:6;33497:8;33507:6;33464:14;:50::i;:::-;32186:1336;;32117:1405;;;:::o;4382:192::-;4468:7;4501:1;4496;:6;;4504:12;4488:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4528:9;4544:1;4540;:5;;;;:::i;:::-;4528:17;;4565:1;4558:8;;;4382:192;;;;;:::o;29989:163::-;30030:7;30051:15;30068;30087:19;:17;:19::i;:::-;30050:56;;;;30124:20;30136:7;30124;:11;;:20;;;;:::i;:::-;30117:27;;;;29989:163;:::o;5780:132::-;5838:7;5865:39;5869:1;5872;5865:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5858:46;;5780:132;;;;:::o;28787:419::-;28846:7;28855;28864;28873;28882;28891;28912:23;28937:12;28951:18;28973:20;28985:7;28973:11;:20::i;:::-;28911:82;;;;;;29005:15;29022:23;29047:12;29063:50;29075:7;29084:4;29090:10;29102;:8;:10::i;:::-;29063:11;:50::i;:::-;29004:109;;;;;;29132:7;29141:15;29158:4;29164:15;29181:4;29187:10;29124:74;;;;;;;;;;;;;;;;;;28787:419;;;;;;;:::o;3943:136::-;4001:7;4028:43;4032:1;4035;4028:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4021:50;;3943:136;;;;:::o;35527:652::-;17872:4;17853:16;;:23;;;;;;;;;;;;;;;;;;35614:38:::1;35631:20;35614:16;:38::i;:::-;35663:22;35688:21;35663:46;;35720:22;35745:64;35805:3;35745:55;35764:12;:35;;;35745:14;:18;;:55;;;;:::i;:::-;:59;;:64;;;;:::i;:::-;35720:89;;35820:23;35846:65;35907:3;35846:56;35865:12;:36;;;35846:14;:18;;:56;;;;:::i;:::-;:60;;:65;;;;:::i;:::-;35820:91;;35922:16;35941:58;35995:3;35941:49;35960:12;:29;;;35941:14;:18;;:49;;;;:::i;:::-;:53;;:58;;;;:::i;:::-;35922:77;;36018:15;;;;;;;;;;;36010:33;;:49;36044:14;36010:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36078:16;;;;;;;;;;;36070:34;;:51;36105:15;36070:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36140:9;;;;;;;;;;;36132:27;;:37;36160:8;36132:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35603:576;;;;17918:5:::0;17899:16;;:24;;;;;;;;;;;;;;;;;;35527:652;:::o;27939:346::-;28034:9;28029:249;28053:9;:16;28049:1;:20;28029:249;;;28091:12;28106:9;28116:1;28106:12;;;;;;;;:::i;:::-;;;;;;;;28091:27;;28136:7;28133:134;;;28183:4;28164:10;:16;28175:4;28164:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28133:134;;;28235:10;:16;28246:4;28235:16;;;;;;;;;;;;;;;;28228:23;;;;;;;;;;;28133:134;28076:202;28071:3;;;;;:::i;:::-;;;;28029:249;;;;27939:346;;:::o;36853:235::-;36988:8;36975:10;;:21;;;;;;;;;;;;;;;;;;37019:6;37007:9;;:18;;;;;;;;;;;;;;;;;;37036:44;37054:6;37062:9;37073:6;37036:17;:44::i;:::-;36853:235;;;;;:::o;33530:998::-;33574:28;33605:24;33623:4;33605:9;:24::i;:::-;33574:55;;33668:29;;33644:20;:53;;:74;;;;;33702:16;;;;;;;;;;;33701:17;33644:74;:99;;;;;33722:21;;;;;;;;;;;33644:99;33640:881;;;33929:28;33960:63;34019:3;33960:54;33985:12;:28;;;33960:20;:24;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;33929:94;;34038:27;34068:46;34093:20;34068;:24;;:46;;;;:::i;:::-;34038:76;;34287:1;34265:19;:23;34262:131;;;34342:35;34357:19;34342:14;:35::i;:::-;34262:131;34471:38;34488:20;34471:16;:38::i;:::-;33745:776;;33640:881;33563:965;33530:998::o;30160:256::-;30210:7;30219;30239:15;30257:7;;30239:25;;30275:15;30293:7;;30275:25;;30325:20;30337:7;;30325;;:11;;:20;;;;:::i;:::-;30315:7;:30;30311:61;;;30355:7;;30364;;30347:25;;;;;;;;30311:61;30391:7;30400;30383:25;;;;;;30160:256;;;:::o;6408:278::-;6494:7;6526:1;6522;:5;6529:12;6514:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6553:9;6569:1;6565;:5;;;;:::i;:::-;6553:17;;6677:1;6670:8;;;6408:278;;;;;:::o;29214:330::-;29274:7;29283;29292;29312:12;29327:24;29343:7;29327:15;:24::i;:::-;29312:39;;29362:18;29383:30;29405:7;29383:21;:30::i;:::-;29362:51;;29424:23;29450:33;29472:10;29450:17;29462:4;29450:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29424:59;;29502:15;29519:4;29525:10;29494:42;;;;;;;;;29214:330;;;;;:::o;29552:429::-;29667:7;29676;29685;29705:15;29723:24;29735:11;29723:7;:11;;:24;;;;:::i;:::-;29705:42;;29758:12;29773:21;29782:11;29773:4;:8;;:21;;;;:::i;:::-;29758:36;;29805:18;29826:27;29841:11;29826:10;:14;;:27;;;;:::i;:::-;29805:48;;29864:23;29890:33;29912:10;29890:17;29902:4;29890:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29864:59;;29942:7;29951:15;29968:4;29934:39;;;;;;;;;;29552:429;;;;;;;;:::o;36187:585::-;36313:21;36351:1;36337:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36313:40;;36382:4;36364;36369:1;36364:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36408:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36398:4;36403:1;36398:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36441:62;36458:4;36473:15;;;;;;;;;;;36491:11;36441:8;:62::i;:::-;36540:15;;;;;;;;;;;:66;;;36621:11;36647:1;36691:4;36718;36738:15;36540:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36242:530;36187:585;:::o;4833:471::-;4891:7;5141:1;5136;:6;5132:47;;;5166:1;5159:8;;;;5132:47;5191:9;5207:1;5203;:5;;;;:::i;:::-;5191:17;;5236:1;5231;5227;:5;;;;:::i;:::-;:10;5219:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5295:1;5288:8;;;4833:471;;;;;:::o;37096:502::-;37195:15;37212:23;37237:12;37251:23;37276:12;37290:18;37312:19;37323:7;37312:10;:19::i;:::-;37194:137;;;;;;;;;;;;37360:28;37380:7;37360;:15;37368:6;37360:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37342:7;:15;37350:6;37342:15;;;;;;;;;;;;;;;:46;;;;37420:39;37443:15;37420:7;:18;37428:9;37420:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37399:7;:18;37407:9;37399:18;;;;;;;;;;;;;;;:60;;;;37470:26;37485:10;37470:14;:26::i;:::-;37507:23;37519:4;37525;37507:11;:23::i;:::-;37563:9;37546:44;;37555:6;37546:44;;;37574:15;37546:44;;;;;;:::i;:::-;;;;;;;;37183:415;;;;;;37096:502;;;:::o;34536:464::-;17872:4;17853:16;;:23;;;;;;;;;;;;;;;;;;34621:12:::1;34636:27;34661:1;34636:20;:24;;:27;;;;:::i;:::-;34621:42;;34674:17;34694:30;34719:4;34694:20;:24;;:30;;;;:::i;:::-;34674:50;;34735:22;34760:21;34735:46;;34792:22;34809:4;34792:16;:22::i;:::-;34825:18;34846:41;34872:14;34846:21;:25;;:41;;;;:::i;:::-;34825:62;;34898:35;34911:9;34922:10;34898:12;:35::i;:::-;34949:43;34964:4;34970:10;34982:9;34949:43;;;;;;;;:::i;:::-;;;;;;;;34610:390;;;;17918:5:::0;17899:16;;:24;;;;;;;;;;;;;;;;;;34536:464;:::o;30669:384::-;30733:7;30753:21;30777:1;30753:25;;30792:10;;;;;;;;;;;30789:202;;;30835:7;:21;;;30819:37;;30874:9;;;;;;;;;;30871:109;;;30920:44;30938:7;:25;;;30920:13;:17;;:44;;;;:::i;:::-;30904:60;;30871:109;30789:202;31008:37;31039:5;31008:26;31020:13;31008:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;31001:44;;;30669:384;;;:::o;31061:572::-;31131:7;31151:25;31179:1;31151:29;;31194:10;;;;;;;;;;;31191:376;;;31241:7;:20;;;31221:40;;31279:9;;;;;;;;;;31276:280;;;31329:47;31351:7;:24;;;31329:17;:21;;:47;;;;:::i;:::-;31309:67;;31409:21;;31398:7;:32;31395:146;;31475:46;31497:7;:23;;;31475:17;:21;;:46;;;;:::i;:::-;31455:66;;31395:146;31276:280;31191:376;31584:41;31619:5;31584:30;31596:17;31584:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;31577:48;;;31061:572;;;:::o;30424:237::-;30487:19;30510:10;:8;:10::i;:::-;30487:33;;30531:18;30552:27;30567:11;30552:10;:14;;:27;;;;:::i;:::-;30531:48;;30615:38;30642:10;30615:7;:22;30631:4;30615:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30590:7;:22;30606:4;30590:22;;;;;;;;;;;;;;;:63;;;;30476:185;;30424:237;:::o;28632:147::-;28710:17;28722:4;28710:7;;:11;;:17;;;;:::i;:::-;28700:7;:27;;;;28751:20;28766:4;28751:10;;:14;;:20;;;;:::i;:::-;28738:10;:33;;;;28632:147;;:::o;35008:513::-;35156:62;35173:4;35188:15;;;;;;;;;;;35206:11;35156:8;:62::i;:::-;35261:15;;;;;;;;;;;:31;;;35300:9;35333:4;35353:11;35379:1;35422;35465:7;:5;:7::i;:::-;35487:15;35261:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35008:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:117::-;1134:1;1131;1124:12;1148:117;1257:1;1254;1247:12;1271:117;1380:1;1377;1370:12;1411:568;1484:8;1494:6;1544:3;1537:4;1529:6;1525:17;1521:27;1511:122;;1552:79;;:::i;:::-;1511:122;1665:6;1652:20;1642:30;;1695:18;1687:6;1684:30;1681:117;;;1717:79;;:::i;:::-;1681:117;1831:4;1823:6;1819:17;1807:29;;1885:3;1877:4;1869:6;1865:17;1855:8;1851:32;1848:41;1845:128;;;1892:79;;:::i;:::-;1845:128;1411:568;;;;;:::o;1985:559::-;2071:6;2079;2128:2;2116:9;2107:7;2103:23;2099:32;2096:119;;;2134:79;;:::i;:::-;2096:119;2282:1;2271:9;2267:17;2254:31;2312:18;2304:6;2301:30;2298:117;;;2334:79;;:::i;:::-;2298:117;2447:80;2519:7;2510:6;2499:9;2495:22;2447:80;:::i;:::-;2429:98;;;;2225:312;1985:559;;;;;:::o;2550:118::-;2637:24;2655:5;2637:24;:::i;:::-;2632:3;2625:37;2550:118;;:::o;2674:222::-;2767:4;2805:2;2794:9;2790:18;2782:26;;2818:71;2886:1;2875:9;2871:17;2862:6;2818:71;:::i;:::-;2674:222;;;;:::o;2902:99::-;2954:6;2988:5;2982:12;2972:22;;2902:99;;;:::o;3007:169::-;3091:11;3125:6;3120:3;3113:19;3165:4;3160:3;3156:14;3141:29;;3007:169;;;;:::o;3182:307::-;3250:1;3260:113;3274:6;3271:1;3268:13;3260:113;;;3359:1;3354:3;3350:11;3344:18;3340:1;3335:3;3331:11;3324:39;3296:2;3293:1;3289:10;3284:15;;3260:113;;;3391:6;3388:1;3385:13;3382:101;;;3471:1;3462:6;3457:3;3453:16;3446:27;3382:101;3231:258;3182:307;;;:::o;3495:102::-;3536:6;3587:2;3583:7;3578:2;3571:5;3567:14;3563:28;3553:38;;3495:102;;;:::o;3603:364::-;3691:3;3719:39;3752:5;3719:39;:::i;:::-;3774:71;3838:6;3833:3;3774:71;:::i;:::-;3767:78;;3854:52;3899:6;3894:3;3887:4;3880:5;3876:16;3854:52;:::i;:::-;3931:29;3953:6;3931:29;:::i;:::-;3926:3;3922:39;3915:46;;3695:272;3603:364;;;;:::o;3973:313::-;4086:4;4124:2;4113:9;4109:18;4101:26;;4173:9;4167:4;4163:20;4159:1;4148:9;4144:17;4137:47;4201:78;4274:4;4265:6;4201:78;:::i;:::-;4193:86;;3973:313;;;;:::o;4292:126::-;4329:7;4369:42;4362:5;4358:54;4347:65;;4292:126;;;:::o;4424:96::-;4461:7;4490:24;4508:5;4490:24;:::i;:::-;4479:35;;4424:96;;;:::o;4526:122::-;4599:24;4617:5;4599:24;:::i;:::-;4592:5;4589:35;4579:63;;4638:1;4635;4628:12;4579:63;4526:122;:::o;4654:139::-;4700:5;4738:6;4725:20;4716:29;;4754:33;4781:5;4754:33;:::i;:::-;4654:139;;;;:::o;4799:474::-;4867:6;4875;4924:2;4912:9;4903:7;4899:23;4895:32;4892:119;;;4930:79;;:::i;:::-;4892:119;5050:1;5075:53;5120:7;5111:6;5100:9;5096:22;5075:53;:::i;:::-;5065:63;;5021:117;5177:2;5203:53;5248:7;5239:6;5228:9;5224:22;5203:53;:::i;:::-;5193:63;;5148:118;4799:474;;;;;:::o;5279:90::-;5313:7;5356:5;5349:13;5342:21;5331:32;;5279:90;;;:::o;5375:109::-;5456:21;5471:5;5456:21;:::i;:::-;5451:3;5444:34;5375:109;;:::o;5490:210::-;5577:4;5615:2;5604:9;5600:18;5592:26;;5628:65;5690:1;5679:9;5675:17;5666:6;5628:65;:::i;:::-;5490:210;;;;:::o;5706:664::-;5911:4;5949:3;5938:9;5934:19;5926:27;;5963:71;6031:1;6020:9;6016:17;6007:6;5963:71;:::i;:::-;6044:72;6112:2;6101:9;6097:18;6088:6;6044:72;:::i;:::-;6126;6194:2;6183:9;6179:18;6170:6;6126:72;:::i;:::-;6208;6276:2;6265:9;6261:18;6252:6;6208:72;:::i;:::-;6290:73;6358:3;6347:9;6343:19;6334:6;6290:73;:::i;:::-;5706:664;;;;;;;;:::o;6376:765::-;6462:6;6470;6478;6486;6535:3;6523:9;6514:7;6510:23;6506:33;6503:120;;;6542:79;;:::i;:::-;6503:120;6662:1;6687:53;6732:7;6723:6;6712:9;6708:22;6687:53;:::i;:::-;6677:63;;6633:117;6789:2;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6760:118;6917:2;6943:53;6988:7;6979:6;6968:9;6964:22;6943:53;:::i;:::-;6933:63;;6888:118;7045:2;7071:53;7116:7;7107:6;7096:9;7092:22;7071:53;:::i;:::-;7061:63;;7016:118;6376:765;;;;;;;:::o;7147:60::-;7175:3;7196:5;7189:12;;7147:60;;;:::o;7213:142::-;7263:9;7296:53;7314:34;7323:24;7341:5;7323:24;:::i;:::-;7314:34;:::i;:::-;7296:53;:::i;:::-;7283:66;;7213:142;;;:::o;7361:126::-;7411:9;7444:37;7475:5;7444:37;:::i;:::-;7431:50;;7361:126;;;:::o;7493:152::-;7569:9;7602:37;7633:5;7602:37;:::i;:::-;7589:50;;7493:152;;;:::o;7651:183::-;7764:63;7821:5;7764:63;:::i;:::-;7759:3;7752:76;7651:183;;:::o;7840:274::-;7959:4;7997:2;7986:9;7982:18;7974:26;;8010:97;8104:1;8093:9;8089:17;8080:6;8010:97;:::i;:::-;7840:274;;;;:::o;8120:619::-;8197:6;8205;8213;8262:2;8250:9;8241:7;8237:23;8233:32;8230:119;;;8268:79;;:::i;:::-;8230:119;8388:1;8413:53;8458:7;8449:6;8438:9;8434:22;8413:53;:::i;:::-;8403:63;;8359:117;8515:2;8541:53;8586:7;8577:6;8566:9;8562:22;8541:53;:::i;:::-;8531:63;;8486:118;8643:2;8669:53;8714:7;8705:6;8694:9;8690:22;8669:53;:::i;:::-;8659:63;;8614:118;8120:619;;;;;:::o;8745:86::-;8780:7;8820:4;8813:5;8809:16;8798:27;;8745:86;;;:::o;8837:112::-;8920:22;8936:5;8920:22;:::i;:::-;8915:3;8908:35;8837:112;;:::o;8955:214::-;9044:4;9082:2;9071:9;9067:18;9059:26;;9095:67;9159:1;9148:9;9144:17;9135:6;9095:67;:::i;:::-;8955:214;;;;:::o;9175:116::-;9245:21;9260:5;9245:21;:::i;:::-;9238:5;9235:32;9225:60;;9281:1;9278;9271:12;9225:60;9175:116;:::o;9297:133::-;9340:5;9378:6;9365:20;9356:29;;9394:30;9418:5;9394:30;:::i;:::-;9297:133;;;;:::o;9436:468::-;9501:6;9509;9558:2;9546:9;9537:7;9533:23;9529:32;9526:119;;;9564:79;;:::i;:::-;9526:119;9684:1;9709:53;9754:7;9745:6;9734:9;9730:22;9709:53;:::i;:::-;9699:63;;9655:117;9811:2;9837:50;9879:7;9870:6;9859:9;9855:22;9837:50;:::i;:::-;9827:60;;9782:115;9436:468;;;;;:::o;9910:118::-;9997:24;10015:5;9997:24;:::i;:::-;9992:3;9985:37;9910:118;;:::o;10034:222::-;10127:4;10165:2;10154:9;10150:18;10142:26;;10178:71;10246:1;10235:9;10231:17;10222:6;10178:71;:::i;:::-;10034:222;;;;:::o;10262:329::-;10321:6;10370:2;10358:9;10349:7;10345:23;10341:32;10338:119;;;10376:79;;:::i;:::-;10338:119;10496:1;10521:53;10566:7;10557:6;10546:9;10542:22;10521:53;:::i;:::-;10511:63;;10467:117;10262:329;;;;:::o;10597:553::-;10774:4;10812:3;10801:9;10797:19;10789:27;;10826:71;10894:1;10883:9;10879:17;10870:6;10826:71;:::i;:::-;10907:72;10975:2;10964:9;10960:18;10951:6;10907:72;:::i;:::-;10989;11057:2;11046:9;11042:18;11033:6;10989:72;:::i;:::-;11071;11139:2;11128:9;11124:18;11115:6;11071:72;:::i;:::-;10597:553;;;;;;;:::o;11156:619::-;11233:6;11241;11249;11298:2;11286:9;11277:7;11273:23;11269:32;11266:119;;;11304:79;;:::i;:::-;11266:119;11424:1;11449:53;11494:7;11485:6;11474:9;11470:22;11449:53;:::i;:::-;11439:63;;11395:117;11551:2;11577:53;11622:7;11613:6;11602:9;11598:22;11577:53;:::i;:::-;11567:63;;11522:118;11679:2;11705:53;11750:7;11741:6;11730:9;11726:22;11705:53;:::i;:::-;11695:63;;11650:118;11156:619;;;;;:::o;11781:180::-;11829:77;11826:1;11819:88;11926:4;11923:1;11916:15;11950:4;11947:1;11940:15;11967:281;12050:27;12072:4;12050:27;:::i;:::-;12042:6;12038:40;12180:6;12168:10;12165:22;12144:18;12132:10;12129:34;12126:62;12123:88;;;12191:18;;:::i;:::-;12123:88;12231:10;12227:2;12220:22;12010:238;11967:281;;:::o;12254:129::-;12288:6;12315:20;;:::i;:::-;12305:30;;12344:33;12372:4;12364:6;12344:33;:::i;:::-;12254:129;;;:::o;12389:311::-;12466:4;12556:18;12548:6;12545:30;12542:56;;;12578:18;;:::i;:::-;12542:56;12628:4;12620:6;12616:17;12608:25;;12688:4;12682;12678:15;12670:23;;12389:311;;;:::o;12723:710::-;12819:5;12844:81;12860:64;12917:6;12860:64;:::i;:::-;12844:81;:::i;:::-;12835:90;;12945:5;12974:6;12967:5;12960:21;13008:4;13001:5;12997:16;12990:23;;13061:4;13053:6;13049:17;13041:6;13037:30;13090:3;13082:6;13079:15;13076:122;;;13109:79;;:::i;:::-;13076:122;13224:6;13207:220;13241:6;13236:3;13233:15;13207:220;;;13316:3;13345:37;13378:3;13366:10;13345:37;:::i;:::-;13340:3;13333:50;13412:4;13407:3;13403:14;13396:21;;13283:144;13267:4;13262:3;13258:14;13251:21;;13207:220;;;13211:21;12825:608;;12723:710;;;;;:::o;13456:370::-;13527:5;13576:3;13569:4;13561:6;13557:17;13553:27;13543:122;;13584:79;;:::i;:::-;13543:122;13701:6;13688:20;13726:94;13816:3;13808:6;13801:4;13793:6;13789:17;13726:94;:::i;:::-;13717:103;;13533:293;13456:370;;;;:::o;13832:539::-;13916:6;13965:2;13953:9;13944:7;13940:23;13936:32;13933:119;;;13971:79;;:::i;:::-;13933:119;14119:1;14108:9;14104:17;14091:31;14149:18;14141:6;14138:30;14135:117;;;14171:79;;:::i;:::-;14135:117;14276:78;14346:7;14337:6;14326:9;14322:22;14276:78;:::i;:::-;14266:88;;14062:302;13832:539;;;;:::o;14377:323::-;14433:6;14482:2;14470:9;14461:7;14457:23;14453:32;14450:119;;;14488:79;;:::i;:::-;14450:119;14608:1;14633:50;14675:7;14666:6;14655:9;14651:22;14633:50;:::i;:::-;14623:60;;14579:114;14377:323;;;;:::o;14706:911::-;14801:6;14809;14817;14825;14833;14882:3;14870:9;14861:7;14857:23;14853:33;14850:120;;;14889:79;;:::i;:::-;14850:120;15009:1;15034:53;15079:7;15070:6;15059:9;15055:22;15034:53;:::i;:::-;15024:63;;14980:117;15136:2;15162:53;15207:7;15198:6;15187:9;15183:22;15162:53;:::i;:::-;15152:63;;15107:118;15264:2;15290:53;15335:7;15326:6;15315:9;15311:22;15290:53;:::i;:::-;15280:63;;15235:118;15392:2;15418:53;15463:7;15454:6;15443:9;15439:22;15418:53;:::i;:::-;15408:63;;15363:118;15520:3;15547:53;15592:7;15583:6;15572:9;15568:22;15547:53;:::i;:::-;15537:63;;15491:119;14706:911;;;;;;;;:::o;15640:568::-;15713:8;15723:6;15773:3;15766:4;15758:6;15754:17;15750:27;15740:122;;15781:79;;:::i;:::-;15740:122;15894:6;15881:20;15871:30;;15924:18;15916:6;15913:30;15910:117;;;15946:79;;:::i;:::-;15910:117;16060:4;16052:6;16048:17;16036:29;;16114:3;16106:4;16098:6;16094:17;16084:8;16080:32;16077:41;16074:128;;;16121:79;;:::i;:::-;16074:128;15640:568;;;;;:::o;16214:934::-;16336:6;16344;16352;16360;16409:2;16397:9;16388:7;16384:23;16380:32;16377:119;;;16415:79;;:::i;:::-;16377:119;16563:1;16552:9;16548:17;16535:31;16593:18;16585:6;16582:30;16579:117;;;16615:79;;:::i;:::-;16579:117;16728:80;16800:7;16791:6;16780:9;16776:22;16728:80;:::i;:::-;16710:98;;;;16506:312;16885:2;16874:9;16870:18;16857:32;16916:18;16908:6;16905:30;16902:117;;;16938:79;;:::i;:::-;16902:117;17051:80;17123:7;17114:6;17103:9;17099:22;17051:80;:::i;:::-;17033:98;;;;16828:313;16214:934;;;;;;;:::o;17154:474::-;17222:6;17230;17279:2;17267:9;17258:7;17254:23;17250:32;17247:119;;;17285:79;;:::i;:::-;17247:119;17405:1;17430:53;17475:7;17466:6;17455:9;17451:22;17430:53;:::i;:::-;17420:63;;17376:117;17532:2;17558:53;17603:7;17594:6;17583:9;17579:22;17558:53;:::i;:::-;17548:63;;17503:118;17154:474;;;;;:::o;17634:182::-;17774:34;17770:1;17762:6;17758:14;17751:58;17634:182;:::o;17822:366::-;17964:3;17985:67;18049:2;18044:3;17985:67;:::i;:::-;17978:74;;18061:93;18150:3;18061:93;:::i;:::-;18179:2;18174:3;18170:12;18163:19;;17822:366;;;:::o;18194:419::-;18360:4;18398:2;18387:9;18383:18;18375:26;;18447:9;18441:4;18437:20;18433:1;18422:9;18418:17;18411:47;18475:131;18601:4;18475:131;:::i;:::-;18467:139;;18194:419;;;:::o;18619:180::-;18667:77;18664:1;18657:88;18764:4;18761:1;18754:15;18788:4;18785:1;18778:15;18805:348;18845:7;18868:20;18886:1;18868:20;:::i;:::-;18863:25;;18902:20;18920:1;18902:20;:::i;:::-;18897:25;;19090:1;19022:66;19018:74;19015:1;19012:81;19007:1;19000:9;18993:17;18989:105;18986:131;;;19097:18;;:::i;:::-;18986:131;19145:1;19142;19138:9;19127:20;;18805:348;;;;:::o;19159:180::-;19207:77;19204:1;19197:88;19304:4;19301:1;19294:15;19328:4;19325:1;19318:15;19345:320;19389:6;19426:1;19420:4;19416:12;19406:22;;19473:1;19467:4;19463:12;19494:18;19484:81;;19550:4;19542:6;19538:17;19528:27;;19484:81;19612:2;19604:6;19601:14;19581:18;19578:38;19575:84;;;19631:18;;:::i;:::-;19575:84;19396:269;19345:320;;;:::o;19671:179::-;19811:31;19807:1;19799:6;19795:14;19788:55;19671:179;:::o;19856:366::-;19998:3;20019:67;20083:2;20078:3;20019:67;:::i;:::-;20012:74;;20095:93;20184:3;20095:93;:::i;:::-;20213:2;20208:3;20204:12;20197:19;;19856:366;;;:::o;20228:419::-;20394:4;20432:2;20421:9;20417:18;20409:26;;20481:9;20475:4;20471:20;20467:1;20456:9;20452:17;20445:47;20509:131;20635:4;20509:131;:::i;:::-;20501:139;;20228:419;;;:::o;20653:229::-;20793:34;20789:1;20781:6;20777:14;20770:58;20862:12;20857:2;20849:6;20845:15;20838:37;20653:229;:::o;20888:366::-;21030:3;21051:67;21115:2;21110:3;21051:67;:::i;:::-;21044:74;;21127:93;21216:3;21127:93;:::i;:::-;21245:2;21240:3;21236:12;21229:19;;20888:366;;;:::o;21260:419::-;21426:4;21464:2;21453:9;21449:18;21441:26;;21513:9;21507:4;21503:20;21499:1;21488:9;21484:17;21477:47;21541:131;21667:4;21541:131;:::i;:::-;21533:139;;21260:419;;;:::o;21685:181::-;21825:33;21821:1;21813:6;21809:14;21802:57;21685:181;:::o;21872:366::-;22014:3;22035:67;22099:2;22094:3;22035:67;:::i;:::-;22028:74;;22111:93;22200:3;22111:93;:::i;:::-;22229:2;22224:3;22220:12;22213:19;;21872:366;;;:::o;22244:419::-;22410:4;22448:2;22437:9;22433:18;22425:26;;22497:9;22491:4;22487:20;22483:1;22472:9;22468:17;22461:47;22525:131;22651:4;22525:131;:::i;:::-;22517:139;;22244:419;;;:::o;22669:224::-;22809:34;22805:1;22797:6;22793:14;22786:58;22878:7;22873:2;22865:6;22861:15;22854:32;22669:224;:::o;22899:366::-;23041:3;23062:67;23126:2;23121:3;23062:67;:::i;:::-;23055:74;;23138:93;23227:3;23138:93;:::i;:::-;23256:2;23251:3;23247:12;23240:19;;22899:366;;;:::o;23271:419::-;23437:4;23475:2;23464:9;23460:18;23452:26;;23524:9;23518:4;23514:20;23510:1;23499:9;23495:17;23488:47;23552:131;23678:4;23552:131;:::i;:::-;23544:139;;23271:419;;;:::o;23696:229::-;23836:34;23832:1;23824:6;23820:14;23813:58;23905:12;23900:2;23892:6;23888:15;23881:37;23696:229;:::o;23931:366::-;24073:3;24094:67;24158:2;24153:3;24094:67;:::i;:::-;24087:74;;24170:93;24259:3;24170:93;:::i;:::-;24288:2;24283:3;24279:12;24272:19;;23931:366;;;:::o;24303:419::-;24469:4;24507:2;24496:9;24492:18;24484:26;;24556:9;24550:4;24546:20;24542:1;24531:9;24527:17;24520:47;24584:131;24710:4;24584:131;:::i;:::-;24576:139;;24303:419;;;:::o;24728:180::-;24776:77;24773:1;24766:88;24873:4;24870:1;24863:15;24897:4;24894:1;24887:15;24914:305;24954:3;24973:20;24991:1;24973:20;:::i;:::-;24968:25;;25007:20;25025:1;25007:20;:::i;:::-;25002:25;;25161:1;25093:66;25089:74;25086:1;25083:81;25080:107;;;25167:18;;:::i;:::-;25080:107;25211:1;25208;25204:9;25197:16;;24914:305;;;;:::o;25225:225::-;25365:34;25361:1;25353:6;25349:14;25342:58;25434:8;25429:2;25421:6;25417:15;25410:33;25225:225;:::o;25456:366::-;25598:3;25619:67;25683:2;25678:3;25619:67;:::i;:::-;25612:74;;25695:93;25784:3;25695:93;:::i;:::-;25813:2;25808:3;25804:12;25797:19;;25456:366;;;:::o;25828:419::-;25994:4;26032:2;26021:9;26017:18;26009:26;;26081:9;26075:4;26071:20;26067:1;26056:9;26052:17;26045:47;26109:131;26235:4;26109:131;:::i;:::-;26101:139;;25828:419;;;:::o;26253:233::-;26292:3;26315:24;26333:5;26315:24;:::i;:::-;26306:33;;26361:66;26354:5;26351:77;26348:103;;;26431:18;;:::i;:::-;26348:103;26478:1;26471:5;26467:13;26460:20;;26253:233;;;:::o;26492:223::-;26632:34;26628:1;26620:6;26616:14;26609:58;26701:6;26696:2;26688:6;26684:15;26677:31;26492:223;:::o;26721:366::-;26863:3;26884:67;26948:2;26943:3;26884:67;:::i;:::-;26877:74;;26960:93;27049:3;26960:93;:::i;:::-;27078:2;27073:3;27069:12;27062:19;;26721:366;;;:::o;27093:419::-;27259:4;27297:2;27286:9;27282:18;27274:26;;27346:9;27340:4;27336:20;27332:1;27321:9;27317:17;27310:47;27374:131;27500:4;27374:131;:::i;:::-;27366:139;;27093:419;;;:::o;27518:221::-;27658:34;27654:1;27646:6;27642:14;27635:58;27727:4;27722:2;27714:6;27710:15;27703:29;27518:221;:::o;27745:366::-;27887:3;27908:67;27972:2;27967:3;27908:67;:::i;:::-;27901:74;;27984:93;28073:3;27984:93;:::i;:::-;28102:2;28097:3;28093:12;28086:19;;27745:366;;;:::o;28117:419::-;28283:4;28321:2;28310:9;28306:18;28298:26;;28370:9;28364:4;28360:20;28356:1;28345:9;28341:17;28334:47;28398:131;28524:4;28398:131;:::i;:::-;28390:139;;28117:419;;;:::o;28542:177::-;28682:29;28678:1;28670:6;28666:14;28659:53;28542:177;:::o;28725:366::-;28867:3;28888:67;28952:2;28947:3;28888:67;:::i;:::-;28881:74;;28964:93;29053:3;28964:93;:::i;:::-;29082:2;29077:3;29073:12;29066:19;;28725:366;;;:::o;29097:419::-;29263:4;29301:2;29290:9;29286:18;29278:26;;29350:9;29344:4;29340:20;29336:1;29325:9;29321:17;29314:47;29378:131;29504:4;29378:131;:::i;:::-;29370:139;;29097:419;;;:::o;29522:224::-;29662:34;29658:1;29650:6;29646:14;29639:58;29731:7;29726:2;29718:6;29714:15;29707:32;29522:224;:::o;29752:366::-;29894:3;29915:67;29979:2;29974:3;29915:67;:::i;:::-;29908:74;;29991:93;30080:3;29991:93;:::i;:::-;30109:2;30104:3;30100:12;30093:19;;29752:366;;;:::o;30124:419::-;30290:4;30328:2;30317:9;30313:18;30305:26;;30377:9;30371:4;30367:20;30363:1;30352:9;30348:17;30341:47;30405:131;30531:4;30405:131;:::i;:::-;30397:139;;30124:419;;;:::o;30549:222::-;30689:34;30685:1;30677:6;30673:14;30666:58;30758:5;30753:2;30745:6;30741:15;30734:30;30549:222;:::o;30777:366::-;30919:3;30940:67;31004:2;30999:3;30940:67;:::i;:::-;30933:74;;31016:93;31105:3;31016:93;:::i;:::-;31134:2;31129:3;31125:12;31118:19;;30777:366;;;:::o;31149:419::-;31315:4;31353:2;31342:9;31338:18;31330:26;;31402:9;31396:4;31392:20;31388:1;31377:9;31373:17;31366:47;31430:131;31556:4;31430:131;:::i;:::-;31422:139;;31149:419;;;:::o;31574:228::-;31714:34;31710:1;31702:6;31698:14;31691:58;31783:11;31778:2;31770:6;31766:15;31759:36;31574:228;:::o;31808:366::-;31950:3;31971:67;32035:2;32030:3;31971:67;:::i;:::-;31964:74;;32047:93;32136:3;32047:93;:::i;:::-;32165:2;32160:3;32156:12;32149:19;;31808:366;;;:::o;32180:419::-;32346:4;32384:2;32373:9;32369:18;32361:26;;32433:9;32427:4;32423:20;32419:1;32408:9;32404:17;32397:47;32461:131;32587:4;32461:131;:::i;:::-;32453:139;;32180:419;;;:::o;32605:234::-;32745:34;32741:1;32733:6;32729:14;32722:58;32814:17;32809:2;32801:6;32797:15;32790:42;32605:234;:::o;32845:366::-;32987:3;33008:67;33072:2;33067:3;33008:67;:::i;:::-;33001:74;;33084:93;33173:3;33084:93;:::i;:::-;33202:2;33197:3;33193:12;33186:19;;32845:366;;;:::o;33217:419::-;33383:4;33421:2;33410:9;33406:18;33398:26;;33470:9;33464:4;33460:20;33456:1;33445:9;33441:17;33434:47;33498:131;33624:4;33498:131;:::i;:::-;33490:139;;33217:419;;;:::o;33642:227::-;33782:34;33778:1;33770:6;33766:14;33759:58;33851:10;33846:2;33838:6;33834:15;33827:35;33642:227;:::o;33875:366::-;34017:3;34038:67;34102:2;34097:3;34038:67;:::i;:::-;34031:74;;34114:93;34203:3;34114:93;:::i;:::-;34232:2;34227:3;34223:12;34216:19;;33875:366;;;:::o;34247:419::-;34413:4;34451:2;34440:9;34436:18;34428:26;;34500:9;34494:4;34490:20;34486:1;34475:9;34471:17;34464:47;34528:131;34654:4;34528:131;:::i;:::-;34520:139;;34247:419;;;:::o;34672:191::-;34712:4;34732:20;34750:1;34732:20;:::i;:::-;34727:25;;34766:20;34784:1;34766:20;:::i;:::-;34761:25;;34805:1;34802;34799:8;34796:34;;;34810:18;;:::i;:::-;34796:34;34855:1;34852;34848:9;34840:17;;34672:191;;;;:::o;34869:180::-;34917:77;34914:1;34907:88;35014:4;35011:1;35004:15;35038:4;35035:1;35028:15;35055:185;35095:1;35112:20;35130:1;35112:20;:::i;:::-;35107:25;;35146:20;35164:1;35146:20;:::i;:::-;35141:25;;35185:1;35175:35;;35190:18;;:::i;:::-;35175:35;35232:1;35229;35225:9;35220:14;;35055:185;;;;:::o;35246:143::-;35303:5;35334:6;35328:13;35319:22;;35350:33;35377:5;35350:33;:::i;:::-;35246:143;;;;:::o;35395:351::-;35465:6;35514:2;35502:9;35493:7;35489:23;35485:32;35482:119;;;35520:79;;:::i;:::-;35482:119;35640:1;35665:64;35721:7;35712:6;35701:9;35697:22;35665:64;:::i;:::-;35655:74;;35611:128;35395:351;;;;:::o;35752:85::-;35797:7;35826:5;35815:16;;35752:85;;;:::o;35843:158::-;35901:9;35934:61;35952:42;35961:32;35987:5;35961:32;:::i;:::-;35952:42;:::i;:::-;35934:61;:::i;:::-;35921:74;;35843:158;;;:::o;36007:147::-;36102:45;36141:5;36102:45;:::i;:::-;36097:3;36090:58;36007:147;;:::o;36160:114::-;36227:6;36261:5;36255:12;36245:22;;36160:114;;;:::o;36280:184::-;36379:11;36413:6;36408:3;36401:19;36453:4;36448:3;36444:14;36429:29;;36280:184;;;;:::o;36470:132::-;36537:4;36560:3;36552:11;;36590:4;36585:3;36581:14;36573:22;;36470:132;;;:::o;36608:108::-;36685:24;36703:5;36685:24;:::i;:::-;36680:3;36673:37;36608:108;;:::o;36722:179::-;36791:10;36812:46;36854:3;36846:6;36812:46;:::i;:::-;36890:4;36885:3;36881:14;36867:28;;36722:179;;;;:::o;36907:113::-;36977:4;37009;37004:3;37000:14;36992:22;;36907:113;;;:::o;37056:732::-;37175:3;37204:54;37252:5;37204:54;:::i;:::-;37274:86;37353:6;37348:3;37274:86;:::i;:::-;37267:93;;37384:56;37434:5;37384:56;:::i;:::-;37463:7;37494:1;37479:284;37504:6;37501:1;37498:13;37479:284;;;37580:6;37574:13;37607:63;37666:3;37651:13;37607:63;:::i;:::-;37600:70;;37693:60;37746:6;37693:60;:::i;:::-;37683:70;;37539:224;37526:1;37523;37519:9;37514:14;;37479:284;;;37483:14;37779:3;37772:10;;37180:608;;;37056:732;;;;:::o;37794:831::-;38057:4;38095:3;38084:9;38080:19;38072:27;;38109:71;38177:1;38166:9;38162:17;38153:6;38109:71;:::i;:::-;38190:80;38266:2;38255:9;38251:18;38242:6;38190:80;:::i;:::-;38317:9;38311:4;38307:20;38302:2;38291:9;38287:18;38280:48;38345:108;38448:4;38439:6;38345:108;:::i;:::-;38337:116;;38463:72;38531:2;38520:9;38516:18;38507:6;38463:72;:::i;:::-;38545:73;38613:3;38602:9;38598:19;38589:6;38545:73;:::i;:::-;37794:831;;;;;;;;:::o;38631:220::-;38771:34;38767:1;38759:6;38755:14;38748:58;38840:3;38835:2;38827:6;38823:15;38816:28;38631:220;:::o;38857:366::-;38999:3;39020:67;39084:2;39079:3;39020:67;:::i;:::-;39013:74;;39096:93;39185:3;39096:93;:::i;:::-;39214:2;39209:3;39205:12;39198:19;;38857:366;;;:::o;39229:419::-;39395:4;39433:2;39422:9;39418:18;39410:26;;39482:9;39476:4;39472:20;39468:1;39457:9;39453:17;39446:47;39510:131;39636:4;39510:131;:::i;:::-;39502:139;;39229:419;;;:::o;39654:442::-;39803:4;39841:2;39830:9;39826:18;39818:26;;39854:71;39922:1;39911:9;39907:17;39898:6;39854:71;:::i;:::-;39935:72;40003:2;39992:9;39988:18;39979:6;39935:72;:::i;:::-;40017;40085:2;40074:9;40070:18;40061:6;40017:72;:::i;:::-;39654:442;;;;;;:::o;40102:807::-;40351:4;40389:3;40378:9;40374:19;40366:27;;40403:71;40471:1;40460:9;40456:17;40447:6;40403:71;:::i;:::-;40484:72;40552:2;40541:9;40537:18;40528:6;40484:72;:::i;:::-;40566:80;40642:2;40631:9;40627:18;40618:6;40566:80;:::i;:::-;40656;40732:2;40721:9;40717:18;40708:6;40656:80;:::i;:::-;40746:73;40814:3;40803:9;40799:19;40790:6;40746:73;:::i;:::-;40829;40897:3;40886:9;40882:19;40873:6;40829:73;:::i;:::-;40102:807;;;;;;;;;:::o;40915:143::-;40972:5;41003:6;40997:13;40988:22;;41019:33;41046:5;41019:33;:::i;:::-;40915:143;;;;:::o;41064:663::-;41152:6;41160;41168;41217:2;41205:9;41196:7;41192:23;41188:32;41185:119;;;41223:79;;:::i;:::-;41185:119;41343:1;41368:64;41424:7;41415:6;41404:9;41400:22;41368:64;:::i;:::-;41358:74;;41314:128;41481:2;41507:64;41563:7;41554:6;41543:9;41539:22;41507:64;:::i;:::-;41497:74;;41452:129;41620:2;41646:64;41702:7;41693:6;41682:9;41678:22;41646:64;:::i;:::-;41636:74;;41591:129;41064:663;;;;;:::o

Swarm Source

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