ETH Price: $2,438.00 (-0.74%)
 

Overview

Max Total Supply

1,000,000,000,000 MIRAGE

Holders

182

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Mirage

Compiler Version
v0.8.19+commit.7dd6d404

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-29
*/

//███╗░░░███╗██╗██████╗░░█████╗░░██████╗░███████╗
//████╗░████║██║██╔══██╗██╔══██╗██╔════╝░██╔════╝
//██╔████╔██║██║██████╔╝███████║██║░░██╗░█████╗░░
//██║╚██╔╝██║██║██╔══██╗██╔══██║██║░░╚██╗██╔══╝░░
//██║░╚═╝░██║██║██║░░██║██║░░██║╚██████╔╝███████╗
//╚═╝░░░░░╚═╝╚═╝╚═╝░░╚═╝╚═╝░░╚═╝░╚═════╝░╚══════╝

//Website: https://Mirage.Exchange

//Twitter: https://twitter.com/MirageSwapERC

//Telegram: https://t.me/MirageDefi

//Swap: https://Swap.Mirage.Exchange


// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity = 0.8.19;

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

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

interface IUniswapV2Pair {
    event Sync(uint112 reserve0, uint112 reserve1);
    function sync() external;
}

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Mirage is ERC20, Ownable {

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    string public _websiteInformation;
    string public _telegramInformation;

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

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

    constructor() ERC20(unicode"Mirage", unicode"MIRAGE") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 25;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 35;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1000000000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 2 / 100; // 
        maxWallet = totalSupply * 2 / 100; //
        swapTokensAtAmount = totalSupply * 5 / 1000; // 

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner()); 
        devWallet = address(owner()); // 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function Updatemirageimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount <= 1, "Swap amount cannot be higher than 1% total supply.");
  	    swapTokensAtAmount = totalSupply() * newAmount / 100;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 txNum, uint256 walNum) external onlyOwner {
        require(txNum >= 1, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = (totalSupply() * txNum / 100)/1e18;
        require(walNum >= 1, "Cannot set maxWallet lower than 1%");
        maxWallet = (totalSupply() * walNum / 100)/1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 40, "Must keep fees at 99% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 50, "Must keep fees at 99% or less");
    }

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

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

    function UpdateoperationsWallet(address newMarketingWallet) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }
    
    function UpdatedevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function massManageBoughtEarly(address[] calldata wallets, bool flag) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
        isBlacklisted[wallets[i]] = flag;
        }
    }

    function withdrawETH() external onlyOwner returns(bool){
        (bool success, ) = owner().call{value: address(this).balance}("");
        return success;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted");
    
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees/100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees/100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() public {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percent/10000;
        
        
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }

  

    /**
        Socials
    **/
      
    function setsocials(
        string calldata __websiteInformation,
        string calldata __telegramInformation
    ) external {
        require(
            msg.sender ==  address(owner()),
            "Only developer can adjust social links"
        );

        _websiteInformation = __websiteInformation;
        _telegramInformation = __telegramInformation;
}  

    function getWebsiteInformation() public view returns (string memory) {
        return _websiteInformation;
    }

    function getTelegramInformation() public view returns (string memory) {
        return _telegramInformation;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Updatemirageimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"UpdateoperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_telegramInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_websiteInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTelegramInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWebsiteInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"__websiteInformation","type":"string"},{"internalType":"string","name":"__telegramInformation","type":"string"}],"name":"setsocials","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txNum","type":"uint256"},{"internalType":"uint256","name":"walNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600681526020017f4d697261676500000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d49524147450000000000000000000000000000000000000000000000000000815250816003908162000127919062000d76565b50806004908162000139919062000d76565b50505060006200014e6200066960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002198160016200067160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d919062000ec7565b6040518363ffffffff1660e01b81526004016200036c92919062000f0a565b6020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fa60a05160016200067160201b60201c565b6200040f60a05160016200076e60201b60201c565b60006019905060008060006023905060008060006c0c9f2c9cd04674edea400000009050606460028262000444919062000f66565b62000450919062000fe0565b600881905550606460028262000467919062000f66565b62000473919062000fe0565b600a819055506103e86005826200048b919062000f66565b62000497919062000fe0565b600981905550866016819055508560178190555084601881905550601854601754601654620004c7919062001018565b620004d3919062001018565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000503919062001018565b6200050f919062001018565b60198190555062000525620007c960201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000575620007c960201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d7620005c9620007c960201b60201c565b6001620007f360201b60201c565b620005ea306001620007f360201b60201c565b620005ff61dead6001620007f360201b60201c565b6200062162000613620007c960201b60201c565b60016200067160201b60201c565b620006343060016200067160201b60201c565b6200064961dead60016200067160201b60201c565b6200065b3382620008f060201b60201c565b5050505050505050620011e8565b600033905090565b620006816200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000713576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070a90620010b4565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008036200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088c90620010b4565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009599062001126565b60405180910390fd5b620009766000838362000a9460201b60201c565b6200098d8160025462000a9960201b90919060201c565b600281905550620009e6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a9960201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a88919062001159565b60405180910390a35050565b505050565b600080828462000aaa919062001018565b90508381101562000af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae990620011c6565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b7e57607f821691505b60208210810362000b945762000b9362000b36565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bfe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bbf565b62000c0a868362000bbf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5762000c5162000c4b8462000c22565b62000c2c565b62000c22565b9050919050565b6000819050919050565b62000c738362000c36565b62000c8b62000c828262000c5e565b84845462000bcc565b825550505050565b600090565b62000ca262000c93565b62000caf81848462000c68565b505050565b5b8181101562000cd75762000ccb60008262000c98565b60018101905062000cb5565b5050565b601f82111562000d265762000cf08162000b9a565b62000cfb8462000baf565b8101602085101562000d0b578190505b62000d2362000d1a8562000baf565b83018262000cb4565b50505b505050565b600082821c905092915050565b600062000d4b6000198460080262000d2b565b1980831691505092915050565b600062000d66838362000d38565b9150826002028217905092915050565b62000d818262000afc565b67ffffffffffffffff81111562000d9d5762000d9c62000b07565b5b62000da9825462000b65565b62000db682828562000cdb565b600060209050601f83116001811462000dee576000841562000dd9578287015190505b62000de5858262000d58565b86555062000e55565b601f19841662000dfe8662000b9a565b60005b8281101562000e285784890151825560018201915060208501945060208101905062000e01565b8683101562000e48578489015162000e44601f89168262000d38565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e8f8262000e62565b9050919050565b62000ea18162000e82565b811462000ead57600080fd5b50565b60008151905062000ec18162000e96565b92915050565b60006020828403121562000ee05762000edf62000e5d565b5b600062000ef08482850162000eb0565b91505092915050565b62000f048162000e82565b82525050565b600060408201905062000f21600083018562000ef9565b62000f30602083018462000ef9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f738262000c22565b915062000f808362000c22565b925082820262000f908162000c22565b9150828204841483151762000faa5762000fa962000f37565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fed8262000c22565b915062000ffa8362000c22565b9250826200100d576200100c62000fb1565b5b828204905092915050565b6000620010258262000c22565b9150620010328362000c22565b92508282019050808211156200104d576200104c62000f37565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109c60208362001053565b9150620010a98262001064565b602082019050919050565b60006020820190508181036000830152620010cf816200108d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110e601f8362001053565b91506200111b82620010d6565b602082019050919050565b600060208201905081810360008301526200114181620010ff565b9050919050565b620011538162000c22565b82525050565b600060208201905062001170600083018462001148565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011ae601b8362001053565b9150620011bb8262001176565b602082019050919050565b60006020820190508181036000830152620011e1816200119f565b9050919050565b60805160a051615de0620012546000396000818161171901528181612da101528181612e4a01528181612e77015261356d0152600081816114490152818161351501528181613f94015281816140750152818161409c01528181614138015261415f0152615de06000f3fe6080604052600436106103e85760003560e01c80638da5cb5b11610208578063c876d0b911610118578063e086e5ec116100ab578063f2fde38b1161007a578063f2fde38b14610ed4578063f637434214610efd578063f8b45b0514610f28578063fe575a8714610f53578063fe72b27a14610f90576103ef565b8063e086e5ec14610e28578063e0dc354614610e53578063e2f4560514610e7e578063f11a24d314610ea9576103ef565b8063d85ba063116100e7578063d85ba06314610d6c578063dbdb98de14610d97578063dd62ed3e14610dc0578063dedd452014610dfd576103ef565b8063c876d0b914610cc2578063c8c8ebe414610ced578063c9567bf914610d18578063d257b34f14610d2f576103ef565b8063a0d82dc51161019b578063b62496f51161016a578063b62496f514610bdd578063bbc0c74214610c1a578063c024666814610c45578063c17b5b8c14610c6e578063c804343214610c97576103ef565b8063a0d82dc514610b0d578063a457c2d714610b38578063a4c82a0014610b75578063a9059cbb14610ba0576103ef565b806395d89b41116101d757806395d89b4114610a615780639c3b4fdc14610a8c5780639ec22c0e14610ab75780639fccce3214610ae2576103ef565b80638da5cb5b146109b75780638ea5220f146109e25780639213691314610a0d578063924de9b714610a38576103ef565b8063313ce567116103035780636ac5eeee11610296578063756b7bb711610265578063756b7bb7146108e45780637571336a1461090f57806375f0a874146109385780637bce5a04146109635780638095d5641461098e576103ef565b80636ac5eeee1461084e5780636ddd17131461086557806370a0823114610890578063715018a6146108cd576103ef565b80634a62bb65116102d25780634a62bb65146107925780634fbee193146107bd578063682a41ce146107fa5780636a486a8e14610823576103ef565b8063313ce567146106d457806339509351146106ff57806342246fb71461073c57806349bd5a5e14610767576103ef565b8063184c16c51161037b57806323b872dd1161034a57806323b872dd1461061657806327c8f835146106535780632c3e486c1461067e5780632e82f1a0146106a9576103ef565b8063184c16c51461056a578063199ffc72146105955780631a8145bb146105c05780631f3fed8f146105eb576103ef565b806311a582c3116103b757806311a582c3146104c2578063130a2c3c146104eb5780631694505e1461051457806318160ddd1461053f576103ef565b806306fdde03146103f45780630946b3a21461041f578063095ea7b31461044857806310d5de5314610485576103ef565b366103ef57005b600080fd5b34801561040057600080fd5b50610409610fcd565b6040516104169190614536565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906145c0565b61105f565b005b34801561045457600080fd5b5061046f600480360381019061046a9190614623565b61113a565b60405161047c919061467e565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a791906145c0565b611158565b6040516104b9919061467e565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190614699565b611178565b005b3480156104f757600080fd5b50610512600480360381019061050d919061476a565b61130b565b005b34801561052057600080fd5b50610529611447565b6040516105369190614829565b60405180910390f35b34801561054b57600080fd5b5061055461146b565b6040516105619190614853565b60405180910390f35b34801561057657600080fd5b5061057f611475565b60405161058c9190614853565b60405180910390f35b3480156105a157600080fd5b506105aa61147b565b6040516105b79190614853565b60405180910390f35b3480156105cc57600080fd5b506105d5611481565b6040516105e29190614853565b60405180910390f35b3480156105f757600080fd5b50610600611487565b60405161060d9190614853565b60405180910390f35b34801561062257600080fd5b5061063d6004803603810190610638919061486e565b61148d565b60405161064a919061467e565b60405180910390f35b34801561065f57600080fd5b50610668611566565b60405161067591906148d0565b60405180910390f35b34801561068a57600080fd5b5061069361156c565b6040516106a09190614853565b60405180910390f35b3480156106b557600080fd5b506106be611572565b6040516106cb919061467e565b60405180910390f35b3480156106e057600080fd5b506106e9611585565b6040516106f69190614907565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614623565b61158e565b604051610733919061467e565b60405180910390f35b34801561074857600080fd5b50610751611641565b60405161075e919061467e565b60405180910390f35b34801561077357600080fd5b5061077c611717565b60405161078991906148d0565b60405180910390f35b34801561079e57600080fd5b506107a761173b565b6040516107b4919061467e565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906145c0565b61174e565b6040516107f1919061467e565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190614978565b6117a4565b005b34801561082f57600080fd5b50610838611843565b6040516108459190614853565b60405180910390f35b34801561085a57600080fd5b50610863611849565b005b34801561087157600080fd5b5061087a611ac9565b604051610887919061467e565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b291906145c0565b611adc565b6040516108c49190614853565b60405180910390f35b3480156108d957600080fd5b506108e2611b24565b005b3480156108f057600080fd5b506108f9611c7c565b6040516109069190614536565b60405180910390f35b34801561091b57600080fd5b50610936600480360381019061093191906149f9565b611d0e565b005b34801561094457600080fd5b5061094d611e00565b60405161095a91906148d0565b60405180910390f35b34801561096f57600080fd5b50610978611e26565b6040516109859190614853565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b09190614a39565b611e2c565b005b3480156109c357600080fd5b506109cc611f46565b6040516109d991906148d0565b60405180910390f35b3480156109ee57600080fd5b506109f7611f70565b604051610a0491906148d0565b60405180910390f35b348015610a1957600080fd5b50610a22611f96565b604051610a2f9190614853565b60405180910390f35b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190614a8c565b611f9c565b005b348015610a6d57600080fd5b50610a76612050565b604051610a839190614536565b60405180910390f35b348015610a9857600080fd5b50610aa16120e2565b604051610aae9190614853565b60405180910390f35b348015610ac357600080fd5b50610acc6120e8565b604051610ad99190614853565b60405180910390f35b348015610aee57600080fd5b50610af76120ee565b604051610b049190614853565b60405180910390f35b348015610b1957600080fd5b50610b226120f4565b604051610b2f9190614853565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190614623565b6120fa565b604051610b6c919061467e565b60405180910390f35b348015610b8157600080fd5b50610b8a6121c7565b604051610b979190614853565b60405180910390f35b348015610bac57600080fd5b50610bc76004803603810190610bc29190614623565b6121cd565b604051610bd4919061467e565b60405180910390f35b348015610be957600080fd5b50610c046004803603810190610bff91906145c0565b6121eb565b604051610c11919061467e565b60405180910390f35b348015610c2657600080fd5b50610c2f61220b565b604051610c3c919061467e565b60405180910390f35b348015610c5157600080fd5b50610c6c6004803603810190610c6791906149f9565b61221e565b005b348015610c7a57600080fd5b50610c956004803603810190610c909190614a39565b612310565b005b348015610ca357600080fd5b50610cac61242a565b604051610cb99190614536565b60405180910390f35b348015610cce57600080fd5b50610cd76124b8565b604051610ce4919061467e565b60405180910390f35b348015610cf957600080fd5b50610d026124cb565b604051610d0f9190614853565b60405180910390f35b348015610d2457600080fd5b50610d2d6124d1565b005b348015610d3b57600080fd5b50610d566004803603810190610d519190614ab9565b6125a7565b604051610d63919061467e565b60405180910390f35b348015610d7857600080fd5b50610d816126b2565b604051610d8e9190614853565b60405180910390f35b348015610da357600080fd5b50610dbe6004803603810190610db991906145c0565b6126b8565b005b348015610dcc57600080fd5b50610de76004803603810190610de29190614ae6565b612793565b604051610df49190614853565b60405180910390f35b348015610e0957600080fd5b50610e1261281a565b604051610e1f9190614536565b60405180910390f35b348015610e3457600080fd5b50610e3d6128a8565b604051610e4a919061467e565b60405180910390f35b348015610e5f57600080fd5b50610e686129bb565b604051610e759190614536565b60405180910390f35b348015610e8a57600080fd5b50610e93612a4d565b604051610ea09190614853565b60405180910390f35b348015610eb557600080fd5b50610ebe612a53565b604051610ecb9190614853565b60405180910390f35b348015610ee057600080fd5b50610efb6004803603810190610ef691906145c0565b612a59565b005b348015610f0957600080fd5b50610f12612c1f565b604051610f1f9190614853565b60405180910390f35b348015610f3457600080fd5b50610f3d612c25565b604051610f4a9190614853565b60405180910390f35b348015610f5f57600080fd5b50610f7a6004803603810190610f7591906145c0565b612c2b565b604051610f87919061467e565b60405180910390f35b348015610f9c57600080fd5b50610fb76004803603810190610fb29190614ab9565b612c4b565b604051610fc4919061467e565b60405180910390f35b606060038054610fdc90614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461100890614b55565b80156110555780601f1061102a57610100808354040283529160200191611055565b820191906000526020600020905b81548152906001019060200180831161103857829003601f168201915b5050505050905090565b611067612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90614bd2565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061114e611147612f04565b8484612f0c565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b611180612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690614bd2565b60405180910390fd5b6001821015611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614c64565b60405180910390fd5b670de0b6b3a764000060648361126761146b565b6112719190614cb3565b61127b9190614d24565b6112859190614d24565b60088190555060018110156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614dc7565b60405180910390fd5b670de0b6b3a76400006064826112e361146b565b6112ed9190614cb3565b6112f79190614d24565b6113019190614d24565b600a819055505050565b611313612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990614bd2565b60405180910390fd5b60005b838390508110156114415781601360008686858181106113c8576113c7614de7565b5b90506020020160208101906113dd91906145c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061143990614e16565b9150506113a5565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b600061149a8484846130d5565b61155b846114a6612f04565b61155685604051806060016040528060288152602001615d5e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061150c612f04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e339092919063ffffffff16565b612f0c565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061163761159b612f04565b8461163285600160006115ac612f04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e9790919063ffffffff16565b612f0c565b6001905092915050565b600061164b612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190614bd2565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117ac611f46565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090614ed0565b60405180910390fd5b83836020918261182a9291906150cc565b5081816021918261183c9291906150cc565b5050505050565b60195481565b600061185430611adc565b90506000601f54601d54601e5461186b919061519c565b611875919061519c565b90506000808314806118875750600082145b1561189457505050611ac7565b60146009546118a39190614cb3565b8311156118bc5760146009546118b99190614cb3565b92505b6000600283601e54866118cf9190614cb3565b6118d99190614d24565b6118e39190614d24565b9050600081856118f391906151d0565b9050600047905061190382613ef5565b6000814761191191906151d0565b9050600086601d54836119249190614cb3565b61192e9190614d24565b9050600087601f54846119419190614cb3565b61194b9190614d24565b9050600081838561195c91906151d0565b61196691906151d0565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516119c690615235565b60006040518083038185875af1925050503d8060008114611a03576040519150601f19603f3d011682016040523d82523d6000602084013e611a08565b606091505b505080985050600087118015611a1e5750600081115b15611a2e57611a2d8782614132565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611a7490615235565b60006040518083038185875af1925050503d8060008114611ab1576040519150601f19603f3d011682016040523d82523d6000602084013e611ab6565b606091505b505080985050505050505050505050505b565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b2c612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290614bd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060218054611c8b90614b55565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb790614b55565b8015611d045780601f10611cd957610100808354040283529160200191611d04565b820191906000526020600020905b815481529060010190602001808311611ce757829003601f168201915b5050505050905090565b611d16612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90614bd2565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611e34612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90614bd2565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611eeb919061519c565b611ef5919061519c565b60158190555060286015541115611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890615296565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611fa4612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90614bd2565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606004805461205f90614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461208b90614b55565b80156120d85780601f106120ad576101008083540402835291602001916120d8565b820191906000526020600020905b8154815290600101906020018083116120bb57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b60006121bd612107612f04565b846121b885604051806060016040528060258152602001615d866025913960016000612131612f04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e339092919063ffffffff16565b612f0c565b6001905092915050565b600e5481565b60006121e16121da612f04565b84846130d5565b6001905092915050565b60246020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b612226612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614bd2565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612318612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614bd2565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546123cf919061519c565b6123d9919061519c565b60198190555060326019541115612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90615296565b60405180910390fd5b505050565b6020805461243790614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461246390614b55565b80156124b05780601f10612485576101008083540402835291602001916124b0565b820191906000526020600020905b81548152906001019060200180831161249357829003601f168201915b505050505081565b601460009054906101000a900460ff1681565b60085481565b6124d9612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614bd2565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006125b1612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263790614bd2565b60405180910390fd5b6001821115612684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267b90615328565b60405180910390fd5b60648261268f61146b565b6126999190614cb3565b6126a39190614d24565b60098190555060019050919050565b60155481565b6126c0612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461274f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274690614bd2565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6021805461282790614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461285390614b55565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b505050505081565b60006128b2612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890614bd2565b60405180910390fd5b600061294b611f46565b73ffffffffffffffffffffffffffffffffffffffff164760405161296e90615235565b60006040518083038185875af1925050503d80600081146129ab576040519150601f19603f3d011682016040523d82523d6000602084013e6129b0565b606091505b505090508091505090565b6060602080546129ca90614b55565b80601f01602080910402602001604051908101604052809291908181526020018280546129f690614b55565b8015612a435780601f10612a1857610100808354040283529160200191612a43565b820191906000526020600020905b815481529060010190602001808311612a2657829003601f168201915b5050505050905090565b60095481565b60175481565b612a61612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae790614bd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b56906153ba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b6000612c55612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb90614bd2565b60405180910390fd5b600f54601054612cf4919061519c565b4211612d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2c90615426565b60405180910390fd5b6103e8821115612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d71906154b8565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612ddc91906148d0565b602060405180830381865afa158015612df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1d91906154ed565b905060006127108483612e309190614cb3565b612e3a9190614d24565b90506000811115612e7357612e727f000000000000000000000000000000000000000000000000000000000000000061dead8361420e565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ee057600080fd5b505af1158015612ef4573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f729061558c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe19061561e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130c89190614853565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313b906156b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131aa90615742565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132575750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328d906157ae565b60405180910390fd5b600081036132af576132aa8383600061420e565b613e2e565b601160009054906101000a900460ff1615613972576132cc611f46565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561333a575061330a611f46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133735750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133ad575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133c65750600560149054906101000a900460ff16155b1561397157601160019054906101000a900460ff166134c057602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134805750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6134bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b69061581a565b60405180910390fd5b5b601460009054906101000a900460ff1615613688576134dd611f46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561356457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135bc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156136875743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613639906158d2565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561372b5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137d257600854811115613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90615964565b60405180910390fd5b600a5461378183611adc565b8261378c919061519c565b11156137cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c4906159d0565b60405180910390fd5b613970565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138755750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138c4576008548111156138bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b690615a62565b60405180910390fd5b61396f565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661396e57600a5461392183611adc565b8261392c919061519c565b111561396d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613964906159d0565b60405180910390fd5b5b5b5b5b5b600061397d30611adc565b9050600060095482101590508080156139a25750601160029054906101000a900460ff165b80156139bb5750600560149054906101000a900460ff16155b8015613a115750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a675750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613abd5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b01576001600560146101000a81548160ff021916908315150217905550613ae5611849565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613bb75750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bc157600090505b60008115613e1e57602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c2457506000601954115b15613ce357606460195486613c399190614cb3565b613c439190614d24565b9050601954601b5482613c569190614cb3565b613c609190614d24565b601e6000828254613c71919061519c565b92505081905550601954601c5482613c899190614cb3565b613c939190614d24565b601f6000828254613ca4919061519c565b92505081905550601954601a5482613cbc9190614cb3565b613cc69190614d24565b601d6000828254613cd7919061519c565b92505081905550613dfa565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d3e57506000601554115b15613df957606460155486613d539190614cb3565b613d5d9190614d24565b905060155460175482613d709190614cb3565b613d7a9190614d24565b601e6000828254613d8b919061519c565b9250508190555060155460185482613da39190614cb3565b613dad9190614d24565b601f6000828254613dbe919061519c565b9250508190555060155460165482613dd69190614cb3565b613de09190614d24565b601d6000828254613df1919061519c565b925050819055505b5b6000811115613e0f57613e0e87308361420e565b5b8085613e1b91906151d0565b94505b613e2987878761420e565b505050505b505050565b6000838311158290613e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e729190614536565b60405180910390fd5b5060008385613e8a91906151d0565b9050809150509392505050565b6000808284613ea6919061519c565b905083811015613eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ee290615ace565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff811115613f1257613f11614efb565b5b604051908082528060200260200182016040528015613f405781602001602082028036833780820191505090505b5090503081600081518110613f5857613f57614de7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140219190615b03565b8160018151811061403557614034614de7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061409a307f000000000000000000000000000000000000000000000000000000000000000084612f0c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140fc959493929190615c29565b600060405180830381600087803b15801561411657600080fd5b505af115801561412a573d6000803e3d6000fd5b505050505050565b61415d307f000000000000000000000000000000000000000000000000000000000000000084612f0c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016141c496959493929190615c83565b60606040518083038185885af11580156141e2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142079190615ce4565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361427d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614274906156b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142e390615742565b60405180910390fd5b6142f78383836144a1565b61436281604051806060016040528060268152602001615d38602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e339092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143f5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e9790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144949190614853565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e05780820151818401526020810190506144c5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614508826144a6565b61451281856144b1565b93506145228185602086016144c2565b61452b816144ec565b840191505092915050565b6000602082019050818103600083015261455081846144fd565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061458d82614562565b9050919050565b61459d81614582565b81146145a857600080fd5b50565b6000813590506145ba81614594565b92915050565b6000602082840312156145d6576145d5614558565b5b60006145e4848285016145ab565b91505092915050565b6000819050919050565b614600816145ed565b811461460b57600080fd5b50565b60008135905061461d816145f7565b92915050565b6000806040838503121561463a57614639614558565b5b6000614648858286016145ab565b92505060206146598582860161460e565b9150509250929050565b60008115159050919050565b61467881614663565b82525050565b6000602082019050614693600083018461466f565b92915050565b600080604083850312156146b0576146af614558565b5b60006146be8582860161460e565b92505060206146cf8582860161460e565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126146fe576146fd6146d9565b5b8235905067ffffffffffffffff81111561471b5761471a6146de565b5b602083019150836020820283011115614737576147366146e3565b5b9250929050565b61474781614663565b811461475257600080fd5b50565b6000813590506147648161473e565b92915050565b60008060006040848603121561478357614782614558565b5b600084013567ffffffffffffffff8111156147a1576147a061455d565b5b6147ad868287016146e8565b935093505060206147c086828701614755565b9150509250925092565b6000819050919050565b60006147ef6147ea6147e584614562565b6147ca565b614562565b9050919050565b6000614801826147d4565b9050919050565b6000614813826147f6565b9050919050565b61482381614808565b82525050565b600060208201905061483e600083018461481a565b92915050565b61484d816145ed565b82525050565b60006020820190506148686000830184614844565b92915050565b60008060006060848603121561488757614886614558565b5b6000614895868287016145ab565b93505060206148a6868287016145ab565b92505060406148b78682870161460e565b9150509250925092565b6148ca81614582565b82525050565b60006020820190506148e560008301846148c1565b92915050565b600060ff82169050919050565b614901816148eb565b82525050565b600060208201905061491c60008301846148f8565b92915050565b60008083601f840112614938576149376146d9565b5b8235905067ffffffffffffffff811115614955576149546146de565b5b602083019150836001820283011115614971576149706146e3565b5b9250929050565b6000806000806040858703121561499257614991614558565b5b600085013567ffffffffffffffff8111156149b0576149af61455d565b5b6149bc87828801614922565b9450945050602085013567ffffffffffffffff8111156149df576149de61455d565b5b6149eb87828801614922565b925092505092959194509250565b60008060408385031215614a1057614a0f614558565b5b6000614a1e858286016145ab565b9250506020614a2f85828601614755565b9150509250929050565b600080600060608486031215614a5257614a51614558565b5b6000614a608682870161460e565b9350506020614a718682870161460e565b9250506040614a828682870161460e565b9150509250925092565b600060208284031215614aa257614aa1614558565b5b6000614ab084828501614755565b91505092915050565b600060208284031215614acf57614ace614558565b5b6000614add8482850161460e565b91505092915050565b60008060408385031215614afd57614afc614558565b5b6000614b0b858286016145ab565b9250506020614b1c858286016145ab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b6d57607f821691505b602082108103614b8057614b7f614b26565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bbc6020836144b1565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614c4e602d836144b1565b9150614c5982614bf2565b604082019050919050565b60006020820190508181036000830152614c7d81614c41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cbe826145ed565b9150614cc9836145ed565b9250828202614cd7816145ed565b91508282048414831517614cee57614ced614c84565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d2f826145ed565b9150614d3a836145ed565b925082614d4a57614d49614cf5565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614db16022836144b1565b9150614dbc82614d55565b604082019050919050565b60006020820190508181036000830152614de081614da4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e21826145ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e5357614e52614c84565b5b600182019050919050565b7f4f6e6c7920646576656c6f7065722063616e2061646a75737420736f6369616c60008201527f206c696e6b730000000000000000000000000000000000000000000000000000602082015250565b6000614eba6026836144b1565b9150614ec582614e5e565b604082019050919050565b60006020820190508181036000830152614ee981614ead565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614f8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614f4f565b614f968683614f4f565b95508019841693508086168417925050509392505050565b6000614fc9614fc4614fbf846145ed565b6147ca565b6145ed565b9050919050565b6000819050919050565b614fe383614fae565b614ff7614fef82614fd0565b848454614f5c565b825550505050565b600090565b61500c614fff565b615017818484614fda565b505050565b5b8181101561503b57615030600082615004565b60018101905061501d565b5050565b601f8211156150805761505181614f2a565b61505a84614f3f565b81016020851015615069578190505b61507d61507585614f3f565b83018261501c565b50505b505050565b600082821c905092915050565b60006150a360001984600802615085565b1980831691505092915050565b60006150bc8383615092565b9150826002028217905092915050565b6150d68383614ef0565b67ffffffffffffffff8111156150ef576150ee614efb565b5b6150f98254614b55565b61510482828561503f565b6000601f8311600181146151335760008415615121578287013590505b61512b85826150b0565b865550615193565b601f19841661514186614f2a565b60005b8281101561516957848901358255600182019150602085019450602081019050615144565b868310156151865784890135615182601f891682615092565b8355505b6001600288020188555050505b50505050505050565b60006151a7826145ed565b91506151b2836145ed565b92508282019050808211156151ca576151c9614c84565b5b92915050565b60006151db826145ed565b91506151e6836145ed565b92508282039050818111156151fe576151fd614c84565b5b92915050565b600081905092915050565b50565b600061521f600083615204565b915061522a8261520f565b600082019050919050565b600061524082615212565b9150819050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000615280601d836144b1565b915061528b8261524a565b602082019050919050565b600060208201905081810360008301526152af81615273565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006153126032836144b1565b915061531d826152b6565b604082019050919050565b6000602082019050818103600083015261534181615305565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153a46026836144b1565b91506153af82615348565b604082019050919050565b600060208201905081810360008301526153d381615397565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006154106020836144b1565b915061541b826153da565b602082019050919050565b6000602082019050818103600083015261543f81615403565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006154a2602a836144b1565b91506154ad82615446565b604082019050919050565b600060208201905081810360008301526154d181615495565b9050919050565b6000815190506154e7816145f7565b92915050565b60006020828403121561550357615502614558565b5b6000615511848285016154d8565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155766024836144b1565b91506155818261551a565b604082019050919050565b600060208201905081810360008301526155a581615569565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156086022836144b1565b9150615613826155ac565b604082019050919050565b60006020820190508181036000830152615637816155fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061569a6025836144b1565b91506156a58261563e565b604082019050919050565b600060208201905081810360008301526156c98161568d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061572c6023836144b1565b9150615737826156d0565b604082019050919050565b6000602082019050818103600083015261575b8161571f565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615798600b836144b1565b91506157a382615762565b602082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006158046016836144b1565b915061580f826157ce565b602082019050919050565b60006020820190508181036000830152615833816157f7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158bc6049836144b1565b91506158c78261583a565b606082019050919050565b600060208201905081810360008301526158eb816158af565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061594e6035836144b1565b9150615959826158f2565b604082019050919050565b6000602082019050818103600083015261597d81615941565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159ba6013836144b1565b91506159c582615984565b602082019050919050565b600060208201905081810360008301526159e9816159ad565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a4c6036836144b1565b9150615a57826159f0565b604082019050919050565b60006020820190508181036000830152615a7b81615a3f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615ab8601b836144b1565b9150615ac382615a82565b602082019050919050565b60006020820190508181036000830152615ae781615aab565b9050919050565b600081519050615afd81614594565b92915050565b600060208284031215615b1957615b18614558565b5b6000615b2784828501615aee565b91505092915050565b6000819050919050565b6000615b55615b50615b4b84615b30565b6147ca565b6145ed565b9050919050565b615b6581615b3a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ba081614582565b82525050565b6000615bb28383615b97565b60208301905092915050565b6000602082019050919050565b6000615bd682615b6b565b615be08185615b76565b9350615beb83615b87565b8060005b83811015615c1c578151615c038882615ba6565b9750615c0e83615bbe565b925050600181019050615bef565b5085935050505092915050565b600060a082019050615c3e6000830188614844565b615c4b6020830187615b5c565b8181036040830152615c5d8186615bcb565b9050615c6c60608301856148c1565b615c796080830184614844565b9695505050505050565b600060c082019050615c9860008301896148c1565b615ca56020830188614844565b615cb26040830187615b5c565b615cbf6060830186615b5c565b615ccc60808301856148c1565b615cd960a0830184614844565b979650505050505050565b600080600060608486031215615cfd57615cfc614558565b5b6000615d0b868287016154d8565b9350506020615d1c868287016154d8565b9250506040615d2d868287016154d8565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075dfb52368e11a8aa4393c531792dea39ed7178200863011d3b4bacf79d174a664736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103e85760003560e01c80638da5cb5b11610208578063c876d0b911610118578063e086e5ec116100ab578063f2fde38b1161007a578063f2fde38b14610ed4578063f637434214610efd578063f8b45b0514610f28578063fe575a8714610f53578063fe72b27a14610f90576103ef565b8063e086e5ec14610e28578063e0dc354614610e53578063e2f4560514610e7e578063f11a24d314610ea9576103ef565b8063d85ba063116100e7578063d85ba06314610d6c578063dbdb98de14610d97578063dd62ed3e14610dc0578063dedd452014610dfd576103ef565b8063c876d0b914610cc2578063c8c8ebe414610ced578063c9567bf914610d18578063d257b34f14610d2f576103ef565b8063a0d82dc51161019b578063b62496f51161016a578063b62496f514610bdd578063bbc0c74214610c1a578063c024666814610c45578063c17b5b8c14610c6e578063c804343214610c97576103ef565b8063a0d82dc514610b0d578063a457c2d714610b38578063a4c82a0014610b75578063a9059cbb14610ba0576103ef565b806395d89b41116101d757806395d89b4114610a615780639c3b4fdc14610a8c5780639ec22c0e14610ab75780639fccce3214610ae2576103ef565b80638da5cb5b146109b75780638ea5220f146109e25780639213691314610a0d578063924de9b714610a38576103ef565b8063313ce567116103035780636ac5eeee11610296578063756b7bb711610265578063756b7bb7146108e45780637571336a1461090f57806375f0a874146109385780637bce5a04146109635780638095d5641461098e576103ef565b80636ac5eeee1461084e5780636ddd17131461086557806370a0823114610890578063715018a6146108cd576103ef565b80634a62bb65116102d25780634a62bb65146107925780634fbee193146107bd578063682a41ce146107fa5780636a486a8e14610823576103ef565b8063313ce567146106d457806339509351146106ff57806342246fb71461073c57806349bd5a5e14610767576103ef565b8063184c16c51161037b57806323b872dd1161034a57806323b872dd1461061657806327c8f835146106535780632c3e486c1461067e5780632e82f1a0146106a9576103ef565b8063184c16c51461056a578063199ffc72146105955780631a8145bb146105c05780631f3fed8f146105eb576103ef565b806311a582c3116103b757806311a582c3146104c2578063130a2c3c146104eb5780631694505e1461051457806318160ddd1461053f576103ef565b806306fdde03146103f45780630946b3a21461041f578063095ea7b31461044857806310d5de5314610485576103ef565b366103ef57005b600080fd5b34801561040057600080fd5b50610409610fcd565b6040516104169190614536565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906145c0565b61105f565b005b34801561045457600080fd5b5061046f600480360381019061046a9190614623565b61113a565b60405161047c919061467e565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a791906145c0565b611158565b6040516104b9919061467e565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190614699565b611178565b005b3480156104f757600080fd5b50610512600480360381019061050d919061476a565b61130b565b005b34801561052057600080fd5b50610529611447565b6040516105369190614829565b60405180910390f35b34801561054b57600080fd5b5061055461146b565b6040516105619190614853565b60405180910390f35b34801561057657600080fd5b5061057f611475565b60405161058c9190614853565b60405180910390f35b3480156105a157600080fd5b506105aa61147b565b6040516105b79190614853565b60405180910390f35b3480156105cc57600080fd5b506105d5611481565b6040516105e29190614853565b60405180910390f35b3480156105f757600080fd5b50610600611487565b60405161060d9190614853565b60405180910390f35b34801561062257600080fd5b5061063d6004803603810190610638919061486e565b61148d565b60405161064a919061467e565b60405180910390f35b34801561065f57600080fd5b50610668611566565b60405161067591906148d0565b60405180910390f35b34801561068a57600080fd5b5061069361156c565b6040516106a09190614853565b60405180910390f35b3480156106b557600080fd5b506106be611572565b6040516106cb919061467e565b60405180910390f35b3480156106e057600080fd5b506106e9611585565b6040516106f69190614907565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614623565b61158e565b604051610733919061467e565b60405180910390f35b34801561074857600080fd5b50610751611641565b60405161075e919061467e565b60405180910390f35b34801561077357600080fd5b5061077c611717565b60405161078991906148d0565b60405180910390f35b34801561079e57600080fd5b506107a761173b565b6040516107b4919061467e565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906145c0565b61174e565b6040516107f1919061467e565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190614978565b6117a4565b005b34801561082f57600080fd5b50610838611843565b6040516108459190614853565b60405180910390f35b34801561085a57600080fd5b50610863611849565b005b34801561087157600080fd5b5061087a611ac9565b604051610887919061467e565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b291906145c0565b611adc565b6040516108c49190614853565b60405180910390f35b3480156108d957600080fd5b506108e2611b24565b005b3480156108f057600080fd5b506108f9611c7c565b6040516109069190614536565b60405180910390f35b34801561091b57600080fd5b50610936600480360381019061093191906149f9565b611d0e565b005b34801561094457600080fd5b5061094d611e00565b60405161095a91906148d0565b60405180910390f35b34801561096f57600080fd5b50610978611e26565b6040516109859190614853565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b09190614a39565b611e2c565b005b3480156109c357600080fd5b506109cc611f46565b6040516109d991906148d0565b60405180910390f35b3480156109ee57600080fd5b506109f7611f70565b604051610a0491906148d0565b60405180910390f35b348015610a1957600080fd5b50610a22611f96565b604051610a2f9190614853565b60405180910390f35b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190614a8c565b611f9c565b005b348015610a6d57600080fd5b50610a76612050565b604051610a839190614536565b60405180910390f35b348015610a9857600080fd5b50610aa16120e2565b604051610aae9190614853565b60405180910390f35b348015610ac357600080fd5b50610acc6120e8565b604051610ad99190614853565b60405180910390f35b348015610aee57600080fd5b50610af76120ee565b604051610b049190614853565b60405180910390f35b348015610b1957600080fd5b50610b226120f4565b604051610b2f9190614853565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190614623565b6120fa565b604051610b6c919061467e565b60405180910390f35b348015610b8157600080fd5b50610b8a6121c7565b604051610b979190614853565b60405180910390f35b348015610bac57600080fd5b50610bc76004803603810190610bc29190614623565b6121cd565b604051610bd4919061467e565b60405180910390f35b348015610be957600080fd5b50610c046004803603810190610bff91906145c0565b6121eb565b604051610c11919061467e565b60405180910390f35b348015610c2657600080fd5b50610c2f61220b565b604051610c3c919061467e565b60405180910390f35b348015610c5157600080fd5b50610c6c6004803603810190610c6791906149f9565b61221e565b005b348015610c7a57600080fd5b50610c956004803603810190610c909190614a39565b612310565b005b348015610ca357600080fd5b50610cac61242a565b604051610cb99190614536565b60405180910390f35b348015610cce57600080fd5b50610cd76124b8565b604051610ce4919061467e565b60405180910390f35b348015610cf957600080fd5b50610d026124cb565b604051610d0f9190614853565b60405180910390f35b348015610d2457600080fd5b50610d2d6124d1565b005b348015610d3b57600080fd5b50610d566004803603810190610d519190614ab9565b6125a7565b604051610d63919061467e565b60405180910390f35b348015610d7857600080fd5b50610d816126b2565b604051610d8e9190614853565b60405180910390f35b348015610da357600080fd5b50610dbe6004803603810190610db991906145c0565b6126b8565b005b348015610dcc57600080fd5b50610de76004803603810190610de29190614ae6565b612793565b604051610df49190614853565b60405180910390f35b348015610e0957600080fd5b50610e1261281a565b604051610e1f9190614536565b60405180910390f35b348015610e3457600080fd5b50610e3d6128a8565b604051610e4a919061467e565b60405180910390f35b348015610e5f57600080fd5b50610e686129bb565b604051610e759190614536565b60405180910390f35b348015610e8a57600080fd5b50610e93612a4d565b604051610ea09190614853565b60405180910390f35b348015610eb557600080fd5b50610ebe612a53565b604051610ecb9190614853565b60405180910390f35b348015610ee057600080fd5b50610efb6004803603810190610ef691906145c0565b612a59565b005b348015610f0957600080fd5b50610f12612c1f565b604051610f1f9190614853565b60405180910390f35b348015610f3457600080fd5b50610f3d612c25565b604051610f4a9190614853565b60405180910390f35b348015610f5f57600080fd5b50610f7a6004803603810190610f7591906145c0565b612c2b565b604051610f87919061467e565b60405180910390f35b348015610f9c57600080fd5b50610fb76004803603810190610fb29190614ab9565b612c4b565b604051610fc4919061467e565b60405180910390f35b606060038054610fdc90614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461100890614b55565b80156110555780601f1061102a57610100808354040283529160200191611055565b820191906000526020600020905b81548152906001019060200180831161103857829003601f168201915b5050505050905090565b611067612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90614bd2565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061114e611147612f04565b8484612f0c565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b611180612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690614bd2565b60405180910390fd5b6001821015611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614c64565b60405180910390fd5b670de0b6b3a764000060648361126761146b565b6112719190614cb3565b61127b9190614d24565b6112859190614d24565b60088190555060018110156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614dc7565b60405180910390fd5b670de0b6b3a76400006064826112e361146b565b6112ed9190614cb3565b6112f79190614d24565b6113019190614d24565b600a819055505050565b611313612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990614bd2565b60405180910390fd5b60005b838390508110156114415781601360008686858181106113c8576113c7614de7565b5b90506020020160208101906113dd91906145c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061143990614e16565b9150506113a5565b50505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b600061149a8484846130d5565b61155b846114a6612f04565b61155685604051806060016040528060288152602001615d5e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061150c612f04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e339092919063ffffffff16565b612f0c565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061163761159b612f04565b8461163285600160006115ac612f04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e9790919063ffffffff16565b612f0c565b6001905092915050565b600061164b612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190614bd2565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b7f0000000000000000000000006b86338994210aa2bc4215ca07324e4eab7af10281565b601160009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117ac611f46565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090614ed0565b60405180910390fd5b83836020918261182a9291906150cc565b5081816021918261183c9291906150cc565b5050505050565b60195481565b600061185430611adc565b90506000601f54601d54601e5461186b919061519c565b611875919061519c565b90506000808314806118875750600082145b1561189457505050611ac7565b60146009546118a39190614cb3565b8311156118bc5760146009546118b99190614cb3565b92505b6000600283601e54866118cf9190614cb3565b6118d99190614d24565b6118e39190614d24565b9050600081856118f391906151d0565b9050600047905061190382613ef5565b6000814761191191906151d0565b9050600086601d54836119249190614cb3565b61192e9190614d24565b9050600087601f54846119419190614cb3565b61194b9190614d24565b9050600081838561195c91906151d0565b61196691906151d0565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516119c690615235565b60006040518083038185875af1925050503d8060008114611a03576040519150601f19603f3d011682016040523d82523d6000602084013e611a08565b606091505b505080985050600087118015611a1e5750600081115b15611a2e57611a2d8782614132565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611a7490615235565b60006040518083038185875af1925050503d8060008114611ab1576040519150601f19603f3d011682016040523d82523d6000602084013e611ab6565b606091505b505080985050505050505050505050505b565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b2c612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290614bd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060218054611c8b90614b55565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb790614b55565b8015611d045780601f10611cd957610100808354040283529160200191611d04565b820191906000526020600020905b815481529060010190602001808311611ce757829003601f168201915b5050505050905090565b611d16612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90614bd2565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611e34612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90614bd2565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611eeb919061519c565b611ef5919061519c565b60158190555060286015541115611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890615296565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611fa4612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90614bd2565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606004805461205f90614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461208b90614b55565b80156120d85780601f106120ad576101008083540402835291602001916120d8565b820191906000526020600020905b8154815290600101906020018083116120bb57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b60006121bd612107612f04565b846121b885604051806060016040528060258152602001615d866025913960016000612131612f04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e339092919063ffffffff16565b612f0c565b6001905092915050565b600e5481565b60006121e16121da612f04565b84846130d5565b6001905092915050565b60246020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b612226612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614bd2565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612318612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614bd2565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546123cf919061519c565b6123d9919061519c565b60198190555060326019541115612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90615296565b60405180910390fd5b505050565b6020805461243790614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461246390614b55565b80156124b05780601f10612485576101008083540402835291602001916124b0565b820191906000526020600020905b81548152906001019060200180831161249357829003601f168201915b505050505081565b601460009054906101000a900460ff1681565b60085481565b6124d9612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614bd2565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006125b1612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263790614bd2565b60405180910390fd5b6001821115612684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267b90615328565b60405180910390fd5b60648261268f61146b565b6126999190614cb3565b6126a39190614d24565b60098190555060019050919050565b60155481565b6126c0612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461274f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274690614bd2565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6021805461282790614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461285390614b55565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b505050505081565b60006128b2612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890614bd2565b60405180910390fd5b600061294b611f46565b73ffffffffffffffffffffffffffffffffffffffff164760405161296e90615235565b60006040518083038185875af1925050503d80600081146129ab576040519150601f19603f3d011682016040523d82523d6000602084013e6129b0565b606091505b505090508091505090565b6060602080546129ca90614b55565b80601f01602080910402602001604051908101604052809291908181526020018280546129f690614b55565b8015612a435780601f10612a1857610100808354040283529160200191612a43565b820191906000526020600020905b815481529060010190602001808311612a2657829003601f168201915b5050505050905090565b60095481565b60175481565b612a61612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae790614bd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b56906153ba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b6000612c55612f04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb90614bd2565b60405180910390fd5b600f54601054612cf4919061519c565b4211612d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2c90615426565b60405180910390fd5b6103e8821115612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d71906154b8565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000006b86338994210aa2bc4215ca07324e4eab7af1026040518263ffffffff1660e01b8152600401612ddc91906148d0565b602060405180830381865afa158015612df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1d91906154ed565b905060006127108483612e309190614cb3565b612e3a9190614d24565b90506000811115612e7357612e727f0000000000000000000000006b86338994210aa2bc4215ca07324e4eab7af10261dead8361420e565b5b60007f0000000000000000000000006b86338994210aa2bc4215ca07324e4eab7af10290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ee057600080fd5b505af1158015612ef4573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f729061558c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe19061561e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130c89190614853565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313b906156b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131aa90615742565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132575750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328d906157ae565b60405180910390fd5b600081036132af576132aa8383600061420e565b613e2e565b601160009054906101000a900460ff1615613972576132cc611f46565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561333a575061330a611f46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133735750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133ad575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133c65750600560149054906101000a900460ff16155b1561397157601160019054906101000a900460ff166134c057602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134805750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6134bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b69061581a565b60405180910390fd5b5b601460009054906101000a900460ff1615613688576134dd611f46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561356457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135bc57507f0000000000000000000000006b86338994210aa2bc4215ca07324e4eab7af10273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156136875743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613639906158d2565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561372b5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137d257600854811115613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90615964565b60405180910390fd5b600a5461378183611adc565b8261378c919061519c565b11156137cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c4906159d0565b60405180910390fd5b613970565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138755750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138c4576008548111156138bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b690615a62565b60405180910390fd5b61396f565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661396e57600a5461392183611adc565b8261392c919061519c565b111561396d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613964906159d0565b60405180910390fd5b5b5b5b5b5b600061397d30611adc565b9050600060095482101590508080156139a25750601160029054906101000a900460ff165b80156139bb5750600560149054906101000a900460ff16155b8015613a115750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a675750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613abd5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b01576001600560146101000a81548160ff021916908315150217905550613ae5611849565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613bb75750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bc157600090505b60008115613e1e57602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c2457506000601954115b15613ce357606460195486613c399190614cb3565b613c439190614d24565b9050601954601b5482613c569190614cb3565b613c609190614d24565b601e6000828254613c71919061519c565b92505081905550601954601c5482613c899190614cb3565b613c939190614d24565b601f6000828254613ca4919061519c565b92505081905550601954601a5482613cbc9190614cb3565b613cc69190614d24565b601d6000828254613cd7919061519c565b92505081905550613dfa565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d3e57506000601554115b15613df957606460155486613d539190614cb3565b613d5d9190614d24565b905060155460175482613d709190614cb3565b613d7a9190614d24565b601e6000828254613d8b919061519c565b9250508190555060155460185482613da39190614cb3565b613dad9190614d24565b601f6000828254613dbe919061519c565b9250508190555060155460165482613dd69190614cb3565b613de09190614d24565b601d6000828254613df1919061519c565b925050819055505b5b6000811115613e0f57613e0e87308361420e565b5b8085613e1b91906151d0565b94505b613e2987878761420e565b505050505b505050565b6000838311158290613e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e729190614536565b60405180910390fd5b5060008385613e8a91906151d0565b9050809150509392505050565b6000808284613ea6919061519c565b905083811015613eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ee290615ace565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff811115613f1257613f11614efb565b5b604051908082528060200260200182016040528015613f405781602001602082028036833780820191505090505b5090503081600081518110613f5857613f57614de7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140219190615b03565b8160018151811061403557614034614de7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061409a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612f0c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140fc959493929190615c29565b600060405180830381600087803b15801561411657600080fd5b505af115801561412a573d6000803e3d6000fd5b505050505050565b61415d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612f0c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016141c496959493929190615c83565b60606040518083038185885af11580156141e2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142079190615ce4565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361427d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614274906156b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142e390615742565b60405180910390fd5b6142f78383836144a1565b61436281604051806060016040528060268152602001615d38602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e339092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143f5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e9790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144949190614853565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e05780820151818401526020810190506144c5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614508826144a6565b61451281856144b1565b93506145228185602086016144c2565b61452b816144ec565b840191505092915050565b6000602082019050818103600083015261455081846144fd565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061458d82614562565b9050919050565b61459d81614582565b81146145a857600080fd5b50565b6000813590506145ba81614594565b92915050565b6000602082840312156145d6576145d5614558565b5b60006145e4848285016145ab565b91505092915050565b6000819050919050565b614600816145ed565b811461460b57600080fd5b50565b60008135905061461d816145f7565b92915050565b6000806040838503121561463a57614639614558565b5b6000614648858286016145ab565b92505060206146598582860161460e565b9150509250929050565b60008115159050919050565b61467881614663565b82525050565b6000602082019050614693600083018461466f565b92915050565b600080604083850312156146b0576146af614558565b5b60006146be8582860161460e565b92505060206146cf8582860161460e565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126146fe576146fd6146d9565b5b8235905067ffffffffffffffff81111561471b5761471a6146de565b5b602083019150836020820283011115614737576147366146e3565b5b9250929050565b61474781614663565b811461475257600080fd5b50565b6000813590506147648161473e565b92915050565b60008060006040848603121561478357614782614558565b5b600084013567ffffffffffffffff8111156147a1576147a061455d565b5b6147ad868287016146e8565b935093505060206147c086828701614755565b9150509250925092565b6000819050919050565b60006147ef6147ea6147e584614562565b6147ca565b614562565b9050919050565b6000614801826147d4565b9050919050565b6000614813826147f6565b9050919050565b61482381614808565b82525050565b600060208201905061483e600083018461481a565b92915050565b61484d816145ed565b82525050565b60006020820190506148686000830184614844565b92915050565b60008060006060848603121561488757614886614558565b5b6000614895868287016145ab565b93505060206148a6868287016145ab565b92505060406148b78682870161460e565b9150509250925092565b6148ca81614582565b82525050565b60006020820190506148e560008301846148c1565b92915050565b600060ff82169050919050565b614901816148eb565b82525050565b600060208201905061491c60008301846148f8565b92915050565b60008083601f840112614938576149376146d9565b5b8235905067ffffffffffffffff811115614955576149546146de565b5b602083019150836001820283011115614971576149706146e3565b5b9250929050565b6000806000806040858703121561499257614991614558565b5b600085013567ffffffffffffffff8111156149b0576149af61455d565b5b6149bc87828801614922565b9450945050602085013567ffffffffffffffff8111156149df576149de61455d565b5b6149eb87828801614922565b925092505092959194509250565b60008060408385031215614a1057614a0f614558565b5b6000614a1e858286016145ab565b9250506020614a2f85828601614755565b9150509250929050565b600080600060608486031215614a5257614a51614558565b5b6000614a608682870161460e565b9350506020614a718682870161460e565b9250506040614a828682870161460e565b9150509250925092565b600060208284031215614aa257614aa1614558565b5b6000614ab084828501614755565b91505092915050565b600060208284031215614acf57614ace614558565b5b6000614add8482850161460e565b91505092915050565b60008060408385031215614afd57614afc614558565b5b6000614b0b858286016145ab565b9250506020614b1c858286016145ab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b6d57607f821691505b602082108103614b8057614b7f614b26565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bbc6020836144b1565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614c4e602d836144b1565b9150614c5982614bf2565b604082019050919050565b60006020820190508181036000830152614c7d81614c41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cbe826145ed565b9150614cc9836145ed565b9250828202614cd7816145ed565b91508282048414831517614cee57614ced614c84565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d2f826145ed565b9150614d3a836145ed565b925082614d4a57614d49614cf5565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614db16022836144b1565b9150614dbc82614d55565b604082019050919050565b60006020820190508181036000830152614de081614da4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e21826145ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e5357614e52614c84565b5b600182019050919050565b7f4f6e6c7920646576656c6f7065722063616e2061646a75737420736f6369616c60008201527f206c696e6b730000000000000000000000000000000000000000000000000000602082015250565b6000614eba6026836144b1565b9150614ec582614e5e565b604082019050919050565b60006020820190508181036000830152614ee981614ead565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614f8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614f4f565b614f968683614f4f565b95508019841693508086168417925050509392505050565b6000614fc9614fc4614fbf846145ed565b6147ca565b6145ed565b9050919050565b6000819050919050565b614fe383614fae565b614ff7614fef82614fd0565b848454614f5c565b825550505050565b600090565b61500c614fff565b615017818484614fda565b505050565b5b8181101561503b57615030600082615004565b60018101905061501d565b5050565b601f8211156150805761505181614f2a565b61505a84614f3f565b81016020851015615069578190505b61507d61507585614f3f565b83018261501c565b50505b505050565b600082821c905092915050565b60006150a360001984600802615085565b1980831691505092915050565b60006150bc8383615092565b9150826002028217905092915050565b6150d68383614ef0565b67ffffffffffffffff8111156150ef576150ee614efb565b5b6150f98254614b55565b61510482828561503f565b6000601f8311600181146151335760008415615121578287013590505b61512b85826150b0565b865550615193565b601f19841661514186614f2a565b60005b8281101561516957848901358255600182019150602085019450602081019050615144565b868310156151865784890135615182601f891682615092565b8355505b6001600288020188555050505b50505050505050565b60006151a7826145ed565b91506151b2836145ed565b92508282019050808211156151ca576151c9614c84565b5b92915050565b60006151db826145ed565b91506151e6836145ed565b92508282039050818111156151fe576151fd614c84565b5b92915050565b600081905092915050565b50565b600061521f600083615204565b915061522a8261520f565b600082019050919050565b600061524082615212565b9150819050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000615280601d836144b1565b915061528b8261524a565b602082019050919050565b600060208201905081810360008301526152af81615273565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006153126032836144b1565b915061531d826152b6565b604082019050919050565b6000602082019050818103600083015261534181615305565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153a46026836144b1565b91506153af82615348565b604082019050919050565b600060208201905081810360008301526153d381615397565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006154106020836144b1565b915061541b826153da565b602082019050919050565b6000602082019050818103600083015261543f81615403565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006154a2602a836144b1565b91506154ad82615446565b604082019050919050565b600060208201905081810360008301526154d181615495565b9050919050565b6000815190506154e7816145f7565b92915050565b60006020828403121561550357615502614558565b5b6000615511848285016154d8565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155766024836144b1565b91506155818261551a565b604082019050919050565b600060208201905081810360008301526155a581615569565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156086022836144b1565b9150615613826155ac565b604082019050919050565b60006020820190508181036000830152615637816155fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061569a6025836144b1565b91506156a58261563e565b604082019050919050565b600060208201905081810360008301526156c98161568d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061572c6023836144b1565b9150615737826156d0565b604082019050919050565b6000602082019050818103600083015261575b8161571f565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615798600b836144b1565b91506157a382615762565b602082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006158046016836144b1565b915061580f826157ce565b602082019050919050565b60006020820190508181036000830152615833816157f7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158bc6049836144b1565b91506158c78261583a565b606082019050919050565b600060208201905081810360008301526158eb816158af565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061594e6035836144b1565b9150615959826158f2565b604082019050919050565b6000602082019050818103600083015261597d81615941565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159ba6013836144b1565b91506159c582615984565b602082019050919050565b600060208201905081810360008301526159e9816159ad565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a4c6036836144b1565b9150615a57826159f0565b604082019050919050565b60006020820190508181036000830152615a7b81615a3f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615ab8601b836144b1565b9150615ac382615a82565b602082019050919050565b60006020820190508181036000830152615ae781615aab565b9050919050565b600081519050615afd81614594565b92915050565b600060208284031215615b1957615b18614558565b5b6000615b2784828501615aee565b91505092915050565b6000819050919050565b6000615b55615b50615b4b84615b30565b6147ca565b6145ed565b9050919050565b615b6581615b3a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ba081614582565b82525050565b6000615bb28383615b97565b60208301905092915050565b6000602082019050919050565b6000615bd682615b6b565b615be08185615b76565b9350615beb83615b87565b8060005b83811015615c1c578151615c038882615ba6565b9750615c0e83615bbe565b925050600181019050615bef565b5085935050505092915050565b600060a082019050615c3e6000830188614844565b615c4b6020830187615b5c565b8181036040830152615c5d8186615bcb565b9050615c6c60608301856148c1565b615c796080830184614844565b9695505050505050565b600060c082019050615c9860008301896148c1565b615ca56020830188614844565b615cb26040830187615b5c565b615cbf6060830186615b5c565b615ccc60808301856148c1565b615cd960a0830184614844565b979650505050505050565b600080600060608486031215615cfd57615cfc614558565b5b6000615d0b868287016154d8565b9350506020615d1c868287016154d8565b9250506040615d2d868287016154d8565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075dfb52368e11a8aa4393c531792dea39ed7178200863011d3b4bacf79d174a664736f6c63430008130033

Deployed Bytecode Sourcemap

23546:15830:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5866:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30152:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8033:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25275:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28382:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30542:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23589:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6986:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24167:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23977:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25003:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24963;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8684:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23692:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24073:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24033:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6828:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9448:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27869:164;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23647:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24265:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30409:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38748:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24814:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36259:1522;;;;;;;;;;;;;:::i;:::-;;24345:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7157:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20331:148;;;;;;;;;;;;;:::i;:::-;;39255:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28750:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23784:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24703;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29107:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19689:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23821:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24849:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28994:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6085:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24777:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24221:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25043:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24925:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10169:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24125:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7497:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25497:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24305:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29874:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29488:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25079:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24621:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23858:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27660:153;;;;;;;;;;;;;:::i;:::-;;28107:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24669:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30298:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7735:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25119:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30755:164;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39133:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23900:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24740:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20634:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24887:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23940:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24568:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37789:902;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5866:100;5920:13;5953:5;5946:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5866:100;:::o;30152:134::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30260:18:::1;30242:15;;:36;;;;;;;;;;;;;;;;;;30152:134:::0;:::o;8033:169::-;8116:4;8133:39;8142:12;:10;:12::i;:::-;8156:7;8165:6;8133:8;:39::i;:::-;8190:4;8183:11;;8033:169;;;;:::o;25275:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;28382:360::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28488:1:::1;28479:5;:10;;28471:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28603:4;28598:3;28590:5;28574:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:27;;;;:::i;:::-;28573:34;;;;:::i;:::-;28550:20;:57;;;;28636:1;28626:6;:11;;28618:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28730:4;28725:3;28716:6;28700:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;28699:35;;;;:::i;:::-;28687:9;:47;;;;28382:360:::0;;:::o;30542:205::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30646:9:::1;30642:98;30665:7;;:14;;30661:1;:18;30642:98;;;30724:4;30696:13;:25;30710:7;;30718:1;30710:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30696:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30681:3;;;;;:::i;:::-;;;;30642:98;;;;30542:205:::0;;;:::o;23589:51::-;;;:::o;6986:108::-;7047:7;7074:12;;7067:19;;6986:108;:::o;24167:47::-;;;;:::o;23977:36::-;;;;:::o;25003:33::-;;;;:::o;24963:::-;;;;:::o;8684:355::-;8824:4;8841:36;8851:6;8859:9;8870:6;8841:9;:36::i;:::-;8888:121;8897:6;8905:12;:10;:12::i;:::-;8919:89;8957:6;8919:89;;;;;;;;;;;;;;;;;:11;:19;8931:6;8919:19;;;;;;;;;;;;;;;:33;8939:12;:10;:12::i;:::-;8919:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8888:8;:121::i;:::-;9027:4;9020:11;;8684:355;;;;;:::o;23692:53::-;23738:6;23692:53;:::o;24073:45::-;;;;:::o;24033:33::-;;;;;;;;;;;;;:::o;6828:93::-;6886:5;6911:2;6904:9;;6828:93;:::o;9448:218::-;9536:4;9553:83;9562:12;:10;:12::i;:::-;9576:7;9585:50;9624:10;9585:11;:25;9597:12;:10;:12::i;:::-;9585:25;;;;;;;;;;;;;;;:34;9611:7;9585:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;9553:8;:83::i;:::-;9654:4;9647:11;;9448:218;;;;:::o;27869:164::-;27926:4;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27959:5:::1;27942:14;;:22;;;;;;;;;;;;;;;;;;27998:5;27975:20;;:28;;;;;;;;;;;;;;;;;;28021:4;28014:11;;27869:164:::0;:::o;23647:38::-;;;:::o;24265:33::-;;;;;;;;;;;;;:::o;30409:125::-;30474:4;30498:19;:28;30518:7;30498:28;;;;;;;;;;;;;;;;;;;;;;;;;30491:35;;30409:125;;;:::o;38748:375::-;38935:7;:5;:7::i;:::-;38912:31;;:10;:31;;;38890:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;39044:20;;39022:19;:42;;;;;;;:::i;:::-;;39098:21;;39075:20;:44;;;;;;;:::i;:::-;;38748:375;;;;:::o;24814:28::-;;;;:::o;36259:1522::-;36297:23;36323:24;36341:4;36323:9;:24::i;:::-;36297:50;;36358:25;36428:12;;36407:18;;36386;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;36358:82;;36451:12;36506:1;36487:15;:20;:46;;;;36532:1;36511:17;:22;36487:46;36484:60;;;36536:7;;;;;36484:60;36598:2;36577:18;;:23;;;;:::i;:::-;36559:15;:41;36556:111;;;36653:2;36632:18;;:23;;;;:::i;:::-;36614:41;;36556:111;36736:23;36821:1;36801:17;36780:18;;36762:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;36736:86;;36833:26;36880:15;36862;:33;;;;:::i;:::-;36833:62;;36916:25;36944:21;36916:49;;36978:36;36995:18;36978:16;:36::i;:::-;37036:18;37081:17;37057:21;:41;;;;:::i;:::-;37036:62;;37119:23;37177:17;37158:18;;37145:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;37119:75;;37205:17;37251;37238:12;;37225:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;37205:63;;37289:23;37346:9;37328:15;37315:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;37289:66;;37397:1;37376:18;:22;;;;37430:1;37409:18;:22;;;;37457:1;37442:12;:16;;;;37500:9;;;;;;;;;;;37492:23;;37523:9;37492:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37479:58;;;;;37579:1;37561:15;:19;:42;;;;;37602:1;37584:15;:19;37561:42;37558:119;;;37619:46;37632:15;37649;37619:12;:46::i;:::-;37558:119;37718:15;;;;;;;;;;;37710:29;;37747:21;37710:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37697:76;;;;;36286:1495;;;;;;;;;;36259:1522;:::o;24345:31::-;;;;;;;;;;;;;:::o;7157:127::-;7231:7;7258:9;:18;7268:7;7258:18;;;;;;;;;;;;;;;;7251:25;;7157:127;;;:::o;20331:148::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20438:1:::1;20401:40;;20422:6;;;;;;;;;;;20401:40;;;;;;;;;;;;20469:1;20452:6;;:19;;;;;;;;;;;;;;;;;;20331:148::o:0;39255:116::-;39310:13;39343:20;39336:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39255:116;:::o;28750:144::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28882:4:::1;28840:31;:39;28872:6;28840:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28750:144:::0;;:::o;23784:30::-;;;;;;;;;;;;;:::o;24703:::-;;;;:::o;29107:369::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29241:13:::1;29223:15;:31;;;;29283:13;29265:15;:31;;;;29319:7;29307:9;:19;;;;29388:9;;29370:15;;29352;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;29337:12;:60;;;;29432:2;29416:12;;:18;;29408:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29107:369:::0;;;:::o;19689:79::-;19727:7;19754:6;;;;;;;;;;;19747:13;;19689:79;:::o;23821:24::-;;;;;;;;;;;;;:::o;24849:31::-;;;;:::o;28994:101::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29080:7:::1;29066:11;;:21;;;;;;;;;;;;;;;;;;28994:101:::0;:::o;6085:104::-;6141:13;6174:7;6167:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6085:104;:::o;24777:24::-;;;;:::o;24221:35::-;;;;:::o;25043:27::-;;;;:::o;24925:25::-;;;;:::o;10169:269::-;10262:4;10279:129;10288:12;:10;:12::i;:::-;10302:7;10311:96;10350:15;10311:96;;;;;;;;;;;;;;;;;:11;:25;10323:12;:10;:12::i;:::-;10311:25;;;;;;;;;;;;;;;:34;10337:7;10311:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;10279:8;:129::i;:::-;10426:4;10419:11;;10169:269;;;;:::o;24125:29::-;;;;:::o;7497:175::-;7583:4;7600:42;7610:12;:10;:12::i;:::-;7624:9;7635:6;7600:9;:42::i;:::-;7660:4;7653:11;;7497:175;;;;:::o;25497:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;24305:33::-;;;;;;;;;;;;;:::o;29874:132::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29990:8:::1;29959:19;:28;29979:7;29959:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29874:132:::0;;:::o;29488:378::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29624:13:::1;29605:16;:32;;;;29667:13;29648:16;:32;;;;29704:7;29691:10;:20;;;;29776:10;;29757:16;;29738;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;29722:13;:64;;;;29822:2;29805:13;;:19;;29797:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29488:378:::0;;;:::o;25079:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24621:39::-;;;;;;;;;;;;;:::o;23858:35::-;;;;:::o;27660:153::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27729:4:::1;27713:13;;:20;;;;;;;;;;;;;;;;;;27758:4;27744:11;;:18;;;;;;;;;;;;;;;;;;27790:15;27773:14;:32;;;;27660:153::o:0;28107:263::-;28188:4;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28224:1:::1;28211:9;:14;;28203:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28339:3;28327:9;28311:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;28290:18;:52;;;;28359:4;28352:11;;28107:263:::0;;;:::o;24669:27::-;;;;:::o;30298:103::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30384:9:::1;30372;;:21;;;;;;;;;;;;;;;;;;30298:103:::0;:::o;7735:151::-;7824:7;7851:11;:18;7863:5;7851:18;;;;;;;;;;;;;;;:27;7870:7;7851:27;;;;;;;;;;;;;;;;7844:34;;7735:151;;;;:::o;25119:34::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30755:164::-;30805:4;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30822:12:::1;30840:7;:5;:7::i;:::-;:12;;30860:21;30840:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30821:65;;;30904:7;30897:14;;;30755:164:::0;:::o;39133:114::-;39187:13;39220:19;39213:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39133:114;:::o;23900:33::-;;;;:::o;24740:30::-;;;;:::o;20634:244::-;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20743:1:::1;20723:22;;:8;:22;;::::0;20715:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20833:8;20804:38;;20825:6;;;;;;;;;;;20804:38;;;;;;;;;;;;20862:8;20853:6;;:17;;;;;;;;;;;;;;;;;;20634:244:::0;:::o;24887:31::-;;;;:::o;23940:24::-;;;;:::o;24568:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;37789:902::-;37873:4;19911:12;:10;:12::i;:::-;19901:22;;:6;;;;;;;;;;;:22;;;19893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37938:19:::1;;37915:20;;:42;;;;:::i;:::-;37897:15;:60;37889:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;38025:4;38014:7;:15;;38006:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38110:15;38087:20;:38;;;;38188:28;38219:4;:14;;;38234:13;38219:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38188:60;;38306:20;38360:5;38352:7;38329:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;38306:59;;38415:1;38400:12;:16;38396:109;;;38432:61;38448:13;38471:6;38480:12;38432:15;:61::i;:::-;38396:109;38588:19;38625:13;38588:51;;38650:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38679:4;38672:11;;;;;37789:902:::0;;;:::o;1267:98::-;1320:7;1347:10;1340:17;;1267:98;:::o;13355:380::-;13508:1;13491:19;;:5;:19;;;13483:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13589:1;13570:21;;:7;:21;;;13562:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13673:6;13643:11;:18;13655:5;13643:18;;;;;;;;;;;;;;;:27;13662:7;13643:27;;;;;;;;;;;;;;;:36;;;;13711:7;13695:32;;13704:5;13695:32;;;13720:6;13695:32;;;;;;:::i;:::-;;;;;;;;13355:380;;;:::o;30927:4180::-;31075:1;31059:18;;:4;:18;;;31051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31152:1;31138:16;;:2;:16;;;31130:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31214:13;:19;31228:4;31214:19;;;;;;;;;;;;;;;;;;;;;;;;;31213:20;:42;;;;;31238:13;:17;31252:2;31238:17;;;;;;;;;;;;;;;;;;;;;;;;;31237:18;31213:42;31205:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31311:1;31301:6;:11;31298:92;;31329:28;31345:4;31351:2;31355:1;31329:15;:28::i;:::-;31372:7;;31298:92;31413:14;;;;;;;;;;;31410:1841;;;31473:7;:5;:7::i;:::-;31465:15;;:4;:15;;;;:49;;;;;31507:7;:5;:7::i;:::-;31501:13;;:2;:13;;;;31465:49;:86;;;;;31549:1;31535:16;;:2;:16;;;;31465:86;:128;;;;;31586:6;31572:21;;:2;:21;;;;31465:128;:158;;;;;31615:8;;;;;;;;;;;31614:9;31465:158;31443:1797;;;31661:13;;;;;;;;;;;31657:148;;31706:19;:25;31726:4;31706:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31735:19;:23;31755:2;31735:23;;;;;;;;;;;;;;;;;;;;;;;;;31706:52;31698:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31657:148;31963:20;;;;;;;;;;;31959:423;;;32017:7;:5;:7::i;:::-;32011:13;;:2;:13;;;;:47;;;;;32042:15;32028:30;;:2;:30;;;;32011:47;:79;;;;;32076:13;32062:28;;:2;:28;;;;32011:79;32007:356;;;32168:12;32126:28;:39;32155:9;32126:39;;;;;;;;;;;;;;;;:54;32118:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32327:12;32285:28;:39;32314:9;32285:39;;;;;;;;;;;;;;;:54;;;;32007:356;31959:423;32451:25;:31;32477:4;32451:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;32487:31;:35;32519:2;32487:35;;;;;;;;;;;;;;;;;;;;;;;;;32486:36;32451:71;32447:778;;;32569:20;;32559:6;:30;;32551:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;32708:9;;32691:13;32701:2;32691:9;:13::i;:::-;32682:6;:22;;;;:::i;:::-;:35;;32674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32447:778;;;32835:25;:29;32861:2;32835:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;32869:31;:37;32901:4;32869:37;;;;;;;;;;;;;;;;;;;;;;;;;32868:38;32835:71;32831:394;;;32953:20;;32943:6;:30;;32935:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32831:394;;;33079:31;:35;33111:2;33079:35;;;;;;;;;;;;;;;;;;;;;;;;;33075:150;;33172:9;;33155:13;33165:2;33155:9;:13::i;:::-;33146:6;:22;;;;:::i;:::-;:35;;33138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33075:150;32831:394;32447:778;31443:1797;31410:1841;33265:28;33296:24;33314:4;33296:9;:24::i;:::-;33265:55;;33341:12;33380:18;;33356:20;:42;;33341:57;;33429:7;:35;;;;;33453:11;;;;;;;;;;;33429:35;:61;;;;;33482:8;;;;;;;;;;;33481:9;33429:61;:110;;;;;33508:25;:31;33534:4;33508:31;;;;;;;;;;;;;;;;;;;;;;;;;33507:32;33429:110;:153;;;;;33557:19;:25;33577:4;33557:25;;;;;;;;;;;;;;;;;;;;;;;;;33556:26;33429:153;:194;;;;;33600:19;:23;33620:2;33600:23;;;;;;;;;;;;;;;;;;;;;;;;;33599:24;33429:194;33411:338;;;33661:4;33650:8;;:15;;;;;;;;;;;;;;;;;;33694:10;:8;:10::i;:::-;33732:5;33721:8;;:16;;;;;;;;;;;;;;;;;;33411:338;33761:12;33777:8;;;;;;;;;;;33776:9;33761:24;;33886:19;:25;33906:4;33886:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33915:19;:23;33935:2;33915:23;;;;;;;;;;;;;;;;;;;;;;;;;33886:52;33883:99;;;33965:5;33955:15;;33883:99;34002:12;34106:7;34103:951;;;34157:25;:29;34183:2;34157:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;34206:1;34190:13;;:17;34157:50;34153:732;;;34257:3;34243:13;;34234:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;34227:33;;34327:13;;34308:16;;34301:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;34279:18;;:61;;;;;;;:::i;:::-;;;;;;;;34395:13;;34382:10;;34375:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;34359:12;;:49;;;;;;;:::i;:::-;;;;;;;;34475:13;;34456:16;;34449:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;34427:18;;:61;;;;;;;:::i;:::-;;;;;;;;34153:732;;;34549:25;:31;34575:4;34549:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;34599:1;34584:12;;:16;34549:51;34546:339;;;34647:3;34634:12;;34625:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;34618:32;;34713:12;;34695:15;;34688:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;34666:18;;:59;;;;;;;:::i;:::-;;;;;;;;34779:12;;34767:9;;34760:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;34744:12;;:47;;;;;;;:::i;:::-;;;;;;;;34857:12;;34839:15;;34832:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;34810:18;;:59;;;;;;;:::i;:::-;;;;;;;;34546:339;34153:732;34923:1;34916:4;:8;34913:93;;;34948:42;34964:4;34978;34985;34948:15;:42::i;:::-;34913:93;35038:4;35028:14;;;;;:::i;:::-;;;34103:951;35066:33;35082:4;35088:2;35092:6;35066:15;:33::i;:::-;31040:4067;;;;30927:4180;;;;:::o;15636:192::-;15722:7;15755:1;15750;:6;;15758:12;15742:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15782:9;15798:1;15794;:5;;;;:::i;:::-;15782:17;;15819:1;15812:8;;;15636:192;;;;;:::o;14733:181::-;14791:7;14811:9;14827:1;14823;:5;;;;:::i;:::-;14811:17;;14852:1;14847;:6;;14839:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;14905:1;14898:8;;;14733:181;;;;:::o;35115:601::-;35243:21;35281:1;35267:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35243:40;;35312:4;35294;35299:1;35294:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35338:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35328:4;35333:1;35328:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35373:62;35390:4;35405:15;35423:11;35373:8;:62::i;:::-;35474:15;:66;;;35555:11;35581:1;35625:4;35652;35672:15;35474:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35170:546;35115:601;:::o;35734:517::-;35882:62;35899:4;35914:15;35932:11;35882:8;:62::i;:::-;35987:15;:31;;;36026:9;36059:4;36079:11;36105:1;36148;23738:6;36217:15;35987:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35734:517;;:::o;10928:573::-;11086:1;11068:20;;:6;:20;;;11060:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11170:1;11149:23;;:9;:23;;;11141:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11225:47;11246:6;11254:9;11265:6;11225:20;:47::i;:::-;11305:71;11327:6;11305:71;;;;;;;;;;;;;;;;;:9;:17;11315:6;11305:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;11285:9;:17;11295:6;11285:17;;;;;;;;;;;;;;;:91;;;;11410:32;11435:6;11410:9;:20;11420:9;11410:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11387:9;:20;11397:9;11387:20;;;;;;;;;;;;;;;:55;;;;11475:9;11458:35;;11467:6;11458:35;;;11486:6;11458:35;;;;;;:::i;:::-;;;;;;;;10928:573;;;:::o;14338:125::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:329::-;2242:6;2291:2;2279:9;2270:7;2266:23;2262:32;2259:119;;;2297:79;;:::i;:::-;2259:119;2417:1;2442:53;2487:7;2478:6;2467:9;2463:22;2442:53;:::i;:::-;2432:63;;2388:117;2183:329;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:117::-;4370:1;4367;4360:12;4384:117;4493:1;4490;4483:12;4507:117;4616:1;4613;4606:12;4647:568;4720:8;4730:6;4780:3;4773:4;4765:6;4761:17;4757:27;4747:122;;4788:79;;:::i;:::-;4747:122;4901:6;4888:20;4878:30;;4931:18;4923:6;4920:30;4917:117;;;4953:79;;:::i;:::-;4917:117;5067:4;5059:6;5055:17;5043:29;;5121:3;5113:4;5105:6;5101:17;5091:8;5087:32;5084:41;5081:128;;;5128:79;;:::i;:::-;5081:128;4647:568;;;;;:::o;5221:116::-;5291:21;5306:5;5291:21;:::i;:::-;5284:5;5281:32;5271:60;;5327:1;5324;5317:12;5271:60;5221:116;:::o;5343:133::-;5386:5;5424:6;5411:20;5402:29;;5440:30;5464:5;5440:30;:::i;:::-;5343:133;;;;:::o;5482:698::-;5574:6;5582;5590;5639:2;5627:9;5618:7;5614:23;5610:32;5607:119;;;5645:79;;:::i;:::-;5607:119;5793:1;5782:9;5778:17;5765:31;5823:18;5815:6;5812:30;5809:117;;;5845:79;;:::i;:::-;5809:117;5958:80;6030:7;6021:6;6010:9;6006:22;5958:80;:::i;:::-;5940:98;;;;5736:312;6087:2;6113:50;6155:7;6146:6;6135:9;6131:22;6113:50;:::i;:::-;6103:60;;6058:115;5482:698;;;;;:::o;6186:60::-;6214:3;6235:5;6228:12;;6186:60;;;:::o;6252:142::-;6302:9;6335:53;6353:34;6362:24;6380:5;6362:24;:::i;:::-;6353:34;:::i;:::-;6335:53;:::i;:::-;6322:66;;6252:142;;;:::o;6400:126::-;6450:9;6483:37;6514:5;6483:37;:::i;:::-;6470:50;;6400:126;;;:::o;6532:153::-;6609:9;6642:37;6673:5;6642:37;:::i;:::-;6629:50;;6532:153;;;:::o;6691:185::-;6805:64;6863:5;6805:64;:::i;:::-;6800:3;6793:77;6691:185;;:::o;6882:276::-;7002:4;7040:2;7029:9;7025:18;7017:26;;7053:98;7148:1;7137:9;7133:17;7124:6;7053:98;:::i;:::-;6882:276;;;;:::o;7164:118::-;7251:24;7269:5;7251:24;:::i;:::-;7246:3;7239:37;7164:118;;:::o;7288:222::-;7381:4;7419:2;7408:9;7404:18;7396:26;;7432:71;7500:1;7489:9;7485:17;7476:6;7432:71;:::i;:::-;7288:222;;;;:::o;7516:619::-;7593:6;7601;7609;7658:2;7646:9;7637:7;7633:23;7629:32;7626:119;;;7664:79;;:::i;:::-;7626:119;7784:1;7809:53;7854:7;7845:6;7834:9;7830:22;7809:53;:::i;:::-;7799:63;;7755:117;7911:2;7937:53;7982:7;7973:6;7962:9;7958:22;7937:53;:::i;:::-;7927:63;;7882:118;8039:2;8065:53;8110:7;8101:6;8090:9;8086:22;8065:53;:::i;:::-;8055:63;;8010:118;7516:619;;;;;:::o;8141:118::-;8228:24;8246:5;8228:24;:::i;:::-;8223:3;8216:37;8141:118;;:::o;8265:222::-;8358:4;8396:2;8385:9;8381:18;8373:26;;8409:71;8477:1;8466:9;8462:17;8453:6;8409:71;:::i;:::-;8265:222;;;;:::o;8493:86::-;8528:7;8568:4;8561:5;8557:16;8546:27;;8493:86;;;:::o;8585:112::-;8668:22;8684:5;8668:22;:::i;:::-;8663:3;8656:35;8585:112;;:::o;8703:214::-;8792:4;8830:2;8819:9;8815:18;8807:26;;8843:67;8907:1;8896:9;8892:17;8883:6;8843:67;:::i;:::-;8703:214;;;;:::o;8937:553::-;8995:8;9005:6;9055:3;9048:4;9040:6;9036:17;9032:27;9022:122;;9063:79;;:::i;:::-;9022:122;9176:6;9163:20;9153:30;;9206:18;9198:6;9195:30;9192:117;;;9228:79;;:::i;:::-;9192:117;9342:4;9334:6;9330:17;9318:29;;9396:3;9388:4;9380:6;9376:17;9366:8;9362:32;9359:41;9356:128;;;9403:79;;:::i;:::-;9356:128;8937:553;;;;;:::o;9496:874::-;9588:6;9596;9604;9612;9661:2;9649:9;9640:7;9636:23;9632:32;9629:119;;;9667:79;;:::i;:::-;9629:119;9815:1;9804:9;9800:17;9787:31;9845:18;9837:6;9834:30;9831:117;;;9867:79;;:::i;:::-;9831:117;9980:65;10037:7;10028:6;10017:9;10013:22;9980:65;:::i;:::-;9962:83;;;;9758:297;10122:2;10111:9;10107:18;10094:32;10153:18;10145:6;10142:30;10139:117;;;10175:79;;:::i;:::-;10139:117;10288:65;10345:7;10336:6;10325:9;10321:22;10288:65;:::i;:::-;10270:83;;;;10065:298;9496:874;;;;;;;:::o;10376:468::-;10441:6;10449;10498:2;10486:9;10477:7;10473:23;10469:32;10466:119;;;10504:79;;:::i;:::-;10466:119;10624:1;10649:53;10694:7;10685:6;10674:9;10670:22;10649:53;:::i;:::-;10639:63;;10595:117;10751:2;10777:50;10819:7;10810:6;10799:9;10795:22;10777:50;:::i;:::-;10767:60;;10722:115;10376:468;;;;;:::o;10850:619::-;10927:6;10935;10943;10992:2;10980:9;10971:7;10967:23;10963:32;10960:119;;;10998:79;;:::i;:::-;10960:119;11118:1;11143:53;11188:7;11179:6;11168:9;11164:22;11143:53;:::i;:::-;11133:63;;11089:117;11245:2;11271:53;11316:7;11307:6;11296:9;11292:22;11271:53;:::i;:::-;11261:63;;11216:118;11373:2;11399:53;11444:7;11435:6;11424:9;11420:22;11399:53;:::i;:::-;11389:63;;11344:118;10850:619;;;;;:::o;11475:323::-;11531:6;11580:2;11568:9;11559:7;11555:23;11551:32;11548:119;;;11586:79;;:::i;:::-;11548:119;11706:1;11731:50;11773:7;11764:6;11753:9;11749:22;11731:50;:::i;:::-;11721:60;;11677:114;11475:323;;;;:::o;11804:329::-;11863:6;11912:2;11900:9;11891:7;11887:23;11883:32;11880:119;;;11918:79;;:::i;:::-;11880:119;12038:1;12063:53;12108:7;12099:6;12088:9;12084:22;12063:53;:::i;:::-;12053:63;;12009:117;11804:329;;;;:::o;12139:474::-;12207:6;12215;12264:2;12252:9;12243:7;12239:23;12235:32;12232:119;;;12270:79;;:::i;:::-;12232:119;12390:1;12415:53;12460:7;12451:6;12440:9;12436:22;12415:53;:::i;:::-;12405:63;;12361:117;12517:2;12543:53;12588:7;12579:6;12568:9;12564:22;12543:53;:::i;:::-;12533:63;;12488:118;12139:474;;;;;:::o;12619:180::-;12667:77;12664:1;12657:88;12764:4;12761:1;12754:15;12788:4;12785:1;12778:15;12805:320;12849:6;12886:1;12880:4;12876:12;12866:22;;12933:1;12927:4;12923:12;12954:18;12944:81;;13010:4;13002:6;12998:17;12988:27;;12944:81;13072:2;13064:6;13061:14;13041:18;13038:38;13035:84;;13091:18;;:::i;:::-;13035:84;12856:269;12805:320;;;:::o;13131:182::-;13271:34;13267:1;13259:6;13255:14;13248:58;13131:182;:::o;13319:366::-;13461:3;13482:67;13546:2;13541:3;13482:67;:::i;:::-;13475:74;;13558:93;13647:3;13558:93;:::i;:::-;13676:2;13671:3;13667:12;13660:19;;13319:366;;;:::o;13691:419::-;13857:4;13895:2;13884:9;13880:18;13872:26;;13944:9;13938:4;13934:20;13930:1;13919:9;13915:17;13908:47;13972:131;14098:4;13972:131;:::i;:::-;13964:139;;13691:419;;;:::o;14116:232::-;14256:34;14252:1;14244:6;14240:14;14233:58;14325:15;14320:2;14312:6;14308:15;14301:40;14116:232;:::o;14354:366::-;14496:3;14517:67;14581:2;14576:3;14517:67;:::i;:::-;14510:74;;14593:93;14682:3;14593:93;:::i;:::-;14711:2;14706:3;14702:12;14695:19;;14354:366;;;:::o;14726:419::-;14892:4;14930:2;14919:9;14915:18;14907:26;;14979:9;14973:4;14969:20;14965:1;14954:9;14950:17;14943:47;15007:131;15133:4;15007:131;:::i;:::-;14999:139;;14726:419;;;:::o;15151:180::-;15199:77;15196:1;15189:88;15296:4;15293:1;15286:15;15320:4;15317:1;15310:15;15337:410;15377:7;15400:20;15418:1;15400:20;:::i;:::-;15395:25;;15434:20;15452:1;15434:20;:::i;:::-;15429:25;;15489:1;15486;15482:9;15511:30;15529:11;15511:30;:::i;:::-;15500:41;;15690:1;15681:7;15677:15;15674:1;15671:22;15651:1;15644:9;15624:83;15601:139;;15720:18;;:::i;:::-;15601:139;15385:362;15337:410;;;;:::o;15753:180::-;15801:77;15798:1;15791:88;15898:4;15895:1;15888:15;15922:4;15919:1;15912:15;15939:185;15979:1;15996:20;16014:1;15996:20;:::i;:::-;15991:25;;16030:20;16048:1;16030:20;:::i;:::-;16025:25;;16069:1;16059:35;;16074:18;;:::i;:::-;16059:35;16116:1;16113;16109:9;16104:14;;15939:185;;;;:::o;16130:221::-;16270:34;16266:1;16258:6;16254:14;16247:58;16339:4;16334:2;16326:6;16322:15;16315:29;16130:221;:::o;16357:366::-;16499:3;16520:67;16584:2;16579:3;16520:67;:::i;:::-;16513:74;;16596:93;16685:3;16596:93;:::i;:::-;16714:2;16709:3;16705:12;16698:19;;16357:366;;;:::o;16729:419::-;16895:4;16933:2;16922:9;16918:18;16910:26;;16982:9;16976:4;16972:20;16968:1;16957:9;16953:17;16946:47;17010:131;17136:4;17010:131;:::i;:::-;17002:139;;16729:419;;;:::o;17154:180::-;17202:77;17199:1;17192:88;17299:4;17296:1;17289:15;17323:4;17320:1;17313:15;17340:233;17379:3;17402:24;17420:5;17402:24;:::i;:::-;17393:33;;17448:66;17441:5;17438:77;17435:103;;17518:18;;:::i;:::-;17435:103;17565:1;17558:5;17554:13;17547:20;;17340:233;;;:::o;17579:225::-;17719:34;17715:1;17707:6;17703:14;17696:58;17788:8;17783:2;17775:6;17771:15;17764:33;17579:225;:::o;17810:366::-;17952:3;17973:67;18037:2;18032:3;17973:67;:::i;:::-;17966:74;;18049:93;18138:3;18049:93;:::i;:::-;18167:2;18162:3;18158:12;18151:19;;17810:366;;;:::o;18182:419::-;18348:4;18386:2;18375:9;18371:18;18363:26;;18435:9;18429:4;18425:20;18421:1;18410:9;18406:17;18399:47;18463:131;18589:4;18463:131;:::i;:::-;18455:139;;18182:419;;;:::o;18607:97::-;18666:6;18694:3;18684:13;;18607:97;;;;:::o;18710:180::-;18758:77;18755:1;18748:88;18855:4;18852:1;18845:15;18879:4;18876:1;18869:15;18896:141;18945:4;18968:3;18960:11;;18991:3;18988:1;18981:14;19025:4;19022:1;19012:18;19004:26;;18896:141;;;:::o;19043:93::-;19080:6;19127:2;19122;19115:5;19111:14;19107:23;19097:33;;19043:93;;;:::o;19142:107::-;19186:8;19236:5;19230:4;19226:16;19205:37;;19142:107;;;;:::o;19255:393::-;19324:6;19374:1;19362:10;19358:18;19397:97;19427:66;19416:9;19397:97;:::i;:::-;19515:39;19545:8;19534:9;19515:39;:::i;:::-;19503:51;;19587:4;19583:9;19576:5;19572:21;19563:30;;19636:4;19626:8;19622:19;19615:5;19612:30;19602:40;;19331:317;;19255:393;;;;;:::o;19654:142::-;19704:9;19737:53;19755:34;19764:24;19782:5;19764:24;:::i;:::-;19755:34;:::i;:::-;19737:53;:::i;:::-;19724:66;;19654:142;;;:::o;19802:75::-;19845:3;19866:5;19859:12;;19802:75;;;:::o;19883:269::-;19993:39;20024:7;19993:39;:::i;:::-;20054:91;20103:41;20127:16;20103:41;:::i;:::-;20095:6;20088:4;20082:11;20054:91;:::i;:::-;20048:4;20041:105;19959:193;19883:269;;;:::o;20158:73::-;20203:3;20158:73;:::o;20237:189::-;20314:32;;:::i;:::-;20355:65;20413:6;20405;20399:4;20355:65;:::i;:::-;20290:136;20237:189;;:::o;20432:186::-;20492:120;20509:3;20502:5;20499:14;20492:120;;;20563:39;20600:1;20593:5;20563:39;:::i;:::-;20536:1;20529:5;20525:13;20516:22;;20492:120;;;20432:186;;:::o;20624:543::-;20725:2;20720:3;20717:11;20714:446;;;20759:38;20791:5;20759:38;:::i;:::-;20843:29;20861:10;20843:29;:::i;:::-;20833:8;20829:44;21026:2;21014:10;21011:18;21008:49;;;21047:8;21032:23;;21008:49;21070:80;21126:22;21144:3;21126:22;:::i;:::-;21116:8;21112:37;21099:11;21070:80;:::i;:::-;20729:431;;20714:446;20624:543;;;:::o;21173:117::-;21227:8;21277:5;21271:4;21267:16;21246:37;;21173:117;;;;:::o;21296:169::-;21340:6;21373:51;21421:1;21417:6;21409:5;21406:1;21402:13;21373:51;:::i;:::-;21369:56;21454:4;21448;21444:15;21434:25;;21347:118;21296:169;;;;:::o;21470:295::-;21546:4;21692:29;21717:3;21711:4;21692:29;:::i;:::-;21684:37;;21754:3;21751:1;21747:11;21741:4;21738:21;21730:29;;21470:295;;;;:::o;21770:1403::-;21894:44;21934:3;21929;21894:44;:::i;:::-;22003:18;21995:6;21992:30;21989:56;;;22025:18;;:::i;:::-;21989:56;22069:38;22101:4;22095:11;22069:38;:::i;:::-;22154:67;22214:6;22206;22200:4;22154:67;:::i;:::-;22248:1;22277:2;22269:6;22266:14;22294:1;22289:632;;;;22965:1;22982:6;22979:84;;;23038:9;23033:3;23029:19;23016:33;23007:42;;22979:84;23089:67;23149:6;23142:5;23089:67;:::i;:::-;23083:4;23076:81;22938:229;22259:908;;22289:632;22341:4;22337:9;22329:6;22325:22;22375:37;22407:4;22375:37;:::i;:::-;22434:1;22448:215;22462:7;22459:1;22456:14;22448:215;;;22548:9;22543:3;22539:19;22526:33;22518:6;22511:49;22599:1;22591:6;22587:14;22577:24;;22646:2;22635:9;22631:18;22618:31;;22485:4;22482:1;22478:12;22473:17;;22448:215;;;22691:6;22682:7;22679:19;22676:186;;;22756:9;22751:3;22747:19;22734:33;22799:48;22841:4;22833:6;22829:17;22818:9;22799:48;:::i;:::-;22791:6;22784:64;22699:163;22676:186;22908:1;22904;22896:6;22892:14;22888:22;22882:4;22875:36;22296:625;;;22259:908;;21869:1304;;;21770:1403;;;:::o;23179:191::-;23219:3;23238:20;23256:1;23238:20;:::i;:::-;23233:25;;23272:20;23290:1;23272:20;:::i;:::-;23267:25;;23315:1;23312;23308:9;23301:16;;23336:3;23333:1;23330:10;23327:36;;;23343:18;;:::i;:::-;23327:36;23179:191;;;;:::o;23376:194::-;23416:4;23436:20;23454:1;23436:20;:::i;:::-;23431:25;;23470:20;23488:1;23470:20;:::i;:::-;23465:25;;23514:1;23511;23507:9;23499:17;;23538:1;23532:4;23529:11;23526:37;;;23543:18;;:::i;:::-;23526:37;23376:194;;;;:::o;23576:147::-;23677:11;23714:3;23699:18;;23576:147;;;;:::o;23729:114::-;;:::o;23849:398::-;24008:3;24029:83;24110:1;24105:3;24029:83;:::i;:::-;24022:90;;24121:93;24210:3;24121:93;:::i;:::-;24239:1;24234:3;24230:11;24223:18;;23849:398;;;:::o;24253:379::-;24437:3;24459:147;24602:3;24459:147;:::i;:::-;24452:154;;24623:3;24616:10;;24253:379;;;:::o;24638:179::-;24778:31;24774:1;24766:6;24762:14;24755:55;24638:179;:::o;24823:366::-;24965:3;24986:67;25050:2;25045:3;24986:67;:::i;:::-;24979:74;;25062:93;25151:3;25062:93;:::i;:::-;25180:2;25175:3;25171:12;25164:19;;24823:366;;;:::o;25195:419::-;25361:4;25399:2;25388:9;25384:18;25376:26;;25448:9;25442:4;25438:20;25434:1;25423:9;25419:17;25412:47;25476:131;25602:4;25476:131;:::i;:::-;25468:139;;25195:419;;;:::o;25620:237::-;25760:34;25756:1;25748:6;25744:14;25737:58;25829:20;25824:2;25816:6;25812:15;25805:45;25620:237;:::o;25863:366::-;26005:3;26026:67;26090:2;26085:3;26026:67;:::i;:::-;26019:74;;26102:93;26191:3;26102:93;:::i;:::-;26220:2;26215:3;26211:12;26204:19;;25863:366;;;:::o;26235:419::-;26401:4;26439:2;26428:9;26424:18;26416:26;;26488:9;26482:4;26478:20;26474:1;26463:9;26459:17;26452:47;26516:131;26642:4;26516:131;:::i;:::-;26508:139;;26235:419;;;:::o;26660:225::-;26800:34;26796:1;26788:6;26784:14;26777:58;26869:8;26864:2;26856:6;26852:15;26845:33;26660:225;:::o;26891:366::-;27033:3;27054:67;27118:2;27113:3;27054:67;:::i;:::-;27047:74;;27130:93;27219:3;27130:93;:::i;:::-;27248:2;27243:3;27239:12;27232:19;;26891:366;;;:::o;27263:419::-;27429:4;27467:2;27456:9;27452:18;27444:26;;27516:9;27510:4;27506:20;27502:1;27491:9;27487:17;27480:47;27544:131;27670:4;27544:131;:::i;:::-;27536:139;;27263:419;;;:::o;27688:182::-;27828:34;27824:1;27816:6;27812:14;27805:58;27688:182;:::o;27876:366::-;28018:3;28039:67;28103:2;28098:3;28039:67;:::i;:::-;28032:74;;28115:93;28204:3;28115:93;:::i;:::-;28233:2;28228:3;28224:12;28217:19;;27876:366;;;:::o;28248:419::-;28414:4;28452:2;28441:9;28437:18;28429:26;;28501:9;28495:4;28491:20;28487:1;28476:9;28472:17;28465:47;28529:131;28655:4;28529:131;:::i;:::-;28521:139;;28248:419;;;:::o;28673:229::-;28813:34;28809:1;28801:6;28797:14;28790:58;28882:12;28877:2;28869:6;28865:15;28858:37;28673:229;:::o;28908:366::-;29050:3;29071:67;29135:2;29130:3;29071:67;:::i;:::-;29064:74;;29147:93;29236:3;29147:93;:::i;:::-;29265:2;29260:3;29256:12;29249:19;;28908:366;;;:::o;29280:419::-;29446:4;29484:2;29473:9;29469:18;29461:26;;29533:9;29527:4;29523:20;29519:1;29508:9;29504:17;29497:47;29561:131;29687:4;29561:131;:::i;:::-;29553:139;;29280:419;;;:::o;29705:143::-;29762:5;29793:6;29787:13;29778:22;;29809:33;29836:5;29809:33;:::i;:::-;29705:143;;;;:::o;29854:351::-;29924:6;29973:2;29961:9;29952:7;29948:23;29944:32;29941:119;;;29979:79;;:::i;:::-;29941:119;30099:1;30124:64;30180:7;30171:6;30160:9;30156:22;30124:64;:::i;:::-;30114:74;;30070:128;29854:351;;;;:::o;30211:223::-;30351:34;30347:1;30339:6;30335:14;30328:58;30420:6;30415:2;30407:6;30403:15;30396:31;30211:223;:::o;30440:366::-;30582:3;30603:67;30667:2;30662:3;30603:67;:::i;:::-;30596:74;;30679:93;30768:3;30679:93;:::i;:::-;30797:2;30792:3;30788:12;30781:19;;30440:366;;;:::o;30812:419::-;30978:4;31016:2;31005:9;31001:18;30993:26;;31065:9;31059:4;31055:20;31051:1;31040:9;31036:17;31029:47;31093:131;31219:4;31093:131;:::i;:::-;31085:139;;30812:419;;;:::o;31237:221::-;31377:34;31373:1;31365:6;31361:14;31354:58;31446:4;31441:2;31433:6;31429:15;31422:29;31237:221;:::o;31464:366::-;31606:3;31627:67;31691:2;31686:3;31627:67;:::i;:::-;31620:74;;31703:93;31792:3;31703:93;:::i;:::-;31821:2;31816:3;31812:12;31805:19;;31464:366;;;:::o;31836:419::-;32002:4;32040:2;32029:9;32025:18;32017:26;;32089:9;32083:4;32079:20;32075:1;32064:9;32060:17;32053:47;32117:131;32243:4;32117:131;:::i;:::-;32109:139;;31836:419;;;:::o;32261:224::-;32401:34;32397:1;32389:6;32385:14;32378:58;32470:7;32465:2;32457:6;32453:15;32446:32;32261:224;:::o;32491:366::-;32633:3;32654:67;32718:2;32713:3;32654:67;:::i;:::-;32647:74;;32730:93;32819:3;32730:93;:::i;:::-;32848:2;32843:3;32839:12;32832:19;;32491:366;;;:::o;32863:419::-;33029:4;33067:2;33056:9;33052:18;33044:26;;33116:9;33110:4;33106:20;33102:1;33091:9;33087:17;33080:47;33144:131;33270:4;33144:131;:::i;:::-;33136:139;;32863:419;;;:::o;33288:222::-;33428:34;33424:1;33416:6;33412:14;33405:58;33497:5;33492:2;33484:6;33480:15;33473:30;33288:222;:::o;33516:366::-;33658:3;33679:67;33743:2;33738:3;33679:67;:::i;:::-;33672:74;;33755:93;33844:3;33755:93;:::i;:::-;33873:2;33868:3;33864:12;33857:19;;33516:366;;;:::o;33888:419::-;34054:4;34092:2;34081:9;34077:18;34069:26;;34141:9;34135:4;34131:20;34127:1;34116:9;34112:17;34105:47;34169:131;34295:4;34169:131;:::i;:::-;34161:139;;33888:419;;;:::o;34313:161::-;34453:13;34449:1;34441:6;34437:14;34430:37;34313:161;:::o;34480:366::-;34622:3;34643:67;34707:2;34702:3;34643:67;:::i;:::-;34636:74;;34719:93;34808:3;34719:93;:::i;:::-;34837:2;34832:3;34828:12;34821:19;;34480:366;;;:::o;34852:419::-;35018:4;35056:2;35045:9;35041:18;35033:26;;35105:9;35099:4;35095:20;35091:1;35080:9;35076:17;35069:47;35133:131;35259:4;35133:131;:::i;:::-;35125:139;;34852:419;;;:::o;35277:172::-;35417:24;35413:1;35405:6;35401:14;35394:48;35277:172;:::o;35455:366::-;35597:3;35618:67;35682:2;35677:3;35618:67;:::i;:::-;35611:74;;35694:93;35783:3;35694:93;:::i;:::-;35812:2;35807:3;35803:12;35796:19;;35455:366;;;:::o;35827:419::-;35993:4;36031:2;36020:9;36016:18;36008:26;;36080:9;36074:4;36070:20;36066:1;36055:9;36051:17;36044:47;36108:131;36234:4;36108:131;:::i;:::-;36100:139;;35827:419;;;:::o;36252:297::-;36392:34;36388:1;36380:6;36376:14;36369:58;36461:34;36456:2;36448:6;36444:15;36437:59;36530:11;36525:2;36517:6;36513:15;36506:36;36252:297;:::o;36555:366::-;36697:3;36718:67;36782:2;36777:3;36718:67;:::i;:::-;36711:74;;36794:93;36883:3;36794:93;:::i;:::-;36912:2;36907:3;36903:12;36896:19;;36555:366;;;:::o;36927:419::-;37093:4;37131:2;37120:9;37116:18;37108:26;;37180:9;37174:4;37170:20;37166:1;37155:9;37151:17;37144:47;37208:131;37334:4;37208:131;:::i;:::-;37200:139;;36927:419;;;:::o;37352:240::-;37492:34;37488:1;37480:6;37476:14;37469:58;37561:23;37556:2;37548:6;37544:15;37537:48;37352:240;:::o;37598:366::-;37740:3;37761:67;37825:2;37820:3;37761:67;:::i;:::-;37754:74;;37837:93;37926:3;37837:93;:::i;:::-;37955:2;37950:3;37946:12;37939:19;;37598:366;;;:::o;37970:419::-;38136:4;38174:2;38163:9;38159:18;38151:26;;38223:9;38217:4;38213:20;38209:1;38198:9;38194:17;38187:47;38251:131;38377:4;38251:131;:::i;:::-;38243:139;;37970:419;;;:::o;38395:169::-;38535:21;38531:1;38523:6;38519:14;38512:45;38395:169;:::o;38570:366::-;38712:3;38733:67;38797:2;38792:3;38733:67;:::i;:::-;38726:74;;38809:93;38898:3;38809:93;:::i;:::-;38927:2;38922:3;38918:12;38911:19;;38570:366;;;:::o;38942:419::-;39108:4;39146:2;39135:9;39131:18;39123:26;;39195:9;39189:4;39185:20;39181:1;39170:9;39166:17;39159:47;39223:131;39349:4;39223:131;:::i;:::-;39215:139;;38942:419;;;:::o;39367:241::-;39507:34;39503:1;39495:6;39491:14;39484:58;39576:24;39571:2;39563:6;39559:15;39552:49;39367:241;:::o;39614:366::-;39756:3;39777:67;39841:2;39836:3;39777:67;:::i;:::-;39770:74;;39853:93;39942:3;39853:93;:::i;:::-;39971:2;39966:3;39962:12;39955:19;;39614:366;;;:::o;39986:419::-;40152:4;40190:2;40179:9;40175:18;40167:26;;40239:9;40233:4;40229:20;40225:1;40214:9;40210:17;40203:47;40267:131;40393:4;40267:131;:::i;:::-;40259:139;;39986:419;;;:::o;40411:177::-;40551:29;40547:1;40539:6;40535:14;40528:53;40411:177;:::o;40594:366::-;40736:3;40757:67;40821:2;40816:3;40757:67;:::i;:::-;40750:74;;40833:93;40922:3;40833:93;:::i;:::-;40951:2;40946:3;40942:12;40935:19;;40594:366;;;:::o;40966:419::-;41132:4;41170:2;41159:9;41155:18;41147:26;;41219:9;41213:4;41209:20;41205:1;41194:9;41190:17;41183:47;41247:131;41373:4;41247:131;:::i;:::-;41239:139;;40966:419;;;:::o;41391:143::-;41448:5;41479:6;41473:13;41464:22;;41495:33;41522:5;41495:33;:::i;:::-;41391:143;;;;:::o;41540:351::-;41610:6;41659:2;41647:9;41638:7;41634:23;41630:32;41627:119;;;41665:79;;:::i;:::-;41627:119;41785:1;41810:64;41866:7;41857:6;41846:9;41842:22;41810:64;:::i;:::-;41800:74;;41756:128;41540:351;;;;:::o;41897:85::-;41942:7;41971:5;41960:16;;41897:85;;;:::o;41988:158::-;42046:9;42079:61;42097:42;42106:32;42132:5;42106:32;:::i;:::-;42097:42;:::i;:::-;42079:61;:::i;:::-;42066:74;;41988:158;;;:::o;42152:147::-;42247:45;42286:5;42247:45;:::i;:::-;42242:3;42235:58;42152:147;;:::o;42305:114::-;42372:6;42406:5;42400:12;42390:22;;42305:114;;;:::o;42425:184::-;42524:11;42558:6;42553:3;42546:19;42598:4;42593:3;42589:14;42574:29;;42425:184;;;;:::o;42615:132::-;42682:4;42705:3;42697:11;;42735:4;42730:3;42726:14;42718:22;;42615:132;;;:::o;42753:108::-;42830:24;42848:5;42830:24;:::i;:::-;42825:3;42818:37;42753:108;;:::o;42867:179::-;42936:10;42957:46;42999:3;42991:6;42957:46;:::i;:::-;43035:4;43030:3;43026:14;43012:28;;42867:179;;;;:::o;43052:113::-;43122:4;43154;43149:3;43145:14;43137:22;;43052:113;;;:::o;43201:732::-;43320:3;43349:54;43397:5;43349:54;:::i;:::-;43419:86;43498:6;43493:3;43419:86;:::i;:::-;43412:93;;43529:56;43579:5;43529:56;:::i;:::-;43608:7;43639:1;43624:284;43649:6;43646:1;43643:13;43624:284;;;43725:6;43719:13;43752:63;43811:3;43796:13;43752:63;:::i;:::-;43745:70;;43838:60;43891:6;43838:60;:::i;:::-;43828:70;;43684:224;43671:1;43668;43664:9;43659:14;;43624:284;;;43628:14;43924:3;43917:10;;43325:608;;;43201:732;;;;:::o;43939:831::-;44202:4;44240:3;44229:9;44225:19;44217:27;;44254:71;44322:1;44311:9;44307:17;44298:6;44254:71;:::i;:::-;44335:80;44411:2;44400:9;44396:18;44387:6;44335:80;:::i;:::-;44462:9;44456:4;44452:20;44447:2;44436:9;44432:18;44425:48;44490:108;44593:4;44584:6;44490:108;:::i;:::-;44482:116;;44608:72;44676:2;44665:9;44661:18;44652:6;44608:72;:::i;:::-;44690:73;44758:3;44747:9;44743:19;44734:6;44690:73;:::i;:::-;43939:831;;;;;;;;:::o;44776:807::-;45025:4;45063:3;45052:9;45048:19;45040:27;;45077:71;45145:1;45134:9;45130:17;45121:6;45077:71;:::i;:::-;45158:72;45226:2;45215:9;45211:18;45202:6;45158:72;:::i;:::-;45240:80;45316:2;45305:9;45301:18;45292:6;45240:80;:::i;:::-;45330;45406:2;45395:9;45391:18;45382:6;45330:80;:::i;:::-;45420:73;45488:3;45477:9;45473:19;45464:6;45420:73;:::i;:::-;45503;45571:3;45560:9;45556:19;45547:6;45503:73;:::i;:::-;44776:807;;;;;;;;;:::o;45589:663::-;45677:6;45685;45693;45742:2;45730:9;45721:7;45717:23;45713:32;45710:119;;;45748:79;;:::i;:::-;45710:119;45868:1;45893:64;45949:7;45940:6;45929:9;45925:22;45893:64;:::i;:::-;45883:74;;45839:128;46006:2;46032:64;46088:7;46079:6;46068:9;46064:22;46032:64;:::i;:::-;46022:74;;45977:129;46145:2;46171:64;46227:7;46218:6;46207:9;46203:22;46171:64;:::i;:::-;46161:74;;46116:129;45589:663;;;;;:::o

Swarm Source

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