ETH Price: $3,465.31 (+1.59%)

Token

MUTATE (MUTATE)
 

Overview

Max Total Supply

1,000,000,000 MUTATE

Holders

518

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,623,786.153656047307268581 MUTATE

Value
$0.00
0x97b9c2e9943856bca1ccea89a239f271b2095c3c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MUTATE

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
https://twitter.com/MutateToken
https://www.mutate-token.com/
https://t.me/mutateportal
*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

contract MUTATE is IERC20, Ownable {
    using SafeMath for uint256;

    address private constant DEAD = address(0xdead);
    address private constant ZERO = address(0);
    address private devAddress = address(0xdE77aC95F80B18Fc89c32FEf18c3D71aF690dd35);
    address private treasuryAddress = address(0xdE77aC95F80B18Fc89c32FEf18c3D71aF690dd35);
    address private marketingAddress = address(0xdE77aC95F80B18Fc89c32FEf18c3D71aF690dd35);
    address private liquidityAddress = address(0xeFc9264D68d06502cdc785FC2aEa84bF05a999f2);
    /**
     * Token Assets
     * name, symbol, _decimals totalSupply
     * This will be defined when we deploy the contract.
     */
    string private _name = "MUTATE";
    string private _symbol = "MUTATE";
    uint8 private _decimals = 18;
    uint256 private _totalSupply = 1_000_000_000 * (10 ** _decimals);  // 1 billion

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

    bool public enableTrading = true;
    bool public enableSwap = false;
    uint256 public maxBalance = _totalSupply * 2 / 100; // 2%
    uint256 public maxTx = _totalSupply * 2 / 100;  // 2%
    uint256 public swapThreshold = (_totalSupply * 4) / 10000;  // 0.04%

    uint256 _buyMarketingFee = 12;
    uint256 _buyLiquidityFee = 0;
    uint256 _buyReflectionFee = 0;
    uint256 _buyTreasuryFee = 0;

    uint256 _sellMarketingFee = 12;
    uint256 _sellLiquidityFee = 0;
    uint256 _sellReflectionFee = 0;
    uint256 _sellTreasuryFee = 0;

    uint256 public marketingDebt = 0;
    uint256 public liquidityDebt = 0;
    uint256 public treasuryDebt = 0;
    /**
     * Mode & Fee
     * mode0 = prefee system
     * mode1(BuyTax: treasury=2%, reflection=3%, SellTax: treasury=2%, reflection=3%)
     * mode2(BuyTax: 0, SellTax: treasury=2%, reflection=2%, luck holder reward=2%)
     * mode3(BuyTax: auto burn supply=1%, reflections to all top 50 holders=3%, 
     *       SellTax: treasury=2%, reflection=3%)
     * mode4(BuyTax: 0, SellTax: 0)
     * mode5(BuyTax: reflection=5%, SellTax: reflection=5%)
     * mode6(Buytax: 0, SellTax: reflection=5% to buyers of this mutation)
     */
    uint8 public mode = 0;  // current mode
    bool public isAutoMode = false;
    uint256 public modeStartTime = 0;
    uint256 public modePeriod = 2 hours;
    struct Fee {
        uint8 treasury;
        uint8 reflection;
        uint8 lucky;
        uint8 burn;
        uint8 total;
    }
    // mode == 0: pre fees
    // Mode 1
    Fee public mode1BuyTax = Fee({treasury: 2, reflection: 3, lucky: 0, burn: 0, total: 5});
    Fee public mode1SellTax = Fee({treasury: 2, reflection: 3, lucky: 0, burn: 0, total: 5});
    // Mode 2
    Fee public mode2BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0});
    Fee public mode2SellTax = Fee({treasury: 2, reflection: 2, lucky: 2, burn: 0, total: 6});
    // Mode 3
    Fee public mode3BuyTax = Fee({treasury: 0, reflection: 3, lucky: 0, burn: 1, total: 4});
    Fee public mode3SellTax = Fee({treasury: 2, reflection: 3, lucky: 0, burn: 0, total: 5});
    // Mode 4
    Fee public mode4BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0});
    Fee public mode4SellTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0});
    // Mode 5
    Fee public mode5BuyTax = Fee({treasury: 0, reflection: 5, lucky: 0, burn: 0, total: 5});
    Fee public mode5SellTax = Fee({treasury: 0, reflection: 5, lucky: 0, burn: 0, total: 5});
    // Mode 6
    Fee public mode6BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0});
    Fee public mode6SellTax = Fee({treasury: 0, reflection: 5, lucky: 0, burn: 0, total: 5});
    uint256 public mode6ReflectionAmount = 0;
    uint256 public session = 0;
    // session => (buyer => true/false)
    mapping(uint256 => mapping(address => bool)) public isMode6Buyer;
    address[] public mode6Buyers;

    Fee public buyTax;
    Fee public sellTax;

    IUniswapV2Router02 public UNISWAP_V2_ROUTER;
    address public UNISWAP_V2_PAIR;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isReflectionExempt;
    mapping(address => bool) public isBalanceExempt;

    mapping(address => bool) public isHolder;
    address[] public holders;
    uint256 public totalReflectionAmount;
    uint256 public topHolderReflectionAmount;

    // events
    event UpdateMode(uint8 mode);
    event Reflection(uint256 amountAdded, uint256 totalAmountAccumulated);
    event TopHolderReflection(uint256 amountAdded, uint256 totalAmountAccumulated);
    event BuyerReflection(uint256 amountAdded, uint256 totalAmountAccumulated);
    event BuyerReflectionTransfer(address[] buyers, uint256 amount);
    event LuckyReward(address holder, uint256 amount);
    event ChangeTradingStatus(bool status);

    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        require(devAddress != msg.sender, "Please set a different wallet for devAddress");
        UNISWAP_V2_ROUTER = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);  // mainnet = goerli
        UNISWAP_V2_PAIR = IUniswapV2Factory(UNISWAP_V2_ROUTER.factory()).createPair(address(this), UNISWAP_V2_ROUTER.WETH());
        _allowances[address(this)][address(UNISWAP_V2_ROUTER)] = _totalSupply;
        _allowances[address(this)][address(UNISWAP_V2_PAIR)] = _totalSupply;
        _allowances[address(this)][msg.sender] = _totalSupply;

        isFeeExempt[msg.sender] = true;
        isFeeExempt[devAddress] = true;
        isFeeExempt[treasuryAddress] = true;
        isFeeExempt[marketingAddress] = true;
        isFeeExempt[liquidityAddress] = true;
        isFeeExempt[ZERO] = true;
        isFeeExempt[DEAD] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[address(UNISWAP_V2_ROUTER)] = true;
        isFeeExempt[UNISWAP_V2_PAIR] = true;

        isReflectionExempt[address(this)] = true;
        isReflectionExempt[address(UNISWAP_V2_ROUTER)] = true;
        isReflectionExempt[UNISWAP_V2_PAIR] = true;
        isReflectionExempt[msg.sender] = true;
        isReflectionExempt[ZERO] = true;
        isReflectionExempt[DEAD] = true;

        isBalanceExempt[ZERO] = true;
        isBalanceExempt[DEAD] = true;
        isBalanceExempt[address(UNISWAP_V2_ROUTER)] = true;
        isBalanceExempt[address(UNISWAP_V2_PAIR)] = true;
        isBalanceExempt[devAddress] = true;
        isBalanceExempt[msg.sender] = true;
        isBalanceExempt[address(this)] = true;

        buyTax = mode1BuyTax;
        sellTax = mode1SellTax;

        uint256 devAmount = _totalSupply * 5 / 100;
        _balances[devAddress] = devAmount;
        emit Transfer(ZERO, devAddress, devAmount);
        isHolder[devAddress] = true;
        holders.push(devAddress);

        uint256 circulationAmount = _totalSupply - devAmount;
        _balances[msg.sender] = circulationAmount;
        emit Transfer(ZERO, msg.sender, circulationAmount);
        isHolder[msg.sender] = true;
        holders.push(msg.sender);
    }

    receive() external payable {}
    /**
     * ERC20 Standard methods with override
     */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        uint256 totalBalance = _balances[account];
        if (!isReflectionExempt[account] && totalReflectionAmount > 0 && holders.length > 2) {
            totalBalance += totalBalance / holders.length;
        }
        return totalBalance;
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            require(_allowances[sender][msg.sender] >= amount, "ERC20: insufficient allowance");
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        _checkBuySell(sender, recipient);
        _checkLimitations(recipient, amount);
        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }
        if (_shouldSwapBack()) {
            _swapBack();
        }
        if (!isReflectionExempt[sender]){
            _claim(sender);
        }
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _updateHolders(sender);
        uint256 amountReceived = _shouldTakeFee(sender, recipient) ? _takeFees(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        _updateHolders(recipient);
        emit Transfer(sender, recipient, amount);

        if (isAutoMode) {
            autoUpdateMode();
        }

        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _updateHolders(sender);
        _balances[recipient] = _balances[recipient].add(amount);
        _updateHolders(recipient);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function getRandomHolderIndex(uint256 _numToFetch, uint256 _i) internal view returns (uint256) {
        uint256 randomNum = uint256(
            keccak256(
                abi.encode(
                    msg.sender,
                    tx.gasprice,
                    block.number,
                    block.timestamp,
                    blockhash(block.number - 1),
                    _numToFetch,
                    _i
                )
            )
        );
        uint256 randomIndex = (randomNum % holders.length);
        return randomIndex;
    }

    function _takePreFees(address sender, uint256 amount) internal returns (uint256) {
        uint256 _marketingFee = _sellMarketingFee;
        uint256 _liquidityFee = _sellLiquidityFee;
        uint256 _reflectionFee = _sellReflectionFee;
        uint256 _treasuryFee = _sellTreasuryFee;
        if (sender == UNISWAP_V2_PAIR) {
            _marketingFee = _buyMarketingFee;
            _liquidityFee = _buyLiquidityFee;
            _reflectionFee = _buyReflectionFee;
            _treasuryFee = _buyTreasuryFee;
        }
        uint256 _marketingAmount = amount * _marketingFee / 100;
        uint256 _liquidityAmount = amount * _liquidityFee / 100;
        uint256 _treasuryAmount = amount * _treasuryFee / 100;
        uint256 _reflectionFeeAmount = amount * _reflectionFee / 100;
        if (_reflectionFee > 0) {
            totalReflectionAmount += _reflectionFeeAmount;
            emit Reflection(_reflectionFeeAmount, totalReflectionAmount);
        }
        marketingDebt += _marketingAmount;
        liquidityDebt += _liquidityAmount;
        treasuryDebt += _treasuryAmount;
        _balances[address(this)] += _marketingAmount + _liquidityAmount + _treasuryAmount;
        uint256 _totalFeeAmount = _marketingAmount + _liquidityAmount + _treasuryAmount + _reflectionFeeAmount;
        return amount.sub(_totalFeeAmount);
    }

    function _takeModeFees(address sender, address recipient, uint256 amount) internal returns (uint256) {
        Fee memory _feeTax = sellTax;
        bool _isBuy = false;
        if (sender == UNISWAP_V2_PAIR) {
            _feeTax = buyTax;
            _isBuy = true;
        }
        uint256 feeAmount = amount * _feeTax.total / 100;
        if (_feeTax.treasury > 0) {
            uint256 _treasuryFeeAmount = feeAmount * _feeTax.treasury / _feeTax.total;
            treasuryDebt += _treasuryFeeAmount;
            _balances[address(this)] += _treasuryFeeAmount;
        }
        if (_feeTax.reflection > 0) {
            uint256 _reflectionFeeAmount = feeAmount * _feeTax.reflection / _feeTax.total;
            if (mode == 3) {
                topHolderReflectionAmount += _reflectionFeeAmount;
                emit TopHolderReflection(_reflectionFeeAmount, topHolderReflectionAmount);
            } else if (mode == 6) {
                mode6ReflectionAmount += _reflectionFeeAmount;
                if (!_isBuy) {
                    emit BuyerReflection(_reflectionFeeAmount, mode6ReflectionAmount);
                } else if (_isBuy && !isMode6Buyer[session][recipient]) {
                    isMode6Buyer[session][recipient] = true;
                    mode6Buyers.push(recipient);
                }
            } else {
                totalReflectionAmount += _reflectionFeeAmount;
                emit Reflection(_reflectionFeeAmount, totalReflectionAmount);
            }
        }
        if (_feeTax.lucky > 0) {
            uint256 _luckyFeeAmount = feeAmount * _feeTax.lucky / _feeTax.total;
            _luckyReward(_luckyFeeAmount);
        }
        if (_feeTax.burn > 0) {
            uint256 _burnFeeAmount = feeAmount * _feeTax.burn / _feeTax.total;
            _balances[DEAD] += _burnFeeAmount;
            emit Transfer(address(this), DEAD, _burnFeeAmount);
        }

        return amount.sub(feeAmount);
    }

    function _takeFees(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if (mode > 0) {
            return _takeModeFees(sender, recipient, amount);
        } else {
            return _takePreFees(sender, amount);
        }
    }

    function _shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] || !isFeeExempt[recipient];
    }

    function _checkBuySell(address sender, address recipient) internal view {
        if (!enableTrading) {
            require(sender != UNISWAP_V2_PAIR && recipient != UNISWAP_V2_PAIR, "Trading is disabled!");
        }
    }

    function _checkLimitations(address recipient, uint256 amount) internal view {
        if (!isBalanceExempt[recipient]) {
            require(amount <= maxTx, "Max transaction amount is limited!");
            uint256 suggestBalance = balanceOf(recipient) + amount;
            require(suggestBalance <= maxBalance, "Max balance is limited!");
        }
    }

    function _luckyReward(uint256 amount) internal {
        uint256 randomIndex = getRandomHolderIndex(1, 1);
        address luckyHolder = holders[randomIndex];
        if (
            luckyHolder != ZERO && 
            luckyHolder != DEAD && 
            luckyHolder != address(UNISWAP_V2_ROUTER) && 
            luckyHolder != UNISWAP_V2_PAIR
        ) {
            _balances[luckyHolder] += amount;
            emit LuckyReward(luckyHolder, amount);
            emit Transfer(address(this), luckyHolder, amount);
        }
    }
    
    function _updateHolders(address holder) internal {
        uint256 balance = balanceOf(holder);
        if (balance > 0) {
            if (!isHolder[holder]) {
                isHolder[holder] = true;
                holders.push(holder);
            }
        } else {
            if (isHolder[holder]) {
                isHolder[holder] = false;
                for(uint256 i = 0; i < holders.length - 1; i++) {
                    if (holders[i] == holder) {
                        holders[i] = holders[holders.length - 1];
                    }
                }
                holders.pop();
            }
        }
    }

    function _claim(address holder) internal {
        if (totalReflectionAmount > 0) {
            uint256 oneReflection = totalReflectionAmount / holders.length;
            totalReflectionAmount -= oneReflection;
            _balances[holder] += oneReflection;
        }
    }

    function _shouldSwapBack() internal view returns (bool) {
        return msg.sender != UNISWAP_V2_PAIR && 
            enableSwap && 
            !inSwap && 
            balanceOf(address(this)) >= swapThreshold;
    }

    function _swapBack() internal swapping {
        uint256 amountToSwap = balanceOf(address(this));
        approve(address(UNISWAP_V2_ROUTER), amountToSwap);
        // swap
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UNISWAP_V2_ROUTER.WETH();
        UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap, 0, path, address(this), block.timestamp
        );
        uint256 amountETH = address(this).balance;
        _sendFeeETH(amountETH, amountToSwap);
    }

    function _sendFeeETH(uint256 amount, uint256 swapAmount) internal {
        uint256 totalDebt = marketingDebt + liquidityDebt + treasuryDebt;
        uint256 marketingProfit = amount * marketingDebt / totalDebt;
        uint256 marketingSwapAmount = swapAmount * marketingDebt / totalDebt;
        uint256 liquidityProfit = amount * liquidityDebt / totalDebt;
        uint256 liquiditySwapAmount = swapAmount * liquidityDebt / totalDebt;
        uint256 treasuryProfit = amount - marketingProfit - liquidityProfit;
        uint256 treasurySwapAmount = swapAmount - marketingSwapAmount - liquiditySwapAmount;
        if (marketingProfit > 0) {
            payable(marketingAddress).transfer(marketingProfit);
            marketingDebt -= marketingSwapAmount;
        }
        if (liquidityProfit > 0) {
            payable(liquidityAddress).transfer(liquidityProfit);
            liquidityDebt -= liquiditySwapAmount;
        }
        if (treasuryProfit > 0) {
            payable(treasuryAddress).transfer(treasuryProfit);
            treasuryDebt -= treasurySwapAmount;
        }
    }

    function _mode6Distribution() internal {
        session += 1;
        if (mode6ReflectionAmount == 0) return;
        uint256 _buyersLen = mode6Buyers.length;
        uint256 _buyerReflection = mode6ReflectionAmount / _buyersLen;
        for (uint256 i = 0; i < _buyersLen; i++) {
            address _buyer = mode6Buyers[i];
            _balances[_buyer] += _buyerReflection;
        }
        mode6ReflectionAmount = 0;
        delete mode6Buyers;
        emit BuyerReflectionTransfer(mode6Buyers, _buyerReflection);
    }

    function _changeMode(uint8 mode_) internal {
        if (mode == 6 && mode_ != 6) {
            _mode6Distribution();
        }
        if (mode_ == 2) {
            buyTax = mode2BuyTax;
            sellTax = mode2SellTax;
        } else if (mode_ == 3) {
            buyTax = mode3BuyTax;
            sellTax = mode3SellTax;
        } else if (mode_ == 4) {
            buyTax = mode4BuyTax;
            sellTax = mode4SellTax;
        } else if (mode_ == 5) {
            buyTax = mode5BuyTax;
            sellTax = mode5SellTax;
        } else if (mode_ == 6) {
            buyTax = mode6BuyTax;
            sellTax = mode6SellTax;
        } else {
            buyTax = mode1BuyTax;
            sellTax = mode1SellTax;
        }
        mode = mode_;
        modeStartTime = block.timestamp;
        emit UpdateMode(mode_);
    }

    function autoUpdateMode() internal {
        uint8 _currentMode = mode;
        if (_currentMode == 0) {
            return;
        }
        uint256 deltaTime = block.timestamp - modeStartTime;
        if (deltaTime < modePeriod) {
            return;
        }
        _currentMode += 1;
        if (_currentMode > 6) {
            _currentMode = 1;
        }
        _changeMode(_currentMode);
    }

    function manualUpdateMode(uint8 mode_) external onlyOwner {
        _changeMode(mode_);
    }

    function setAutoMode(bool isAuto_) external onlyOwner {
        isAutoMode = isAuto_;
    }

    function rewardTopHolders(address[] calldata _topHolders) public onlyOwner {
        require(topHolderReflectionAmount > 0, "Reward should be available");
        uint256 oneReward = topHolderReflectionAmount / _topHolders.length;
        topHolderReflectionAmount = 0;
        for (uint8 i = 0; i < _topHolders.length; i++) {
            _balances[_topHolders[i]] += oneReward;
            emit Transfer(address(this), _topHolders[i], oneReward);
        }
    }

    function setFeeReceivers(address treasury_) external onlyOwner {
        treasuryAddress = treasury_;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsReflectionExempt(address holder, bool exempt) external onlyOwner {
        isReflectionExempt[holder] = exempt;
    }

    function setIsBalanceExempt(address holder, bool exempt) external onlyOwner {
        isBalanceExempt[holder] = exempt;
    }

    function changeTradingStatus(bool _status) external onlyOwner {
        enableTrading = _status;
        emit ChangeTradingStatus(_status);
    }

    function updatePreFees(
        uint256 buyMarketingFee_,
        uint256 buyLiquidityFee_,
        uint256 buyReflectionFee_,
        uint256 buyTreasuryFee_,
        uint256 sellMarketingFee_,
        uint256 sellLiquidityFee_,
        uint256 sellReflectionFee_,
        uint256 sellTreasuryFee_
    ) external onlyOwner {
        _buyMarketingFee = buyMarketingFee_;
        _buyLiquidityFee = buyLiquidityFee_;
        _buyReflectionFee = buyReflectionFee_;
        _buyTreasuryFee = buyTreasuryFee_;

        _sellMarketingFee = sellMarketingFee_;
        _sellLiquidityFee = sellLiquidityFee_;
        _sellReflectionFee = sellReflectionFee_;
        _sellTreasuryFee = sellTreasuryFee_;
    }

    function updateSwapThreshold(uint256 _swapThreshold) external onlyOwner {
        swapThreshold = _swapThreshold;
    }

    function manualSwapBack() external onlyOwner {
        if (_shouldSwapBack()) {
            _swapBack();
        }
    }

    function changeSwapStatus(bool _enableSwap) external onlyOwner {
        enableSwap = _enableSwap;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"BuyerReflection","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"buyers","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyerReflectionTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ChangeTradingStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LuckyReward","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":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"Reflection","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"TopHolderReflection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"mode","type":"uint8"}],"name":"UpdateMode","type":"event"},{"inputs":[],"name":"UNISWAP_V2_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enableSwap","type":"bool"}],"name":"changeSwapStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"changeTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAutoMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBalanceExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isMode6Buyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReflectionExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mode_","type":"uint8"}],"name":"manualUpdateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode1BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode1SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode2BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode2SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode3BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode3SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode4BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode4SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode5BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode5SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode6BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mode6Buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode6ReflectionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode6SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modeStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_topHolders","type":"address[]"}],"name":"rewardTopHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"session","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isAuto_","type":"bool"}],"name":"setAutoMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasury_","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsBalanceExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsReflectionExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"topHolderReflectionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionAmount","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":[],"name":"treasuryDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingFee_","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee_","type":"uint256"},{"internalType":"uint256","name":"buyReflectionFee_","type":"uint256"},{"internalType":"uint256","name":"buyTreasuryFee_","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee_","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee_","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee_","type":"uint256"},{"internalType":"uint256","name":"sellTreasuryFee_","type":"uint256"}],"name":"updatePreFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273de77ac95f80b18fc89c32fef18c3d71af690dd3560015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de77ac95f80b18fc89c32fef18c3d71af690dd3560025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de77ac95f80b18fc89c32fef18c3d71af690dd3560035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073efc9264d68d06502cdc785fc2aea84bf05a999f260045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600681526020017f4d55544154450000000000000000000000000000000000000000000000000000815250600590816200019a9190620023a3565b506040518060400160405280600681526020017f4d5554415445000000000000000000000000000000000000000000000000000081525060069081620001e19190620023a3565b50601260075f6101000a81548160ff021916908360ff16021790555060075f9054906101000a900460ff16600a6200021a919062002610565b633b9aca006200022b919062002660565b6008556001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055506064600260085462000275919062002660565b620002819190620026d7565b600c556064600260085462000297919062002660565b620002a39190620026d7565b600d556127106004600854620002ba919062002660565b620002c69190620026d7565b600e55600c600f555f6010555f6011555f601255600c6013555f6014555f6015555f6016555f6017555f6018555f6019555f601a5f6101000a81548160ff021916908360ff1602179055505f601a60016101000a81548160ff0219169083151502179055505f601b55611c20601c556040518060a00160405280600260ff168152602001600360ff1681526020015f60ff1681526020015f60ff168152602001600560ff16815250601d5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a00160405280600260ff168152602001600360ff1681526020015f60ff1681526020015f60ff168152602001600560ff16815250601e5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815250601f5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a00160405280600260ff168152602001600260ff168152602001600260ff1681526020015f60ff168152602001600660ff1681525060205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff168152602001600360ff1681526020015f60ff168152602001600160ff168152602001600460ff1681525060215f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a00160405280600260ff168152602001600360ff1681526020015f60ff1681526020015f60ff168152602001600560ff1681525060225f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681525060235f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681525060245f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff168152602001600560ff1681526020015f60ff1681526020015f60ff168152602001600560ff1681525060255f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff168152602001600560ff1681526020015f60ff1681526020015f60ff168152602001600560ff1681525060265f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681525060275f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff168152602001600560ff1681526020015f60ff1681526020015f60ff168152602001600560ff1681525060285f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050505f6029555f602a5534801562000d7f575f80fd5b5062000da062000d946200207760201b60201c565b6200207e60201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362000e32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e299062002792565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d602f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ef1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000f17919062002817565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f9e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000fc4919062002817565b6040518363ffffffff1660e01b815260040162000fe392919062002858565b6020604051808303815f875af115801562001000573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001026919062002817565b60305f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160315f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160315f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160325f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160325f602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160325f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160325f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160325f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160325f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160335f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160335f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160335f602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160335f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160335f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160335f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160335f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601d602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050601e602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505f6064600560085462001d0e919062002660565b62001d1a9190620026d7565b90508060095f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001dff919062002894565b60405180910390a3600160345f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550603560015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8160085462001f0f9190620028af565b90508060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001fb2919062002894565b60405180910390a3600160345f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550603533908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620028e9565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620021bb57607f821691505b602082108103620021d157620021d062002176565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620022357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620021f8565b620022418683620021f8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200228b620022856200227f8462002259565b62002262565b62002259565b9050919050565b5f819050919050565b620022a6836200226b565b620022be620022b58262002292565b84845462002204565b825550505050565b5f90565b620022d4620022c6565b620022e18184846200229b565b505050565b5b818110156200230857620022fc5f82620022ca565b600181019050620022e7565b5050565b601f82111562002357576200232181620021d7565b6200232c84620021e9565b810160208510156200233c578190505b620023546200234b85620021e9565b830182620022e6565b50505b505050565b5f82821c905092915050565b5f620023795f19846008026200235c565b1980831691505092915050565b5f62002393838362002368565b9150826002028217905092915050565b620023ae826200213f565b67ffffffffffffffff811115620023ca57620023c962002149565b5b620023d68254620021a3565b620023e38282856200230c565b5f60209050601f83116001811462002419575f841562002404578287015190505b62002410858262002386565b8655506200247f565b601f1984166200242986620021d7565b5f5b8281101562002452578489015182556001820191506020850194506020810190506200242b565b868310156200247257848901516200246e601f89168262002368565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200251157808604811115620024e957620024e862002487565b5b6001851615620024f95780820291505b80810290506200250985620024b4565b9450620024c9565b94509492505050565b5f826200252b5760019050620025fd565b816200253a575f9050620025fd565b81600181146200255357600281146200255e5762002594565b6001915050620025fd565b60ff84111562002573576200257262002487565b5b8360020a9150848211156200258d576200258c62002487565b5b50620025fd565b5060208310610133831016604e8410600b8410161715620025ce5782820a905083811115620025c857620025c762002487565b5b620025fd565b620025dd8484846001620024c0565b92509050818404811115620025f757620025f662002487565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6200261c8262002259565b9150620026298362002604565b9250620026587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200251a565b905092915050565b5f6200266c8262002259565b9150620026798362002259565b9250828202620026898162002259565b91508282048414831517620026a357620026a262002487565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620026e38262002259565b9150620026f08362002259565b925082620027035762002702620026aa565b5b828204905092915050565b5f82825260208201905092915050565b7f506c6561736520736574206120646966666572656e742077616c6c657420666f5f8201527f7220646576416464726573730000000000000000000000000000000000000000602082015250565b5f6200277a602c836200270e565b915062002787826200271e565b604082019050919050565b5f6020820190508181035f830152620027ab816200276c565b9050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620027e182620027b6565b9050919050565b620027f381620027d5565b8114620027fe575f80fd5b50565b5f815190506200281181620027e8565b92915050565b5f602082840312156200282f576200282e620027b2565b5b5f6200283e8482850162002801565b91505092915050565b6200285281620027d5565b82525050565b5f6040820190506200286d5f83018562002847565b6200287c602083018462002847565b9392505050565b6200288e8162002259565b82525050565b5f602082019050620028a95f83018462002883565b92915050565b5f620028bb8262002259565b9150620028c88362002259565b9250828203905081811115620028e357620028e262002487565b5b92915050565b615cd580620028f75f395ff3fe6080604052600436106103c5575f3560e01c806370a08231116101f1578063b1bd37741161010c578063e01bb6881161009f578063f40acc3d1161006e578063f40acc3d14610e84578063f5db574214610eae578063f9c683c014610edc578063ff131b4e14610f04576103cc565b8063e01bb68814610dca578063e192d48514610df2578063e839363b14610e2e578063f2fde38b14610e5c576103cc565b8063cc274b29116100db578063cc274b2914610d00578063d4d7b19a14610d28578063d6db1d8214610d64578063dd62ed3e14610d8e576103cc565b8063b1bd377414610c3a578063b876e5e214610c76578063c15d854f14610ca4578063cc1776d314610cd2576103cc565b806393e6b04a11610184578063a2d2be8411610153578063a2d2be8414610b78578063a4d9ba2514610ba6578063a82ed9ec14610bd4578063a9059cbb14610bfe576103cc565b806393e6b04a14610aba57806394da5dbf14610ae457806395d89b4114610b205780639dee70dd14610b4a576103cc565b806376e88ddb116101c057806376e88ddb14610a16578063834a33cf14610a3e5780638a8c523c14610a665780638da5cb5b14610a90576103cc565b806370a0823114610970578063715018a6146109ac57806373ad468a146109c25780637437681e146109ec576103cc565b80632c957aa0116102e1578063571ac8b01161027457806364c653c11161024357806364c653c1146108de578063658d4b7f1461090857806366eb3785146109305780636cf3fdb914610946576103cc565b8063571ac8b014610824578063573d8cf9146108605780635e3568b81461088a578063615494be146108b4576103cc565b80634f7041a5116102b05780634f7041a51461077c57806351fdefc9146107aa5780635220179f146107d4578063526b13fd146107fc576103cc565b80632c957aa0146106c6578063313ce567146106ee5780633307d372146107185780633f4218e014610740576103cc565b8063166319eb11610359578063295a521211610328578063295a52121461060857806329691448146106325780632a11ced01461065c5780632c7c314914610698576103cc565b8063166319eb1461054c57806318160ddd14610574578063204a68361461059e57806323b872dd146105cc576103cc565b8063095ea7b311610395578063095ea7b31461047c5780631029ce90146104b8578063122eff2b146104f4578063142a271114610522576103cc565b8062adef68146103d05780630445b667146103fe578063057a2c0e1461042857806306fdde0314610452576103cc565b366103cc57005b5f80fd5b3480156103db575f80fd5b506103e4610f32565b6040516103f5959493929190614ce6565b60405180910390f35b348015610409575f80fd5b50610412610f91565b60405161041f9190614d4f565b60405180910390f35b348015610433575f80fd5b5061043c610f97565b6040516104499190614d4f565b60405180910390f35b34801561045d575f80fd5b50610466610f9d565b6040516104739190614df2565b60405180910390f35b348015610487575f80fd5b506104a2600480360381019061049d9190614e9e565b61102d565b6040516104af9190614ef6565b60405180910390f35b3480156104c3575f80fd5b506104de60048036038101906104d99190614f0f565b61111a565b6040516104eb9190614f49565b60405180910390f35b3480156104ff575f80fd5b50610508611155565b604051610519959493929190614ce6565b60405180910390f35b34801561052d575f80fd5b506105366111b4565b6040516105439190614d4f565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190614f62565b6111ba565b005b34801561057f575f80fd5b50610588611204565b6040516105959190614d4f565b60405180910390f35b3480156105a9575f80fd5b506105b261120d565b6040516105c3959493929190614ce6565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190615013565b61126c565b6040516105ff9190614ef6565b60405180910390f35b348015610613575f80fd5b5061061c6114dc565b6040516106299190615063565b60405180910390f35b34801561063d575f80fd5b506106466114ee565b6040516106539190614ef6565b60405180910390f35b348015610667575f80fd5b50610682600480360381019061067d9190614f0f565b611501565b60405161068f9190614f49565b60405180910390f35b3480156106a3575f80fd5b506106ac61153c565b6040516106bd959493929190614ce6565b60405180910390f35b3480156106d1575f80fd5b506106ec60048036038101906106e791906150a6565b61159b565b005b3480156106f9575f80fd5b506107026115fb565b60405161070f9190615063565b60405180910390f35b348015610723575f80fd5b5061073e600480360381019061073991906150a6565b611610565b005b34801561074b575f80fd5b50610766600480360381019061076191906150e4565b611670565b6040516107739190614ef6565b60405180910390f35b348015610787575f80fd5b5061079061168d565b6040516107a1959493929190614ce6565b60405180910390f35b3480156107b5575f80fd5b506107be6116ec565b6040516107cb9190614d4f565b60405180910390f35b3480156107df575f80fd5b506107fa60048036038101906107f59190615139565b6116f2565b005b348015610807575f80fd5b50610822600480360381019061081d9190615164565b611706565b005b34801561082f575f80fd5b5061084a600480360381019061084591906150e4565b611761565b6040516108579190614ef6565b60405180910390f35b34801561086b575f80fd5b50610874611775565b6040516108819190614d4f565b60405180910390f35b348015610895575f80fd5b5061089e61177b565b6040516108ab9190614d4f565b60405180910390f35b3480156108bf575f80fd5b506108c8611781565b6040516108d59190614d4f565b60405180910390f35b3480156108e9575f80fd5b506108f2611787565b6040516108ff9190614d4f565b60405180910390f35b348015610913575f80fd5b5061092e600480360381019061092991906150a6565b61178d565b005b34801561093b575f80fd5b506109446117ed565b005b348015610951575f80fd5b5061095a61180d565b6040516109679190614d4f565b60405180910390f35b34801561097b575f80fd5b50610996600480360381019061099191906150e4565b611813565b6040516109a39190614d4f565b60405180910390f35b3480156109b7575f80fd5b506109c06118eb565b005b3480156109cd575f80fd5b506109d66118fe565b6040516109e39190614d4f565b60405180910390f35b3480156109f7575f80fd5b50610a00611904565b604051610a0d9190614d4f565b60405180910390f35b348015610a21575f80fd5b50610a3c6004803603810190610a379190615164565b61190a565b005b348015610a49575f80fd5b50610a646004803603810190610a5f9190615164565b61192f565b005b348015610a71575f80fd5b50610a7a611954565b604051610a879190614ef6565b60405180910390f35b348015610a9b575f80fd5b50610aa4611966565b604051610ab19190614f49565b60405180910390f35b348015610ac5575f80fd5b50610ace61198d565b604051610adb9190614ef6565b60405180910390f35b348015610aef575f80fd5b50610b0a6004803603810190610b0591906150e4565b6119a0565b604051610b179190614ef6565b60405180910390f35b348015610b2b575f80fd5b50610b346119bd565b604051610b419190614df2565b60405180910390f35b348015610b55575f80fd5b50610b5e611a4d565b604051610b6f959493929190614ce6565b60405180910390f35b348015610b83575f80fd5b50610b8c611aac565b604051610b9d959493929190614ce6565b60405180910390f35b348015610bb1575f80fd5b50610bba611b0b565b604051610bcb959493929190614ce6565b60405180910390f35b348015610bdf575f80fd5b50610be8611b6a565b604051610bf591906151ea565b60405180910390f35b348015610c09575f80fd5b50610c246004803603810190610c1f9190614e9e565b611b8f565b604051610c319190614ef6565b60405180910390f35b348015610c45575f80fd5b50610c606004803603810190610c5b91906150e4565b611ba3565b604051610c6d9190614ef6565b60405180910390f35b348015610c81575f80fd5b50610c8a611bc0565b604051610c9b959493929190614ce6565b60405180910390f35b348015610caf575f80fd5b50610cb8611c1f565b604051610cc9959493929190614ce6565b60405180910390f35b348015610cdd575f80fd5b50610ce6611c7e565b604051610cf7959493929190614ce6565b60405180910390f35b348015610d0b575f80fd5b50610d266004803603810190610d219190614f0f565b611cdd565b005b348015610d33575f80fd5b50610d4e6004803603810190610d4991906150e4565b611cef565b604051610d5b9190614ef6565b60405180910390f35b348015610d6f575f80fd5b50610d78611d0c565b604051610d859190614d4f565b60405180910390f35b348015610d99575f80fd5b50610db46004803603810190610daf9190615203565b611d12565b604051610dc19190614d4f565b60405180910390f35b348015610dd5575f80fd5b50610df06004803603810190610deb91906150e4565b611d94565b005b348015610dfd575f80fd5b50610e186004803603810190610e139190615241565b611ddf565b604051610e259190614ef6565b60405180910390f35b348015610e39575f80fd5b50610e42611e09565b604051610e53959493929190614ce6565b60405180910390f35b348015610e67575f80fd5b50610e826004803603810190610e7d91906150e4565b611e68565b005b348015610e8f575f80fd5b50610e98611eea565b604051610ea59190614f49565b60405180910390f35b348015610eb9575f80fd5b50610ec2611f0f565b604051610ed3959493929190614ce6565b60405180910390f35b348015610ee7575f80fd5b50610f026004803603810190610efd91906152e0565b611f6e565b005b348015610f0f575f80fd5b50610f1861210a565b604051610f29959493929190614ce6565b60405180910390f35b601d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b600e5481565b601b5481565b606060058054610fac90615358565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890615358565b80156110235780601f10610ffa57610100808354040283529160200191611023565b820191905f5260205f20905b81548152906001019060200180831161100657829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111089190614d4f565b60405180910390a36001905092915050565b602c8181548110611129575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6023805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60375481565b6111c2612169565b87600f81905550866010819055508560118190555084601281905550836013819055508260148190555081601581905550806016819055505050505050505050565b5f600854905090565b601f805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146114c85781600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be906153d2565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461144b919061541d565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6114d38484846121e7565b90509392505050565b601a5f9054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b60358181548110611510575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6026805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6115a3612169565b8060335f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900460ff16905090565b611618612169565b8060325f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6031602052805f5260405f205f915054906101000a900460ff1681565b602d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60175481565b6116fa612169565b611703816124ae565b50565b61170e612169565b80600b5f6101000a81548160ff0219169083151502179055507fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223816040516117569190614ef6565b60405180910390a150565b5f61176e8260085461102d565b9050919050565b601c5481565b602a5481565b60365481565b60185481565b611795612169565b8060315f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117f5612169565b6117fd61301d565b1561180b5761180a6130ba565b5b565b60195481565b5f8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905060325f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156118ad57505f603654115b80156118be57506002603580549050115b156118e257603580549050816118d4919061547d565b816118df91906154ad565b90505b80915050919050565b6118f3612169565b6118fc5f61333e565b565b600c5481565b600d5481565b611912612169565b80600b60016101000a81548160ff02191690831515021790555050565b611937612169565b80601a60016101000a81548160ff02191690831515021790555050565b600b5f9054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60019054906101000a900460ff1681565b6033602052805f5260405f205f915054906101000a900460ff1681565b6060600680546119cc90615358565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890615358565b8015611a435780601f10611a1a57610100808354040283529160200191611a43565b820191905f5260205f20905b815481529060010190602001808311611a2657829003601f168201915b5050505050905090565b601e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6027805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6025805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b9b3384846121e7565b905092915050565b6032602052805f5260405f205f915054906101000a900460ff1681565b6024805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6020805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b602e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611ce5612169565b80600e8190555050565b6034602052805f5260405f205f915054906101000a900460ff1681565b60295481565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611d9c612169565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602b602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b6022805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611e70612169565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590615550565b60405180910390fd5b611ee78161333e565b50565b60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6028805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611f76612169565b5f60375411611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb1906155b8565b60405180910390fd5b5f82829050603754611fcc919061547d565b90505f6037819055505f5b838390508160ff161015612104578160095f86868560ff16818110611fff57611ffe6155d6565b5b905060200201602081019061201491906150e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461205b91906154ad565b9250508190555083838260ff16818110612078576120776155d6565b5b905060200201602081019061208d91906150e4565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120e99190614d4f565b60405180910390a380806120fc90615603565b915050611fd7565b50505050565b6021805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6121716133ff565b73ffffffffffffffffffffffffffffffffffffffff1661218f611966565b73ffffffffffffffffffffffffffffffffffffffff16146121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc90615675565b60405180910390fd5b565b5f6121f28484613406565b6121fc8383613507565b60385f9054906101000a900460ff16156122225761221b8484846135fc565b90506124a7565b61222a61301d565b15612238576122376130ba565b5b60325f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166122905761228f846137d8565b5b612317826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138689092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612361846138bc565b5f61236c8585613c0a565b6123765782612382565b612381858585613cb0565b5b90506123d48160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613cf090919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061241e846138bc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161247b9190614d4f565b60405180910390a3601a60019054906101000a900460ff16156124a1576124a0613d05565b5b60019150505b9392505050565b6006601a5f9054906101000a900460ff1660ff161480156124d3575060068160ff1614155b156124e1576124e0613d77565b5b60028160ff16036126b357601f602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506020602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fc2565b60038160ff1603612885576021602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506022602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fc1565b60048160ff1603612a57576023602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506024602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fc0565b60058160ff1603612c29576025602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506026602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fbf565b60068160ff1603612dfb576027602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506028602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fbe565b601d602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050601e602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505b5b5b5b5b80601a5f6101000a81548160ff021916908360ff16021790555042601b819055507f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e86816040516130129190615063565b60405180910390a150565b5f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156130875750600b60019054906101000a900460ff165b801561309f575060385f9054906101000a900460ff16155b80156130b55750600e546130b230611813565b10155b905090565b600160385f6101000a81548160ff0219169083151502179055505f6130de30611813565b905061310b602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261102d565b505f600267ffffffffffffffff81111561312857613127615693565b5b6040519080825280602002602001820160405280156131565781602001602082028036833780820191505090505b50905030815f8151811061316d5761316c6155d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613211573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323591906156d4565b81600181518110613249576132486155d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132e59594939291906157ef565b5f604051808303815f87803b1580156132fc575f80fd5b505af115801561330e573d5f803e3d5ffd5b505050505f4790506133208184613eb8565b5050505f60385f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b600b5f9054906101000a900460ff166135035760305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156134c3575060305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f990615891565b60405180910390fd5b5b5050565b60335f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166135f857600d5481111561359a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135919061591f565b60405180910390fd5b5f816135a584611813565b6135af91906154ad565b9050600c548111156135f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ed90615987565b60405180910390fd5b505b5050565b5f613684826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138689092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506136ce846138bc565b61371e8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613cf090919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613768836138bc565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137c59190614d4f565b60405180910390a3600190509392505050565b5f6036541115613865575f6035805490506036546137f6919061547d565b90508060365f828254613809919061541d565b925050819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461385c91906154ad565b92505081905550505b50565b5f8383111582906138af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a69190614df2565b60405180910390fd5b5082840390509392505050565b5f6138c682611813565b90505f8111156139d95760345f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166139d457600160345f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550603582908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b613c06565b60345f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613c05575f60345f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b6001603580549050613a90919061541d565b811015613bbf578273ffffffffffffffffffffffffffffffffffffffff1660358281548110613ac257613ac16155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613bac5760356001603580549050613b19919061541d565b81548110613b2a57613b296155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660358281548110613b6657613b656155d6565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8080613bb7906159a5565b915050613a7e565b506035805480613bd257613bd16159ec565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5b5050565b5f60315f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580613ca8575060315f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f80601a5f9054906101000a900460ff1660ff161115613cdc57613cd5848484614119565b9050613ce9565b613ce6848361476f565b90505b9392505050565b5f8183613cfd91906154ad565b905092915050565b5f601a5f9054906101000a900460ff1690505f8160ff1603613d275750613d75565b5f601b5442613d36919061541d565b9050601c54811015613d49575050613d75565b600182613d569190615a19565b915060068260ff161115613d6957600191505b613d72826124ae565b50505b565b6001602a5f828254613d8991906154ad565b925050819055505f6029540315613eb6575f602c8054905090505f81602954613db2919061547d565b90505f5b82811015613e64575f602c8281548110613dd357613dd26155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613e4991906154ad565b92505081905550508080613e5c906159a5565b915050613db6565b505f602981905550602c5f613e799190614c92565b7fde01858d260cb2aab5a7bfe1b02ccad5a0b083cdb1b4a8c642c7d4d7d85f2085602c82604051613eab929190615b2d565b60405180910390a150505b565b5f601954601854601754613ecc91906154ad565b613ed691906154ad565b90505f8160175485613ee89190615b5b565b613ef2919061547d565b90505f8260175485613f049190615b5b565b613f0e919061547d565b90505f8360185487613f209190615b5b565b613f2a919061547d565b90505f8460185487613f3c9190615b5b565b613f46919061547d565b90505f828589613f56919061541d565b613f60919061541d565b90505f828589613f70919061541d565b613f7a919061541d565b90505f8611156140025760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8790811502906040515f60405180830381858888f19350505050158015613fe8573d5f803e3d5ffd5b508460175f828254613ffa919061541d565b925050819055505b5f8411156140885760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f1935050505015801561406e573d5f803e3d5ffd5b508260185f828254614080919061541d565b925050819055505b5f82111561410e5760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156140f4573d5f803e3d5ffd5b508060195f828254614106919061541d565b925050819055505b505050505050505050565b5f80602e6040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505090505f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036142a957602d6040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff16815250509150600190505b5f6064836080015160ff16866142bf9190615b5b565b6142c9919061547d565b90505f835f015160ff16111561436d575f836080015160ff16845f015160ff16836142f49190615b5b565b6142fe919061547d565b90508060195f82825461431191906154ad565b925050819055508060095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461436491906154ad565b92505081905550505b5f836020015160ff161115614619575f836080015160ff16846020015160ff16836143989190615b5b565b6143a2919061547d565b90506003601a5f9054906101000a900460ff1660ff1603614415578060375f8282546143ce91906154ad565b925050819055507fe67cffa4bbbf9dd312cee0b0eecb1a9ad54f728b39320b7a745389859bf59cae81603754604051614408929190615b9c565b60405180910390a1614617565b6006601a5f9054906101000a900460ff1660ff16036145c2578060295f82825461443f91906154ad565b925050819055508261448b577fbc105e9024dec52ec78803e23877e0b53040838469fd53247dae9c4a7828a2688160295460405161447e929190615b9c565b60405180910390a16145bd565b8280156144f05750602b5f602a5481526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156145bc576001602b5f602a5481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602c87908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b614616565b8060365f8282546145d391906154ad565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c2453648160365460405161460d929190615b9c565b60405180910390a15b5b505b5f836040015160ff16111561465b575f836080015160ff16846040015160ff16836146449190615b5b565b61464e919061547d565b9050614659816149b3565b505b5f836060015160ff161115614750575f836080015160ff16846060015160ff16836146869190615b5b565b614690919061547d565b90508060095f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546146e091906154ad565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516147469190614d4f565b60405180910390a3505b6147638186614c1890919063ffffffff16565b93505050509392505050565b5f8060135490505f60145490505f60155490505f601654905060305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036147f157600f5493506010549250601154915060125490505b5f606485886148009190615b5b565b61480a919061547d565b90505f6064858961481b9190615b5b565b614825919061547d565b90505f6064848a6148369190615b5b565b614840919061547d565b90505f6064868b6148519190615b5b565b61485b919061547d565b90505f8611156148b9578060365f82825461487691906154ad565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364816036546040516148b0929190615b9c565b60405180910390a15b8360175f8282546148ca91906154ad565b925050819055508260185f8282546148e291906154ad565b925050819055508160195f8282546148fa91906154ad565b9250508190555081838561490e91906154ad565b61491891906154ad565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461496391906154ad565b925050819055505f8183858761497991906154ad565b61498391906154ad565b61498d91906154ad565b90506149a2818c614c1890919063ffffffff16565b995050505050505050505092915050565b5f6149bf600180614c2d565b90505f603582815481106149d6576149d56155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614a6a575061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015614ac35750602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015614b1c575060305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15614c13578260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254614b6d91906154ad565b925050819055507fe4cbe3422132330d6356a5b83b4e8887027dcfada3b80fec7e557cf26431470d8184604051614ba5929190615bc3565b60405180910390a18073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614c0a9190614d4f565b60405180910390a35b505050565b5f8183614c25919061541d565b905092915050565b5f80333a4342600143614c40919061541d565b408888604051602001614c599796959493929190615c02565b604051602081830303815290604052805190602001205f1c90505f60358054905082614c859190615c6f565b9050809250505092915050565b5080545f8255905f5260205f2090810190614cad9190614cb0565b50565b5b80821115614cc7575f815f905550600101614cb1565b5090565b5f60ff82169050919050565b614ce081614ccb565b82525050565b5f60a082019050614cf95f830188614cd7565b614d066020830187614cd7565b614d136040830186614cd7565b614d206060830185614cd7565b614d2d6080830184614cd7565b9695505050505050565b5f819050919050565b614d4981614d37565b82525050565b5f602082019050614d625f830184614d40565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614d9f578082015181840152602081019050614d84565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614dc482614d68565b614dce8185614d72565b9350614dde818560208601614d82565b614de781614daa565b840191505092915050565b5f6020820190508181035f830152614e0a8184614dba565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614e4382614e1a565b9050919050565b614e5381614e39565b8114614e5d575f80fd5b50565b5f81359050614e6e81614e4a565b92915050565b614e7d81614d37565b8114614e87575f80fd5b50565b5f81359050614e9881614e74565b92915050565b5f8060408385031215614eb457614eb3614e12565b5b5f614ec185828601614e60565b9250506020614ed285828601614e8a565b9150509250929050565b5f8115159050919050565b614ef081614edc565b82525050565b5f602082019050614f095f830184614ee7565b92915050565b5f60208284031215614f2457614f23614e12565b5b5f614f3184828501614e8a565b91505092915050565b614f4381614e39565b82525050565b5f602082019050614f5c5f830184614f3a565b92915050565b5f805f805f805f80610100898b031215614f7f57614f7e614e12565b5b5f614f8c8b828c01614e8a565b9850506020614f9d8b828c01614e8a565b9750506040614fae8b828c01614e8a565b9650506060614fbf8b828c01614e8a565b9550506080614fd08b828c01614e8a565b94505060a0614fe18b828c01614e8a565b93505060c0614ff28b828c01614e8a565b92505060e06150038b828c01614e8a565b9150509295985092959890939650565b5f805f6060848603121561502a57615029614e12565b5b5f61503786828701614e60565b935050602061504886828701614e60565b925050604061505986828701614e8a565b9150509250925092565b5f6020820190506150765f830184614cd7565b92915050565b61508581614edc565b811461508f575f80fd5b50565b5f813590506150a08161507c565b92915050565b5f80604083850312156150bc576150bb614e12565b5b5f6150c985828601614e60565b92505060206150da85828601615092565b9150509250929050565b5f602082840312156150f9576150f8614e12565b5b5f61510684828501614e60565b91505092915050565b61511881614ccb565b8114615122575f80fd5b50565b5f813590506151338161510f565b92915050565b5f6020828403121561514e5761514d614e12565b5b5f61515b84828501615125565b91505092915050565b5f6020828403121561517957615178614e12565b5b5f61518684828501615092565b91505092915050565b5f819050919050565b5f6151b26151ad6151a884614e1a565b61518f565b614e1a565b9050919050565b5f6151c382615198565b9050919050565b5f6151d4826151b9565b9050919050565b6151e4816151ca565b82525050565b5f6020820190506151fd5f8301846151db565b92915050565b5f806040838503121561521957615218614e12565b5b5f61522685828601614e60565b925050602061523785828601614e60565b9150509250929050565b5f806040838503121561525757615256614e12565b5b5f61526485828601614e8a565b925050602061527585828601614e60565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126152a05761529f61527f565b5b8235905067ffffffffffffffff8111156152bd576152bc615283565b5b6020830191508360208202830111156152d9576152d8615287565b5b9250929050565b5f80602083850312156152f6576152f5614e12565b5b5f83013567ffffffffffffffff81111561531357615312614e16565b5b61531f8582860161528b565b92509250509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061536f57607f821691505b6020821081036153825761538161532b565b5b50919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6153bc601d83614d72565b91506153c782615388565b602082019050919050565b5f6020820190508181035f8301526153e9816153b0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61542782614d37565b915061543283614d37565b925082820390508181111561544a576154496153f0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61548782614d37565b915061549283614d37565b9250826154a2576154a1615450565b5b828204905092915050565b5f6154b782614d37565b91506154c283614d37565b92508282019050808211156154da576154d96153f0565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61553a602683614d72565b9150615545826154e0565b604082019050919050565b5f6020820190508181035f8301526155678161552e565b9050919050565b7f5265776172642073686f756c6420626520617661696c61626c650000000000005f82015250565b5f6155a2601a83614d72565b91506155ad8261556e565b602082019050919050565b5f6020820190508181035f8301526155cf81615596565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61560d82614ccb565b915060ff82036156205761561f6153f0565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61565f602083614d72565b915061566a8261562b565b602082019050919050565b5f6020820190508181035f83015261568c81615653565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506156ce81614e4a565b92915050565b5f602082840312156156e9576156e8614e12565b5b5f6156f6848285016156c0565b91505092915050565b5f819050919050565b5f61572261571d615718846156ff565b61518f565b614d37565b9050919050565b61573281615708565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61576a81614e39565b82525050565b5f61577b8383615761565b60208301905092915050565b5f602082019050919050565b5f61579d82615738565b6157a78185615742565b93506157b283615752565b805f5b838110156157e25781516157c98882615770565b97506157d483615787565b9250506001810190506157b5565b5085935050505092915050565b5f60a0820190506158025f830188614d40565b61580f6020830187615729565b81810360408301526158218186615793565b90506158306060830185614f3a565b61583d6080830184614d40565b9695505050505050565b7f54726164696e672069732064697361626c6564210000000000000000000000005f82015250565b5f61587b601483614d72565b915061588682615847565b602082019050919050565b5f6020820190508181035f8301526158a88161586f565b9050919050565b7f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d6974655f8201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b5f615909602283614d72565b9150615914826158af565b604082019050919050565b5f6020820190508181035f830152615936816158fd565b9050919050565b7f4d61782062616c616e6365206973206c696d69746564210000000000000000005f82015250565b5f615971601783614d72565b915061597c8261593d565b602082019050919050565b5f6020820190508181035f83015261599e81615965565b9050919050565b5f6159af82614d37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159e1576159e06153f0565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f615a2382614ccb565b9150615a2e83614ccb565b9250828201905060ff811115615a4757615a466153f0565b5b92915050565b5f81549050919050565b5f819050815f5260205f209050919050565b5f815f1c9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f615aa5615aa083615a69565b615a74565b9050919050565b5f615ab78254615a93565b9050919050565b5f600182019050919050565b5f615ad482615a4d565b615ade8185615742565b9350615ae983615a57565b805f5b83811015615b2057615afd82615aac565b615b078882615770565b9750615b1283615abe565b925050600181019050615aec565b5085935050505092915050565b5f6040820190508181035f830152615b458185615aca565b9050615b546020830184614d40565b9392505050565b5f615b6582614d37565b9150615b7083614d37565b9250828202615b7e81614d37565b91508282048414831517615b9557615b946153f0565b5b5092915050565b5f604082019050615baf5f830185614d40565b615bbc6020830184614d40565b9392505050565b5f604082019050615bd65f830185614f3a565b615be36020830184614d40565b9392505050565b5f819050919050565b615bfc81615bea565b82525050565b5f60e082019050615c155f83018a614f3a565b615c226020830189614d40565b615c2f6040830188614d40565b615c3c6060830187614d40565b615c496080830186615bf3565b615c5660a0830185614d40565b615c6360c0830184614d40565b98975050505050505050565b5f615c7982614d37565b9150615c8483614d37565b925082615c9457615c93615450565b5b82820690509291505056fea264697066735822122031468f289e98d627559b20438e37dcc0ef9259d47b10a4e65f5693ada7f86f1364736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103c5575f3560e01c806370a08231116101f1578063b1bd37741161010c578063e01bb6881161009f578063f40acc3d1161006e578063f40acc3d14610e84578063f5db574214610eae578063f9c683c014610edc578063ff131b4e14610f04576103cc565b8063e01bb68814610dca578063e192d48514610df2578063e839363b14610e2e578063f2fde38b14610e5c576103cc565b8063cc274b29116100db578063cc274b2914610d00578063d4d7b19a14610d28578063d6db1d8214610d64578063dd62ed3e14610d8e576103cc565b8063b1bd377414610c3a578063b876e5e214610c76578063c15d854f14610ca4578063cc1776d314610cd2576103cc565b806393e6b04a11610184578063a2d2be8411610153578063a2d2be8414610b78578063a4d9ba2514610ba6578063a82ed9ec14610bd4578063a9059cbb14610bfe576103cc565b806393e6b04a14610aba57806394da5dbf14610ae457806395d89b4114610b205780639dee70dd14610b4a576103cc565b806376e88ddb116101c057806376e88ddb14610a16578063834a33cf14610a3e5780638a8c523c14610a665780638da5cb5b14610a90576103cc565b806370a0823114610970578063715018a6146109ac57806373ad468a146109c25780637437681e146109ec576103cc565b80632c957aa0116102e1578063571ac8b01161027457806364c653c11161024357806364c653c1146108de578063658d4b7f1461090857806366eb3785146109305780636cf3fdb914610946576103cc565b8063571ac8b014610824578063573d8cf9146108605780635e3568b81461088a578063615494be146108b4576103cc565b80634f7041a5116102b05780634f7041a51461077c57806351fdefc9146107aa5780635220179f146107d4578063526b13fd146107fc576103cc565b80632c957aa0146106c6578063313ce567146106ee5780633307d372146107185780633f4218e014610740576103cc565b8063166319eb11610359578063295a521211610328578063295a52121461060857806329691448146106325780632a11ced01461065c5780632c7c314914610698576103cc565b8063166319eb1461054c57806318160ddd14610574578063204a68361461059e57806323b872dd146105cc576103cc565b8063095ea7b311610395578063095ea7b31461047c5780631029ce90146104b8578063122eff2b146104f4578063142a271114610522576103cc565b8062adef68146103d05780630445b667146103fe578063057a2c0e1461042857806306fdde0314610452576103cc565b366103cc57005b5f80fd5b3480156103db575f80fd5b506103e4610f32565b6040516103f5959493929190614ce6565b60405180910390f35b348015610409575f80fd5b50610412610f91565b60405161041f9190614d4f565b60405180910390f35b348015610433575f80fd5b5061043c610f97565b6040516104499190614d4f565b60405180910390f35b34801561045d575f80fd5b50610466610f9d565b6040516104739190614df2565b60405180910390f35b348015610487575f80fd5b506104a2600480360381019061049d9190614e9e565b61102d565b6040516104af9190614ef6565b60405180910390f35b3480156104c3575f80fd5b506104de60048036038101906104d99190614f0f565b61111a565b6040516104eb9190614f49565b60405180910390f35b3480156104ff575f80fd5b50610508611155565b604051610519959493929190614ce6565b60405180910390f35b34801561052d575f80fd5b506105366111b4565b6040516105439190614d4f565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190614f62565b6111ba565b005b34801561057f575f80fd5b50610588611204565b6040516105959190614d4f565b60405180910390f35b3480156105a9575f80fd5b506105b261120d565b6040516105c3959493929190614ce6565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190615013565b61126c565b6040516105ff9190614ef6565b60405180910390f35b348015610613575f80fd5b5061061c6114dc565b6040516106299190615063565b60405180910390f35b34801561063d575f80fd5b506106466114ee565b6040516106539190614ef6565b60405180910390f35b348015610667575f80fd5b50610682600480360381019061067d9190614f0f565b611501565b60405161068f9190614f49565b60405180910390f35b3480156106a3575f80fd5b506106ac61153c565b6040516106bd959493929190614ce6565b60405180910390f35b3480156106d1575f80fd5b506106ec60048036038101906106e791906150a6565b61159b565b005b3480156106f9575f80fd5b506107026115fb565b60405161070f9190615063565b60405180910390f35b348015610723575f80fd5b5061073e600480360381019061073991906150a6565b611610565b005b34801561074b575f80fd5b50610766600480360381019061076191906150e4565b611670565b6040516107739190614ef6565b60405180910390f35b348015610787575f80fd5b5061079061168d565b6040516107a1959493929190614ce6565b60405180910390f35b3480156107b5575f80fd5b506107be6116ec565b6040516107cb9190614d4f565b60405180910390f35b3480156107df575f80fd5b506107fa60048036038101906107f59190615139565b6116f2565b005b348015610807575f80fd5b50610822600480360381019061081d9190615164565b611706565b005b34801561082f575f80fd5b5061084a600480360381019061084591906150e4565b611761565b6040516108579190614ef6565b60405180910390f35b34801561086b575f80fd5b50610874611775565b6040516108819190614d4f565b60405180910390f35b348015610895575f80fd5b5061089e61177b565b6040516108ab9190614d4f565b60405180910390f35b3480156108bf575f80fd5b506108c8611781565b6040516108d59190614d4f565b60405180910390f35b3480156108e9575f80fd5b506108f2611787565b6040516108ff9190614d4f565b60405180910390f35b348015610913575f80fd5b5061092e600480360381019061092991906150a6565b61178d565b005b34801561093b575f80fd5b506109446117ed565b005b348015610951575f80fd5b5061095a61180d565b6040516109679190614d4f565b60405180910390f35b34801561097b575f80fd5b50610996600480360381019061099191906150e4565b611813565b6040516109a39190614d4f565b60405180910390f35b3480156109b7575f80fd5b506109c06118eb565b005b3480156109cd575f80fd5b506109d66118fe565b6040516109e39190614d4f565b60405180910390f35b3480156109f7575f80fd5b50610a00611904565b604051610a0d9190614d4f565b60405180910390f35b348015610a21575f80fd5b50610a3c6004803603810190610a379190615164565b61190a565b005b348015610a49575f80fd5b50610a646004803603810190610a5f9190615164565b61192f565b005b348015610a71575f80fd5b50610a7a611954565b604051610a879190614ef6565b60405180910390f35b348015610a9b575f80fd5b50610aa4611966565b604051610ab19190614f49565b60405180910390f35b348015610ac5575f80fd5b50610ace61198d565b604051610adb9190614ef6565b60405180910390f35b348015610aef575f80fd5b50610b0a6004803603810190610b0591906150e4565b6119a0565b604051610b179190614ef6565b60405180910390f35b348015610b2b575f80fd5b50610b346119bd565b604051610b419190614df2565b60405180910390f35b348015610b55575f80fd5b50610b5e611a4d565b604051610b6f959493929190614ce6565b60405180910390f35b348015610b83575f80fd5b50610b8c611aac565b604051610b9d959493929190614ce6565b60405180910390f35b348015610bb1575f80fd5b50610bba611b0b565b604051610bcb959493929190614ce6565b60405180910390f35b348015610bdf575f80fd5b50610be8611b6a565b604051610bf591906151ea565b60405180910390f35b348015610c09575f80fd5b50610c246004803603810190610c1f9190614e9e565b611b8f565b604051610c319190614ef6565b60405180910390f35b348015610c45575f80fd5b50610c606004803603810190610c5b91906150e4565b611ba3565b604051610c6d9190614ef6565b60405180910390f35b348015610c81575f80fd5b50610c8a611bc0565b604051610c9b959493929190614ce6565b60405180910390f35b348015610caf575f80fd5b50610cb8611c1f565b604051610cc9959493929190614ce6565b60405180910390f35b348015610cdd575f80fd5b50610ce6611c7e565b604051610cf7959493929190614ce6565b60405180910390f35b348015610d0b575f80fd5b50610d266004803603810190610d219190614f0f565b611cdd565b005b348015610d33575f80fd5b50610d4e6004803603810190610d4991906150e4565b611cef565b604051610d5b9190614ef6565b60405180910390f35b348015610d6f575f80fd5b50610d78611d0c565b604051610d859190614d4f565b60405180910390f35b348015610d99575f80fd5b50610db46004803603810190610daf9190615203565b611d12565b604051610dc19190614d4f565b60405180910390f35b348015610dd5575f80fd5b50610df06004803603810190610deb91906150e4565b611d94565b005b348015610dfd575f80fd5b50610e186004803603810190610e139190615241565b611ddf565b604051610e259190614ef6565b60405180910390f35b348015610e39575f80fd5b50610e42611e09565b604051610e53959493929190614ce6565b60405180910390f35b348015610e67575f80fd5b50610e826004803603810190610e7d91906150e4565b611e68565b005b348015610e8f575f80fd5b50610e98611eea565b604051610ea59190614f49565b60405180910390f35b348015610eb9575f80fd5b50610ec2611f0f565b604051610ed3959493929190614ce6565b60405180910390f35b348015610ee7575f80fd5b50610f026004803603810190610efd91906152e0565b611f6e565b005b348015610f0f575f80fd5b50610f1861210a565b604051610f29959493929190614ce6565b60405180910390f35b601d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b600e5481565b601b5481565b606060058054610fac90615358565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890615358565b80156110235780601f10610ffa57610100808354040283529160200191611023565b820191905f5260205f20905b81548152906001019060200180831161100657829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111089190614d4f565b60405180910390a36001905092915050565b602c8181548110611129575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6023805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60375481565b6111c2612169565b87600f81905550866010819055508560118190555084601281905550836013819055508260148190555081601581905550806016819055505050505050505050565b5f600854905090565b601f805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146114c85781600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be906153d2565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461144b919061541d565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6114d38484846121e7565b90509392505050565b601a5f9054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b60358181548110611510575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6026805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6115a3612169565b8060335f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900460ff16905090565b611618612169565b8060325f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6031602052805f5260405f205f915054906101000a900460ff1681565b602d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60175481565b6116fa612169565b611703816124ae565b50565b61170e612169565b80600b5f6101000a81548160ff0219169083151502179055507fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223816040516117569190614ef6565b60405180910390a150565b5f61176e8260085461102d565b9050919050565b601c5481565b602a5481565b60365481565b60185481565b611795612169565b8060315f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117f5612169565b6117fd61301d565b1561180b5761180a6130ba565b5b565b60195481565b5f8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905060325f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156118ad57505f603654115b80156118be57506002603580549050115b156118e257603580549050816118d4919061547d565b816118df91906154ad565b90505b80915050919050565b6118f3612169565b6118fc5f61333e565b565b600c5481565b600d5481565b611912612169565b80600b60016101000a81548160ff02191690831515021790555050565b611937612169565b80601a60016101000a81548160ff02191690831515021790555050565b600b5f9054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60019054906101000a900460ff1681565b6033602052805f5260405f205f915054906101000a900460ff1681565b6060600680546119cc90615358565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890615358565b8015611a435780601f10611a1a57610100808354040283529160200191611a43565b820191905f5260205f20905b815481529060010190602001808311611a2657829003601f168201915b5050505050905090565b601e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6027805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6025805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b9b3384846121e7565b905092915050565b6032602052805f5260405f205f915054906101000a900460ff1681565b6024805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6020805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b602e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611ce5612169565b80600e8190555050565b6034602052805f5260405f205f915054906101000a900460ff1681565b60295481565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611d9c612169565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602b602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b6022805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611e70612169565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590615550565b60405180910390fd5b611ee78161333e565b50565b60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6028805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611f76612169565b5f60375411611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb1906155b8565b60405180910390fd5b5f82829050603754611fcc919061547d565b90505f6037819055505f5b838390508160ff161015612104578160095f86868560ff16818110611fff57611ffe6155d6565b5b905060200201602081019061201491906150e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461205b91906154ad565b9250508190555083838260ff16818110612078576120776155d6565b5b905060200201602081019061208d91906150e4565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120e99190614d4f565b60405180910390a380806120fc90615603565b915050611fd7565b50505050565b6021805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6121716133ff565b73ffffffffffffffffffffffffffffffffffffffff1661218f611966565b73ffffffffffffffffffffffffffffffffffffffff16146121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc90615675565b60405180910390fd5b565b5f6121f28484613406565b6121fc8383613507565b60385f9054906101000a900460ff16156122225761221b8484846135fc565b90506124a7565b61222a61301d565b15612238576122376130ba565b5b60325f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166122905761228f846137d8565b5b612317826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138689092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612361846138bc565b5f61236c8585613c0a565b6123765782612382565b612381858585613cb0565b5b90506123d48160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613cf090919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061241e846138bc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161247b9190614d4f565b60405180910390a3601a60019054906101000a900460ff16156124a1576124a0613d05565b5b60019150505b9392505050565b6006601a5f9054906101000a900460ff1660ff161480156124d3575060068160ff1614155b156124e1576124e0613d77565b5b60028160ff16036126b357601f602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506020602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fc2565b60038160ff1603612885576021602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506022602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fc1565b60048160ff1603612a57576023602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506024602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fc0565b60058160ff1603612c29576025602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506026602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fbf565b60068160ff1603612dfb576027602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050506028602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612fbe565b601d602d5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050601e602e5f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505b5b5b5b5b80601a5f6101000a81548160ff021916908360ff16021790555042601b819055507f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e86816040516130129190615063565b60405180910390a150565b5f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156130875750600b60019054906101000a900460ff165b801561309f575060385f9054906101000a900460ff16155b80156130b55750600e546130b230611813565b10155b905090565b600160385f6101000a81548160ff0219169083151502179055505f6130de30611813565b905061310b602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261102d565b505f600267ffffffffffffffff81111561312857613127615693565b5b6040519080825280602002602001820160405280156131565781602001602082028036833780820191505090505b50905030815f8151811061316d5761316c6155d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613211573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323591906156d4565b81600181518110613249576132486155d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132e59594939291906157ef565b5f604051808303815f87803b1580156132fc575f80fd5b505af115801561330e573d5f803e3d5ffd5b505050505f4790506133208184613eb8565b5050505f60385f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b600b5f9054906101000a900460ff166135035760305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156134c3575060305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f990615891565b60405180910390fd5b5b5050565b60335f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166135f857600d5481111561359a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135919061591f565b60405180910390fd5b5f816135a584611813565b6135af91906154ad565b9050600c548111156135f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ed90615987565b60405180910390fd5b505b5050565b5f613684826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138689092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506136ce846138bc565b61371e8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613cf090919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613768836138bc565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137c59190614d4f565b60405180910390a3600190509392505050565b5f6036541115613865575f6035805490506036546137f6919061547d565b90508060365f828254613809919061541d565b925050819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461385c91906154ad565b92505081905550505b50565b5f8383111582906138af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a69190614df2565b60405180910390fd5b5082840390509392505050565b5f6138c682611813565b90505f8111156139d95760345f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166139d457600160345f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550603582908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b613c06565b60345f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613c05575f60345f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b6001603580549050613a90919061541d565b811015613bbf578273ffffffffffffffffffffffffffffffffffffffff1660358281548110613ac257613ac16155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613bac5760356001603580549050613b19919061541d565b81548110613b2a57613b296155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660358281548110613b6657613b656155d6565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8080613bb7906159a5565b915050613a7e565b506035805480613bd257613bd16159ec565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5b5050565b5f60315f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580613ca8575060315f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f80601a5f9054906101000a900460ff1660ff161115613cdc57613cd5848484614119565b9050613ce9565b613ce6848361476f565b90505b9392505050565b5f8183613cfd91906154ad565b905092915050565b5f601a5f9054906101000a900460ff1690505f8160ff1603613d275750613d75565b5f601b5442613d36919061541d565b9050601c54811015613d49575050613d75565b600182613d569190615a19565b915060068260ff161115613d6957600191505b613d72826124ae565b50505b565b6001602a5f828254613d8991906154ad565b925050819055505f6029540315613eb6575f602c8054905090505f81602954613db2919061547d565b90505f5b82811015613e64575f602c8281548110613dd357613dd26155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613e4991906154ad565b92505081905550508080613e5c906159a5565b915050613db6565b505f602981905550602c5f613e799190614c92565b7fde01858d260cb2aab5a7bfe1b02ccad5a0b083cdb1b4a8c642c7d4d7d85f2085602c82604051613eab929190615b2d565b60405180910390a150505b565b5f601954601854601754613ecc91906154ad565b613ed691906154ad565b90505f8160175485613ee89190615b5b565b613ef2919061547d565b90505f8260175485613f049190615b5b565b613f0e919061547d565b90505f8360185487613f209190615b5b565b613f2a919061547d565b90505f8460185487613f3c9190615b5b565b613f46919061547d565b90505f828589613f56919061541d565b613f60919061541d565b90505f828589613f70919061541d565b613f7a919061541d565b90505f8611156140025760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8790811502906040515f60405180830381858888f19350505050158015613fe8573d5f803e3d5ffd5b508460175f828254613ffa919061541d565b925050819055505b5f8411156140885760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f1935050505015801561406e573d5f803e3d5ffd5b508260185f828254614080919061541d565b925050819055505b5f82111561410e5760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156140f4573d5f803e3d5ffd5b508060195f828254614106919061541d565b925050819055505b505050505050505050565b5f80602e6040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505090505f60305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036142a957602d6040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff16815250509150600190505b5f6064836080015160ff16866142bf9190615b5b565b6142c9919061547d565b90505f835f015160ff16111561436d575f836080015160ff16845f015160ff16836142f49190615b5b565b6142fe919061547d565b90508060195f82825461431191906154ad565b925050819055508060095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461436491906154ad565b92505081905550505b5f836020015160ff161115614619575f836080015160ff16846020015160ff16836143989190615b5b565b6143a2919061547d565b90506003601a5f9054906101000a900460ff1660ff1603614415578060375f8282546143ce91906154ad565b925050819055507fe67cffa4bbbf9dd312cee0b0eecb1a9ad54f728b39320b7a745389859bf59cae81603754604051614408929190615b9c565b60405180910390a1614617565b6006601a5f9054906101000a900460ff1660ff16036145c2578060295f82825461443f91906154ad565b925050819055508261448b577fbc105e9024dec52ec78803e23877e0b53040838469fd53247dae9c4a7828a2688160295460405161447e929190615b9c565b60405180910390a16145bd565b8280156144f05750602b5f602a5481526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156145bc576001602b5f602a5481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602c87908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b614616565b8060365f8282546145d391906154ad565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c2453648160365460405161460d929190615b9c565b60405180910390a15b5b505b5f836040015160ff16111561465b575f836080015160ff16846040015160ff16836146449190615b5b565b61464e919061547d565b9050614659816149b3565b505b5f836060015160ff161115614750575f836080015160ff16846060015160ff16836146869190615b5b565b614690919061547d565b90508060095f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546146e091906154ad565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516147469190614d4f565b60405180910390a3505b6147638186614c1890919063ffffffff16565b93505050509392505050565b5f8060135490505f60145490505f60155490505f601654905060305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036147f157600f5493506010549250601154915060125490505b5f606485886148009190615b5b565b61480a919061547d565b90505f6064858961481b9190615b5b565b614825919061547d565b90505f6064848a6148369190615b5b565b614840919061547d565b90505f6064868b6148519190615b5b565b61485b919061547d565b90505f8611156148b9578060365f82825461487691906154ad565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364816036546040516148b0929190615b9c565b60405180910390a15b8360175f8282546148ca91906154ad565b925050819055508260185f8282546148e291906154ad565b925050819055508160195f8282546148fa91906154ad565b9250508190555081838561490e91906154ad565b61491891906154ad565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461496391906154ad565b925050819055505f8183858761497991906154ad565b61498391906154ad565b61498d91906154ad565b90506149a2818c614c1890919063ffffffff16565b995050505050505050505092915050565b5f6149bf600180614c2d565b90505f603582815481106149d6576149d56155d6565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614a6a575061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015614ac35750602f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015614b1c575060305f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15614c13578260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254614b6d91906154ad565b925050819055507fe4cbe3422132330d6356a5b83b4e8887027dcfada3b80fec7e557cf26431470d8184604051614ba5929190615bc3565b60405180910390a18073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614c0a9190614d4f565b60405180910390a35b505050565b5f8183614c25919061541d565b905092915050565b5f80333a4342600143614c40919061541d565b408888604051602001614c599796959493929190615c02565b604051602081830303815290604052805190602001205f1c90505f60358054905082614c859190615c6f565b9050809250505092915050565b5080545f8255905f5260205f2090810190614cad9190614cb0565b50565b5b80821115614cc7575f815f905550600101614cb1565b5090565b5f60ff82169050919050565b614ce081614ccb565b82525050565b5f60a082019050614cf95f830188614cd7565b614d066020830187614cd7565b614d136040830186614cd7565b614d206060830185614cd7565b614d2d6080830184614cd7565b9695505050505050565b5f819050919050565b614d4981614d37565b82525050565b5f602082019050614d625f830184614d40565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614d9f578082015181840152602081019050614d84565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614dc482614d68565b614dce8185614d72565b9350614dde818560208601614d82565b614de781614daa565b840191505092915050565b5f6020820190508181035f830152614e0a8184614dba565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614e4382614e1a565b9050919050565b614e5381614e39565b8114614e5d575f80fd5b50565b5f81359050614e6e81614e4a565b92915050565b614e7d81614d37565b8114614e87575f80fd5b50565b5f81359050614e9881614e74565b92915050565b5f8060408385031215614eb457614eb3614e12565b5b5f614ec185828601614e60565b9250506020614ed285828601614e8a565b9150509250929050565b5f8115159050919050565b614ef081614edc565b82525050565b5f602082019050614f095f830184614ee7565b92915050565b5f60208284031215614f2457614f23614e12565b5b5f614f3184828501614e8a565b91505092915050565b614f4381614e39565b82525050565b5f602082019050614f5c5f830184614f3a565b92915050565b5f805f805f805f80610100898b031215614f7f57614f7e614e12565b5b5f614f8c8b828c01614e8a565b9850506020614f9d8b828c01614e8a565b9750506040614fae8b828c01614e8a565b9650506060614fbf8b828c01614e8a565b9550506080614fd08b828c01614e8a565b94505060a0614fe18b828c01614e8a565b93505060c0614ff28b828c01614e8a565b92505060e06150038b828c01614e8a565b9150509295985092959890939650565b5f805f6060848603121561502a57615029614e12565b5b5f61503786828701614e60565b935050602061504886828701614e60565b925050604061505986828701614e8a565b9150509250925092565b5f6020820190506150765f830184614cd7565b92915050565b61508581614edc565b811461508f575f80fd5b50565b5f813590506150a08161507c565b92915050565b5f80604083850312156150bc576150bb614e12565b5b5f6150c985828601614e60565b92505060206150da85828601615092565b9150509250929050565b5f602082840312156150f9576150f8614e12565b5b5f61510684828501614e60565b91505092915050565b61511881614ccb565b8114615122575f80fd5b50565b5f813590506151338161510f565b92915050565b5f6020828403121561514e5761514d614e12565b5b5f61515b84828501615125565b91505092915050565b5f6020828403121561517957615178614e12565b5b5f61518684828501615092565b91505092915050565b5f819050919050565b5f6151b26151ad6151a884614e1a565b61518f565b614e1a565b9050919050565b5f6151c382615198565b9050919050565b5f6151d4826151b9565b9050919050565b6151e4816151ca565b82525050565b5f6020820190506151fd5f8301846151db565b92915050565b5f806040838503121561521957615218614e12565b5b5f61522685828601614e60565b925050602061523785828601614e60565b9150509250929050565b5f806040838503121561525757615256614e12565b5b5f61526485828601614e8a565b925050602061527585828601614e60565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126152a05761529f61527f565b5b8235905067ffffffffffffffff8111156152bd576152bc615283565b5b6020830191508360208202830111156152d9576152d8615287565b5b9250929050565b5f80602083850312156152f6576152f5614e12565b5b5f83013567ffffffffffffffff81111561531357615312614e16565b5b61531f8582860161528b565b92509250509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061536f57607f821691505b6020821081036153825761538161532b565b5b50919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6153bc601d83614d72565b91506153c782615388565b602082019050919050565b5f6020820190508181035f8301526153e9816153b0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61542782614d37565b915061543283614d37565b925082820390508181111561544a576154496153f0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61548782614d37565b915061549283614d37565b9250826154a2576154a1615450565b5b828204905092915050565b5f6154b782614d37565b91506154c283614d37565b92508282019050808211156154da576154d96153f0565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61553a602683614d72565b9150615545826154e0565b604082019050919050565b5f6020820190508181035f8301526155678161552e565b9050919050565b7f5265776172642073686f756c6420626520617661696c61626c650000000000005f82015250565b5f6155a2601a83614d72565b91506155ad8261556e565b602082019050919050565b5f6020820190508181035f8301526155cf81615596565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61560d82614ccb565b915060ff82036156205761561f6153f0565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61565f602083614d72565b915061566a8261562b565b602082019050919050565b5f6020820190508181035f83015261568c81615653565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506156ce81614e4a565b92915050565b5f602082840312156156e9576156e8614e12565b5b5f6156f6848285016156c0565b91505092915050565b5f819050919050565b5f61572261571d615718846156ff565b61518f565b614d37565b9050919050565b61573281615708565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61576a81614e39565b82525050565b5f61577b8383615761565b60208301905092915050565b5f602082019050919050565b5f61579d82615738565b6157a78185615742565b93506157b283615752565b805f5b838110156157e25781516157c98882615770565b97506157d483615787565b9250506001810190506157b5565b5085935050505092915050565b5f60a0820190506158025f830188614d40565b61580f6020830187615729565b81810360408301526158218186615793565b90506158306060830185614f3a565b61583d6080830184614d40565b9695505050505050565b7f54726164696e672069732064697361626c6564210000000000000000000000005f82015250565b5f61587b601483614d72565b915061588682615847565b602082019050919050565b5f6020820190508181035f8301526158a88161586f565b9050919050565b7f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d6974655f8201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b5f615909602283614d72565b9150615914826158af565b604082019050919050565b5f6020820190508181035f830152615936816158fd565b9050919050565b7f4d61782062616c616e6365206973206c696d69746564210000000000000000005f82015250565b5f615971601783614d72565b915061597c8261593d565b602082019050919050565b5f6020820190508181035f83015261599e81615965565b9050919050565b5f6159af82614d37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159e1576159e06153f0565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f615a2382614ccb565b9150615a2e83614ccb565b9250828201905060ff811115615a4757615a466153f0565b5b92915050565b5f81549050919050565b5f819050815f5260205f209050919050565b5f815f1c9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f615aa5615aa083615a69565b615a74565b9050919050565b5f615ab78254615a93565b9050919050565b5f600182019050919050565b5f615ad482615a4d565b615ade8185615742565b9350615ae983615a57565b805f5b83811015615b2057615afd82615aac565b615b078882615770565b9750615b1283615abe565b925050600181019050615aec565b5085935050505092915050565b5f6040820190508181035f830152615b458185615aca565b9050615b546020830184614d40565b9392505050565b5f615b6582614d37565b9150615b7083614d37565b9250828202615b7e81614d37565b91508282048414831517615b9557615b946153f0565b5b5092915050565b5f604082019050615baf5f830185614d40565b615bbc6020830184614d40565b9392505050565b5f604082019050615bd65f830185614f3a565b615be36020830184614d40565b9392505050565b5f819050919050565b615bfc81615bea565b82525050565b5f60e082019050615c155f83018a614f3a565b615c226020830189614d40565b615c2f6040830188614d40565b615c3c6060830187614d40565b615c496080830186615bf3565b615c5660a0830185614d40565b615c6360c0830184614d40565b98975050505050505050565b5f615c7982614d37565b9150615c8483614d37565b925082615c9457615c93615450565b5b82820690509291505056fea264697066735822122031468f289e98d627559b20438e37dcc0ef9259d47b10a4e65f5693ada7f86f1364736f6c63430008150033

