ETH Price: $3,384.75 (-1.54%)
Gas: 1 Gwei

Token

MUTATE (MUTATE)
 

Overview

Max Total Supply

1,000,000,000 MUTATE

Holders

456

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,722.138828765076574735 MUTATE

Value
$0.00
0x53173dd185aacf5d662e90c856dc70449a321a2f
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-12
*/

/*
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 = 0;
    uint256 _buyLiquidityFee = 0;
    uint256 _buyReflectionFee = 0;
    uint256 _buyTreasuryFee = 0;

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

    uint256 public marketingDebt = 0;
    uint256 public liquidityDebt = 0;
    uint256 public treasuryDebt = 0;
    /**
     * Mode & Fee
     * 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 150 holders=3%, 
     *       SellTax: treasury=2%, reflection=3%)
     * mode4(BuyTax: 0, SellTax: 0)
     */
    uint8 public mode = 0;  // current mode
    bool public isAutoMode = false;
    uint256 public modeStartTime = 0;
    uint256 public modePeriod = 3 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});

    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 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
        UNISWAP_V2_ROUTER = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);  // 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;

        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, 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, uint256 amount) internal returns (uint256) {
        Fee memory _feeTax = sellTax;
        bool _topReflection = false;
        if (sender == UNISWAP_V2_PAIR) {
            _feeTax = buyTax;
            if (mode == 3) {
                _topReflection = 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 (_topReflection) {
                _topHolderReflection(_reflectionFeeAmount);
            } 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, uint256 amount) internal returns (uint256) {
        if (mode > 0) {
            return _takeModeFees(sender, 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 Transfer(address(this), luckyHolder, amount);
        }
    }

    function _topHolderReflection(uint256 amount) internal {
        topHolderReflectionAmount += 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;
        // (bool tmpSuccess,) = payable(liquidityAddress).call{value: amountETH}("");
        // payable(liquidityAddress).transfer(amountETH);
        _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 _changeMode(uint8 mode_) internal {
        if (mode_ == 2) {
            buyTax = mode2BuyTax;
            sellTax = mode2SellTax;
        } else if (mode_ == 3) {
            buyTax = mode3BuyTax;
            sellTax = mode3SellTax;
        } else if (mode_ == 4) {
            buyTax = mode4BuyTax;
            sellTax = mode4SellTax;
        } else {
            buyTax = mode1BuyTax;
            sellTax = mode1SellTax;
        }
        mode = mode_;
        emit UpdateMode(mode_);
    }

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

    function manualUpdateMode(uint8 mode_) external onlyOwner {
        require(mode_ < 5, "Undefined Mode");
        _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":"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":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":"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":"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":[{"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"}]

608060405273de77ac95f80b18fc89c32fef18c3d71af690dd3560015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de77ac95f80b18fc89c32fef18c3d71af690dd3560025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de77ac95f80b18fc89c32fef18c3d71af690dd3560035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073efc9264d68d06502cdc785fc2aea84bf05a999f260045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600681526020017f4d55544154450000000000000000000000000000000000000000000000000000815250600590816200019a919062001f47565b506040518060400160405280600681526020017f4d5554415445000000000000000000000000000000000000000000000000000081525060069081620001e1919062001f47565b50601260075f6101000a81548160ff021916908360ff16021790555060075f9054906101000a900460ff16600a6200021a9190620021b4565b633b9aca006200022b919062002204565b6008556001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055506064600260085462000275919062002204565b6200028191906200227b565b600c556064600260085462000297919062002204565b620002a391906200227b565b600d556127106004600854620002ba919062002204565b620002c691906200227b565b600e555f600f555f6010555f6011555f6012555f6013555f6014555f6015555f6016555f6017555f6018555f6019555f601a5f6101000a81548160ff021916908360ff1602179055505f601a60016101000a81548160ff0219169083151502179055505f601b55612a30601c556040518060a00160405280600260ff168152602001600360ff1681526020015f60ff1681526020015f60ff168152602001600560ff16815250601d5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a00160405280600260ff168152602001600360ff1681526020015f60ff1681526020015f60ff168152602001600560ff16815250601e5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815250601f5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a00160405280600260ff168152602001600260ff168152602001600260ff1681526020015f60ff168152602001600660ff1681525060205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff168152602001600360ff1681526020015f60ff168152602001600160ff168152602001600460ff1681525060215f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a00160405280600260ff168152602001600360ff1681526020015f60ff1681526020015f60ff168152602001600560ff1681525060225f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681525060235f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555050506040518060a001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681525060245f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff160217905550505034801562000a0f575f80fd5b5062000a3062000a2462001c1b60201b60201c565b62001c2260201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362000ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab99062002336565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60275f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b81573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000ba79190620023bb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c2e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000c549190620023bb565b6040518363ffffffff1660e01b815260040162000c73929190620023fc565b6020604051808303815f875af115801562000c90573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000cb69190620023bb565b60285f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600854600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160295f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160295f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602a5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001602b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601d60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050601e60265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505f60646005600854620018b2919062002204565b620018be91906200227b565b90508060095f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620019a3919062002438565b60405180910390a36001602c5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8160085462001ab3919062002453565b90508060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001b56919062002438565b60405180910390a36001602c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d33908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200248d565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062001d5f57607f821691505b60208210810362001d755762001d7462001d1a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262001dd97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001d9c565b62001de5868362001d9c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62001e2f62001e2962001e238462001dfd565b62001e06565b62001dfd565b9050919050565b5f819050919050565b62001e4a8362001e0f565b62001e6262001e598262001e36565b84845462001da8565b825550505050565b5f90565b62001e7862001e6a565b62001e8581848462001e3f565b505050565b5b8181101562001eac5762001ea05f8262001e6e565b60018101905062001e8b565b5050565b601f82111562001efb5762001ec58162001d7b565b62001ed08462001d8d565b8101602085101562001ee0578190505b62001ef862001eef8562001d8d565b83018262001e8a565b50505b505050565b5f82821c905092915050565b5f62001f1d5f198460080262001f00565b1980831691505092915050565b5f62001f37838362001f0c565b9150826002028217905092915050565b62001f528262001ce3565b67ffffffffffffffff81111562001f6e5762001f6d62001ced565b5b62001f7a825462001d47565b62001f8782828562001eb0565b5f60209050601f83116001811462001fbd575f841562001fa8578287015190505b62001fb4858262001f2a565b86555062002023565b601f19841662001fcd8662001d7b565b5f5b8281101562001ff65784890151825560018201915060208501945060208101905062001fcf565b8683101562002016578489015162002012601f89168262001f0c565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620020b5578086048111156200208d576200208c6200202b565b5b60018516156200209d5780820291505b8081029050620020ad8562002058565b94506200206d565b94509492505050565b5f82620020cf5760019050620021a1565b81620020de575f9050620021a1565b8160018114620020f75760028114620021025762002138565b6001915050620021a1565b60ff8411156200211757620021166200202b565b5b8360020a9150848211156200213157620021306200202b565b5b50620021a1565b5060208310610133831016604e8410600b8410161715620021725782820a9050838111156200216c576200216b6200202b565b5b620021a1565b62002181848484600162002064565b925090508184048111156200219b576200219a6200202b565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620021c08262001dfd565b9150620021cd83620021a8565b9250620021fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620020be565b905092915050565b5f620022108262001dfd565b91506200221d8362001dfd565b92508282026200222d8162001dfd565b915082820484148315176200224757620022466200202b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620022878262001dfd565b9150620022948362001dfd565b925082620022a757620022a66200224e565b5b828204905092915050565b5f82825260208201905092915050565b7f506c6561736520736574206120646966666572656e742077616c6c657420666f5f8201527f7220646576416464726573730000000000000000000000000000000000000000602082015250565b5f6200231e602c83620022b2565b91506200232b82620022c2565b604082019050919050565b5f6020820190508181035f8301526200234f8162002310565b9050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62002385826200235a565b9050919050565b620023978162002379565b8114620023a2575f80fd5b50565b5f81519050620023b5816200238c565b92915050565b5f60208284031215620023d357620023d262002356565b5b5f620023e284828501620023a5565b91505092915050565b620023f68162002379565b82525050565b5f604082019050620024115f830185620023eb565b620024206020830184620023eb565b9392505050565b620024328162001dfd565b82525050565b5f6020820190506200244d5f83018462002427565b92915050565b5f6200245f8262001dfd565b91506200246c8362001dfd565b92508282039050818111156200248757620024866200202b565b5b92915050565b61511b806200249b5f395ff3fe60806040526004361061036d575f3560e01c80636cf3fdb9116101c5578063a9059cbb116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610cae578063f40acc3d14610cd6578063f9c683c014610d00578063ff131b4e14610d2857610374565b8063dd62ed3e14610c1c578063e01bb68814610c58578063e839363b14610c8057610374565b8063c15d854f116100d0578063c15d854f14610b5c578063cc1776d314610b8a578063cc274b2914610bb8578063d4d7b19a14610be057610374565b8063a9059cbb14610ab6578063b1bd377414610af2578063b876e5e214610b2e57610374565b80638a8c523c1161016357806394da5dbf1161013d57806394da5dbf146109f857806395d89b4114610a345780639dee70dd14610a5e578063a82ed9ec14610a8c57610374565b80638a8c523c1461097a5780638da5cb5b146109a457806393e6b04a146109ce57610374565b806373ad468a1161019f57806373ad468a146108d65780637437681e1461090057806376e88ddb1461092a578063834a33cf1461095257610374565b80636cf3fdb91461085a57806370a0823114610884578063715018a6146108c057610374565b80632c957aa01161029f578063526b13fd1161023d578063615494be11610217578063615494be146107c857806364c653c1146107f2578063658d4b7f1461081c57806366eb37851461084457610374565b8063526b13fd1461073a578063571ac8b014610762578063573d8cf91461079e57610374565b80633f4218e0116102795780633f4218e01461067e5780634f7041a5146106ba57806351fdefc9146106e85780635220179f1461071257610374565b80632c957aa014610604578063313ce5671461062c5780633307d3721461065657610374565b8063166319eb1161030c57806323b872dd116102e657806323b872dd14610538578063295a521214610574578063296914481461059e5780632a11ced0146105c857610374565b8063166319eb146104b857806318160ddd146104e0578063204a68361461050a57610374565b806306fdde031161034857806306fdde03146103fa578063095ea7b314610424578063122eff2b14610460578063142a27111461048e57610374565b8062adef68146103785780630445b667146103a6578063057a2c0e146103d057610374565b3661037457005b5f80fd5b348015610383575f80fd5b5061038c610d56565b60405161039d959493929190614207565b60405180910390f35b3480156103b1575f80fd5b506103ba610db5565b6040516103c79190614270565b60405180910390f35b3480156103db575f80fd5b506103e4610dbb565b6040516103f19190614270565b60405180910390f35b348015610405575f80fd5b5061040e610dc1565b60405161041b9190614313565b60405180910390f35b34801561042f575f80fd5b5061044a600480360381019061044591906143bf565b610e51565b6040516104579190614417565b60405180910390f35b34801561046b575f80fd5b50610474610f3e565b604051610485959493929190614207565b60405180910390f35b348015610499575f80fd5b506104a2610f9d565b6040516104af9190614270565b60405180910390f35b3480156104c3575f80fd5b506104de60048036038101906104d99190614430565b610fa3565b005b3480156104eb575f80fd5b506104f4610fed565b6040516105019190614270565b60405180910390f35b348015610515575f80fd5b5061051e610ff6565b60405161052f959493929190614207565b60405180910390f35b348015610543575f80fd5b5061055e600480360381019061055991906144e1565b611055565b60405161056b9190614417565b60405180910390f35b34801561057f575f80fd5b506105886112c5565b6040516105959190614531565b60405180910390f35b3480156105a9575f80fd5b506105b26112d7565b6040516105bf9190614417565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e9919061454a565b6112ea565b6040516105fb9190614584565b60405180910390f35b34801561060f575f80fd5b5061062a600480360381019061062591906145c7565b611325565b005b348015610637575f80fd5b50610640611385565b60405161064d9190614531565b60405180910390f35b348015610661575f80fd5b5061067c600480360381019061067791906145c7565b61139a565b005b348015610689575f80fd5b506106a4600480360381019061069f9190614605565b6113fa565b6040516106b19190614417565b60405180910390f35b3480156106c5575f80fd5b506106ce611417565b6040516106df959493929190614207565b60405180910390f35b3480156106f3575f80fd5b506106fc611476565b6040516107099190614270565b60405180910390f35b34801561071d575f80fd5b506107386004803603810190610733919061465a565b61147c565b005b348015610745575f80fd5b50610760600480360381019061075b9190614685565b6114d6565b005b34801561076d575f80fd5b5061078860048036038101906107839190614605565b611531565b6040516107959190614417565b60405180910390f35b3480156107a9575f80fd5b506107b2611545565b6040516107bf9190614270565b60405180910390f35b3480156107d3575f80fd5b506107dc61154b565b6040516107e99190614270565b60405180910390f35b3480156107fd575f80fd5b50610806611551565b6040516108139190614270565b60405180910390f35b348015610827575f80fd5b50610842600480360381019061083d91906145c7565b611557565b005b34801561084f575f80fd5b506108586115b7565b005b348015610865575f80fd5b5061086e6115d7565b60405161087b9190614270565b60405180910390f35b34801561088f575f80fd5b506108aa60048036038101906108a59190614605565b6115dd565b6040516108b79190614270565b60405180910390f35b3480156108cb575f80fd5b506108d46116b5565b005b3480156108e1575f80fd5b506108ea6116c8565b6040516108f79190614270565b60405180910390f35b34801561090b575f80fd5b506109146116ce565b6040516109219190614270565b60405180910390f35b348015610935575f80fd5b50610950600480360381019061094b9190614685565b6116d4565b005b34801561095d575f80fd5b5061097860048036038101906109739190614685565b6116f9565b005b348015610985575f80fd5b5061098e61171e565b60405161099b9190614417565b60405180910390f35b3480156109af575f80fd5b506109b8611730565b6040516109c59190614584565b60405180910390f35b3480156109d9575f80fd5b506109e2611757565b6040516109ef9190614417565b60405180910390f35b348015610a03575f80fd5b50610a1e6004803603810190610a199190614605565b61176a565b604051610a2b9190614417565b60405180910390f35b348015610a3f575f80fd5b50610a48611787565b604051610a559190614313565b60405180910390f35b348015610a69575f80fd5b50610a72611817565b604051610a83959493929190614207565b60405180910390f35b348015610a97575f80fd5b50610aa0611876565b604051610aad919061470b565b60405180910390f35b348015610ac1575f80fd5b50610adc6004803603810190610ad791906143bf565b61189b565b604051610ae99190614417565b60405180910390f35b348015610afd575f80fd5b50610b186004803603810190610b139190614605565b6118af565b604051610b259190614417565b60405180910390f35b348015610b39575f80fd5b50610b426118cc565b604051610b53959493929190614207565b60405180910390f35b348015610b67575f80fd5b50610b7061192b565b604051610b81959493929190614207565b60405180910390f35b348015610b95575f80fd5b50610b9e61198a565b604051610baf959493929190614207565b60405180910390f35b348015610bc3575f80fd5b50610bde6004803603810190610bd9919061454a565b6119e9565b005b348015610beb575f80fd5b50610c066004803603810190610c019190614605565b6119fb565b604051610c139190614417565b60405180910390f35b348015610c27575f80fd5b50610c426004803603810190610c3d9190614724565b611a18565b604051610c4f9190614270565b60405180910390f35b348015610c63575f80fd5b50610c7e6004803603810190610c799190614605565b611a9a565b005b348015610c8b575f80fd5b50610c94611ae5565b604051610ca5959493929190614207565b60405180910390f35b348015610cb9575f80fd5b50610cd46004803603810190610ccf9190614605565b611b44565b005b348015610ce1575f80fd5b50610cea611bc6565b604051610cf79190614584565b60405180910390f35b348015610d0b575f80fd5b50610d266004803603810190610d2191906147c3565b611beb565b005b348015610d33575f80fd5b50610d3c611d87565b604051610d4d959493929190614207565b60405180910390f35b601d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b600e5481565b601b5481565b606060058054610dd09061483b565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfc9061483b565b8015610e475780601f10610e1e57610100808354040283529160200191610e47565b820191905f5260205f20905b815481529060010190602001808311610e2a57829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f2c9190614270565b60405180910390a36001905092915050565b6023805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b602f5481565b610fab611de6565b87600f81905550866010819055508560118190555084601281905550836013819055508260148190555081601581905550806016819055505050505050505050565b5f600854905090565b601f805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146112b15781600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906148b5565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112349190614900565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6112bc848484611e64565b90509392505050565b601a5f9054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b602d81815481106112f9575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61132d611de6565b80602b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900460ff16905090565b6113a2611de6565b80602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6029602052805f5260405f205f915054906101000a900460ff1681565b6025805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60175481565b611484611de6565b60058160ff16106114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c19061497d565b60405180910390fd5b6114d38161212a565b50565b6114de611de6565b80600b5f6101000a81548160ff0219169083151502179055507fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223816040516115269190614417565b60405180910390a150565b5f61153e82600854610e51565b9050919050565b601c5481565b602e5481565b60185481565b61155f611de6565b8060295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6115bf611de6565b6115c76128b9565b156115d5576115d4612956565b5b565b60195481565b5f8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561167757505f602e54115b801561168857506002602d80549050115b156116ac57602d805490508161169e91906149c8565b816116a991906149f8565b90505b80915050919050565b6116bd611de6565b6116c65f612bda565b565b600c5481565b600d5481565b6116dc611de6565b80600b60016101000a81548160ff02191690831515021790555050565b611701611de6565b80601a60016101000a81548160ff02191690831515021790555050565b600b5f9054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60019054906101000a900460ff1681565b602b602052805f5260405f205f915054906101000a900460ff1681565b6060600680546117969061483b565b80601f01602080910402602001604051908101604052809291908181526020018280546117c29061483b565b801561180d5780601f106117e45761010080835404028352916020019161180d565b820191905f5260205f20905b8154815290600101906020018083116117f057829003601f168201915b5050505050905090565b601e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6118a7338484611e64565b905092915050565b602a602052805f5260405f205f915054906101000a900460ff1681565b6024805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6020805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6026805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6119f1611de6565b80600e8190555050565b602c602052805f5260405f205f915054906101000a900460ff1681565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611aa2611de6565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6022805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611b4c611de6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614a9b565b60405180910390fd5b611bc381612bda565b50565b60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bf3611de6565b5f602f5411611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614b03565b60405180910390fd5b5f82829050602f54611c4991906149c8565b90505f602f819055505f5b838390508160ff161015611d81578160095f86868560ff16818110611c7c57611c7b614b21565b5b9050602002016020810190611c919190614605565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cd891906149f8565b9250508190555083838260ff16818110611cf557611cf4614b21565b5b9050602002016020810190611d0a9190614605565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d669190614270565b60405180910390a38080611d7990614b4e565b915050611c54565b50505050565b6021805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611dee612c9b565b73ffffffffffffffffffffffffffffffffffffffff16611e0c611730565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990614bc0565b60405180910390fd5b565b5f611e6f8484612ca2565b611e798383612da3565b60305f9054906101000a900460ff1615611e9f57611e98848484612e98565b9050612123565b611ea76128b9565b15611eb557611eb4612956565b5b602a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611f0d57611f0c84613074565b5b611f94826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131049092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611fde84613158565b5f611fe985856134a6565b611ff35782611ffe565b611ffd858461354c565b5b90506120508160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461358a90919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061209a84613158565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120f79190614270565b60405180910390a3601a60019054906101000a900460ff161561211d5761211c61359f565b5b60019150505b9392505050565b60028160ff16036122fc57601f60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602060265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612865565b60038160ff16036124ce57602160255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602260265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612864565b60048160ff16036126a057602360255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602460265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612863565b601d60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050601e60265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505b5b5b80601a5f6101000a81548160ff021916908360ff1602179055507f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e86816040516128ae9190614531565b60405180910390a150565b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156129235750600b60019054906101000a900460ff165b801561293b575060305f9054906101000a900460ff16155b80156129515750600e5461294e306115dd565b10155b905090565b600160305f6101000a81548160ff0219169083151502179055505f61297a306115dd565b90506129a760275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610e51565b505f600267ffffffffffffffff8111156129c4576129c3614bde565b5b6040519080825280602002602001820160405280156129f25781602001602082028036833780820191505090505b50905030815f81518110612a0957612a08614b21565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad19190614c1f565b81600181518110612ae557612ae4614b21565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612b81959493929190614d3a565b5f604051808303815f87803b158015612b98575f80fd5b505af1158015612baa573d5f803e3d5ffd5b505050505f479050612bbc8184613622565b5050505f60305f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b600b5f9054906101000a900460ff16612d9f5760285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d5f575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590614ddc565b60405180910390fd5b5b5050565b602b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e9457600d54811115612e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2d90614e6a565b60405180910390fd5b5f81612e41846115dd565b612e4b91906149f8565b9050600c54811115612e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8990614ed2565b60405180910390fd5b505b5050565b5f612f20826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131049092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612f6a84613158565b612fba8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461358a90919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061300483613158565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130619190614270565b60405180910390a3600190509392505050565b5f602e541115613101575f602d80549050602e5461309291906149c8565b905080602e5f8282546130a59190614900565b925050819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546130f891906149f8565b92505081905550505b50565b5f83831115829061314b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131429190614313565b60405180910390fd5b5082840390509392505050565b5f613162826115dd565b90505f81111561327557602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613270576001602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6134a2565b602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156134a1575f602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b6001602d8054905061332c9190614900565b81101561345b578273ffffffffffffffffffffffffffffffffffffffff16602d828154811061335e5761335d614b21565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361344857602d6001602d805490506133b59190614900565b815481106133c6576133c5614b21565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602d828154811061340257613401614b21565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b808061345390614ef0565b91505061331a565b50602d80548061346e5761346d614f37565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5b5050565b5f60295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580613544575060295f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f80601a5f9054906101000a900460ff1660ff161115613577576135708383613883565b9050613584565b6135818383613ce7565b90505b92915050565b5f818361359791906149f8565b905092915050565b5f601a5f9054906101000a900460ff1690505f8160ff16036135c15750613620565b5f601b54426135d09190614900565b9050601c548110156135e3575050613620565b60046001836135f29190614f64565b6135fc9190614f98565b91505f8260ff160361360d57600191505b42601b8190555061361d8261212a565b50505b565b5f60195460185460175461363691906149f8565b61364091906149f8565b90505f81601754856136529190614fc8565b61365c91906149c8565b90505f826017548561366e9190614fc8565b61367891906149c8565b90505f836018548761368a9190614fc8565b61369491906149c8565b90505f84601854876136a69190614fc8565b6136b091906149c8565b90505f8285896136c09190614900565b6136ca9190614900565b90505f8285896136da9190614900565b6136e49190614900565b90505f86111561376c5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8790811502906040515f60405180830381858888f19350505050158015613752573d5f803e3d5ffd5b508460175f8282546137649190614900565b925050819055505b5f8411156137f25760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f193505050501580156137d8573d5f803e3d5ffd5b508260185f8282546137ea9190614900565b925050819055505b5f8211156138785760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561385e573d5f803e3d5ffd5b508060195f8282546138709190614900565b925050819055505b505050505050505050565b5f8060266040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505090505f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613a2d5760256040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505091506003601a5f9054906101000a900460ff1660ff1603613a2c57600190505b5b5f6064836080015160ff1686613a439190614fc8565b613a4d91906149c8565b90505f835f015160ff161115613af1575f836080015160ff16845f015160ff1683613a789190614fc8565b613a8291906149c8565b90508060195f828254613a9591906149f8565b925050819055508060095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613ae891906149f8565b92505081905550505b5f836020015160ff161115613b92575f836080015160ff16846020015160ff1683613b1c9190614fc8565b613b2691906149c8565b90508215613b3c57613b3781613f2b565b613b90565b80602e5f828254613b4d91906149f8565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c24536481602e54604051613b87929190615009565b60405180910390a15b505b5f836040015160ff161115613bd4575f836080015160ff16846040015160ff1683613bbd9190614fc8565b613bc791906149c8565b9050613bd281613f46565b505b5f836060015160ff161115613cc9575f836080015160ff16846060015160ff1683613bff9190614fc8565b613c0991906149c8565b90508060095f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613c5991906149f8565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cbf9190614270565b60405180910390a3505b613cdc818661417290919063ffffffff16565b935050505092915050565b5f8060135490505f60145490505f60155490505f601654905060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603613d6957600f5493506010549250601154915060125490505b5f60648588613d789190614fc8565b613d8291906149c8565b90505f60648589613d939190614fc8565b613d9d91906149c8565b90505f6064848a613dae9190614fc8565b613db891906149c8565b90505f6064868b613dc99190614fc8565b613dd391906149c8565b90505f861115613e315780602e5f828254613dee91906149f8565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c24536481602e54604051613e28929190615009565b60405180910390a15b8360175f828254613e4291906149f8565b925050819055508260185f828254613e5a91906149f8565b925050819055508160195f828254613e7291906149f8565b92505081905550818385613e8691906149f8565b613e9091906149f8565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613edb91906149f8565b925050819055505f81838587613ef191906149f8565b613efb91906149f8565b613f0591906149f8565b9050613f1a818c61417290919063ffffffff16565b995050505050505050505092915050565b80602f5f828254613f3c91906149f8565b9250508190555050565b5f613f52600180614187565b90505f602d8281548110613f6957613f68614b21565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613ffd575061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015614056575060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156140af575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561416d578260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461410091906149f8565b925050819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141649190614270565b60405180910390a35b505050565b5f818361417f9190614900565b905092915050565b5f80333a434260014361419a9190614900565b4088886040516020016141b39796959493929190615048565b604051602081830303815290604052805190602001205f1c90505f602d80549050826141df91906150b5565b9050809250505092915050565b5f60ff82169050919050565b614201816141ec565b82525050565b5f60a08201905061421a5f8301886141f8565b61422760208301876141f8565b61423460408301866141f8565b61424160608301856141f8565b61424e60808301846141f8565b9695505050505050565b5f819050919050565b61426a81614258565b82525050565b5f6020820190506142835f830184614261565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156142c05780820151818401526020810190506142a5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6142e582614289565b6142ef8185614293565b93506142ff8185602086016142a3565b614308816142cb565b840191505092915050565b5f6020820190508181035f83015261432b81846142db565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6143648261433b565b9050919050565b6143748161435a565b811461437e575f80fd5b50565b5f8135905061438f8161436b565b92915050565b61439e81614258565b81146143a8575f80fd5b50565b5f813590506143b981614395565b92915050565b5f80604083850312156143d5576143d4614333565b5b5f6143e285828601614381565b92505060206143f3858286016143ab565b9150509250929050565b5f8115159050919050565b614411816143fd565b82525050565b5f60208201905061442a5f830184614408565b92915050565b5f805f805f805f80610100898b03121561444d5761444c614333565b5b5f61445a8b828c016143ab565b985050602061446b8b828c016143ab565b975050604061447c8b828c016143ab565b965050606061448d8b828c016143ab565b955050608061449e8b828c016143ab565b94505060a06144af8b828c016143ab565b93505060c06144c08b828c016143ab565b92505060e06144d18b828c016143ab565b9150509295985092959890939650565b5f805f606084860312156144f8576144f7614333565b5b5f61450586828701614381565b935050602061451686828701614381565b9250506040614527868287016143ab565b9150509250925092565b5f6020820190506145445f8301846141f8565b92915050565b5f6020828403121561455f5761455e614333565b5b5f61456c848285016143ab565b91505092915050565b61457e8161435a565b82525050565b5f6020820190506145975f830184614575565b92915050565b6145a6816143fd565b81146145b0575f80fd5b50565b5f813590506145c18161459d565b92915050565b5f80604083850312156145dd576145dc614333565b5b5f6145ea85828601614381565b92505060206145fb858286016145b3565b9150509250929050565b5f6020828403121561461a57614619614333565b5b5f61462784828501614381565b91505092915050565b614639816141ec565b8114614643575f80fd5b50565b5f8135905061465481614630565b92915050565b5f6020828403121561466f5761466e614333565b5b5f61467c84828501614646565b91505092915050565b5f6020828403121561469a57614699614333565b5b5f6146a7848285016145b3565b91505092915050565b5f819050919050565b5f6146d36146ce6146c98461433b565b6146b0565b61433b565b9050919050565b5f6146e4826146b9565b9050919050565b5f6146f5826146da565b9050919050565b614705816146eb565b82525050565b5f60208201905061471e5f8301846146fc565b92915050565b5f806040838503121561473a57614739614333565b5b5f61474785828601614381565b925050602061475885828601614381565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261478357614782614762565b5b8235905067ffffffffffffffff8111156147a05761479f614766565b5b6020830191508360208202830111156147bc576147bb61476a565b5b9250929050565b5f80602083850312156147d9576147d8614333565b5b5f83013567ffffffffffffffff8111156147f6576147f5614337565b5b6148028582860161476e565b92509250509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061485257607f821691505b6020821081036148655761486461480e565b5b50919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61489f601d83614293565b91506148aa8261486b565b602082019050919050565b5f6020820190508181035f8301526148cc81614893565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61490a82614258565b915061491583614258565b925082820390508181111561492d5761492c6148d3565b5b92915050565b7f556e646566696e6564204d6f64650000000000000000000000000000000000005f82015250565b5f614967600e83614293565b915061497282614933565b602082019050919050565b5f6020820190508181035f8301526149948161495b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149d282614258565b91506149dd83614258565b9250826149ed576149ec61499b565b5b828204905092915050565b5f614a0282614258565b9150614a0d83614258565b9250828201905080821115614a2557614a246148d3565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a85602683614293565b9150614a9082614a2b565b604082019050919050565b5f6020820190508181035f830152614ab281614a79565b9050919050565b7f5265776172642073686f756c6420626520617661696c61626c650000000000005f82015250565b5f614aed601a83614293565b9150614af882614ab9565b602082019050919050565b5f6020820190508181035f830152614b1a81614ae1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614b58826141ec565b915060ff8203614b6b57614b6a6148d3565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614baa602083614293565b9150614bb582614b76565b602082019050919050565b5f6020820190508181035f830152614bd781614b9e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050614c198161436b565b92915050565b5f60208284031215614c3457614c33614333565b5b5f614c4184828501614c0b565b91505092915050565b5f819050919050565b5f614c6d614c68614c6384614c4a565b6146b0565b614258565b9050919050565b614c7d81614c53565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614cb58161435a565b82525050565b5f614cc68383614cac565b60208301905092915050565b5f602082019050919050565b5f614ce882614c83565b614cf28185614c8d565b9350614cfd83614c9d565b805f5b83811015614d2d578151614d148882614cbb565b9750614d1f83614cd2565b925050600181019050614d00565b5085935050505092915050565b5f60a082019050614d4d5f830188614261565b614d5a6020830187614c74565b8181036040830152614d6c8186614cde565b9050614d7b6060830185614575565b614d886080830184614261565b9695505050505050565b7f54726164696e672069732064697361626c6564210000000000000000000000005f82015250565b5f614dc6601483614293565b9150614dd182614d92565b602082019050919050565b5f6020820190508181035f830152614df381614dba565b9050919050565b7f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d6974655f8201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b5f614e54602283614293565b9150614e5f82614dfa565b604082019050919050565b5f6020820190508181035f830152614e8181614e48565b9050919050565b7f4d61782062616c616e6365206973206c696d69746564210000000000000000005f82015250565b5f614ebc601783614293565b9150614ec782614e88565b602082019050919050565b5f6020820190508181035f830152614ee981614eb0565b9050919050565b5f614efa82614258565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f2c57614f2b6148d3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f614f6e826141ec565b9150614f79836141ec565b9250828201905060ff811115614f9257614f916148d3565b5b92915050565b5f614fa2826141ec565b9150614fad836141ec565b925082614fbd57614fbc61499b565b5b828206905092915050565b5f614fd282614258565b9150614fdd83614258565b9250828202614feb81614258565b91508282048414831517615002576150016148d3565b5b5092915050565b5f60408201905061501c5f830185614261565b6150296020830184614261565b9392505050565b5f819050919050565b61504281615030565b82525050565b5f60e08201905061505b5f83018a614575565b6150686020830189614261565b6150756040830188614261565b6150826060830187614261565b61508f6080830186615039565b61509c60a0830185614261565b6150a960c0830184614261565b98975050505050505050565b5f6150bf82614258565b91506150ca83614258565b9250826150da576150d961499b565b5b82820690509291505056fea26469706673582212202ff19c2deecbba67684c0a22a7ee0f1a9dc058390d2f82bdcf99f249ecce4de664736f6c63430008150033

Deployed Bytecode

0x60806040526004361061036d575f3560e01c80636cf3fdb9116101c5578063a9059cbb116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610cae578063f40acc3d14610cd6578063f9c683c014610d00578063ff131b4e14610d2857610374565b8063dd62ed3e14610c1c578063e01bb68814610c58578063e839363b14610c8057610374565b8063c15d854f116100d0578063c15d854f14610b5c578063cc1776d314610b8a578063cc274b2914610bb8578063d4d7b19a14610be057610374565b8063a9059cbb14610ab6578063b1bd377414610af2578063b876e5e214610b2e57610374565b80638a8c523c1161016357806394da5dbf1161013d57806394da5dbf146109f857806395d89b4114610a345780639dee70dd14610a5e578063a82ed9ec14610a8c57610374565b80638a8c523c1461097a5780638da5cb5b146109a457806393e6b04a146109ce57610374565b806373ad468a1161019f57806373ad468a146108d65780637437681e1461090057806376e88ddb1461092a578063834a33cf1461095257610374565b80636cf3fdb91461085a57806370a0823114610884578063715018a6146108c057610374565b80632c957aa01161029f578063526b13fd1161023d578063615494be11610217578063615494be146107c857806364c653c1146107f2578063658d4b7f1461081c57806366eb37851461084457610374565b8063526b13fd1461073a578063571ac8b014610762578063573d8cf91461079e57610374565b80633f4218e0116102795780633f4218e01461067e5780634f7041a5146106ba57806351fdefc9146106e85780635220179f1461071257610374565b80632c957aa014610604578063313ce5671461062c5780633307d3721461065657610374565b8063166319eb1161030c57806323b872dd116102e657806323b872dd14610538578063295a521214610574578063296914481461059e5780632a11ced0146105c857610374565b8063166319eb146104b857806318160ddd146104e0578063204a68361461050a57610374565b806306fdde031161034857806306fdde03146103fa578063095ea7b314610424578063122eff2b14610460578063142a27111461048e57610374565b8062adef68146103785780630445b667146103a6578063057a2c0e146103d057610374565b3661037457005b5f80fd5b348015610383575f80fd5b5061038c610d56565b60405161039d959493929190614207565b60405180910390f35b3480156103b1575f80fd5b506103ba610db5565b6040516103c79190614270565b60405180910390f35b3480156103db575f80fd5b506103e4610dbb565b6040516103f19190614270565b60405180910390f35b348015610405575f80fd5b5061040e610dc1565b60405161041b9190614313565b60405180910390f35b34801561042f575f80fd5b5061044a600480360381019061044591906143bf565b610e51565b6040516104579190614417565b60405180910390f35b34801561046b575f80fd5b50610474610f3e565b604051610485959493929190614207565b60405180910390f35b348015610499575f80fd5b506104a2610f9d565b6040516104af9190614270565b60405180910390f35b3480156104c3575f80fd5b506104de60048036038101906104d99190614430565b610fa3565b005b3480156104eb575f80fd5b506104f4610fed565b6040516105019190614270565b60405180910390f35b348015610515575f80fd5b5061051e610ff6565b60405161052f959493929190614207565b60405180910390f35b348015610543575f80fd5b5061055e600480360381019061055991906144e1565b611055565b60405161056b9190614417565b60405180910390f35b34801561057f575f80fd5b506105886112c5565b6040516105959190614531565b60405180910390f35b3480156105a9575f80fd5b506105b26112d7565b6040516105bf9190614417565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e9919061454a565b6112ea565b6040516105fb9190614584565b60405180910390f35b34801561060f575f80fd5b5061062a600480360381019061062591906145c7565b611325565b005b348015610637575f80fd5b50610640611385565b60405161064d9190614531565b60405180910390f35b348015610661575f80fd5b5061067c600480360381019061067791906145c7565b61139a565b005b348015610689575f80fd5b506106a4600480360381019061069f9190614605565b6113fa565b6040516106b19190614417565b60405180910390f35b3480156106c5575f80fd5b506106ce611417565b6040516106df959493929190614207565b60405180910390f35b3480156106f3575f80fd5b506106fc611476565b6040516107099190614270565b60405180910390f35b34801561071d575f80fd5b506107386004803603810190610733919061465a565b61147c565b005b348015610745575f80fd5b50610760600480360381019061075b9190614685565b6114d6565b005b34801561076d575f80fd5b5061078860048036038101906107839190614605565b611531565b6040516107959190614417565b60405180910390f35b3480156107a9575f80fd5b506107b2611545565b6040516107bf9190614270565b60405180910390f35b3480156107d3575f80fd5b506107dc61154b565b6040516107e99190614270565b60405180910390f35b3480156107fd575f80fd5b50610806611551565b6040516108139190614270565b60405180910390f35b348015610827575f80fd5b50610842600480360381019061083d91906145c7565b611557565b005b34801561084f575f80fd5b506108586115b7565b005b348015610865575f80fd5b5061086e6115d7565b60405161087b9190614270565b60405180910390f35b34801561088f575f80fd5b506108aa60048036038101906108a59190614605565b6115dd565b6040516108b79190614270565b60405180910390f35b3480156108cb575f80fd5b506108d46116b5565b005b3480156108e1575f80fd5b506108ea6116c8565b6040516108f79190614270565b60405180910390f35b34801561090b575f80fd5b506109146116ce565b6040516109219190614270565b60405180910390f35b348015610935575f80fd5b50610950600480360381019061094b9190614685565b6116d4565b005b34801561095d575f80fd5b5061097860048036038101906109739190614685565b6116f9565b005b348015610985575f80fd5b5061098e61171e565b60405161099b9190614417565b60405180910390f35b3480156109af575f80fd5b506109b8611730565b6040516109c59190614584565b60405180910390f35b3480156109d9575f80fd5b506109e2611757565b6040516109ef9190614417565b60405180910390f35b348015610a03575f80fd5b50610a1e6004803603810190610a199190614605565b61176a565b604051610a2b9190614417565b60405180910390f35b348015610a3f575f80fd5b50610a48611787565b604051610a559190614313565b60405180910390f35b348015610a69575f80fd5b50610a72611817565b604051610a83959493929190614207565b60405180910390f35b348015610a97575f80fd5b50610aa0611876565b604051610aad919061470b565b60405180910390f35b348015610ac1575f80fd5b50610adc6004803603810190610ad791906143bf565b61189b565b604051610ae99190614417565b60405180910390f35b348015610afd575f80fd5b50610b186004803603810190610b139190614605565b6118af565b604051610b259190614417565b60405180910390f35b348015610b39575f80fd5b50610b426118cc565b604051610b53959493929190614207565b60405180910390f35b348015610b67575f80fd5b50610b7061192b565b604051610b81959493929190614207565b60405180910390f35b348015610b95575f80fd5b50610b9e61198a565b604051610baf959493929190614207565b60405180910390f35b348015610bc3575f80fd5b50610bde6004803603810190610bd9919061454a565b6119e9565b005b348015610beb575f80fd5b50610c066004803603810190610c019190614605565b6119fb565b604051610c139190614417565b60405180910390f35b348015610c27575f80fd5b50610c426004803603810190610c3d9190614724565b611a18565b604051610c4f9190614270565b60405180910390f35b348015610c63575f80fd5b50610c7e6004803603810190610c799190614605565b611a9a565b005b348015610c8b575f80fd5b50610c94611ae5565b604051610ca5959493929190614207565b60405180910390f35b348015610cb9575f80fd5b50610cd46004803603810190610ccf9190614605565b611b44565b005b348015610ce1575f80fd5b50610cea611bc6565b604051610cf79190614584565b60405180910390f35b348015610d0b575f80fd5b50610d266004803603810190610d2191906147c3565b611beb565b005b348015610d33575f80fd5b50610d3c611d87565b604051610d4d959493929190614207565b60405180910390f35b601d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b600e5481565b601b5481565b606060058054610dd09061483b565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfc9061483b565b8015610e475780601f10610e1e57610100808354040283529160200191610e47565b820191905f5260205f20905b815481529060010190602001808311610e2a57829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f2c9190614270565b60405180910390a36001905092915050565b6023805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b602f5481565b610fab611de6565b87600f81905550866010819055508560118190555084601281905550836013819055508260148190555081601581905550806016819055505050505050505050565b5f600854905090565b601f805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146112b15781600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906148b5565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112349190614900565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6112bc848484611e64565b90509392505050565b601a5f9054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b602d81815481106112f9575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61132d611de6565b80602b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900460ff16905090565b6113a2611de6565b80602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6029602052805f5260405f205f915054906101000a900460ff1681565b6025805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60175481565b611484611de6565b60058160ff16106114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c19061497d565b60405180910390fd5b6114d38161212a565b50565b6114de611de6565b80600b5f6101000a81548160ff0219169083151502179055507fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223816040516115269190614417565b60405180910390a150565b5f61153e82600854610e51565b9050919050565b601c5481565b602e5481565b60185481565b61155f611de6565b8060295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6115bf611de6565b6115c76128b9565b156115d5576115d4612956565b5b565b60195481565b5f8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050602a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561167757505f602e54115b801561168857506002602d80549050115b156116ac57602d805490508161169e91906149c8565b816116a991906149f8565b90505b80915050919050565b6116bd611de6565b6116c65f612bda565b565b600c5481565b600d5481565b6116dc611de6565b80600b60016101000a81548160ff02191690831515021790555050565b611701611de6565b80601a60016101000a81548160ff02191690831515021790555050565b600b5f9054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60019054906101000a900460ff1681565b602b602052805f5260405f205f915054906101000a900460ff1681565b6060600680546117969061483b565b80601f01602080910402602001604051908101604052809291908181526020018280546117c29061483b565b801561180d5780601f106117e45761010080835404028352916020019161180d565b820191905f5260205f20905b8154815290600101906020018083116117f057829003601f168201915b5050505050905090565b601e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b60275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6118a7338484611e64565b905092915050565b602a602052805f5260405f205f915054906101000a900460ff1681565b6024805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6020805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6026805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b6119f1611de6565b80600e8190555050565b602c602052805f5260405f205f915054906101000a900460ff1681565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611aa2611de6565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6022805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611b4c611de6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614a9b565b60405180910390fd5b611bc381612bda565b50565b60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bf3611de6565b5f602f5411611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614b03565b60405180910390fd5b5f82829050602f54611c4991906149c8565b90505f602f819055505f5b838390508160ff161015611d81578160095f86868560ff16818110611c7c57611c7b614b21565b5b9050602002016020810190611c919190614605565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cd891906149f8565b9250508190555083838260ff16818110611cf557611cf4614b21565b5b9050602002016020810190611d0a9190614605565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d669190614270565b60405180910390a38080611d7990614b4e565b915050611c54565b50505050565b6021805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff16905085565b611dee612c9b565b73ffffffffffffffffffffffffffffffffffffffff16611e0c611730565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990614bc0565b60405180910390fd5b565b5f611e6f8484612ca2565b611e798383612da3565b60305f9054906101000a900460ff1615611e9f57611e98848484612e98565b9050612123565b611ea76128b9565b15611eb557611eb4612956565b5b602a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611f0d57611f0c84613074565b5b611f94826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131049092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611fde84613158565b5f611fe985856134a6565b611ff35782611ffe565b611ffd858461354c565b5b90506120508160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461358a90919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061209a84613158565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120f79190614270565b60405180910390a3601a60019054906101000a900460ff161561211d5761211c61359f565b5b60019150505b9392505050565b60028160ff16036122fc57601f60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602060265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612865565b60038160ff16036124ce57602160255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602260265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612864565b60048160ff16036126a057602360255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050602460265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050612863565b601d60255f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff160217905550905050601e60265f82015f9054906101000a900460ff16815f015f6101000a81548160ff021916908360ff1602179055505f820160019054906101000a900460ff16815f0160016101000a81548160ff021916908360ff1602179055505f820160029054906101000a900460ff16815f0160026101000a81548160ff021916908360ff1602179055505f820160039054906101000a900460ff16815f0160036101000a81548160ff021916908360ff1602179055505f820160049054906101000a900460ff16815f0160046101000a81548160ff021916908360ff1602179055509050505b5b5b80601a5f6101000a81548160ff021916908360ff1602179055507f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e86816040516128ae9190614531565b60405180910390a150565b5f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156129235750600b60019054906101000a900460ff165b801561293b575060305f9054906101000a900460ff16155b80156129515750600e5461294e306115dd565b10155b905090565b600160305f6101000a81548160ff0219169083151502179055505f61297a306115dd565b90506129a760275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610e51565b505f600267ffffffffffffffff8111156129c4576129c3614bde565b5b6040519080825280602002602001820160405280156129f25781602001602082028036833780820191505090505b50905030815f81518110612a0957612a08614b21565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad19190614c1f565b81600181518110612ae557612ae4614b21565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612b81959493929190614d3a565b5f604051808303815f87803b158015612b98575f80fd5b505af1158015612baa573d5f803e3d5ffd5b505050505f479050612bbc8184613622565b5050505f60305f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b600b5f9054906101000a900460ff16612d9f5760285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d5f575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590614ddc565b60405180910390fd5b5b5050565b602b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e9457600d54811115612e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2d90614e6a565b60405180910390fd5b5f81612e41846115dd565b612e4b91906149f8565b9050600c54811115612e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8990614ed2565b60405180910390fd5b505b5050565b5f612f20826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131049092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612f6a84613158565b612fba8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461358a90919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061300483613158565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130619190614270565b60405180910390a3600190509392505050565b5f602e541115613101575f602d80549050602e5461309291906149c8565b905080602e5f8282546130a59190614900565b925050819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546130f891906149f8565b92505081905550505b50565b5f83831115829061314b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131429190614313565b60405180910390fd5b5082840390509392505050565b5f613162826115dd565b90505f81111561327557602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613270576001602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6134a2565b602c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156134a1575f602c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b6001602d8054905061332c9190614900565b81101561345b578273ffffffffffffffffffffffffffffffffffffffff16602d828154811061335e5761335d614b21565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361344857602d6001602d805490506133b59190614900565b815481106133c6576133c5614b21565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602d828154811061340257613401614b21565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b808061345390614ef0565b91505061331a565b50602d80548061346e5761346d614f37565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5b5050565b5f60295f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580613544575060295f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f80601a5f9054906101000a900460ff1660ff161115613577576135708383613883565b9050613584565b6135818383613ce7565b90505b92915050565b5f818361359791906149f8565b905092915050565b5f601a5f9054906101000a900460ff1690505f8160ff16036135c15750613620565b5f601b54426135d09190614900565b9050601c548110156135e3575050613620565b60046001836135f29190614f64565b6135fc9190614f98565b91505f8260ff160361360d57600191505b42601b8190555061361d8261212a565b50505b565b5f60195460185460175461363691906149f8565b61364091906149f8565b90505f81601754856136529190614fc8565b61365c91906149c8565b90505f826017548561366e9190614fc8565b61367891906149c8565b90505f836018548761368a9190614fc8565b61369491906149c8565b90505f84601854876136a69190614fc8565b6136b091906149c8565b90505f8285896136c09190614900565b6136ca9190614900565b90505f8285896136da9190614900565b6136e49190614900565b90505f86111561376c5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8790811502906040515f60405180830381858888f19350505050158015613752573d5f803e3d5ffd5b508460175f8282546137649190614900565b925050819055505b5f8411156137f25760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f193505050501580156137d8573d5f803e3d5ffd5b508260185f8282546137ea9190614900565b925050819055505b5f8211156138785760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561385e573d5f803e3d5ffd5b508060195f8282546138709190614900565b925050819055505b505050505050505050565b5f8060266040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505090505f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613a2d5760256040518060a00160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900460ff1660ff1660ff1681526020015f820160029054906101000a900460ff1660ff1660ff1681526020015f820160039054906101000a900460ff1660ff1660ff1681526020015f820160049054906101000a900460ff1660ff1660ff168152505091506003601a5f9054906101000a900460ff1660ff1603613a2c57600190505b5b5f6064836080015160ff1686613a439190614fc8565b613a4d91906149c8565b90505f835f015160ff161115613af1575f836080015160ff16845f015160ff1683613a789190614fc8565b613a8291906149c8565b90508060195f828254613a9591906149f8565b925050819055508060095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613ae891906149f8565b92505081905550505b5f836020015160ff161115613b92575f836080015160ff16846020015160ff1683613b1c9190614fc8565b613b2691906149c8565b90508215613b3c57613b3781613f2b565b613b90565b80602e5f828254613b4d91906149f8565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c24536481602e54604051613b87929190615009565b60405180910390a15b505b5f836040015160ff161115613bd4575f836080015160ff16846040015160ff1683613bbd9190614fc8565b613bc791906149c8565b9050613bd281613f46565b505b5f836060015160ff161115613cc9575f836080015160ff16846060015160ff1683613bff9190614fc8565b613c0991906149c8565b90508060095f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613c5991906149f8565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cbf9190614270565b60405180910390a3505b613cdc818661417290919063ffffffff16565b935050505092915050565b5f8060135490505f60145490505f60155490505f601654905060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603613d6957600f5493506010549250601154915060125490505b5f60648588613d789190614fc8565b613d8291906149c8565b90505f60648589613d939190614fc8565b613d9d91906149c8565b90505f6064848a613dae9190614fc8565b613db891906149c8565b90505f6064868b613dc99190614fc8565b613dd391906149c8565b90505f861115613e315780602e5f828254613dee91906149f8565b925050819055507f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c24536481602e54604051613e28929190615009565b60405180910390a15b8360175f828254613e4291906149f8565b925050819055508260185f828254613e5a91906149f8565b925050819055508160195f828254613e7291906149f8565b92505081905550818385613e8691906149f8565b613e9091906149f8565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613edb91906149f8565b925050819055505f81838587613ef191906149f8565b613efb91906149f8565b613f0591906149f8565b9050613f1a818c61417290919063ffffffff16565b995050505050505050505092915050565b80602f5f828254613f3c91906149f8565b9250508190555050565b5f613f52600180614187565b90505f602d8281548110613f6957613f68614b21565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613ffd575061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015614056575060275f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156140af575060285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561416d578260095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461410091906149f8565b925050819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141649190614270565b60405180910390a35b505050565b5f818361417f9190614900565b905092915050565b5f80333a434260014361419a9190614900565b4088886040516020016141b39796959493929190615048565b604051602081830303815290604052805190602001205f1c90505f602d80549050826141df91906150b5565b9050809250505092915050565b5f60ff82169050919050565b614201816141ec565b82525050565b5f60a08201905061421a5f8301886141f8565b61422760208301876141f8565b61423460408301866141f8565b61424160608301856141f8565b61424e60808301846141f8565b9695505050505050565b5f819050919050565b61426a81614258565b82525050565b5f6020820190506142835f830184614261565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156142c05780820151818401526020810190506142a5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6142e582614289565b6142ef8185614293565b93506142ff8185602086016142a3565b614308816142cb565b840191505092915050565b5f6020820190508181035f83015261432b81846142db565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6143648261433b565b9050919050565b6143748161435a565b811461437e575f80fd5b50565b5f8135905061438f8161436b565b92915050565b61439e81614258565b81146143a8575f80fd5b50565b5f813590506143b981614395565b92915050565b5f80604083850312156143d5576143d4614333565b5b5f6143e285828601614381565b92505060206143f3858286016143ab565b9150509250929050565b5f8115159050919050565b614411816143fd565b82525050565b5f60208201905061442a5f830184614408565b92915050565b5f805f805f805f80610100898b03121561444d5761444c614333565b5b5f61445a8b828c016143ab565b985050602061446b8b828c016143ab565b975050604061447c8b828c016143ab565b965050606061448d8b828c016143ab565b955050608061449e8b828c016143ab565b94505060a06144af8b828c016143ab565b93505060c06144c08b828c016143ab565b92505060e06144d18b828c016143ab565b9150509295985092959890939650565b5f805f606084860312156144f8576144f7614333565b5b5f61450586828701614381565b935050602061451686828701614381565b9250506040614527868287016143ab565b9150509250925092565b5f6020820190506145445f8301846141f8565b92915050565b5f6020828403121561455f5761455e614333565b5b5f61456c848285016143ab565b91505092915050565b61457e8161435a565b82525050565b5f6020820190506145975f830184614575565b92915050565b6145a6816143fd565b81146145b0575f80fd5b50565b5f813590506145c18161459d565b92915050565b5f80604083850312156145dd576145dc614333565b5b5f6145ea85828601614381565b92505060206145fb858286016145b3565b9150509250929050565b5f6020828403121561461a57614619614333565b5b5f61462784828501614381565b91505092915050565b614639816141ec565b8114614643575f80fd5b50565b5f8135905061465481614630565b92915050565b5f6020828403121561466f5761466e614333565b5b5f61467c84828501614646565b91505092915050565b5f6020828403121561469a57614699614333565b5b5f6146a7848285016145b3565b91505092915050565b5f819050919050565b5f6146d36146ce6146c98461433b565b6146b0565b61433b565b9050919050565b5f6146e4826146b9565b9050919050565b5f6146f5826146da565b9050919050565b614705816146eb565b82525050565b5f60208201905061471e5f8301846146fc565b92915050565b5f806040838503121561473a57614739614333565b5b5f61474785828601614381565b925050602061475885828601614381565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261478357614782614762565b5b8235905067ffffffffffffffff8111156147a05761479f614766565b5b6020830191508360208202830111156147bc576147bb61476a565b5b9250929050565b5f80602083850312156147d9576147d8614333565b5b5f83013567ffffffffffffffff8111156147f6576147f5614337565b5b6148028582860161476e565b92509250509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061485257607f821691505b6020821081036148655761486461480e565b5b50919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61489f601d83614293565b91506148aa8261486b565b602082019050919050565b5f6020820190508181035f8301526148cc81614893565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61490a82614258565b915061491583614258565b925082820390508181111561492d5761492c6148d3565b5b92915050565b7f556e646566696e6564204d6f64650000000000000000000000000000000000005f82015250565b5f614967600e83614293565b915061497282614933565b602082019050919050565b5f6020820190508181035f8301526149948161495b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149d282614258565b91506149dd83614258565b9250826149ed576149ec61499b565b5b828204905092915050565b5f614a0282614258565b9150614a0d83614258565b9250828201905080821115614a2557614a246148d3565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a85602683614293565b9150614a9082614a2b565b604082019050919050565b5f6020820190508181035f830152614ab281614a79565b9050919050565b7f5265776172642073686f756c6420626520617661696c61626c650000000000005f82015250565b5f614aed601a83614293565b9150614af882614ab9565b602082019050919050565b5f6020820190508181035f830152614b1a81614ae1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614b58826141ec565b915060ff8203614b6b57614b6a6148d3565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614baa602083614293565b9150614bb582614b76565b602082019050919050565b5f6020820190508181035f830152614bd781614b9e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050614c198161436b565b92915050565b5f60208284031215614c3457614c33614333565b5b5f614c4184828501614c0b565b91505092915050565b5f819050919050565b5f614c6d614c68614c6384614c4a565b6146b0565b614258565b9050919050565b614c7d81614c53565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614cb58161435a565b82525050565b5f614cc68383614cac565b60208301905092915050565b5f602082019050919050565b5f614ce882614c83565b614cf28185614c8d565b9350614cfd83614c9d565b805f5b83811015614d2d578151614d148882614cbb565b9750614d1f83614cd2565b925050600181019050614d00565b5085935050505092915050565b5f60a082019050614d4d5f830188614261565b614d5a6020830187614c74565b8181036040830152614d6c8186614cde565b9050614d7b6060830185614575565b614d886080830184614261565b9695505050505050565b7f54726164696e672069732064697361626c6564210000000000000000000000005f82015250565b5f614dc6601483614293565b9150614dd182614d92565b602082019050919050565b5f6020820190508181035f830152614df381614dba565b9050919050565b7f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d6974655f8201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b5f614e54602283614293565b9150614e5f82614dfa565b604082019050919050565b5f6020820190508181035f830152614e8181614e48565b9050919050565b7f4d61782062616c616e6365206973206c696d69746564210000000000000000005f82015250565b5f614ebc601783614293565b9150614ec782614e88565b602082019050919050565b5f6020820190508181035f830152614ee981614eb0565b9050919050565b5f614efa82614258565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f2c57614f2b6148d3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f614f6e826141ec565b9150614f79836141ec565b9250828201905060ff811115614f9257614f916148d3565b5b92915050565b5f614fa2826141ec565b9150614fad836141ec565b925082614fbd57614fbc61499b565b5b828206905092915050565b5f614fd282614258565b9150614fdd83614258565b9250828202614feb81614258565b91508282048414831517615002576150016148d3565b5b5092915050565b5f60408201905061501c5f830185614261565b6150296020830184614261565b9392505050565b5f819050919050565b61504281615030565b82525050565b5f60e08201905061505b5f83018a614575565b6150686020830189614261565b6150756040830188614261565b6150826060830187614261565b61508f6080830186615039565b61509c60a0830185614261565b6150a960c0830184614261565b98975050505050505050565b5f6150bf82614258565b91506150ca83614258565b9250826150da576150d961499b565b5b82820690509291505056fea26469706673582212202ff19c2deecbba67684c0a22a7ee0f1a9dc058390d2f82bdcf99f249ecce4de664736f6c63430008150033

Deployed Bytecode Sourcemap

20856:21187:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23276:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;22068:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23010:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27498:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28086:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23888:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24503:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40946:719;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27198:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23480:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;28599:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22928:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21909:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24429:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40655:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27308:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40514:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24219:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24079:17;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;22432:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39540:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40790:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28310:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23049:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24460:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22471:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40387:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41802:124;;;;;;;;;;;;;:::i;:::-;;22510:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27591:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12076:103;;;;;;;;;;;;;:::i;:::-;;21946:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22009:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41934:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39690:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21870:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11428:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22973:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24326:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27401:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23370:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24130:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28435:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24269:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23982:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;23574;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24103:18;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;41673:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24382:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27931:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40270:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23778:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;12334:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24180:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39791:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23684:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;23276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22068:57::-;;;;:::o;23010:32::-;;;;:::o;27498:85::-;27537:13;27570:5;27563:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27498:85;:::o;28086:216::-;28161:4;28213:6;28178:11;:23;28190:10;28178:23;;;;;;;;;;;;;;;:32;28202:7;28178:32;;;;;;;;;;;;;;;:41;;;;28256:7;28235:37;;28244:10;28235:37;;;28265:6;28235:37;;;;;;:::i;:::-;;;;;;;;28290:4;28283:11;;28086:216;;;;:::o;23888:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24503:40::-;;;;:::o;40946:719::-;11314:13;:11;:13::i;:::-;41309:16:::1;41290;:35;;;;41355:16;41336;:35;;;;41402:17;41382;:37;;;;41448:15;41430;:33;;;;41496:17;41476;:37;;;;41544:17;41524;:37;;;;41593:18;41572;:39;;;;41641:16;41622;:35;;;;40946:719:::0;;;;;;;;:::o;27198:102::-;27253:7;27280:12;;27273:19;;27198:102;:::o;23480:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28599:441::-;28699:4;28755:17;28720:11;:19;28732:6;28720:19;;;;;;;;;;;;;;;:31;28740:10;28720:31;;;;;;;;;;;;;;;;:52;28716:257;;28832:6;28797:11;:19;28809:6;28797:19;;;;;;;;;;;;;;;:31;28817:10;28797:31;;;;;;;;;;;;;;;;:41;;28789:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28955:6;28921:11;:19;28933:6;28921:19;;;;;;;;;;;;;;;:31;28941:10;28921:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;28887:11;:19;28899:6;28887:19;;;;;;;;;;;;;;;:31;28907:10;28887:31;;;;;;;;;;;;;;;:74;;;;28716:257;28992:40;29006:6;29014:9;29025:6;28992:13;:40::i;:::-;28985:47;;28599:441;;;;;:::o;22928:21::-;;;;;;;;;;;;;:::o;21909:30::-;;;;;;;;;;;;;:::o;24429:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40655:127::-;11314:13;:11;:13::i;:::-;40768:6:::1;40742:15;:23;40758:6;40742:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;40655:127:::0;;:::o;27308:85::-;27351:5;27376:9;;;;;;;;;;;27369:16;;27308:85;:::o;40514:133::-;11314:13;:11;:13::i;:::-;40633:6:::1;40604:18;:26;40623:6;40604:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;40514:133:::0;;:::o;24219:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;24079:17::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22432:32::-;;;;:::o;39540:142::-;11314:13;:11;:13::i;:::-;39625:1:::1;39617:5;:9;;;39609:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;39656:18;39668:5;39656:11;:18::i;:::-;39540:142:::0;:::o;40790:148::-;11314:13;:11;:13::i;:::-;40879:7:::1;40863:13;;:23;;;;;;;;;;;;;;;;;;40902:28;40922:7;40902:28;;;;;;:::i;:::-;;;;;;;;40790:148:::0;:::o;28310:117::-;28365:4;28389:30;28397:7;28406:12;;28389:7;:30::i;:::-;28382:37;;28310:117;;;:::o;23049:35::-;;;;:::o;24460:36::-;;;;:::o;22471:32::-;;;;:::o;40387:119::-;11314:13;:11;:13::i;:::-;40492:6:::1;40470:11;:19;40482:6;40470:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;40387:119:::0;;:::o;41802:124::-;11314:13;:11;:13::i;:::-;41862:17:::1;:15;:17::i;:::-;41858:61;;;41896:11;:9;:11::i;:::-;41858:61;41802:124::o:0;22510:31::-;;;;:::o;27591:332::-;27657:7;27677:20;27700:9;:18;27710:7;27700:18;;;;;;;;;;;;;;;;27677:41;;27734:18;:27;27753:7;27734:27;;;;;;;;;;;;;;;;;;;;;;;;;27733:28;:57;;;;;27789:1;27765:21;;:25;27733:57;:79;;;;;27811:1;27794:7;:14;;;;:18;27733:79;27729:157;;;27860:7;:14;;;;27845:12;:29;;;;:::i;:::-;27829:45;;;;;:::i;:::-;;;27729:157;27903:12;27896:19;;;27591:332;;;:::o;12076:103::-;11314:13;:11;:13::i;:::-;12141:30:::1;12168:1;12141:18;:30::i;:::-;12076:103::o:0;21946:50::-;;;;:::o;22009:45::-;;;;:::o;41934:106::-;11314:13;:11;:13::i;:::-;42021:11:::1;42008:10;;:24;;;;;;;;;;;;;;;;;;41934:106:::0;:::o;39690:93::-;11314:13;:11;:13::i;:::-;39768:7:::1;39755:10;;:20;;;;;;;;;;;;;;;;;;39690:93:::0;:::o;21870:32::-;;;;;;;;;;;;;:::o;11428:87::-;11474:7;11501:6;;;;;;;;;;;11494:13;;11428:87;:::o;22973:30::-;;;;;;;;;;;;;:::o;24326:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;27401:89::-;27442:13;27475:7;27468:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27401:89;:::o;23370:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24130:43::-;;;;;;;;;;;;;:::o;28435:156::-;28515:4;28539:44;28553:10;28565:9;28576:6;28539:13;:44::i;:::-;28532:51;;28435:156;;;;:::o;24269:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;23982:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23574:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24103:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41673:121::-;11314:13;:11;:13::i;:::-;41772:14:::1;41756:13;:30;;;;41673:121:::0;:::o;24382:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;27931:147::-;28015:7;28042:11;:19;28054:6;28042:19;;;;;;;;;;;;;;;:28;28062:7;28042:28;;;;;;;;;;;;;;;;28035:35;;27931:147;;;;:::o;40270:109::-;11314:13;:11;:13::i;:::-;40362:9:::1;40344:15;;:27;;;;;;;;;;;;;;;;;;40270:109:::0;:::o;23778:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12334:201::-;11314:13;:11;:13::i;:::-;12443:1:::1;12423:22;;:8;:22;;::::0;12415:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12499:28;12518:8;12499:18;:28::i;:::-;12334:201:::0;:::o;24180:30::-;;;;;;;;;;;;;:::o;39791:471::-;11314:13;:11;:13::i;:::-;39913:1:::1;39885:25;;:29;39877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39956:17;40004:11;;:18;;39976:25;;:46;;;;:::i;:::-;39956:66;;40061:1;40033:25;:29;;;;40078:7;40073:182;40095:11;;:18;;40091:1;:22;;;40073:182;;;40164:9;40135;:25;40145:11;;40157:1;40145:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40135:25;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;40217:11;;40229:1;40217:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40193:50;;40210:4;40193:50;;;40233:9;40193:50;;;;;;:::i;:::-;;;;;;;;40115:3;;;;;:::i;:::-;;;;40073:182;;;;39866:396;39791:471:::0;;:::o;23684:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11593:132::-;11668:12;:10;:12::i;:::-;11657:23;;:7;:5;:7::i;:::-;:23;;;11649:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11593:132::o;29048:926::-;29140:4;29157:32;29171:6;29179:9;29157:13;:32::i;:::-;29200:36;29218:9;29229:6;29200:17;:36::i;:::-;29251:6;;;;;;;;;;;29247:87;;;29281:41;29296:6;29304:9;29315:6;29281:14;:41::i;:::-;29274:48;;;;29247:87;29348:17;:15;:17::i;:::-;29344:61;;;29382:11;:9;:11::i;:::-;29344:61;29420:18;:26;29439:6;29420:26;;;;;;;;;;;;;;;;;;;;;;;;;29415:73;;29462:14;29469:6;29462;:14::i;:::-;29415:73;29518:53;29540:6;29518:53;;;;;;;;;;;;;;;;;:9;:17;29528:6;29518:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;29498:9;:17;29508:6;29498:17;;;;;;;;;;;;;;;:73;;;;29582:22;29597:6;29582:14;:22::i;:::-;29615;29640:33;29655:6;29663:9;29640:14;:33::i;:::-;:70;;29704:6;29640:70;;;29676:25;29686:6;29694;29676:9;:25::i;:::-;29640:70;29615:95;;29744:40;29769:14;29744:9;:20;29754:9;29744:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;29721:9;:20;29731:9;29721:20;;;;;;;;;;;;;;;:63;;;;29795:25;29810:9;29795:14;:25::i;:::-;29853:9;29836:35;;29845:6;29836:35;;;29864:6;29836:35;;;;;;:::i;:::-;;;;;;;;29888:10;;;;;;;;;;;29884:59;;;29915:16;:14;:16::i;:::-;29884:59;29962:4;29955:11;;;29048:926;;;;;;:::o;38525:519::-;38592:1;38583:5;:10;;;38579:402;;38619:11;38610:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38655:12;38645:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38579:402;;;38698:1;38689:5;:10;;;38685:296;;38725:11;38716:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38761:12;38751:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38685:296;;;38804:1;38795:5;:10;;;38791:190;;38831:11;38822:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38867:12;38857:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38791:190;;;38921:11;38912:6;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38957:12;38947:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38791:190;38685:296;38579:402;38998:5;38991:4;;:12;;;;;;;;;;;;;;;;;;39019:17;39030:5;39019:17;;;;;;:::i;:::-;;;;;;;;38525:519;:::o;36455:223::-;36505:4;36543:15;;;;;;;;;;;36529:29;;:10;:29;;;;:57;;;;;36576:10;;;;;;;;;;;36529:57;:82;;;;;36605:6;;;;;;;;;;;36604:7;36529:82;:141;;;;;36657:13;;36629:24;36647:4;36629:9;:24::i;:::-;:41;;36529:141;36522:148;;36455:223;:::o;36686:715::-;24839:4;24830:6;;:13;;;;;;;;;;;;;;;;;;36736:20:::1;36759:24;36777:4;36759:9;:24::i;:::-;36736:47;;36794:49;36810:17;;;;;;;;;;;36830:12;36794:7;:49::i;:::-;;36871:21;36909:1;36895:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36871:40;;36940:4;36922;36927:1;36922:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;36966:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36956:4;36961:1;36956:7;;;;;;;;:::i;:::-;;;;;;;:34;;;;;;;;;::::0;::::1;37001:17;;;;;;;;;;;:68;;;37084:12;37098:1;37101:4;37115;37122:15;37001:147;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37159:17;37179:21;37159:41;;37357:36;37369:9;37380:12;37357:11;:36::i;:::-;36725:676;;;24875:5:::0;24866:6;;:14;;;;;;;;;;;;;;;;;;36686:715::o;12695:191::-;12769:16;12788:6;;;;;;;;;;;12769:25;;12814:8;12805:6;;:17;;;;;;;;;;;;;;;;;;12869:8;12838:40;;12859:8;12838:40;;;;;;;;;;;;12758:128;12695:191;:::o;10137:98::-;10190:7;10217:10;10210:17;;10137:98;:::o;34283:227::-;34371:13;;;;;;;;;;;34366:137;;34419:15;;;;;;;;;;;34409:25;;:6;:25;;;;:57;;;;;34451:15;;;;;;;;;;;34438:28;;:9;:28;;;;34409:57;34401:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34366:137;34283:227;;:::o;34518:364::-;34610:15;:26;34626:9;34610:26;;;;;;;;;;;;;;;;;;;;;;;;;34605:270;;34671:5;;34661:6;:15;;34653:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34730:22;34778:6;34755:20;34765:9;34755;:20::i;:::-;:29;;;;:::i;:::-;34730:54;;34825:10;;34807:14;:28;;34799:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34638:237;34605:270;34518:364;;:::o;29982:399::-;30075:4;30112:53;30134:6;30112:53;;;;;;;;;;;;;;;;;:9;:17;30122:6;30112:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;30092:9;:17;30102:6;30092:17;;;;;;;;;;;;;;;:73;;;;30176:22;30191:6;30176:14;:22::i;:::-;30232:32;30257:6;30232:9;:20;30242:9;30232:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;30209:9;:20;30219:9;30209:20;;;;;;;;;;;;;;;:55;;;;30275:25;30290:9;30275:14;:25::i;:::-;30333:9;30316:35;;30325:6;30316:35;;;30344:6;30316:35;;;;;;:::i;:::-;;;;;;;;30369:4;30362:11;;29982:399;;;;;:::o;36166:281::-;36246:1;36222:21;;:25;36218:222;;;36264:21;36312:7;:14;;;;36288:21;;:38;;;;:::i;:::-;36264:62;;36366:13;36341:21;;:38;;;;;;;:::i;:::-;;;;;;;;36415:13;36394:9;:17;36404:6;36394:17;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;36249:191;36218:222;36166:281;:::o;7711:240::-;7831:7;7889:1;7884;:6;;7892:12;7876:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7931:1;7927;:5;7920:12;;7711:240;;;;;:::o;35512:646::-;35572:15;35590:17;35600:6;35590:9;:17::i;:::-;35572:35;;35632:1;35622:7;:11;35618:533;;;35655:8;:16;35664:6;35655:16;;;;;;;;;;;;;;;;;;;;;;;;;35650:120;;35711:4;35692:8;:16;35701:6;35692:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35734:7;35747:6;35734:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35650:120;35618:533;;;35806:8;:16;35815:6;35806:16;;;;;;;;;;;;;;;;;;;;;;;;;35802:338;;;35862:5;35843:8;:16;35852:6;35843:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;35890:9;35886:207;35926:1;35909:7;:14;;;;:18;;;;:::i;:::-;35905:1;:22;35886:207;;;35975:6;35961:20;;:7;35969:1;35961:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:20;;;35957:117;;36023:7;36048:1;36031:7;:14;;;;:18;;;;:::i;:::-;36023:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36010:7;36018:1;36010:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;35957:117;35929:3;;;;;:::i;:::-;;;;35886:207;;;;36111:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;35802:338;35618:533;35561:597;35512:646;:::o;34114:161::-;34196:4;34221:11;:19;34233:6;34221:19;;;;;;;;;;;;;;;;;;;;;;;;;34220:20;:47;;;;34245:11;:22;34257:9;34245:22;;;;;;;;;;;;;;;;;;;;;;;;;34244:23;34220:47;34213:54;;34114:161;;;;:::o;33865:241::-;33934:7;33965:1;33958:4;;;;;;;;;;;:8;;;33954:145;;;33990:29;34004:6;34012;33990:13;:29::i;:::-;33983:36;;;;33954:145;34059:28;34072:6;34080;34059:12;:28::i;:::-;34052:35;;33865:241;;;;;:::o;5432:98::-;5490:7;5521:1;5517;:5;;;;:::i;:::-;5510:12;;5432:98;;;;:::o;39052:480::-;39098:18;39119:4;;;;;;;;;;;39098:25;;39154:1;39138:12;:17;;;39134:56;;39172:7;;;39134:56;39200:17;39238:13;;39220:15;:31;;;;:::i;:::-;39200:51;;39278:10;;39266:9;:22;39262:61;;;39305:7;;;;39262:61;39369:1;39364;39349:12;:16;;;;:::i;:::-;39348:22;;;;:::i;:::-;39333:37;;39401:1;39385:12;:17;;;39381:66;;39434:1;39419:16;;39381:66;39473:15;39457:13;:31;;;;39499:25;39511:12;39499:11;:25::i;:::-;39087:445;;39052:480;:::o;37409:1108::-;37486:17;37538:12;;37522:13;;37506;;:29;;;;:::i;:::-;:44;;;;:::i;:::-;37486:64;;37561:23;37612:9;37596:13;;37587:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;37561:60;;37632:27;37691:9;37675:13;;37662:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;37632:68;;37711:23;37762:9;37746:13;;37737:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;37711:60;;37782:27;37841:9;37825:13;;37812:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;37782:68;;37861:22;37913:15;37895;37886:6;:24;;;;:::i;:::-;:42;;;;:::i;:::-;37861:67;;37939:26;38003:19;37981;37968:10;:32;;;;:::i;:::-;:54;;;;:::i;:::-;37939:83;;38055:1;38037:15;:19;38033:154;;;38081:16;;;;;;;;;;;38073:34;;:51;38108:15;38073:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38156:19;38139:13;;:36;;;;;;;:::i;:::-;;;;;;;;38033:154;38219:1;38201:15;:19;38197:154;;;38245:16;;;;;;;;;;;38237:34;;:51;38272:15;38237:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38320:19;38303:13;;:36;;;;;;;:::i;:::-;;;;;;;;38197:154;38382:1;38365:14;:18;38361:149;;;38408:15;;;;;;;;;;;38400:33;;:49;38434:14;38400:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38480:18;38464:12;;:34;;;;;;;:::i;:::-;;;;;;;;38361:149;37475:1042;;;;;;;37409:1108;;:::o;32349:1508::-;32422:7;32442:18;32463:7;32442:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32481:19;32533:15;;;;;;;;;;;32523:25;;:6;:25;;;32519:159;;32575:6;32565:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32608:1;32600:4;;;;;;;;;;;:9;;;32596:71;;32647:4;32630:21;;32596:71;32519:159;32688:17;32733:3;32717:7;:13;;;32708:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;32688:48;;32770:1;32751:7;:16;;;:20;;;32747:236;;;32788:26;32848:7;:13;;;32817:44;;32829:7;:16;;;32817:28;;:9;:28;;;;:::i;:::-;:44;;;;:::i;:::-;32788:73;;32892:18;32876:12;;:34;;;;;;;:::i;:::-;;;;;;;;32953:18;32925:9;:24;32943:4;32925:24;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;32773:210;32747:236;33018:1;32997:7;:18;;;:22;;;32993:408;;;33036:28;33100:7;:13;;;33067:46;;33079:7;:18;;;33067:30;;:9;:30;;;;:::i;:::-;:46;;;;:::i;:::-;33036:77;;33132:14;33128:262;;;33167:42;33188:20;33167;:42::i;:::-;33128:262;;;33275:20;33250:21;;:45;;;;;;;:::i;:::-;;;;;;;;33319:55;33330:20;33352:21;;33319:55;;;;;;;:::i;:::-;;;;;;;;33128:262;33021:380;32993:408;33431:1;33415:7;:13;;;:17;;;33411:161;;;33449:23;33503:7;:13;;;33475:41;;33487:7;:13;;;33475:25;;:9;:25;;;;:::i;:::-;:41;;;;:::i;:::-;33449:67;;33531:29;33544:15;33531:12;:29::i;:::-;33434:138;33411:161;33601:1;33586:7;:12;;;:16;;;33582:227;;;33619:22;33671:7;:13;;;33644:40;;33656:7;:12;;;33644:24;;:9;:24;;;;:::i;:::-;:40;;;;:::i;:::-;33619:65;;33718:14;33699:9;:15;20973:6;33699:15;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;20973:6;33752:45;;33769:4;33752:45;;;33782:14;33752:45;;;;;;:::i;:::-;;;;;;;;33604:205;33582:227;33828:21;33839:9;33828:6;:10;;:21;;;;:::i;:::-;33821:28;;;;;32349:1508;;;;:::o;30975:1366::-;31047:7;31067:21;31091:17;;31067:41;;31119:21;31143:17;;31119:41;;31171:22;31196:18;;31171:43;;31225:20;31248:16;;31225:39;;31289:15;;;;;;;;;;;31279:25;;:6;:25;;;31275:231;;31337:16;;31321:32;;31384:16;;31368:32;;31432:17;;31415:34;;31479:15;;31464:30;;31275:231;31516:24;31568:3;31552:13;31543:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;31516:55;;31582:24;31634:3;31618:13;31609:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;31582:55;;31648:23;31698:3;31683:12;31674:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;31648:53;;31712:28;31769:3;31752:14;31743:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;31712:60;;31804:1;31787:14;:18;31783:171;;;31847:20;31822:21;;:45;;;;;;;:::i;:::-;;;;;;;;31887:55;31898:20;31920:21;;31887:55;;;;;;;:::i;:::-;;;;;;;;31783:171;31981:16;31964:13;;:33;;;;;;;:::i;:::-;;;;;;;;32025:16;32008:13;;:33;;;;;;;:::i;:::-;;;;;;;;32068:15;32052:12;;:31;;;;;;;:::i;:::-;;;;;;;;32160:15;32141:16;32122;:35;;;;:::i;:::-;:53;;;;:::i;:::-;32094:9;:24;32112:4;32094:24;;;;;;;;;;;;;;;;:81;;;;;;;:::i;:::-;;;;;;;;32186:23;32268:20;32250:15;32231:16;32212;:35;;;;:::i;:::-;:53;;;;:::i;:::-;:76;;;;:::i;:::-;32186:102;;32306:27;32317:15;32306:6;:10;;:27;;;;:::i;:::-;32299:34;;;;;;;;;;;30975:1366;;;;:::o;35391:109::-;35486:6;35457:25;;:35;;;;;;;:::i;:::-;;;;;;;;35391:109;:::o;34890:493::-;34948:19;34970:26;34991:1;34994;34970:20;:26::i;:::-;34948:48;;35007:19;35029:7;35037:11;35029:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35007:42;;21027:1;35078:19;;:11;:19;;;;:56;;;;;20973:6;35115:19;;:11;:19;;;;35078:56;:115;;;;;35175:17;;;;;;;;;;;35152:41;;:11;:41;;;;35078:115;:163;;;;;35226:15;;;;;;;;;;;35211:30;;:11;:30;;;;35078:163;35060:316;;;35294:6;35268:9;:22;35278:11;35268:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;35344:11;35320:44;;35337:4;35320:44;;;35357:6;35320:44;;;;;;:::i;:::-;;;;;;;;35060:316;34937:446;;34890:493;:::o;5813:98::-;5871:7;5902:1;5898;:5;;;;:::i;:::-;5891:12;;5813:98;;;;:::o;30389:578::-;30475:7;30495:17;30598:10;30631:11;30665:12;30700:15;30763:1;30748:12;:16;;;;:::i;:::-;30738:27;30788:11;30822:2;30565:278;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30537:321;;;;;;30515:354;;30495:374;;30880:19;30915:7;:14;;;;30903:9;:26;;;;:::i;:::-;30880:50;;30948:11;30941:18;;;;30389:578;;;;:::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:1349::-;4760:6;4768;4776;4784;4792;4800;4808;4816;4865:3;4853:9;4844:7;4840:23;4836:33;4833:120;;;4872:79;;:::i;:::-;4833:120;4992:1;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4963:117;5119:2;5145:53;5190:7;5181:6;5170:9;5166:22;5145:53;:::i;:::-;5135:63;;5090:118;5247:2;5273:53;5318:7;5309:6;5298:9;5294:22;5273:53;:::i;:::-;5263:63;;5218:118;5375:2;5401:53;5446:7;5437:6;5426:9;5422:22;5401:53;:::i;:::-;5391:63;;5346:118;5503:3;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5474:119;5632:3;5659:53;5704:7;5695:6;5684:9;5680:22;5659:53;:::i;:::-;5649:63;;5603:119;5761:3;5788:53;5833:7;5824:6;5813:9;5809:22;5788:53;:::i;:::-;5778:63;;5732:119;5890:3;5917:53;5962:7;5953:6;5942:9;5938:22;5917:53;:::i;:::-;5907:63;;5861:119;4638:1349;;;;;;;;;;;:::o;5993:619::-;6070:6;6078;6086;6135:2;6123:9;6114:7;6110:23;6106:32;6103:119;;;6141:79;;:::i;:::-;6103:119;6261:1;6286:53;6331:7;6322:6;6311:9;6307:22;6286:53;:::i;:::-;6276:63;;6232:117;6388:2;6414:53;6459:7;6450:6;6439:9;6435:22;6414:53;:::i;:::-;6404:63;;6359:118;6516:2;6542:53;6587:7;6578:6;6567:9;6563:22;6542:53;:::i;:::-;6532:63;;6487:118;5993:619;;;;;:::o;6618:214::-;6707:4;6745:2;6734:9;6730:18;6722:26;;6758:67;6822:1;6811:9;6807:17;6798:6;6758:67;:::i;:::-;6618:214;;;;:::o;6838:329::-;6897:6;6946:2;6934:9;6925:7;6921:23;6917:32;6914:119;;;6952:79;;:::i;:::-;6914:119;7072:1;7097:53;7142:7;7133:6;7122:9;7118:22;7097:53;:::i;:::-;7087:63;;7043:117;6838:329;;;;:::o;7173:118::-;7260:24;7278:5;7260:24;:::i;:::-;7255:3;7248:37;7173:118;;:::o;7297:222::-;7390:4;7428:2;7417:9;7413:18;7405:26;;7441:71;7509:1;7498:9;7494:17;7485:6;7441:71;:::i;:::-;7297:222;;;;:::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:117::-;11082:1;11079;11072:12;11096:117;11205:1;11202;11195:12;11219:117;11328:1;11325;11318:12;11359:568;11432:8;11442:6;11492:3;11485:4;11477:6;11473:17;11469:27;11459:122;;11500:79;;:::i;:::-;11459:122;11613:6;11600:20;11590:30;;11643:18;11635:6;11632:30;11629:117;;;11665:79;;:::i;:::-;11629:117;11779:4;11771:6;11767:17;11755:29;;11833:3;11825:4;11817:6;11813:17;11803:8;11799:32;11796:41;11793:128;;;11840:79;;:::i;:::-;11793:128;11359:568;;;;;:::o;11933:559::-;12019:6;12027;12076:2;12064:9;12055:7;12051:23;12047:32;12044:119;;;12082:79;;:::i;:::-;12044:119;12230:1;12219:9;12215:17;12202:31;12260:18;12252:6;12249:30;12246:117;;;12282:79;;:::i;:::-;12246:117;12395:80;12467:7;12458:6;12447:9;12443:22;12395:80;:::i;:::-;12377:98;;;;12173:312;11933:559;;;;;:::o;12498:180::-;12546:77;12543:1;12536:88;12643:4;12640:1;12633:15;12667:4;12664:1;12657:15;12684:320;12728:6;12765:1;12759:4;12755:12;12745:22;;12812:1;12806:4;12802:12;12833:18;12823:81;;12889:4;12881:6;12877:17;12867:27;;12823:81;12951:2;12943:6;12940:14;12920:18;12917:38;12914:84;;12970:18;;:::i;:::-;12914:84;12735:269;12684:320;;;:::o;13010:179::-;13150:31;13146:1;13138:6;13134:14;13127:55;13010:179;:::o;13195:366::-;13337:3;13358:67;13422:2;13417:3;13358:67;:::i;:::-;13351:74;;13434:93;13523:3;13434:93;:::i;:::-;13552:2;13547:3;13543:12;13536:19;;13195:366;;;:::o;13567:419::-;13733:4;13771:2;13760:9;13756:18;13748:26;;13820:9;13814:4;13810:20;13806:1;13795:9;13791:17;13784:47;13848:131;13974:4;13848:131;:::i;:::-;13840:139;;13567:419;;;:::o;13992:180::-;14040:77;14037:1;14030:88;14137:4;14134:1;14127:15;14161:4;14158:1;14151:15;14178:194;14218:4;14238:20;14256:1;14238:20;:::i;:::-;14233:25;;14272:20;14290:1;14272:20;:::i;:::-;14267:25;;14316:1;14313;14309:9;14301:17;;14340:1;14334:4;14331:11;14328:37;;;14345:18;;:::i;:::-;14328:37;14178:194;;;;:::o;14378:164::-;14518:16;14514:1;14506:6;14502:14;14495:40;14378:164;:::o;14548:366::-;14690:3;14711:67;14775:2;14770:3;14711:67;:::i;:::-;14704:74;;14787:93;14876:3;14787:93;:::i;:::-;14905:2;14900:3;14896:12;14889:19;;14548:366;;;:::o;14920:419::-;15086:4;15124:2;15113:9;15109:18;15101:26;;15173:9;15167:4;15163:20;15159:1;15148:9;15144:17;15137:47;15201:131;15327:4;15201:131;:::i;:::-;15193:139;;14920:419;;;:::o;15345:180::-;15393:77;15390:1;15383:88;15490:4;15487:1;15480:15;15514:4;15511:1;15504:15;15531:185;15571:1;15588:20;15606:1;15588:20;:::i;:::-;15583:25;;15622:20;15640:1;15622:20;:::i;:::-;15617:25;;15661:1;15651:35;;15666:18;;:::i;:::-;15651:35;15708:1;15705;15701:9;15696:14;;15531:185;;;;:::o;15722:191::-;15762:3;15781:20;15799:1;15781:20;:::i;:::-;15776:25;;15815:20;15833:1;15815:20;:::i;:::-;15810:25;;15858:1;15855;15851:9;15844:16;;15879:3;15876:1;15873:10;15870:36;;;15886:18;;:::i;:::-;15870:36;15722:191;;;;:::o;15919:225::-;16059:34;16055:1;16047:6;16043:14;16036:58;16128:8;16123:2;16115:6;16111:15;16104:33;15919:225;:::o;16150:366::-;16292:3;16313:67;16377:2;16372:3;16313:67;:::i;:::-;16306:74;;16389:93;16478:3;16389:93;:::i;:::-;16507:2;16502:3;16498:12;16491:19;;16150:366;;;:::o;16522:419::-;16688:4;16726:2;16715:9;16711:18;16703:26;;16775:9;16769:4;16765:20;16761:1;16750:9;16746:17;16739:47;16803:131;16929:4;16803:131;:::i;:::-;16795:139;;16522:419;;;:::o;16947:176::-;17087:28;17083:1;17075:6;17071:14;17064:52;16947:176;:::o;17129:366::-;17271:3;17292:67;17356:2;17351:3;17292:67;:::i;:::-;17285:74;;17368:93;17457:3;17368:93;:::i;:::-;17486:2;17481:3;17477:12;17470:19;;17129:366;;;:::o;17501:419::-;17667:4;17705:2;17694:9;17690:18;17682:26;;17754:9;17748:4;17744:20;17740:1;17729:9;17725:17;17718:47;17782:131;17908:4;17782:131;:::i;:::-;17774:139;;17501:419;;;:::o;17926:180::-;17974:77;17971:1;17964:88;18071:4;18068:1;18061:15;18095:4;18092:1;18085:15;18112:167;18149:3;18172:22;18188:5;18172:22;:::i;:::-;18163:31;;18216:4;18209:5;18206:15;18203:41;;18224:18;;:::i;:::-;18203:41;18271:1;18264:5;18260:13;18253:20;;18112:167;;;:::o;18285:182::-;18425:34;18421:1;18413:6;18409:14;18402:58;18285:182;:::o;18473:366::-;18615:3;18636:67;18700:2;18695:3;18636:67;:::i;:::-;18629:74;;18712:93;18801:3;18712:93;:::i;:::-;18830:2;18825:3;18821:12;18814:19;;18473:366;;;:::o;18845:419::-;19011:4;19049:2;19038:9;19034:18;19026:26;;19098:9;19092:4;19088:20;19084:1;19073:9;19069:17;19062:47;19126:131;19252:4;19126:131;:::i;:::-;19118:139;;18845:419;;;:::o;19270:180::-;19318:77;19315:1;19308:88;19415:4;19412:1;19405:15;19439:4;19436:1;19429:15;19456:143;19513:5;19544:6;19538:13;19529:22;;19560:33;19587:5;19560:33;:::i;:::-;19456:143;;;;:::o;19605:351::-;19675:6;19724:2;19712:9;19703:7;19699:23;19695:32;19692:119;;;19730:79;;:::i;:::-;19692:119;19850:1;19875:64;19931:7;19922:6;19911:9;19907:22;19875:64;:::i;:::-;19865:74;;19821:128;19605:351;;;;:::o;19962:85::-;20007:7;20036:5;20025:16;;19962:85;;;:::o;20053:158::-;20111:9;20144:61;20162:42;20171:32;20197:5;20171:32;:::i;:::-;20162:42;:::i;:::-;20144:61;:::i;:::-;20131:74;;20053:158;;;:::o;20217:147::-;20312:45;20351:5;20312:45;:::i;:::-;20307:3;20300:58;20217:147;;:::o;20370:114::-;20437:6;20471:5;20465:12;20455:22;;20370:114;;;:::o;20490:184::-;20589:11;20623:6;20618:3;20611:19;20663:4;20658:3;20654:14;20639:29;;20490:184;;;;:::o;20680:132::-;20747:4;20770:3;20762:11;;20800:4;20795:3;20791:14;20783:22;;20680:132;;;:::o;20818:108::-;20895:24;20913:5;20895:24;:::i;:::-;20890:3;20883:37;20818:108;;:::o;20932:179::-;21001:10;21022:46;21064:3;21056:6;21022:46;:::i;:::-;21100:4;21095:3;21091:14;21077:28;;20932:179;;;;:::o;21117:113::-;21187:4;21219;21214:3;21210:14;21202:22;;21117:113;;;:::o;21266:732::-;21385:3;21414:54;21462:5;21414:54;:::i;:::-;21484:86;21563:6;21558:3;21484:86;:::i;:::-;21477:93;;21594:56;21644:5;21594:56;:::i;:::-;21673:7;21704:1;21689:284;21714:6;21711:1;21708:13;21689:284;;;21790:6;21784:13;21817:63;21876:3;21861:13;21817:63;:::i;:::-;21810:70;;21903:60;21956:6;21903:60;:::i;:::-;21893:70;;21749:224;21736:1;21733;21729:9;21724:14;;21689:284;;;21693:14;21989:3;21982:10;;21390:608;;;21266:732;;;;:::o;22004:831::-;22267:4;22305:3;22294:9;22290:19;22282:27;;22319:71;22387:1;22376:9;22372:17;22363:6;22319:71;:::i;:::-;22400:80;22476:2;22465:9;22461:18;22452:6;22400:80;:::i;:::-;22527:9;22521:4;22517:20;22512:2;22501:9;22497:18;22490:48;22555:108;22658:4;22649:6;22555:108;:::i;:::-;22547:116;;22673:72;22741:2;22730:9;22726:18;22717:6;22673:72;:::i;:::-;22755:73;22823:3;22812:9;22808:19;22799:6;22755:73;:::i;:::-;22004:831;;;;;;;;:::o;22841:170::-;22981:22;22977:1;22969:6;22965:14;22958:46;22841:170;:::o;23017:366::-;23159:3;23180:67;23244:2;23239:3;23180:67;:::i;:::-;23173:74;;23256:93;23345:3;23256:93;:::i;:::-;23374:2;23369:3;23365:12;23358:19;;23017:366;;;:::o;23389:419::-;23555:4;23593:2;23582:9;23578:18;23570:26;;23642:9;23636:4;23632:20;23628:1;23617:9;23613:17;23606:47;23670:131;23796:4;23670:131;:::i;:::-;23662:139;;23389:419;;;:::o;23814:221::-;23954:34;23950:1;23942:6;23938:14;23931:58;24023:4;24018:2;24010:6;24006:15;23999:29;23814:221;:::o;24041:366::-;24183:3;24204:67;24268:2;24263:3;24204:67;:::i;:::-;24197:74;;24280:93;24369:3;24280:93;:::i;:::-;24398:2;24393:3;24389:12;24382:19;;24041:366;;;:::o;24413:419::-;24579:4;24617:2;24606:9;24602:18;24594:26;;24666:9;24660:4;24656:20;24652:1;24641:9;24637:17;24630:47;24694:131;24820:4;24694:131;:::i;:::-;24686:139;;24413:419;;;:::o;24838:173::-;24978:25;24974:1;24966:6;24962:14;24955:49;24838:173;:::o;25017:366::-;25159:3;25180:67;25244:2;25239:3;25180:67;:::i;:::-;25173:74;;25256:93;25345:3;25256:93;:::i;:::-;25374:2;25369:3;25365:12;25358:19;;25017:366;;;:::o;25389:419::-;25555:4;25593:2;25582:9;25578:18;25570:26;;25642:9;25636:4;25632:20;25628:1;25617:9;25613:17;25606:47;25670:131;25796:4;25670:131;:::i;:::-;25662:139;;25389:419;;;:::o;25814:233::-;25853:3;25876:24;25894:5;25876:24;:::i;:::-;25867:33;;25922:66;25915:5;25912:77;25909:103;;25992:18;;:::i;:::-;25909:103;26039:1;26032:5;26028:13;26021:20;;25814:233;;;:::o;26053:180::-;26101:77;26098:1;26091:88;26198:4;26195:1;26188:15;26222:4;26219:1;26212:15;26239:188;26277:3;26296:18;26312:1;26296:18;:::i;:::-;26291:23;;26328:18;26344:1;26328:18;:::i;:::-;26323:23;;26369:1;26366;26362:9;26355:16;;26392:4;26387:3;26384:13;26381:39;;;26400:18;;:::i;:::-;26381:39;26239:188;;;;:::o;26433:170::-;26463:1;26480:18;26496:1;26480:18;:::i;:::-;26475:23;;26512:18;26528:1;26512:18;:::i;:::-;26507:23;;26549:1;26539:35;;26554:18;;:::i;:::-;26539:35;26595:1;26592;26588:9;26583:14;;26433:170;;;;:::o;26609:410::-;26649:7;26672:20;26690:1;26672:20;:::i;:::-;26667:25;;26706:20;26724:1;26706:20;:::i;:::-;26701:25;;26761:1;26758;26754:9;26783:30;26801:11;26783:30;:::i;:::-;26772:41;;26962:1;26953:7;26949:15;26946:1;26943:22;26923:1;26916:9;26896:83;26873:139;;26992:18;;:::i;:::-;26873:139;26657:362;26609:410;;;;:::o;27025:332::-;27146:4;27184:2;27173:9;27169:18;27161:26;;27197:71;27265:1;27254:9;27250:17;27241:6;27197:71;:::i;:::-;27278:72;27346:2;27335:9;27331:18;27322:6;27278:72;:::i;:::-;27025:332;;;;;:::o;27363:77::-;27400:7;27429:5;27418:16;;27363:77;;;:::o;27446:118::-;27533:24;27551:5;27533:24;:::i;:::-;27528:3;27521:37;27446:118;;:::o;27570:886::-;27831:4;27869:3;27858:9;27854:19;27846:27;;27883:71;27951:1;27940:9;27936:17;27927:6;27883:71;:::i;:::-;27964:72;28032:2;28021:9;28017:18;28008:6;27964:72;:::i;:::-;28046;28114:2;28103:9;28099:18;28090:6;28046:72;:::i;:::-;28128;28196:2;28185:9;28181:18;28172:6;28128:72;:::i;:::-;28210:73;28278:3;28267:9;28263:19;28254:6;28210:73;:::i;:::-;28293;28361:3;28350:9;28346:19;28337:6;28293:73;:::i;:::-;28376;28444:3;28433:9;28429:19;28420:6;28376:73;:::i;:::-;27570:886;;;;;;;;;;:::o;28462:176::-;28494:1;28511:20;28529:1;28511:20;:::i;:::-;28506:25;;28545:20;28563:1;28545:20;:::i;:::-;28540:25;;28584:1;28574:35;;28589:18;;:::i;:::-;28574:35;28630:1;28627;28623:9;28618:14;;28462:176;;;;:::o

Swarm Source

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