Deployed Bytecode Sourcemap

20854:23311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23442:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;22066:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23176:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28540:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29128:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24843:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24054:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;25304:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43068:719;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28240:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23646:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;29641:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23094:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21907:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25230:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24352:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;42777:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28350:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42636:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25020:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24880:17;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;22432:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41709:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42912:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29352:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23215:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24698:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25261:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22471:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42509:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43924:124;;;;;;;;;;;;;:::i;:::-;;22510:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28633:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12074:103;;;;;;;;;;;;;:::i;:::-;;21944:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22007:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44056:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41812:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21868:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11426:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23139:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25127:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28443:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23536:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24462:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24258;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24931:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29477:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25070:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24148:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;23740;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24904:18;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;43795:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25183:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24651;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28973:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42392:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24772:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23944:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;12332:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24981:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24556:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;41913:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23850:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;23442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22066:57::-;;;;:::o;23176:32::-;;;;:::o;28540:85::-;28579:13;28612:5;28605:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28540:85;:::o;29128:216::-;29203:4;29255:6;29220:11;:23;29232:10;29220:23;;;;;;;;;;;;;;;:32;29244:7;29220:32;;;;;;;;;;;;;;;:41;;;;29298:7;29277:37;;29286:10;29277:37;;;29307:6;29277:37;;;;;;:::i;:::-;;;;;;;;29332:4;29325:11;;29128:216;;;;:::o;24843:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24054:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25304:40::-;;;;:::o;43068:719::-;11312:13;:11;:13::i;:::-;43431:16:::1;43412;:35;;;;43477:16;43458;:35;;;;43524:17;43504;:37;;;;43570:15;43552;:33;;;;43618:17;43598;:37;;;;43666:17;43646;:37;;;;43715:18;43694;:39;;;;43763:16;43744;:35;;;;43068:719:::0;;;;;;;;:::o;28240:102::-;28295:7;28322:12;;28315:19;;28240:102;:::o;23646:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29641:441::-;29741:4;29797:17;29762:11;:19;29774:6;29762:19;;;;;;;;;;;;;;;:31;29782:10;29762:31;;;;;;;;;;;;;;;;:52;29758:257;;29874:6;29839:11;:19;29851:6;29839:19;;;;;;;;;;;;;;;:31;29859:10;29839:31;;;;;;;;;;;;;;;;:41;;29831:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29997:6;29963:11;:19;29975:6;29963:19;;;;;;;;;;;;;;;:31;29983:10;29963:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;29929:11;:19;29941:6;29929:19;;;;;;;;;;;;;;;:31;29949:10;29929:31;;;;;;;;;;;;;;;:74;;;;29758:257;30034:40;30048:6;30056:9;30067:6;30034:13;:40::i;:::-;30027:47;;29641:441;;;;;:::o;23094:21::-;;;;;;;;;;;;;:::o;21907:30::-;;;;;;;;;;;;;:::o;25230:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24352:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42777:127::-;11312:13;:11;:13::i;:::-;42890:6:::1;42864:15;:23;42880:6;42864:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;42777:127:::0;;:::o;28350:85::-;28393:5;28418:9;;;;;;;;;;;28411:16;;28350:85;:::o;42636:133::-;11312:13;:11;:13::i;:::-;42755:6:::1;42726:18;:26;42745:6;42726:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;42636:133:::0;;:::o;25020:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;24880:17::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22432:32::-;;;;:::o;41709:95::-;11312:13;:11;:13::i;:::-;41778:18:::1;41790:5;41778:11;:18::i;:::-;41709:95:::0;:::o;42912:148::-;11312:13;:11;:13::i;:::-;43001:7:::1;42985:13;;:23;;;;;;;;;;;;;;;;;;43024:28;43044:7;43024:28;;;;;;:::i;:::-;;;;;;;;42912:148:::0;:::o;29352:117::-;29407:4;29431:30;29439:7;29448:12;;29431:7;:30::i;:::-;29424:37;;29352:117;;;:::o;23215:35::-;;;;:::o;24698:26::-;;;;:::o;25261:36::-;;;;:::o;22471:32::-;;;;:::o;42509:119::-;11312:13;:11;:13::i;:::-;42614:6:::1;42592:11;:19;42604:6;42592:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;42509:119:::0;;:::o;43924:124::-;11312:13;:11;:13::i;:::-;43984:17:::1;:15;:17::i;:::-;43980:61;;;44018:11;:9;:11::i;:::-;43980:61;43924:124::o:0;22510:31::-;;;;:::o;28633:332::-;28699:7;28719:20;28742:9;:18;28752:7;28742:18;;;;;;;;;;;;;;;;28719:41;;28776:18;:27;28795:7;28776:27;;;;;;;;;;;;;;;;;;;;;;;;;28775:28;:57;;;;;28831:1;28807:21;;:25;28775:57;:79;;;;;28853:1;28836:7;:14;;;;:18;28775:79;28771:157;;;28902:7;:14;;;;28887:12;:29;;;;:::i;:::-;28871:45;;;;;:::i;:::-;;;28771:157;28945:12;28938:19;;;28633:332;;;:::o;12074:103::-;11312:13;:11;:13::i;:::-;12139:30:::1;12166:1;12139:18;:30::i;:::-;12074:103::o:0;21944:50::-;;;;:::o;22007:45::-;;;;:::o;44056:106::-;11312:13;:11;:13::i;:::-;44143:11:::1;44130:10;;:24;;;;;;;;;;;;;;;;;;44056:106:::0;:::o;41812:93::-;11312:13;:11;:13::i;:::-;41890:7:::1;41877:10;;:20;;;;;;;;;;;;;;;;;;41812:93:::0;:::o;21868:32::-;;;;;;;;;;;;;:::o;11426:87::-;11472:7;11499:6;;;;;;;;;;;11492:13;;11426:87;:::o;23139:30::-;;;;;;;;;;;;;:::o;25127:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;28443:89::-;28484:13;28517:7;28510:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28443:89;:::o;23536:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24462:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24258:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24931:43::-;;;;;;;;;;;;;:::o;29477:156::-;29557:4;29581:44;29595:10;29607:9;29618:6;29581:13;:44::i;:::-;29574:51;;29477:156;;;;:::o;25070:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;24148:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23740:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24904:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43795:121::-;11312:13;:11;:13::i;:::-;43894:14:::1;43878:13;:30;;;;43795:121:::0;:::o;25183:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;24651:::-;;;;:::o;28973:147::-;29057:7;29084:11;:19;29096:6;29084:19;;;;;;;;;;;;;;;:28;29104:7;29084:28;;;;;;;;;;;;;;;;29077:35;;28973:147;;;;:::o;42392:109::-;11312:13;:11;:13::i;:::-;42484:9:::1;42466:15;;:27;;;;;;;;;;;;;;;;;;42392:109:::0;:::o;24772:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23944:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12332:201::-;11312:13;:11;:13::i;:::-;12441:1:::1;12421:22;;:8;:22;;::::0;12413:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12497:28;12516:8;12497:18;:28::i;:::-;12332:201:::0;:::o;24981:30::-;;;;;;;;;;;;;:::o;24556:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41913:471::-;11312:13;:11;:13::i;:::-;42035:1:::1;42007:25;;:29;41999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42078:17;42126:11;;:18;;42098:25;;:46;;;;:::i;:::-;42078:66;;42183:1;42155:25;:29;;;;42200:7;42195:182;42217:11;;:18;;42213:1;:22;;;42195:182;;;42286:9;42257;:25;42267:11;;42279:1;42267:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42257:25;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;42339:11;;42351:1;42339:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42315:50;;42332:4;42315:50;;;42355:9;42315:50;;;;;;:::i;:::-;;;;;;;;42237:3;;;;;:::i;:::-;;;;42195:182;;;;41988:396;41913:471:::0;;:::o;23850:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11591:132::-;11666:12;:10;:12::i;:::-;11655:23;;:7;:5;:7::i;:::-;:23;;;11647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11591:132::o;30090:937::-;30182:4;30199:32;30213:6;30221:9;30199:13;:32::i;:::-;30242:36;30260:9;30271:6;30242:17;:36::i;:::-;30293:6;;;;;;;;;;;30289:87;;;30323:41;30338:6;30346:9;30357:6;30323:14;:41::i;:::-;30316:48;;;;30289:87;30390:17;:15;:17::i;:::-;30386:61;;;30424:11;:9;:11::i;:::-;30386:61;30462:18;:26;30481:6;30462:26;;;;;;;;;;;;;;;;;;;;;;;;;30457:73;;30504:14;30511:6;30504;:14::i;:::-;30457:73;30560:53;30582:6;30560:53;;;;;;;;;;;;;;;;;:9;:17;30570:6;30560:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;30540:9;:17;30550:6;30540:17;;;;;;;;;;;;;;;:73;;;;30624:22;30639:6;30624:14;:22::i;:::-;30657;30682:33;30697:6;30705:9;30682:14;:33::i;:::-;:81;;30757:6;30682:81;;;30718:36;30728:6;30736:9;30747:6;30718:9;:36::i;:::-;30682:81;30657:106;;30797:40;30822:14;30797:9;:20;30807:9;30797:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;30774:9;:20;30784:9;30774:20;;;;;;;;;;;;;;;:63;;;;30848:25;30863:9;30848:14;:25::i;:::-;30906:9;30889:35;;30898:6;30889:35;;;30917:6;30889:35;;;;;;:::i;:::-;;;;;;;;30941:10;;;;;;;;;;;30937:59;;;30968:16;:14;:16::i;:::-;30937:59;31015:4;31008:11;;;30090:937;;;;;;:::o;40417:859::-;40483:1;40475:4;;;;;;;;;;;:9;;;:23;;;;;40497:1;40488:5;:10;;;;40475:23;40471:76;;;40515:20;:18;:20::i;:::-;40471:76;40570:1;40561:5;:10;;;40557:614;;40597:11;40588:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40633:12;40623:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40557:614;;;40676:1;40667:5;:10;;;40663:508;;40703:11;40694:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40739:12;40729:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40663:508;;;40782:1;40773:5;:10;;;40769:402;;40809:11;40800:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40845:12;40835:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40769:402;;;40888:1;40879:5;:10;;;40875:296;;40915:11;40906:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40951:12;40941:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40875:296;;;40994:1;40985:5;:10;;;40981:190;;41021:11;41012:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41057:12;41047:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40981:190;;;41111:11;41102:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41147:12;41137:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40981:190;40875:296;40769:402;40663:508;40557:614;41188:5;41181:4;;:12;;;;;;;;;;;;;;;;;;41220:15;41204:13;:31;;;;41251:17;41262:5;41251:17;;;;;;:::i;:::-;;;;;;;;40417:859;:::o;37948:223::-;37998:4;38036:15;;;;;;;;;;;38022:29;;:10;:29;;;;:57;;;;;38069:10;;;;;;;;;;;38022:57;:82;;;;;38098:6;;;;;;;;;;;38097:7;38022:82;:141;;;;;38150:13;;38122:24;38140:4;38122:9;:24::i;:::-;:41;;38022:141;38015:148;;37948:223;:::o;38179:569::-;25876:4;25867:6;;:13;;;;;;;;;;;;;;;;;;38229:20:::1;38252:24;38270:4;38252:9;:24::i;:::-;38229:47;;38287:49;38303:17;;;;;;;;;;;38323:12;38287:7;:49::i;:::-;;38364:21;38402:1;38388:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38364:40;;38433:4;38415;38420:1;38415:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38459:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38449:4;38454:1;38449:7;;;;;;;;:::i;:::-;;;;;;;:34;;;;;;;;;::::0;::::1;38494:17;;;;;;;;;;;:68;;;38577:12;38591:1;38594:4;38608;38615:15;38494:147;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38652:17;38672:21;38652:41;;38704:36;38716:9;38727:12;38704:11;:36::i;:::-;38218:530;;;25912:5:::0;25903:6;;:14;;;;;;;;;;;;;;;;;;38179:569::o;12693:191::-;12767:16;12786:6;;;;;;;;;;;12767:25;;12812:8;12803:6;;:17;;;;;;;;;;;;;;;;;;12867:8;12836:40;;12857:8;12836:40;;;;;;;;;;;;12756:128;12693:191;:::o;10135:98::-;10188:7;10215:10;10208:17;;10135:98;:::o;35841:227::-;35929:13;;;;;;;;;;;35924:137;;35977:15;;;;;;;;;;;35967:25;;:6;:25;;;;:57;;;;;36009:15;;;;;;;;;;;35996:28;;:9;:28;;;;35967:57;35959:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35924:137;35841:227;;:::o;36076:364::-;36168:15;:26;36184:9;36168:26;;;;;;;;;;;;;;;;;;;;;;;;;36163:270;;36229:5;;36219:6;:15;;36211:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36288:22;36336:6;36313:20;36323:9;36313;:20::i;:::-;:29;;;;:::i;:::-;36288:54;;36383:10;;36365:14;:28;;36357:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36196:237;36163:270;36076:364;;:::o;31035:399::-;31128:4;31165:53;31187:6;31165:53;;;;;;;;;;;;;;;;;:9;:17;31175:6;31165:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;31145:9;:17;31155:6;31145:17;;;;;;;;;;;;;;;:73;;;;31229:22;31244:6;31229:14;:22::i;:::-;31285:32;31310:6;31285:9;:20;31295:9;31285:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;31262:9;:20;31272:9;31262:20;;;;;;;;;;;;;;;:55;;;;31328:25;31343:9;31328:14;:25::i;:::-;31386:9;31369:35;;31378:6;31369:35;;;31397:6;31369:35;;;;;;:::i;:::-;;;;;;;;31422:4;31415:11;;31035:399;;;;;:::o;37659:281::-;37739:1;37715:21;;:25;37711:222;;;37757:21;37805:7;:14;;;;37781:21;;:38;;;;:::i;:::-;37757:62;;37859:13;37834:21;;:38;;;;;;;:::i;:::-;;;;;;;;37908:13;37887:9;:17;37897:6;37887:17;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;37742:191;37711:222;37659:281;:::o;7709:240::-;7829:7;7887:1;7882;:6;;7890:12;7874:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7929:1;7925;:5;7918:12;;7709:240;;;;;:::o;37005:646::-;37065:15;37083:17;37093:6;37083:9;:17::i;:::-;37065:35;;37125:1;37115:7;:11;37111:533;;;37148:8;:16;37157:6;37148:16;;;;;;;;;;;;;;;;;;;;;;;;;37143:120;;37204:4;37185:8;:16;37194:6;37185:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;37227:7;37240:6;37227:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37143:120;37111:533;;;37299:8;:16;37308:6;37299:16;;;;;;;;;;;;;;;;;;;;;;;;;37295:338;;;37355:5;37336:8;:16;37345:6;37336:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;37383:9;37379:207;37419:1;37402:7;:14;;;;:18;;;;:::i;:::-;37398:1;:22;37379:207;;;37468:6;37454:20;;:7;37462:1;37454:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:20;;;37450:117;;37516:7;37541:1;37524:7;:14;;;;:18;;;;:::i;:::-;37516:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37503:7;37511:1;37503:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;37450:117;37422:3;;;;;:::i;:::-;;;;37379:207;;;;37604:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;37295:338;37111:533;37054:597;37005:646;:::o;35672:161::-;35754:4;35779:11;:19;35791:6;35779:19;;;;;;;;;;;;;;;;;;;;;;;;;35778:20;:47;;;;35803:11;:22;35815:9;35803:22;;;;;;;;;;;;;;;;;;;;;;;;;35802:23;35778:47;35771:54;;35672:161;;;;:::o;35393:271::-;35481:7;35512:1;35505:4;;;;;;;;;;;:8;;;35501:156;;;35537:40;35551:6;35559:9;35570:6;35537:13;:40::i;:::-;35530:47;;;;35501:156;35617:28;35630:6;35638;35617:12;:28::i;:::-;35610:35;;35393:271;;;;;;:::o;5430:98::-;5488:7;5519:1;5515;:5;;;;:::i;:::-;5508:12;;5430:98;;;;:::o;41284:417::-;41330:18;41351:4;;;;;;;;;;;41330:25;;41386:1;41370:12;:17;;;41366:56;;41404:7;;;41366:56;41432:17;41470:13;;41452:15;:31;;;;:::i;:::-;41432:51;;41510:10;;41498:9;:22;41494:61;;;41537:7;;;;41494:61;41581:1;41565:17;;;;;:::i;:::-;;;41612:1;41597:12;:16;;;41593:65;;;41645:1;41630:16;;41593:65;41668:25;41680:12;41668:11;:25::i;:::-;41319:382;;41284:417;:::o;39872:537::-;39933:1;39922:7;;:12;;;;;;;:::i;:::-;;;;;;;;39974:1;39949:21;;:26;39945:39;39977:7;39945:39;39994:18;40015:11;:18;;;;39994:39;;40044:24;40095:10;40071:21;;:34;;;;:::i;:::-;40044:61;;40121:9;40116:151;40140:10;40136:1;:14;40116:151;;;40172:14;40189:11;40201:1;40189:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40172:31;;40239:16;40218:9;:17;40228:6;40218:17;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;40157:110;40152:3;;;;;:::i;:::-;;;;40116:151;;;;40301:1;40277:21;:25;;;;40320:11;;40313:18;;;;:::i;:::-;40347:54;40371:11;40384:16;40347:54;;;;;;;:::i;:::-;;;;;;;;39911:498;;39872:537;:::o;38756:1108::-;38833:17;38885:12;;38869:13;;38853;;:29;;;;:::i;:::-;:44;;;;:::i;:::-;38833:64;;38908:23;38959:9;38943:13;;38934:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;38908:60;;38979:27;39038:9;39022:13;;39009:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;38979:68;;39058:23;39109:9;39093:13;;39084:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;39058:60;;39129:27;39188:9;39172:13;;39159:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;39129:68;;39208:22;39260:15;39242;39233:6;:24;;;;:::i;:::-;:42;;;;:::i;:::-;39208:67;;39286:26;39350:19;39328;39315:10;:32;;;;:::i;:::-;:54;;;;:::i;:::-;39286:83;;39402:1;39384:15;:19;39380:154;;;39428:16;;;;;;;;;;;39420:34;;:51;39455:15;39420:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39503:19;39486:13;;:36;;;;;;;:::i;:::-;;;;;;;;39380:154;39566:1;39548:15;:19;39544:154;;;39592:16;;;;;;;;;;;39584:34;;:51;39619:15;39584:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39667:19;39650:13;;:36;;;;;;;:::i;:::-;;;;;;;;39544:154;39729:1;39712:14;:18;39708:149;;;39755:15;;;;;;;;;;;39747:33;;:49;39781:14;39747:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39827:18;39811:12;;:34;;;;;;;:::i;:::-;;;;;;;;39708:149;38822:1042;;;;;;;38756:1108;;:::o;33402:1983::-;33494:7;33514:18;33535:7;33514:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33553:11;33597:15;;;;;;;;;;;33587:25;;:6;:25;;;33583:102;;33639:6;33629:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33669:4;33660:13;;33583:102;33695:17;33740:3;33724:7;:13;;;33715:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;33695:48;;33777:1;33758:7;:16;;;:20;;;33754:236;;;33795:26;33855:7;:13;;;33824:44;;33836:7;:16;;;33824:28;;:9;:28;;;;:::i;:::-;:44;;;;:::i;:::-;33795:73;;33899:18;33883:12;;:34;;;;;;;:::i;:::-;;;;;;;;33960:18;33932:9;:24;33950:4;33932:24;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;33780:210;33754:236;34025:1;34004:7;:18;;;:22;;;34000:929;;;34043:28;34107:7;:13;;;34074:46;;34086:7;:18;;;34074:30;;:9;:30;;;;:::i;:::-;:46;;;;:::i;:::-;34043:77;;34147:1;34139:4;;;;;;;;;;;:9;;;34135:783;;34198:20;34169:25;;:49;;;;;;;:::i;:::-;;;;;;;;34242:68;34262:20;34284:25;;34242:68;;;;;;;:::i;:::-;;;;;;;;34135:783;;;34344:1;34336:4;;;;;;;;;;;:9;;;34332:586;;34391:20;34366:21;;:45;;;;;;;:::i;:::-;;;;;;;;34435:6;34430:308;;34471:60;34487:20;34509:21;;34471:60;;;;;;;:::i;:::-;;;;;;;;34430:308;;;34561:6;:43;;;;;34572:12;:21;34585:7;;34572:21;;;;;;;;;;;:32;34594:9;34572:32;;;;;;;;;;;;;;;;;;;;;;;;;34571:33;34561:43;34557:181;;;34664:4;34629:12;:21;34642:7;;34629:21;;;;;;;;;;;:32;34651:9;34629:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34691:11;34708:9;34691:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34557:181;34430:308;34332:586;;;34803:20;34778:21;;:45;;;;;;;:::i;:::-;;;;;;;;34847:55;34858:20;34880:21;;34847:55;;;;;;;:::i;:::-;;;;;;;;34332:586;34135:783;34028:901;34000:929;34959:1;34943:7;:13;;;:17;;;34939:161;;;34977:23;35031:7;:13;;;35003:41;;35015:7;:13;;;35003:25;;:9;:25;;;;:::i;:::-;:41;;;;:::i;:::-;34977:67;;35059:29;35072:15;35059:12;:29::i;:::-;34962:138;34939:161;35129:1;35114:7;:12;;;:16;;;35110:227;;;35147:22;35199:7;:13;;;35172:40;;35184:7;:12;;;35172:24;;:9;:24;;;;:::i;:::-;:40;;;;:::i;:::-;35147:65;;35246:14;35227:9;:15;20971:6;35227:15;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;20971:6;35280:45;;35297:4;35280:45;;;35310:14;35280:45;;;;;;:::i;:::-;;;;;;;;35132:205;35110:227;35356:21;35367:9;35356:6;:10;;:21;;;;:::i;:::-;35349:28;;;;;33402:1983;;;;;:::o;32028:1366::-;32100:7;32120:21;32144:17;;32120:41;;32172:21;32196:17;;32172:41;;32224:22;32249:18;;32224:43;;32278:20;32301:16;;32278:39;;32342:15;;;;;;;;;;;32332:25;;:6;:25;;;32328:231;;32390:16;;32374:32;;32437:16;;32421:32;;32485:17;;32468:34;;32532:15;;32517:30;;32328:231;32569:24;32621:3;32605:13;32596:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;32569:55;;32635:24;32687:3;32671:13;32662:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;32635:55;;32701:23;32751:3;32736:12;32727:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;32701:53;;32765:28;32822:3;32805:14;32796:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;32765:60;;32857:1;32840:14;:18;32836:171;;;32900:20;32875:21;;:45;;;;;;;:::i;:::-;;;;;;;;32940:55;32951:20;32973:21;;32940:55;;;;;;;:::i;:::-;;;;;;;;32836:171;33034:16;33017:13;;:33;;;;;;;:::i;:::-;;;;;;;;33078:16;33061:13;;:33;;;;;;;:::i;:::-;;;;;;;;33121:15;33105:12;;:31;;;;;;;:::i;:::-;;;;;;;;33213:15;33194:16;33175;:35;;;;:::i;:::-;:53;;;;:::i;:::-;33147:9;:24;33165:4;33147:24;;;;;;;;;;;;;;;;:81;;;;;;;:::i;:::-;;;;;;;;33239:23;33321:20;33303:15;33284:16;33265;:35;;;;:::i;:::-;:53;;;;:::i;:::-;:76;;;;:::i;:::-;33239:102;;33359:27;33370:15;33359:6;:10;;:27;;;;:::i;:::-;33352:34;;;;;;;;;;;32028:1366;;;;:::o;36448:545::-;36506:19;36528:26;36549:1;36552;36528:20;:26::i;:::-;36506:48;;36565:19;36587:7;36595:11;36587:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36565:42;;21025:1;36636:19;;:11;:19;;;;:56;;;;;20971:6;36673:19;;:11;:19;;;;36636:56;:115;;;;;36733:17;;;;;;;;;;;36710:41;;:11;:41;;;;36636:115;:163;;;;;36784:15;;;;;;;;;;;36769:30;;:11;:30;;;;36636:163;36618:368;;;36852:6;36826:9;:22;36836:11;36826:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;36878;36890:11;36903:6;36878:32;;;;;;;:::i;:::-;;;;;;;;36954:11;36930:44;;36947:4;36930:44;;;36967:6;36930:44;;;;;;:::i;:::-;;;;;;;;36618:368;36495:498;;36448:545;:::o;5811:98::-;5869:7;5900:1;5896;:5;;;;:::i;:::-;5889:12;;5811:98;;;;:::o;31442:578::-;31528:7;31548:17;31651:10;31684:11;31718:12;31753:15;31816:1;31801:12;:16;;;;:::i;:::-;31791:27;31841:11;31875:2;31618:278;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31590:321;;;;;;31568:354;;31548:374;;31933:19;31968:7;:14;;;;31956:9;:26;;;;:::i;:::-;31933:50;;32001:11;31994:18;;;;31442:578;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:86:1:-;42:7;82:4;75:5;71:16;60:27;;7:86;;;:::o;99:112::-;182:22;198:5;182:22;:::i;:::-;177:3;170:35;99:112;;:::o;217:624::-;402:4;440:3;429:9;425:19;417:27;;454:67;518:1;507:9;503:17;494:6;454:67;:::i;:::-;531:68;595:2;584:9;580:18;571:6;531:68;:::i;:::-;609;673:2;662:9;658:18;649:6;609:68;:::i;:::-;687;751:2;740:9;736:18;727:6;687:68;:::i;:::-;765:69;829:3;818:9;814:19;805:6;765:69;:::i;:::-;217:624;;;;;;;;:::o;847:77::-;884:7;913:5;902:16;;847:77;;;:::o;930:118::-;1017:24;1035:5;1017:24;:::i;:::-;1012:3;1005:37;930:118;;:::o;1054:222::-;1147:4;1185:2;1174:9;1170:18;1162:26;;1198:71;1266:1;1255:9;1251:17;1242:6;1198:71;:::i;:::-;1054:222;;;;:::o;1282:99::-;1334:6;1368:5;1362:12;1352:22;;1282:99;;;:::o;1387:169::-;1471:11;1505:6;1500:3;1493:19;1545:4;1540:3;1536:14;1521:29;;1387:169;;;;:::o;1562:246::-;1643:1;1653:113;1667:6;1664:1;1661:13;1653:113;;;1752:1;1747:3;1743:11;1737:18;1733:1;1728:3;1724:11;1717:39;1689:2;1686:1;1682:10;1677:15;;1653:113;;;1800:1;1791:6;1786:3;1782:16;1775:27;1624:184;1562:246;;;:::o;1814:102::-;1855:6;1906:2;1902:7;1897:2;1890:5;1886:14;1882:28;1872:38;;1814:102;;;:::o;1922:377::-;2010:3;2038:39;2071:5;2038:39;:::i;:::-;2093:71;2157:6;2152:3;2093:71;:::i;:::-;2086:78;;2173:65;2231:6;2226:3;2219:4;2212:5;2208:16;2173:65;:::i;:::-;2263:29;2285:6;2263:29;:::i;:::-;2258:3;2254:39;2247:46;;2014:285;1922:377;;;;:::o;2305:313::-;2418:4;2456:2;2445:9;2441:18;2433:26;;2505:9;2499:4;2495:20;2491:1;2480:9;2476:17;2469:47;2533:78;2606:4;2597:6;2533:78;:::i;:::-;2525:86;;2305:313;;;;:::o;2705:117::-;2814:1;2811;2804:12;2828:117;2937:1;2934;2927:12;2951:126;2988:7;3028:42;3021:5;3017:54;3006:65;;2951:126;;;:::o;3083:96::-;3120:7;3149:24;3167:5;3149:24;:::i;:::-;3138:35;;3083:96;;;:::o;3185:122::-;3258:24;3276:5;3258:24;:::i;:::-;3251:5;3248:35;3238:63;;3297:1;3294;3287:12;3238:63;3185:122;:::o;3313:139::-;3359:5;3397:6;3384:20;3375:29;;3413:33;3440:5;3413:33;:::i;:::-;3313:139;;;;:::o;3458:122::-;3531:24;3549:5;3531:24;:::i;:::-;3524:5;3521:35;3511:63;;3570:1;3567;3560:12;3511:63;3458:122;:::o;3586:139::-;3632:5;3670:6;3657:20;3648:29;;3686:33;3713:5;3686:33;:::i;:::-;3586:139;;;;:::o;3731:474::-;3799:6;3807;3856:2;3844:9;3835:7;3831:23;3827:32;3824:119;;;3862:79;;:::i;:::-;3824:119;3982:1;4007:53;4052:7;4043:6;4032:9;4028:22;4007:53;:::i;:::-;3997:63;;3953:117;4109:2;4135:53;4180:7;4171:6;4160:9;4156:22;4135:53;:::i;:::-;4125:63;;4080:118;3731:474;;;;;:::o;4211:90::-;4245:7;4288:5;4281:13;4274:21;4263:32;;4211:90;;;:::o;4307:109::-;4388:21;4403:5;4388:21;:::i;:::-;4383:3;4376:34;4307:109;;:::o;4422:210::-;4509:4;4547:2;4536:9;4532:18;4524:26;;4560:65;4622:1;4611:9;4607:17;4598:6;4560:65;:::i;:::-;4422:210;;;;:::o;4638:329::-;4697:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:119;;;4752:79;;:::i;:::-;4714:119;4872:1;4897:53;4942:7;4933:6;4922:9;4918:22;4897:53;:::i;:::-;4887:63;;4843:117;4638:329;;;;:::o;4973:118::-;5060:24;5078:5;5060:24;:::i;:::-;5055:3;5048:37;4973:118;;:::o;5097:222::-;5190:4;5228:2;5217:9;5213:18;5205:26;;5241:71;5309:1;5298:9;5294:17;5285:6;5241:71;:::i;:::-;5097:222;;;;:::o;5325:1349::-;5447:6;5455;5463;5471;5479;5487;5495;5503;5552:3;5540:9;5531:7;5527:23;5523:33;5520:120;;;5559:79;;:::i;:::-;5520:120;5679:1;5704:53;5749:7;5740:6;5729:9;5725:22;5704:53;:::i;:::-;5694:63;;5650:117;5806:2;5832:53;5877:7;5868:6;5857:9;5853:22;5832:53;:::i;:::-;5822:63;;5777:118;5934:2;5960:53;6005:7;5996:6;5985:9;5981:22;5960:53;:::i;:::-;5950:63;;5905:118;6062:2;6088:53;6133:7;6124:6;6113:9;6109:22;6088:53;:::i;:::-;6078:63;;6033:118;6190:3;6217:53;6262:7;6253:6;6242:9;6238:22;6217:53;:::i;:::-;6207:63;;6161:119;6319:3;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6290:119;6448:3;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6419:119;6577:3;6604:53;6649:7;6640:6;6629:9;6625:22;6604:53;:::i;:::-;6594:63;;6548:119;5325:1349;;;;;;;;;;;:::o;6680:619::-;6757:6;6765;6773;6822:2;6810:9;6801:7;6797:23;6793:32;6790:119;;;6828:79;;:::i;:::-;6790:119;6948:1;6973:53;7018:7;7009:6;6998:9;6994:22;6973:53;:::i;:::-;6963:63;;6919:117;7075:2;7101:53;7146:7;7137:6;7126:9;7122:22;7101:53;:::i;:::-;7091:63;;7046:118;7203:2;7229:53;7274:7;7265:6;7254:9;7250:22;7229:53;:::i;:::-;7219:63;;7174:118;6680:619;;;;;:::o;7305:214::-;7394:4;7432:2;7421:9;7417:18;7409:26;;7445:67;7509:1;7498:9;7494:17;7485:6;7445:67;:::i;:::-;7305:214;;;;:::o;7525:116::-;7595:21;7610:5;7595:21;:::i;:::-;7588:5;7585:32;7575:60;;7631:1;7628;7621:12;7575:60;7525:116;:::o;7647:133::-;7690:5;7728:6;7715:20;7706:29;;7744:30;7768:5;7744:30;:::i;:::-;7647:133;;;;:::o;7786:468::-;7851:6;7859;7908:2;7896:9;7887:7;7883:23;7879:32;7876:119;;;7914:79;;:::i;:::-;7876:119;8034:1;8059:53;8104:7;8095:6;8084:9;8080:22;8059:53;:::i;:::-;8049:63;;8005:117;8161:2;8187:50;8229:7;8220:6;8209:9;8205:22;8187:50;:::i;:::-;8177:60;;8132:115;7786:468;;;;;:::o;8260:329::-;8319:6;8368:2;8356:9;8347:7;8343:23;8339:32;8336:119;;;8374:79;;:::i;:::-;8336:119;8494:1;8519:53;8564:7;8555:6;8544:9;8540:22;8519:53;:::i;:::-;8509:63;;8465:117;8260:329;;;;:::o;8595:118::-;8666:22;8682:5;8666:22;:::i;:::-;8659:5;8656:33;8646:61;;8703:1;8700;8693:12;8646:61;8595:118;:::o;8719:135::-;8763:5;8801:6;8788:20;8779:29;;8817:31;8842:5;8817:31;:::i;:::-;8719:135;;;;:::o;8860:325::-;8917:6;8966:2;8954:9;8945:7;8941:23;8937:32;8934:119;;;8972:79;;:::i;:::-;8934:119;9092:1;9117:51;9160:7;9151:6;9140:9;9136:22;9117:51;:::i;:::-;9107:61;;9063:115;8860:325;;;;:::o;9191:323::-;9247:6;9296:2;9284:9;9275:7;9271:23;9267:32;9264:119;;;9302:79;;:::i;:::-;9264:119;9422:1;9447:50;9489:7;9480:6;9469:9;9465:22;9447:50;:::i;:::-;9437:60;;9393:114;9191:323;;;;:::o;9520:60::-;9548:3;9569:5;9562:12;;9520:60;;;:::o;9586:142::-;9636:9;9669:53;9687:34;9696:24;9714:5;9696:24;:::i;:::-;9687:34;:::i;:::-;9669:53;:::i;:::-;9656:66;;9586:142;;;:::o;9734:126::-;9784:9;9817:37;9848:5;9817:37;:::i;:::-;9804:50;;9734:126;;;:::o;9866:152::-;9942:9;9975:37;10006:5;9975:37;:::i;:::-;9962:50;;9866:152;;;:::o;10024:183::-;10137:63;10194:5;10137:63;:::i;:::-;10132:3;10125:76;10024:183;;:::o;10213:274::-;10332:4;10370:2;10359:9;10355:18;10347:26;;10383:97;10477:1;10466:9;10462:17;10453:6;10383:97;:::i;:::-;10213:274;;;;:::o;10493:474::-;10561:6;10569;10618:2;10606:9;10597:7;10593:23;10589:32;10586:119;;;10624:79;;:::i;:::-;10586:119;10744:1;10769:53;10814:7;10805:6;10794:9;10790:22;10769:53;:::i;:::-;10759:63;;10715:117;10871:2;10897:53;10942:7;10933:6;10922:9;10918:22;10897:53;:::i;:::-;10887:63;;10842:118;10493:474;;;;;:::o;10973:::-;11041:6;11049;11098:2;11086:9;11077:7;11073:23;11069:32;11066:119;;;11104:79;;:::i;:::-;11066:119;11224:1;11249:53;11294:7;11285:6;11274:9;11270:22;11249:53;:::i;:::-;11239:63;;11195:117;11351:2;11377:53;11422:7;11413:6;11402:9;11398:22;11377:53;:::i;:::-;11367:63;;11322:118;10973:474;;;;;:::o;11453:117::-;11562:1;11559;11552:12;11576:117;11685:1;11682;11675:12;11699:117;11808:1;11805;11798:12;11839:568;11912:8;11922:6;11972:3;11965:4;11957:6;11953:17;11949:27;11939:122;;11980:79;;:::i;:::-;11939:122;12093:6;12080:20;12070:30;;12123:18;12115:6;12112:30;12109:117;;;12145:79;;:::i;:::-;12109:117;12259:4;12251:6;12247:17;12235:29;;12313:3;12305:4;12297:6;12293:17;12283:8;12279:32;12276:41;12273:128;;;12320:79;;:::i;:::-;12273:128;11839:568;;;;;:::o;12413:559::-;12499:6;12507;12556:2;12544:9;12535:7;12531:23;12527:32;12524:119;;;12562:79;;:::i;:::-;12524:119;12710:1;12699:9;12695:17;12682:31;12740:18;12732:6;12729:30;12726:117;;;12762:79;;:::i;:::-;12726:117;12875:80;12947:7;12938:6;12927:9;12923:22;12875:80;:::i;:::-;12857:98;;;;12653:312;12413:559;;;;;:::o;12978:180::-;13026:77;13023:1;13016:88;13123:4;13120:1;13113:15;13147:4;13144:1;13137:15;13164:320;13208:6;13245:1;13239:4;13235:12;13225:22;;13292:1;13286:4;13282:12;13313:18;13303:81;;13369:4;13361:6;13357:17;13347:27;;13303:81;13431:2;13423:6;13420:14;13400:18;13397:38;13394:84;;13450:18;;:::i;:::-;13394:84;13215:269;13164:320;;;:::o;13490:179::-;13630:31;13626:1;13618:6;13614:14;13607:55;13490:179;:::o;13675:366::-;13817:3;13838:67;13902:2;13897:3;13838:67;:::i;:::-;13831:74;;13914:93;14003:3;13914:93;:::i;:::-;14032:2;14027:3;14023:12;14016:19;;13675:366;;;:::o;14047:419::-;14213:4;14251:2;14240:9;14236:18;14228:26;;14300:9;14294:4;14290:20;14286:1;14275:9;14271:17;14264:47;14328:131;14454:4;14328:131;:::i;:::-;14320:139;;14047:419;;;:::o;14472:180::-;14520:77;14517:1;14510:88;14617:4;14614:1;14607:15;14641:4;14638:1;14631:15;14658:194;14698:4;14718:20;14736:1;14718:20;:::i;:::-;14713:25;;14752:20;14770:1;14752:20;:::i;:::-;14747:25;;14796:1;14793;14789:9;14781:17;;14820:1;14814:4;14811:11;14808:37;;;14825:18;;:::i;:::-;14808:37;14658:194;;;;:::o;14858:180::-;14906:77;14903:1;14896:88;15003:4;15000:1;14993:15;15027:4;15024:1;15017:15;15044:185;15084:1;15101:20;15119:1;15101:20;:::i;:::-;15096:25;;15135:20;15153:1;15135:20;:::i;:::-;15130:25;;15174:1;15164:35;;15179:18;;:::i;:::-;15164:35;15221:1;15218;15214:9;15209:14;;15044:185;;;;:::o;15235:191::-;15275:3;15294:20;15312:1;15294:20;:::i;:::-;15289:25;;15328:20;15346:1;15328:20;:::i;:::-;15323:25;;15371:1;15368;15364:9;15357:16;;15392:3;15389:1;15386:10;15383:36;;;15399:18;;:::i;:::-;15383:36;15235:191;;;;:::o;15432:225::-;15572:34;15568:1;15560:6;15556:14;15549:58;15641:8;15636:2;15628:6;15624:15;15617:33;15432:225;:::o;15663:366::-;15805:3;15826:67;15890:2;15885:3;15826:67;:::i;:::-;15819:74;;15902:93;15991:3;15902:93;:::i;:::-;16020:2;16015:3;16011:12;16004:19;;15663:366;;;:::o;16035:419::-;16201:4;16239:2;16228:9;16224:18;16216:26;;16288:9;16282:4;16278:20;16274:1;16263:9;16259:17;16252:47;16316:131;16442:4;16316:131;:::i;:::-;16308:139;;16035:419;;;:::o;16460:176::-;16600:28;16596:1;16588:6;16584:14;16577:52;16460:176;:::o;16642:366::-;16784:3;16805:67;16869:2;16864:3;16805:67;:::i;:::-;16798:74;;16881:93;16970:3;16881:93;:::i;:::-;16999:2;16994:3;16990:12;16983:19;;16642:366;;;:::o;17014:419::-;17180:4;17218:2;17207:9;17203:18;17195:26;;17267:9;17261:4;17257:20;17253:1;17242:9;17238:17;17231:47;17295:131;17421:4;17295:131;:::i;:::-;17287:139;;17014:419;;;:::o;17439:180::-;17487:77;17484:1;17477:88;17584:4;17581:1;17574:15;17608:4;17605:1;17598:15;17625:167;17662:3;17685:22;17701:5;17685:22;:::i;:::-;17676:31;;17729:4;17722:5;17719:15;17716:41;;17737:18;;:::i;:::-;17716:41;17784:1;17777:5;17773:13;17766:20;;17625:167;;;:::o;17798:182::-;17938:34;17934:1;17926:6;17922:14;17915:58;17798:182;:::o;17986:366::-;18128:3;18149:67;18213:2;18208:3;18149:67;:::i;:::-;18142:74;;18225:93;18314:3;18225:93;:::i;:::-;18343:2;18338:3;18334:12;18327:19;;17986:366;;;:::o;18358:419::-;18524:4;18562:2;18551:9;18547:18;18539:26;;18611:9;18605:4;18601:20;18597:1;18586:9;18582:17;18575:47;18639:131;18765:4;18639:131;:::i;:::-;18631:139;;18358:419;;;:::o;18783:180::-;18831:77;18828:1;18821:88;18928:4;18925:1;18918:15;18952:4;18949:1;18942:15;18969:143;19026:5;19057:6;19051:13;19042:22;;19073:33;19100:5;19073:33;:::i;:::-;18969:143;;;;:::o;19118:351::-;19188:6;19237:2;19225:9;19216:7;19212:23;19208:32;19205:119;;;19243:79;;:::i;:::-;19205:119;19363:1;19388:64;19444:7;19435:6;19424:9;19420:22;19388:64;:::i;:::-;19378:74;;19334:128;19118:351;;;;:::o;19475:85::-;19520:7;19549:5;19538:16;;19475:85;;;:::o;19566:158::-;19624:9;19657:61;19675:42;19684:32;19710:5;19684:32;:::i;:::-;19675:42;:::i;:::-;19657:61;:::i;:::-;19644:74;;19566:158;;;:::o;19730:147::-;19825:45;19864:5;19825:45;:::i;:::-;19820:3;19813:58;19730:147;;:::o;19883:114::-;19950:6;19984:5;19978:12;19968:22;;19883:114;;;:::o;20003:184::-;20102:11;20136:6;20131:3;20124:19;20176:4;20171:3;20167:14;20152:29;;20003:184;;;;:::o;20193:132::-;20260:4;20283:3;20275:11;;20313:4;20308:3;20304:14;20296:22;;20193:132;;;:::o;20331:108::-;20408:24;20426:5;20408:24;:::i;:::-;20403:3;20396:37;20331:108;;:::o;20445:179::-;20514:10;20535:46;20577:3;20569:6;20535:46;:::i;:::-;20613:4;20608:3;20604:14;20590:28;;20445:179;;;;:::o;20630:113::-;20700:4;20732;20727:3;20723:14;20715:22;;20630:113;;;:::o;20779:732::-;20898:3;20927:54;20975:5;20927:54;:::i;:::-;20997:86;21076:6;21071:3;20997:86;:::i;:::-;20990:93;;21107:56;21157:5;21107:56;:::i;:::-;21186:7;21217:1;21202:284;21227:6;21224:1;21221:13;21202:284;;;21303:6;21297:13;21330:63;21389:3;21374:13;21330:63;:::i;:::-;21323:70;;21416:60;21469:6;21416:60;:::i;:::-;21406:70;;21262:224;21249:1;21246;21242:9;21237:14;;21202:284;;;21206:14;21502:3;21495:10;;20903:608;;;20779:732;;;;:::o;21517:831::-;21780:4;21818:3;21807:9;21803:19;21795:27;;21832:71;21900:1;21889:9;21885:17;21876:6;21832:71;:::i;:::-;21913:80;21989:2;21978:9;21974:18;21965:6;21913:80;:::i;:::-;22040:9;22034:4;22030:20;22025:2;22014:9;22010:18;22003:48;22068:108;22171:4;22162:6;22068:108;:::i;:::-;22060:116;;22186:72;22254:2;22243:9;22239:18;22230:6;22186:72;:::i;:::-;22268:73;22336:3;22325:9;22321:19;22312:6;22268:73;:::i;:::-;21517:831;;;;;;;;:::o;22354:170::-;22494:22;22490:1;22482:6;22478:14;22471:46;22354:170;:::o;22530:366::-;22672:3;22693:67;22757:2;22752:3;22693:67;:::i;:::-;22686:74;;22769:93;22858:3;22769:93;:::i;:::-;22887:2;22882:3;22878:12;22871:19;;22530:366;;;:::o;22902:419::-;23068:4;23106:2;23095:9;23091:18;23083:26;;23155:9;23149:4;23145:20;23141:1;23130:9;23126:17;23119:47;23183:131;23309:4;23183:131;:::i;:::-;23175:139;;22902:419;;;:::o;23327:221::-;23467:34;23463:1;23455:6;23451:14;23444:58;23536:4;23531:2;23523:6;23519:15;23512:29;23327:221;:::o;23554:366::-;23696:3;23717:67;23781:2;23776:3;23717:67;:::i;:::-;23710:74;;23793:93;23882:3;23793:93;:::i;:::-;23911:2;23906:3;23902:12;23895:19;;23554:366;;;:::o;23926:419::-;24092:4;24130:2;24119:9;24115:18;24107:26;;24179:9;24173:4;24169:20;24165:1;24154:9;24150:17;24143:47;24207:131;24333:4;24207:131;:::i;:::-;24199:139;;23926:419;;;:::o;24351:173::-;24491:25;24487:1;24479:6;24475:14;24468:49;24351:173;:::o;24530:366::-;24672:3;24693:67;24757:2;24752:3;24693:67;:::i;:::-;24686:74;;24769:93;24858:3;24769:93;:::i;:::-;24887:2;24882:3;24878:12;24871:19;;24530:366;;;:::o;24902:419::-;25068:4;25106:2;25095:9;25091:18;25083:26;;25155:9;25149:4;25145:20;25141:1;25130:9;25126:17;25119:47;25183:131;25309:4;25183:131;:::i;:::-;25175:139;;24902:419;;;:::o;25327:233::-;25366:3;25389:24;25407:5;25389:24;:::i;:::-;25380:33;;25435:66;25428:5;25425:77;25422:103;;25505:18;;:::i;:::-;25422:103;25552:1;25545:5;25541:13;25534:20;;25327:233;;;:::o;25566:180::-;25614:77;25611:1;25604:88;25711:4;25708:1;25701:15;25735:4;25732:1;25725:15;25752:188;25790:3;25809:18;25825:1;25809:18;:::i;:::-;25804:23;;25841:18;25857:1;25841:18;:::i;:::-;25836:23;;25882:1;25879;25875:9;25868:16;;25905:4;25900:3;25897:13;25894:39;;;25913:18;;:::i;:::-;25894:39;25752:188;;;;:::o;25946:111::-;26010:6;26044:5;26038:12;26028:22;;25946:111;;;:::o;26063:156::-;26127:4;26150:3;26142:11;;26173:3;26170:1;26163:14;26207:4;26204:1;26194:18;26186:26;;26063:156;;;:::o;26225:102::-;26267:8;26314:5;26311:1;26307:13;26286:34;;26225:102;;;:::o;26333:139::-;26383:7;26423:42;26416:5;26412:54;26401:65;;26333:139;;;:::o;26478:166::-;26547:5;26572:66;26603:34;26626:10;26603:34;:::i;:::-;26572:66;:::i;:::-;26563:75;;26478:166;;;:::o;26650:144::-;26705:5;26730:57;26781:4;26775:11;26730:57;:::i;:::-;26721:66;;26650:144;;;:::o;26800:110::-;26867:4;26899;26894:3;26890:14;26882:22;;26800:110;;;:::o;26946:751::-;27062:3;27091:51;27136:5;27091:51;:::i;:::-;27158:86;27237:6;27232:3;27158:86;:::i;:::-;27151:93;;27268:53;27315:5;27268:53;:::i;:::-;27344:7;27375:1;27360:312;27385:6;27382:1;27379:13;27360:312;;;27455:44;27492:6;27455:44;:::i;:::-;27519:63;27578:3;27563:13;27519:63;:::i;:::-;27512:70;;27605:57;27655:6;27605:57;:::i;:::-;27595:67;;27420:252;27407:1;27404;27400:9;27395:14;;27360:312;;;27364:14;27688:3;27681:10;;27067:630;;;26946:751;;;;:::o;27703:477::-;27871:4;27909:2;27898:9;27894:18;27886:26;;27958:9;27952:4;27948:20;27944:1;27933:9;27929:17;27922:47;27986:105;28086:4;28077:6;27986:105;:::i;:::-;27978:113;;28101:72;28169:2;28158:9;28154:18;28145:6;28101:72;:::i;:::-;27703:477;;;;;:::o;28186:410::-;28226:7;28249:20;28267:1;28249:20;:::i;:::-;28244:25;;28283:20;28301:1;28283:20;:::i;:::-;28278:25;;28338:1;28335;28331:9;28360:30;28378:11;28360:30;:::i;:::-;28349:41;;28539:1;28530:7;28526:15;28523:1;28520:22;28500:1;28493:9;28473:83;28450:139;;28569:18;;:::i;:::-;28450:139;28234:362;28186:410;;;;:::o;28602:332::-;28723:4;28761:2;28750:9;28746:18;28738:26;;28774:71;28842:1;28831:9;28827:17;28818:6;28774:71;:::i;:::-;28855:72;28923:2;28912:9;28908:18;28899:6;28855:72;:::i;:::-;28602:332;;;;;:::o;28940:::-;29061:4;29099:2;29088:9;29084:18;29076:26;;29112:71;29180:1;29169:9;29165:17;29156:6;29112:71;:::i;:::-;29193:72;29261:2;29250:9;29246:18;29237:6;29193:72;:::i;:::-;28940:332;;;;;:::o;29278:77::-;29315:7;29344:5;29333:16;;29278:77;;;:::o;29361:118::-;29448:24;29466:5;29448:24;:::i;:::-;29443:3;29436:37;29361:118;;:::o;29485:886::-;29746:4;29784:3;29773:9;29769:19;29761:27;;29798:71;29866:1;29855:9;29851:17;29842:6;29798:71;:::i;:::-;29879:72;29947:2;29936:9;29932:18;29923:6;29879:72;:::i;:::-;29961;30029:2;30018:9;30014:18;30005:6;29961:72;:::i;:::-;30043;30111:2;30100:9;30096:18;30087:6;30043:72;:::i;:::-;30125:73;30193:3;30182:9;30178:19;30169:6;30125:73;:::i;:::-;30208;30276:3;30265:9;30261:19;30252:6;30208:73;:::i;:::-;30291;30359:3;30348:9;30344:19;30335:6;30291:73;:::i;:::-;29485:886;;;;;;;;;;:::o;30377:176::-;30409:1;30426:20;30444:1;30426:20;:::i;:::-;30421:25;;30460:20;30478:1;30460:20;:::i;:::-;30455:25;;30499:1;30489:35;;30504:18;;:::i;:::-;30489:35;30545:1;30542;30538:9;30533:14;;30377:176;;;;:::o

Swarm Source

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