ETH Price: $3,072.07 (-1.37%)
Gas: 3 Gwei

Token

MorpheusInu (MORPHI)
 

Overview

Max Total Supply

1,000,000,000 MORPHI

Holders

248

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,197,897.491470738 MORPHI

Value
$0.00
0x831c14c7f363eb3d9ac9a6df0f0ad09403427687
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:
MorpheusInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-20
*/

/*

 Buy tax:
     Tax is the same no matter the time:
         9% to the house wallet
 Sell tax:
     If selling within 3 days:
         9% sent to the house wallet
         9% sent to the burn wallet
     If selling within 3-6 days:
         9% sent to the house wallet
         6% sent to the burn wallet
     If selling within 6-9 days:
         9% sent to the house wallet
         3% sent the burn wallet
     If selling after 9 days:
         9% sent to the house wallet



I acquired and modified code written by Author: @HizzleDev 


*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.9;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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



contract MorpheusInu is Context, IERC20, Ownable {
    struct TimedTransactions {
        uint[] txBlockTimes;
        mapping (uint => uint256) timedTxAmount;
        uint256 totalBalance;
    }
    
    mapping(address => bool) _blacklist;
    
    event BlacklistUpdated(address indexed user, bool value);

    // Track the transaction history of the user
    mapping (address => TimedTransactions) private _timedTransactionsMap;

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _onlyDiamondHandTxs;

    uint256 constant DEFAULT_HOUSE_FEE = 9;
    uint256 private _currentHouseFee = 9;

    uint256 constant DEFAULT_PAPER_HAND_FEE = 9;
    uint256 private _currentPaperHandFee = 9;
    uint256 private _paperHandTime = 3 days;

    uint256 constant DEFAULT_GATE1_FEE = 6;
    uint256 private _currentGate1Fee = 6;
    uint256 private _gate1Time = 3 days;

    uint256 constant DEFAULT_GATE2_FEE = 3;
    uint256 private _currentGate2Fee = 3;
    uint256 private _gate2Time = 3 days;

    string private _name = "MorpheusInu";
    string private _symbol = "MORPHI";
    uint8 private _decimals = 9;
	
	uint256 public allowTradeAt;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    // This unix time is used to aggregate all transaction block times. It is over 21 days and therefore will
    // trigger the lowest tax rate possible
    uint256 constant OVER_21_DAYS_BLOCK_TIME = 1577836800;

    // Prevent reentrancy by only allowing one swap at a time
    bool swapInProgress;

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

    bool private _swapEnabled = true;
    bool private _burnEnabled = true;

    uint256 private _totalTokens = 1000 * 10**6 * 10**9;
    uint256 private _minTokensBeforeSwap = 1000 * 10**3 * 10**9;

    address payable private _houseContract = payable(0x652E93f3dB80832416661e98b65ccFBD57DB6510);
    address private _deadAddress = 0x000000000000000000000000000000000000dEaD;

    constructor() {
        // UniSwap V2 address
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        // Add initial balances
        _timedTransactionsMap[owner()].totalBalance = _totalTokens;
        _timedTransactionsMap[owner()].txBlockTimes.push(OVER_21_DAYS_BLOCK_TIME);
        _timedTransactionsMap[owner()].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = _totalTokens;

        // Track balance in the dead wallet
        _timedTransactionsMap[_deadAddress].totalBalance = 0;
        _timedTransactionsMap[_deadAddress].txBlockTimes.push(OVER_21_DAYS_BLOCK_TIME);
        _timedTransactionsMap[_deadAddress].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = 0;

        // Exclude contract and owner from fees to prevent contract functions from having a tax
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[_houseContract] = true;

        emit Transfer(address(0), _msgSender(), _totalTokens);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return _timedTransactionsMap[account].totalBalance;
    }

    function balanceLessThan7Days(address account) external view returns (uint256) {
        uint256 totalTokens = 0;

        for (uint i = 0; i < _timedTransactionsMap[account].txBlockTimes.length; i++) {
            uint txTime = _timedTransactionsMap[account].txBlockTimes[i];
            uint256 tokensAtTime = _timedTransactionsMap[account].timedTxAmount[txTime];

            // Only add up balance in the last 7 days
            if (txTime > block.timestamp - _paperHandTime) {
                totalTokens = totalTokens + tokensAtTime;
            }
        }

        return totalTokens;
    }
    
     function blacklistUpdate(address user, bool value) public virtual onlyOwner {
        // require(_owner == _msgSender(), "Only owner is allowed to modify blacklist.");
        _blacklist[user] = value;
        emit BlacklistUpdated(user, value);
    }
    
    function isBlackListed(address user) public view returns (bool) {
        return _blacklist[user];
    }

    function balanceBetween7And14Days(address account) external view returns (uint256) {
        uint256 totalTokens = 0;

        for (uint i = 0; i < _timedTransactionsMap[account].txBlockTimes.length; i++) {
            uint txTime = _timedTransactionsMap[account].txBlockTimes[i];
            uint256 tokensAtTime = _timedTransactionsMap[account].timedTxAmount[txTime];

            // Only add up balance in the last 7-14 days
            if (txTime < block.timestamp - _paperHandTime && txTime > block.timestamp - _gate1Time) {
                totalTokens = totalTokens + tokensAtTime;
            }
        }

        return totalTokens;
    }

    function balanceBetween14And21Days(address account) external view returns (uint256) {
        uint256 totalTokens = 0;

        for (uint i = 0; i < _timedTransactionsMap[account].txBlockTimes.length; i++) {
            uint txTime = _timedTransactionsMap[account].txBlockTimes[i];
            uint256 tokensAtTime = _timedTransactionsMap[account].timedTxAmount[txTime];

            // Only add up balance in the last 14-21 days
            if (txTime < block.timestamp - _gate1Time && txTime > block.timestamp - _gate2Time) {
                totalTokens = totalTokens + tokensAtTime;
            }
        }

        return totalTokens;
    }

    function balanceOver21Days(address account) public view returns (uint256) {
        uint256 totalTokens = 0;

        for (uint i = 0; i < _timedTransactionsMap[account].txBlockTimes.length; i++) {
            uint txTime = _timedTransactionsMap[account].txBlockTimes[i];
            uint256 tokensAtTime = _timedTransactionsMap[account].timedTxAmount[txTime];

            // Only add up balance over the last 21 days
            if (txTime < block.timestamp - _gate2Time) {
                totalTokens = totalTokens + tokensAtTime;
            }
        }

        return totalTokens;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
    require (!isBlackListed(_msgSender()), "blacklisted sorry");
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
	
	function enableFairLaunch() external onlyOwner() {
    require(msg.sender != address(0), "ERC20: approve from the zero address");
    allowTradeAt = block.timestamp;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
		if ((block.timestamp < allowTradeAt + 30 minutes && amount >= 4 * 10**6 * 10**9) && (from != owner()) ) {

        revert("You cannot transfer more than 1% now");  }

        // Selective competitions are based on "diamond hand only" and transfers will only be allowed
        // when the tokens are in the "diamond hand" group
        bool isOnlyDiamondHandTx = _onlyDiamondHandTxs[from] || _onlyDiamondHandTxs[to];
        if (isOnlyDiamondHandTx) {
            require(balanceOver21Days(from) >= amount, "Insufficient diamond hand token balance");
        }

        // Reduce balance of sending including calculating and removing all taxes
        uint256 transferAmount = _reduceSenderBalance(from, to, amount);

        // Increase balance of the recipient address
        _increaseRecipientBalance(to, transferAmount, isOnlyDiamondHandTx);

        emit Transfer(from, to, transferAmount);
    }

    function _reduceSenderBalance(address sender, address recipient, uint256 initialTransferAmount) private returns (uint256) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(initialTransferAmount > 0, "Transfer amount must be greater than zero");

        // Keep track of the tokens that haven't had a tax calculated against them
        uint256 remainingTokens = initialTransferAmount;

        // Keep track of the amount of tokens that are to be burned
        uint256 taxedBurnTokens = 0;

        // Keep track of the index for which tokens still exist in the bucket
        uint lastIndexToDelete = 0;

        // Loop over the blockTimes
        for (uint i = 0; i < _timedTransactionsMap[sender].txBlockTimes.length; i++) {
            uint txTime = _timedTransactionsMap[sender].txBlockTimes[i];
            uint256 tokensAtTime = _timedTransactionsMap[sender].timedTxAmount[txTime];

            // If there are more tokens purchased at the current time than those that are remaining to
            // fulfill the tokens at this transaction then only use the remainingTokens
            if (tokensAtTime > remainingTokens) {
                tokensAtTime = remainingTokens;
            } else {
                // There are more elements to iterate through
                lastIndexToDelete = i + 1;
            }

            // Depending on when the tokens were bought, tax the correct amount. This is proportional
            // to when the user bought each set of tokens.
            if (txTime > block.timestamp - _paperHandTime) {
                taxedBurnTokens = taxedBurnTokens + ((tokensAtTime * _currentPaperHandFee) / 100);
            } else if (txTime > block.timestamp - _gate1Time) {
                taxedBurnTokens = taxedBurnTokens + ((tokensAtTime * _currentGate1Fee) / 100);
            } else if (txTime > block.timestamp - _gate2Time) {
                taxedBurnTokens = taxedBurnTokens + ((tokensAtTime * _currentGate2Fee) / 100);
            }

            // Decrease the tokens in the map
            _timedTransactionsMap[sender].timedTxAmount[txTime] = _timedTransactionsMap[sender].timedTxAmount[txTime] - tokensAtTime;

            remainingTokens = remainingTokens - tokensAtTime;

            // If there are no more tokens to sell then exit the loop
            if (remainingTokens == 0) {
                break;
            }
        }

        _sliceBlockTimeArray(sender, lastIndexToDelete);

        // Update the senders balance
        _timedTransactionsMap[sender].totalBalance = _timedTransactionsMap[sender].totalBalance - initialTransferAmount;

        // Only burn tokens if the burn is enabled, the sender address is not excluded and it is performed on a sell
        if (!_burnEnabled || _isExcludedFromFees[sender] || _isExcludedFromFees[recipient] || recipient != uniswapV2Pair) {
            taxedBurnTokens = 0;
        }

        if (taxedBurnTokens > 0) {
            _timedTransactionsMap[_deadAddress].totalBalance = _timedTransactionsMap[_deadAddress].totalBalance + taxedBurnTokens;
            _timedTransactionsMap[_deadAddress].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = _timedTransactionsMap[_deadAddress].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] + taxedBurnTokens;
        }

        uint256 taxedHouseTokens = _calculateHouseFee(initialTransferAmount);

        // Always collect house tokens unless address is excluded
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            taxedHouseTokens = 0;
        }

        // Add taxed tokens to the contract total
        _increaseTaxBalance(taxedHouseTokens);

        uint256 contractTokenBalance = balanceOf(address(this));

        // Only swap tokens when threshold has been met, a swap isn't already in progress,
        // the swap is enabled and never on a buy
        if (
            contractTokenBalance >= _minTokensBeforeSwap &&
            !swapInProgress &&
            _swapEnabled &&
            sender != uniswapV2Pair
        ) {
            // Always swap a set amount of tokens to prevent large dumps
            _swapTokensForHouse(_minTokensBeforeSwap);
        }

        // The amount to be transferred is the initial amount minus the taxed and burned tokens
        return initialTransferAmount - taxedHouseTokens - taxedBurnTokens;
    }

    function _increaseTaxBalance(uint256 amount) private {
        _timedTransactionsMap[address(this)].totalBalance = _timedTransactionsMap[address(this)].totalBalance + amount;
        _timedTransactionsMap[address(this)].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = _timedTransactionsMap[address(this)].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] + amount;
    }

    function _increaseRecipientBalance(address recipient, uint256 transferAmount, bool isDiamondHandOnlyTx) private {
        _aggregateOldTransactions(recipient);

        _timedTransactionsMap[recipient].totalBalance = _timedTransactionsMap[recipient].totalBalance + transferAmount;

        uint256 totalTxs = _timedTransactionsMap[recipient].txBlockTimes.length;

        if (isDiamondHandOnlyTx) {
            // If it's the first transaction then just add the oldest time to the map and array
            if (totalTxs < 1) {
                _timedTransactionsMap[recipient].txBlockTimes.push(OVER_21_DAYS_BLOCK_TIME);
                _timedTransactionsMap[recipient].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = transferAmount;
                return;
            }

            // If the first position in the array is already the oldest block time then just increase the value in the map
            if (_timedTransactionsMap[recipient].txBlockTimes[0] == OVER_21_DAYS_BLOCK_TIME) {
                _timedTransactionsMap[recipient].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = _timedTransactionsMap[recipient].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] + transferAmount;
                return;
            }

            // Shift the array with the oldest block time in the 0 position and add the value in the map
            _timedTransactionsMap[recipient].txBlockTimes.push(_timedTransactionsMap[recipient].txBlockTimes[totalTxs - 1]);
            for (uint i = totalTxs - 1; i > 0; i--) {
                _timedTransactionsMap[recipient].txBlockTimes[i] = _timedTransactionsMap[recipient].txBlockTimes[i - 1];
            }
            _timedTransactionsMap[recipient].txBlockTimes[0] = OVER_21_DAYS_BLOCK_TIME;
            _timedTransactionsMap[recipient].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = transferAmount;
            return;
        }

        if (totalTxs < 1) {
            _timedTransactionsMap[recipient].txBlockTimes.push(block.timestamp);
            _timedTransactionsMap[recipient].timedTxAmount[block.timestamp] = transferAmount;
            return;
        }

        uint256 lastTxTime = _timedTransactionsMap[recipient].txBlockTimes[totalTxs - 1];

        // If transaction was within the past 12 hours then keep as part of the same bucket for efficiency
        if (lastTxTime > block.timestamp - 12 hours) {
            _timedTransactionsMap[recipient].timedTxAmount[lastTxTime] = _timedTransactionsMap[recipient].timedTxAmount[lastTxTime] + transferAmount;
            return;
        }

        _timedTransactionsMap[recipient].txBlockTimes.push(block.timestamp);
        _timedTransactionsMap[recipient].timedTxAmount[block.timestamp] = transferAmount;
    }

    function _calculateHouseFee(uint256 initialAmount) private view returns (uint256) {
        return (initialAmount * _currentHouseFee) / 100;
    }

    function _swapTokensForHouse(uint256 tokensToSwap) private lockTheSwap {
        uint256 initialBalance = address(this).balance;

        // Swap to BNB and send to house wallet
        _swapTokensForEth(tokensToSwap);

        // Total BNB that has been swapped
        uint256 bnbSwapped = address(this).balance - initialBalance;

        // Transfer the BNB to the house contract
        (bool success, ) = _houseContract.call{value:bnbSwapped}("");
        require(success, "Unable to send to house contract");
    }

    //to receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    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 setBurnEnabled(bool enabled) external onlyOwner {
        _burnEnabled = enabled;
    }

    function setSwapEnabled(bool enabled) external onlyOwner {
        _swapEnabled = enabled;
    }

    function removeHouseFee() external onlyOwner {
        _currentHouseFee = 0;
    }

    function reinstateHouseFee() external onlyOwner {
        _currentHouseFee = DEFAULT_HOUSE_FEE;
    }

    function removeBurnFees() external onlyOwner {
        _currentPaperHandFee = 0;
        _currentGate1Fee = 0;
        _currentGate2Fee = 0;
    }

    function reinstateBurnFees() external onlyOwner {
        _currentPaperHandFee = DEFAULT_PAPER_HAND_FEE;
        _currentGate1Fee = DEFAULT_GATE1_FEE;
        _currentGate2Fee = DEFAULT_GATE2_FEE;
    }

    function removeAllFees() external onlyOwner {
        _currentHouseFee = 0;
        _currentPaperHandFee = 0;
        _currentGate1Fee = 0;
        _currentGate2Fee = 0;
    }

    function reinstateAllFees() external onlyOwner {
        _currentHouseFee = DEFAULT_HOUSE_FEE;
        _currentPaperHandFee = DEFAULT_PAPER_HAND_FEE;
        _currentGate1Fee = DEFAULT_GATE1_FEE;
        _currentGate2Fee = DEFAULT_GATE2_FEE;
    }

    // Update minimum tokens accumulated on the contract before a swap is performed
    function updateMinTokensBeforeSwap(uint256 newAmount) external onlyOwner {
        uint256 circulatingTokens = _totalTokens - balanceOf(_deadAddress);

        uint256 maxTokensBeforeSwap = circulatingTokens / 110;
        uint256 newMinTokensBeforeSwap = newAmount * 10**9;

        require(newMinTokensBeforeSwap < maxTokensBeforeSwap, "Amount must be less than 1 percent of the circulating supply");
        _minTokensBeforeSwap = newMinTokensBeforeSwap;
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFees[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFees[account] = false;
    }

    function addToOnlyDiamondHandTxs(address account) public onlyOwner {
        _onlyDiamondHandTxs[account] = true;
    }

    function removeFromOnlyDiamondHandTxs(address account) public onlyOwner {
        _onlyDiamondHandTxs[account] = false;
    }

    // If there is a PCS upgrade then add the ability to change the router and pairs to the new version
    function changeRouterVersion(address _router) public onlyOwner returns (address) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        address newPair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if(newPair == address(0)){
            // Pair doesn't exist
            newPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        }
        // Set the new pair
        uniswapV2Pair = newPair;

        // Set the router of the contract variables
        uniswapV2Router = _uniswapV2Router;

        return newPair;
    }

    // Check all transactions and group transactions older than 21 days into their own bucket
    function _aggregateOldTransactions(address sender) private {
        uint256 totalBlockTimes = _timedTransactionsMap[sender].txBlockTimes.length;

        if (totalBlockTimes < 1) {
            return;
        }

        uint256 oldestBlockTime = block.timestamp - _gate2Time;

        // If the first transaction is not yet 21 days old then do not aggregate
        if (_timedTransactionsMap[sender].txBlockTimes[0] > oldestBlockTime) {
            return;
        }

        uint lastAggregateIndex = 0;
        uint256 totalTokens = 0;
        for (uint i = 0; i < totalBlockTimes; i++) {
            uint256 txBlockTime = _timedTransactionsMap[sender].txBlockTimes[i];

            if (txBlockTime > oldestBlockTime) {
                break;
            }

            totalTokens = totalTokens + _timedTransactionsMap[sender].timedTxAmount[txBlockTime];
            lastAggregateIndex = i;
        }

        _sliceBlockTimeArray(sender, lastAggregateIndex);

        _timedTransactionsMap[sender].txBlockTimes[0] = OVER_21_DAYS_BLOCK_TIME;
        _timedTransactionsMap[sender].timedTxAmount[OVER_21_DAYS_BLOCK_TIME] = totalTokens;
    }

    // _sliceBlockTimeArray removes elements before the provided index from the transaction block
    // time array for the given account. This is in order to keep an ordered list of transaction block
    // times.
    function _sliceBlockTimeArray(address account, uint indexFrom) private {
        uint oldArrayLength = _timedTransactionsMap[account].txBlockTimes.length;

        if (indexFrom <= 0) return;

        if (indexFrom >= oldArrayLength) {
            while (_timedTransactionsMap[account].txBlockTimes.length != 0) {
                _timedTransactionsMap[account].txBlockTimes.pop();
            }
            return;
        }

        uint newArrayLength = oldArrayLength - indexFrom;

        uint counter = 0;
        for (uint i = indexFrom; i < oldArrayLength; i++) {
            _timedTransactionsMap[account].txBlockTimes[counter] = _timedTransactionsMap[account].txBlockTimes[i];
            counter++;
        }

        while (newArrayLength != _timedTransactionsMap[account].txBlockTimes.length) {
            _timedTransactionsMap[account].txBlockTimes.pop();
        }
    }
}

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":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistUpdated","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":"account","type":"address"}],"name":"addToOnlyDiamondHandTxs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowTradeAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceBetween14And21Days","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceBetween7And14Days","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceLessThan7Days","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOver21Days","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","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":"enableFairLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reinstateAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reinstateBurnFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reinstateHouseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeBurnFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromOnlyDiamondHandTxs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeHouseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBurnEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"newAmount","type":"uint256"}],"name":"updateMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600960075560096008556203f4806009556006600a556203f480600b556003600c556203f480600d556040518060400160405280600b81526020017f4d6f727068657573496e75000000000000000000000000000000000000000000815250600e90805190602001906200007a9291906200095a565b506040518060400160405280600681526020017f4d4f525048490000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c89291906200095a565b506009601060006101000a81548160ff021916908360ff1602179055506001601360156101000a81548160ff0219169083151502179055506001601360166101000a81548160ff021916908315150217905550670de0b6b3a764000060145566038d7ea4c6800060155573652e93f3db80832416661e98b65ccfbd57db6510601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001d757600080fd5b506000620001ea6200092960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e857600080fd5b505afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062000a74565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038657600080fd5b505afa1580156200039b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c1919062000a74565b6040518363ffffffff1660e01b8152600401620003e092919062000ab7565b602060405180830381600087803b158015620003fb57600080fd5b505af115801562000410573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000436919062000a74565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060145460036000620004ce6200093160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060036000620005236200093160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001635e0be100908060018154018082558091505060019003906000526020600020016000909190919091505560145460036000620005a26200093160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be100815260200190815260200160002081905550600060036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001635e0be1009080600181540180825580915050600190039060005260206000200160009091909190915055600060036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be100815260200190815260200160002081905550600160056000620007866200093160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008b96200092960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6014546040516200091a919062000aff565b60405180910390a35062000b81565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620009689062000b4b565b90600052602060002090601f0160209004810192826200098c5760008555620009d8565b82601f10620009a757805160ff1916838001178555620009d8565b82800160010185558215620009d8579182015b82811115620009d7578251825591602001919060010190620009ba565b5b509050620009e79190620009eb565b5090565b5b8082111562000a06576000816000905550600101620009ec565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a3c8262000a0f565b9050919050565b62000a4e8162000a2f565b811462000a5a57600080fd5b50565b60008151905062000a6e8162000a43565b92915050565b60006020828403121562000a8d5762000a8c62000a0a565b5b600062000a9d8482850162000a5d565b91505092915050565b62000ab18162000a2f565b82525050565b600060408201905062000ace600083018562000aa6565b62000add602083018462000aa6565b9392505050565b6000819050919050565b62000af98162000ae4565b82525050565b600060208201905062000b16600083018462000aee565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b6457607f821691505b6020821081141562000b7b5762000b7a62000b1c565b5b50919050565b6159158062000b916000396000f3fe6080604052600436106102295760003560e01c80638da5cb5b11610123578063e01af92c116100ab578063ecd75ecc1161006f578063ecd75ecc14610836578063f2fde38b1461084d578063f482758c14610876578063f4f38bde1461088d578063fd2628ca146108b857610230565b8063e01af92c14610779578063e1574a65146107a2578063e47d6060146107b9578063e8e8f899146107f6578063ea2f0b371461080d57610230565b8063a457c2d7116100f2578063a457c2d714610670578063a473a035146106ad578063a9059cbb146106d6578063b351dfe814610713578063dd62ed3e1461073c57610230565b80638da5cb5b146105b457806395d89b41146105df5780639ea4bd201461060a5780639ec3fcfb1461063357610230565b806349bd5a5e116101b15780636b130f9a116101755780636b130f9a146104e357806370a08231146104fa578063715018a6146105375780637b2c835f1461054e57806385d6f7b21461057757610230565b806349bd5a5e146103ea5780634b3cc7cc146104155780634e89e76c146104525780635881f3ef1461046957806361889043146104a657610230565b806323b872dd116101f857806323b872dd146102f35780632b4c8ec014610330578063313ce567146103595780633950935114610384578063437823ec146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108cf565b60405161025791906149e5565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190614aa0565b610961565b6040516102949190614afb565b60405180910390f35b3480156102a957600080fd5b506102b261097f565b6040516102bf9190614b75565b60405180910390f35b3480156102d457600080fd5b506102dd6109a5565b6040516102ea9190614b9f565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190614bba565b6109af565b6040516103279190614afb565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190614c0d565b610a67565b005b34801561036557600080fd5b5061036e610bac565b60405161037b9190614c56565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190614aa0565b610bc3565b6040516103b89190614afb565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190614c71565b610c6f565b005b3480156103f657600080fd5b506103ff610d5f565b60405161040c9190614cad565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190614c71565b610d85565b6040516104499190614b9f565b60405180910390f35b34801561045e57600080fd5b50610467610eda565b005b34801561047557600080fd5b50610490600480360381019061048b9190614c71565b610f89565b60405161049d9190614cad565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614c71565b6113f9565b6040516104da9190614b9f565b60405180910390f35b3480156104ef57600080fd5b506104f8611566565b005b34801561050657600080fd5b50610521600480360381019061051c9190614c71565b61161d565b60405161052e9190614b9f565b60405180910390f35b34801561054357600080fd5b5061054c611669565b005b34801561055a57600080fd5b5061057560048036038101906105709190614cf4565b6117bc565b005b34801561058357600080fd5b5061059e60048036038101906105999190614c71565b61186e565b6040516105ab9190614b9f565b60405180910390f35b3480156105c057600080fd5b506105c96119c3565b6040516105d69190614cad565b60405180910390f35b3480156105eb57600080fd5b506105f46119ec565b60405161060191906149e5565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614c71565b611a7e565b005b34801561063f57600080fd5b5061065a60048036038101906106559190614c71565b611b6e565b6040516106679190614b9f565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190614aa0565b611cdb565b6040516106a49190614afb565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614c71565b611d87565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190614aa0565b611e77565b60405161070a9190614afb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190614d21565b611ee5565b005b34801561074857600080fd5b50610763600480360381019061075e9190614d61565b612023565b6040516107709190614b9f565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190614cf4565b6120aa565b005b3480156107ae57600080fd5b506107b761215c565b005b3480156107c557600080fd5b506107e060048036038101906107db9190614c71565b61226a565b6040516107ed9190614afb565b60405180910390f35b34801561080257600080fd5b5061080b6122c0565b005b34801561081957600080fd5b50610834600480360381019061082f9190614c71565b61235f565b005b34801561084257600080fd5b5061084b61244f565b005b34801561085957600080fd5b50610874600480360381019061086f9190614c71565b6124fe565b005b34801561088257600080fd5b5061088b6126c0565b005b34801561089957600080fd5b506108a261275f565b6040516108af9190614b9f565b60405180910390f35b3480156108c457600080fd5b506108cd612765565b005b6060600e80546108de90614dd0565b80601f016020809104026020016040519081016040528092919081815260200182805461090a90614dd0565b80156109575780601f1061092c57610100808354040283529160200191610957565b820191906000526020600020905b81548152906001019060200180831161093a57829003601f168201915b5050505050905090565b600061097561096e61281c565b8484612824565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601454905090565b60006109bc8484846129ef565b610a5c846109c861281c565b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a1261281c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a579190614e31565b612824565b600190509392505050565b610a6f61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390614eb1565b60405180910390fd5b6000610b29601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661161d565b601454610b369190614e31565b90506000606e82610b479190614f00565b90506000633b9aca0084610b5b9190614f31565b9050818110610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614ffd565b60405180910390fd5b8060158190555050505050565b6000601060009054906101000a900460ff16905090565b6000610c65610bd061281c565b848460046000610bde61281c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c60919061501d565b612824565b6001905092915050565b610c7761281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90614eb1565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050811015610ed0576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110610e3257610e31615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000838152602001908152602001600020549050600d5442610ea59190614e31565b821015610ebb578084610eb8919061501d565b93505b50508080610ec8906150a2565b915050610d8f565b5080915050919050565b610ee261281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690614eb1565b60405180910390fd5b60006008819055506000600a819055506000600c81905550565b6000610f9361281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790614eb1565b60405180910390fd5b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561106d57600080fd5b505afa158015611081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a59190615100565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190615100565b6040518363ffffffff1660e01b815260040161115c92919061512d565b60206040518083038186803b15801561117457600080fd5b505afa158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac9190615100565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561136d578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561122957600080fd5b505afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190615100565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb9190615100565b6040518363ffffffff1660e01b815260040161131892919061512d565b602060405180830381600087803b15801561133257600080fd5b505af1158015611346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136a9190615100565b90505b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505050919050565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905081101561155c576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106114a6576114a5615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000838152602001908152602001600020549050600b54426115199190614e31565b821080156115335750600d54426115309190614e31565b82115b15611547578084611544919061501d565b93505b50508080611554906150a2565b915050611403565b5080915050919050565b61156e61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614eb1565b60405180910390fd5b600060078190555060006008819055506000600a819055506000600c81905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b61167161281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614eb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117c461281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890614eb1565b60405180910390fd5b80601360166101000a81548160ff02191690831515021790555050565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490508110156119b9576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001828154811061191b5761191a615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008381526020019081526020016000205490506009544261198e9190614e31565b8211156119a45780846119a1919061501d565b93505b505080806119b1906150a2565b915050611878565b5080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f80546119fb90614dd0565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2790614dd0565b8015611a745780601f10611a4957610100808354040283529160200191611a74565b820191906000526020600020905b815481529060010190602001808311611a5757829003601f168201915b5050505050905090565b611a8661281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614eb1565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050811015611cd1576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110611c1b57611c1a615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054905060095442611c8e9190614e31565b82108015611ca85750600b5442611ca59190614e31565b82115b15611cbc578084611cb9919061501d565b93505b50508080611cc9906150a2565b915050611b78565b5080915050919050565b6000611d7d611ce861281c565b848460046000611cf661281c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d789190614e31565b612824565b6001905092915050565b611d8f61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390614eb1565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611e89611e8461281c565b61226a565b15611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec0906151a2565b60405180910390fd5b611edb611ed461281c565b84846129ef565b6001905092915050565b611eed61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614eb1565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac826040516120179190614afb565b60405180910390a25050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120b261281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690614eb1565b60405180910390fd5b80601360156101000a81548160ff02191690831515021790555050565b61216461281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614eb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890615234565b60405180910390fd5b42601181905550565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6122c861281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90614eb1565b60405180910390fd5b6000600781905550565b61236761281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614eb1565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61245761281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db90614eb1565b60405180910390fd5b60096008819055506006600a819055506003600c81905550565b61250661281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614eb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa906152c6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126c861281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90614eb1565b60405180910390fd5b6009600781905550565b60115481565b61276d61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614eb1565b60405180910390fd5b600960078190555060096008819055506006600a819055506003600c81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b90615234565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90615358565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e29190614b9f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a56906153ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac69061547c565b60405180910390fd5b60008111612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b099061550e565b60405180910390fd5b610708601154612b22919061501d565b42108015612b375750660e35fa931a00008110155b8015612b765750612b466119c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad906155a0565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c595750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90508015612cad5781612c6b85610d85565b1015612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca390615632565b60405180910390fd5b5b6000612cba858585612d33565b9050612cc7848284613668565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d249190614b9f565b60405180910390a35050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9b906153ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b9061547c565b60405180910390fd5b60008211612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4e9061550e565b60405180910390fd5b600082905060008060005b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050811015613134576000600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110612f0557612f04615073565b5b906000526020600020015490506000600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054905085811115612f7a57859050612f8a565b600183612f87919061501d565b93505b60095442612f989190614e31565b821115612fcb57606460085482612faf9190614f31565b612fb99190614f00565b85612fc4919061501d565b945061304b565b600b5442612fd99190614e31565b82111561300c576064600a5482612ff09190614f31565b612ffa9190614f00565b85613005919061501d565b945061304a565b600d544261301a9190614e31565b821115613049576064600c54826130319190614f31565b61303b9190614f00565b85613046919061501d565b94505b5b5b80600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000848152602001908152602001600020546130aa9190614e31565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600084815260200190815260200160002081905550808661310d9190614e31565b9550600086141561311f575050613134565b5050808061312c906150a2565b915050612e62565b5061313f8782613ecf565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461318d9190614e31565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550601360169054906101000a900460ff1615806132385750600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061328c5750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132e55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b156132ef57600091505b60008211156134d3578160036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154613368919061501d565b60036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508160036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be100815260200190815260200160002054613455919061501d565b60036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be1008152602001908152602001600020819055505b60006134de866141b3565b9050600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135815750600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561358b57600090505b613594816141d6565b600061359f3061161d565b905060155481101580156135c05750601360149054906101000a900460ff16155b80156135d85750601360159054906101000a900460ff165b80156136325750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156136435761364260155461432b565b5b8382886136509190614e31565b61365a9190614e31565b955050505050509392505050565b61367183614453565b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546136bf919061501d565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090508115613bf557600181101561382d57600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001635e0be100908060018154018082558091505060019003906000526020600020016000909190919091505582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050613eca565b635e0be100600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154811061388757613886615073565b5b9060005260206000200154141561395c5782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be1008152602001908152602001600020546138fb919061501d565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050613eca565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016001836139ed9190614e31565b815481106139fe576139fd615073565b5b906000526020600020015490806001815401808255809150506001900390600052602060002001600090919091909150556000600182613a3e9190614e31565b90505b6000811115613b2a57600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600182613a999190614e31565b81548110613aaa57613aa9615073565b5b9060005260206000200154600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110613b0957613b08615073565b5b90600052602060002001819055508080613b2290615652565b915050613a41565b50635e0be100600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600081548110613b8557613b84615073565b5b906000526020600020018190555082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050613eca565b6001811015613cc557600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000142908060018154018082558091505060019003906000526020600020016000909190919091505582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160004281526020019081526020016000208190555050613eca565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600183613d169190614e31565b81548110613d2757613d26615073565b5b9060005260206000200154905061a8c042613d429190614e31565b811115613e065783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054613da8919061501d565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000838152602001908152602001600020819055505050613eca565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000142908060018154018082558091505060019003906000526020600020016000909190919091505583600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160004281526020019081526020016000208190555050505b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050905060008211613f2757506141af565b808210613fef575b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905014613fe957600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480613fce57613fcd61567c565b5b60019003818190600052602060002001600090559055613f2f565b506141af565b60008282613ffd9190614e31565b90506000808490505b838110156140f057600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001818154811061406257614061615073565b5b9060005260206000200154600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000183815481106140c1576140c0615073565b5b906000526020600020018190555081806140da906150a2565b92505080806140e8906150a2565b915050614006565b505b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905082146141ab57600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054806141905761418f61567c565b5b600190038181906000526020600020016000905590556140f2565b5050505b5050565b60006064600754836141c59190614f31565b6141cf9190614f00565b9050919050565b80600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614224919061501d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be1008152602001908152602001600020546142cd919061501d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050565b6001601360146101000a81548160ff0219169083151502179055506000479050614354826146fa565b600081476143629190614e31565b90506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516143ac906156dc565b60006040518083038185875af1925050503d80600081146143e9576040519150601f19603f3d011682016040523d82523d6000602084013e6143ee565b606091505b5050905080614432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144299061573d565b60405180910390fd5b5050506000601360146101000a81548160ff02191690831515021790555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050905060018110156144ac57506146f7565b6000600d54426144bc9190614e31565b905080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154811061451457614513615073565b5b9060005260206000200154111561452c5750506146f7565b60008060005b84811015614623576000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106145905761458f615073565b5b90600052602060002001549050848111156145ab5750614623565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828152602001908152602001600020548361460a919061501d565b925081935050808061461b906150a2565b915050614532565b5061462e8583613ecf565b635e0be100600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154811061468857614687615073565b5b906000526020600020018190555080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be100815260200190815260200160002081905550505050505b50565b6000600267ffffffffffffffff8111156147175761471661575d565b5b6040519080825280602002602001820160405280156147455781602001602082028036833780820191505090505b509050308160008151811061475d5761475c615073565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156147ff57600080fd5b505afa158015614813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148379190615100565b8160018151811061484b5761484a615073565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506148b230601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612824565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614916959493929190615885565b600060405180830381600087803b15801561493057600080fd5b505af1158015614944573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561498657808201518184015260208101905061496b565b83811115614995576000848401525b50505050565b6000601f19601f8301169050919050565b60006149b78261494c565b6149c18185614957565b93506149d1818560208601614968565b6149da8161499b565b840191505092915050565b600060208201905081810360008301526149ff81846149ac565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a3782614a0c565b9050919050565b614a4781614a2c565b8114614a5257600080fd5b50565b600081359050614a6481614a3e565b92915050565b6000819050919050565b614a7d81614a6a565b8114614a8857600080fd5b50565b600081359050614a9a81614a74565b92915050565b60008060408385031215614ab757614ab6614a07565b5b6000614ac585828601614a55565b9250506020614ad685828601614a8b565b9150509250929050565b60008115159050919050565b614af581614ae0565b82525050565b6000602082019050614b106000830184614aec565b92915050565b6000819050919050565b6000614b3b614b36614b3184614a0c565b614b16565b614a0c565b9050919050565b6000614b4d82614b20565b9050919050565b6000614b5f82614b42565b9050919050565b614b6f81614b54565b82525050565b6000602082019050614b8a6000830184614b66565b92915050565b614b9981614a6a565b82525050565b6000602082019050614bb46000830184614b90565b92915050565b600080600060608486031215614bd357614bd2614a07565b5b6000614be186828701614a55565b9350506020614bf286828701614a55565b9250506040614c0386828701614a8b565b9150509250925092565b600060208284031215614c2357614c22614a07565b5b6000614c3184828501614a8b565b91505092915050565b600060ff82169050919050565b614c5081614c3a565b82525050565b6000602082019050614c6b6000830184614c47565b92915050565b600060208284031215614c8757614c86614a07565b5b6000614c9584828501614a55565b91505092915050565b614ca781614a2c565b82525050565b6000602082019050614cc26000830184614c9e565b92915050565b614cd181614ae0565b8114614cdc57600080fd5b50565b600081359050614cee81614cc8565b92915050565b600060208284031215614d0a57614d09614a07565b5b6000614d1884828501614cdf565b91505092915050565b60008060408385031215614d3857614d37614a07565b5b6000614d4685828601614a55565b9250506020614d5785828601614cdf565b9150509250929050565b60008060408385031215614d7857614d77614a07565b5b6000614d8685828601614a55565b9250506020614d9785828601614a55565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614de857607f821691505b60208210811415614dfc57614dfb614da1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e3c82614a6a565b9150614e4783614a6a565b925082821015614e5a57614e59614e02565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e9b602083614957565b9150614ea682614e65565b602082019050919050565b60006020820190508181036000830152614eca81614e8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f0b82614a6a565b9150614f1683614a6a565b925082614f2657614f25614ed1565b5b828204905092915050565b6000614f3c82614a6a565b9150614f4783614a6a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f8057614f7f614e02565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e203120706572636560008201527f6e74206f66207468652063697263756c6174696e6720737570706c7900000000602082015250565b6000614fe7603c83614957565b9150614ff282614f8b565b604082019050919050565b6000602082019050818103600083015261501681614fda565b9050919050565b600061502882614a6a565b915061503383614a6a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506857615067614e02565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150ad82614a6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150e0576150df614e02565b5b600182019050919050565b6000815190506150fa81614a3e565b92915050565b60006020828403121561511657615115614a07565b5b6000615124848285016150eb565b91505092915050565b60006040820190506151426000830185614c9e565b61514f6020830184614c9e565b9392505050565b7f626c61636b6c697374656420736f727279000000000000000000000000000000600082015250565b600061518c601183614957565b915061519782615156565b602082019050919050565b600060208201905081810360008301526151bb8161517f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061521e602483614957565b9150615229826151c2565b604082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152b0602683614957565b91506152bb82615254565b604082019050919050565b600060208201905081810360008301526152df816152a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615342602283614957565b915061534d826152e6565b604082019050919050565b6000602082019050818103600083015261537181615335565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153d4602583614957565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615466602383614957565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006154f8602983614957565b91506155038261549c565b604082019050919050565b60006020820190508181036000830152615527816154eb565b9050919050565b7f596f752063616e6e6f74207472616e73666572206d6f7265207468616e20312560008201527f206e6f7700000000000000000000000000000000000000000000000000000000602082015250565b600061558a602483614957565b91506155958261552e565b604082019050919050565b600060208201905081810360008301526155b98161557d565b9050919050565b7f496e73756666696369656e74206469616d6f6e642068616e6420746f6b656e2060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b600061561c602783614957565b9150615627826155c0565b604082019050919050565b6000602082019050818103600083015261564b8161560f565b9050919050565b600061565d82614a6a565b9150600082141561567157615670614e02565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b50565b60006156c66000836156ab565b91506156d1826156b6565b600082019050919050565b60006156e7826156b9565b9150819050919050565b7f556e61626c6520746f2073656e6420746f20686f75736520636f6e7472616374600082015250565b6000615727602083614957565b9150615732826156f1565b602082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006157b16157ac6157a78461578c565b614b16565b614a6a565b9050919050565b6157c181615796565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157fc81614a2c565b82525050565b600061580e83836157f3565b60208301905092915050565b6000602082019050919050565b6000615832826157c7565b61583c81856157d2565b9350615847836157e3565b8060005b8381101561587857815161585f8882615802565b975061586a8361581a565b92505060018101905061584b565b5085935050505092915050565b600060a08201905061589a6000830188614b90565b6158a760208301876157b8565b81810360408301526158b98186615827565b90506158c86060830185614c9e565b6158d56080830184614b90565b969550505050505056fea2646970667358221220d8e5876341505f2cea78046146cd068108a91fd142acb362864fe4b45b42d25564736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638da5cb5b11610123578063e01af92c116100ab578063ecd75ecc1161006f578063ecd75ecc14610836578063f2fde38b1461084d578063f482758c14610876578063f4f38bde1461088d578063fd2628ca146108b857610230565b8063e01af92c14610779578063e1574a65146107a2578063e47d6060146107b9578063e8e8f899146107f6578063ea2f0b371461080d57610230565b8063a457c2d7116100f2578063a457c2d714610670578063a473a035146106ad578063a9059cbb146106d6578063b351dfe814610713578063dd62ed3e1461073c57610230565b80638da5cb5b146105b457806395d89b41146105df5780639ea4bd201461060a5780639ec3fcfb1461063357610230565b806349bd5a5e116101b15780636b130f9a116101755780636b130f9a146104e357806370a08231146104fa578063715018a6146105375780637b2c835f1461054e57806385d6f7b21461057757610230565b806349bd5a5e146103ea5780634b3cc7cc146104155780634e89e76c146104525780635881f3ef1461046957806361889043146104a657610230565b806323b872dd116101f857806323b872dd146102f35780632b4c8ec014610330578063313ce567146103595780633950935114610384578063437823ec146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108cf565b60405161025791906149e5565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190614aa0565b610961565b6040516102949190614afb565b60405180910390f35b3480156102a957600080fd5b506102b261097f565b6040516102bf9190614b75565b60405180910390f35b3480156102d457600080fd5b506102dd6109a5565b6040516102ea9190614b9f565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190614bba565b6109af565b6040516103279190614afb565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190614c0d565b610a67565b005b34801561036557600080fd5b5061036e610bac565b60405161037b9190614c56565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190614aa0565b610bc3565b6040516103b89190614afb565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190614c71565b610c6f565b005b3480156103f657600080fd5b506103ff610d5f565b60405161040c9190614cad565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190614c71565b610d85565b6040516104499190614b9f565b60405180910390f35b34801561045e57600080fd5b50610467610eda565b005b34801561047557600080fd5b50610490600480360381019061048b9190614c71565b610f89565b60405161049d9190614cad565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614c71565b6113f9565b6040516104da9190614b9f565b60405180910390f35b3480156104ef57600080fd5b506104f8611566565b005b34801561050657600080fd5b50610521600480360381019061051c9190614c71565b61161d565b60405161052e9190614b9f565b60405180910390f35b34801561054357600080fd5b5061054c611669565b005b34801561055a57600080fd5b5061057560048036038101906105709190614cf4565b6117bc565b005b34801561058357600080fd5b5061059e60048036038101906105999190614c71565b61186e565b6040516105ab9190614b9f565b60405180910390f35b3480156105c057600080fd5b506105c96119c3565b6040516105d69190614cad565b60405180910390f35b3480156105eb57600080fd5b506105f46119ec565b60405161060191906149e5565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614c71565b611a7e565b005b34801561063f57600080fd5b5061065a60048036038101906106559190614c71565b611b6e565b6040516106679190614b9f565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190614aa0565b611cdb565b6040516106a49190614afb565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614c71565b611d87565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190614aa0565b611e77565b60405161070a9190614afb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190614d21565b611ee5565b005b34801561074857600080fd5b50610763600480360381019061075e9190614d61565b612023565b6040516107709190614b9f565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190614cf4565b6120aa565b005b3480156107ae57600080fd5b506107b761215c565b005b3480156107c557600080fd5b506107e060048036038101906107db9190614c71565b61226a565b6040516107ed9190614afb565b60405180910390f35b34801561080257600080fd5b5061080b6122c0565b005b34801561081957600080fd5b50610834600480360381019061082f9190614c71565b61235f565b005b34801561084257600080fd5b5061084b61244f565b005b34801561085957600080fd5b50610874600480360381019061086f9190614c71565b6124fe565b005b34801561088257600080fd5b5061088b6126c0565b005b34801561089957600080fd5b506108a261275f565b6040516108af9190614b9f565b60405180910390f35b3480156108c457600080fd5b506108cd612765565b005b6060600e80546108de90614dd0565b80601f016020809104026020016040519081016040528092919081815260200182805461090a90614dd0565b80156109575780601f1061092c57610100808354040283529160200191610957565b820191906000526020600020905b81548152906001019060200180831161093a57829003601f168201915b5050505050905090565b600061097561096e61281c565b8484612824565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601454905090565b60006109bc8484846129ef565b610a5c846109c861281c565b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a1261281c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a579190614e31565b612824565b600190509392505050565b610a6f61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390614eb1565b60405180910390fd5b6000610b29601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661161d565b601454610b369190614e31565b90506000606e82610b479190614f00565b90506000633b9aca0084610b5b9190614f31565b9050818110610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614ffd565b60405180910390fd5b8060158190555050505050565b6000601060009054906101000a900460ff16905090565b6000610c65610bd061281c565b848460046000610bde61281c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c60919061501d565b612824565b6001905092915050565b610c7761281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90614eb1565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050811015610ed0576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110610e3257610e31615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000838152602001908152602001600020549050600d5442610ea59190614e31565b821015610ebb578084610eb8919061501d565b93505b50508080610ec8906150a2565b915050610d8f565b5080915050919050565b610ee261281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690614eb1565b60405180910390fd5b60006008819055506000600a819055506000600c81905550565b6000610f9361281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790614eb1565b60405180910390fd5b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561106d57600080fd5b505afa158015611081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a59190615100565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190615100565b6040518363ffffffff1660e01b815260040161115c92919061512d565b60206040518083038186803b15801561117457600080fd5b505afa158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac9190615100565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561136d578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561122957600080fd5b505afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190615100565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb9190615100565b6040518363ffffffff1660e01b815260040161131892919061512d565b602060405180830381600087803b15801561133257600080fd5b505af1158015611346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136a9190615100565b90505b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505050919050565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905081101561155c576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106114a6576114a5615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000838152602001908152602001600020549050600b54426115199190614e31565b821080156115335750600d54426115309190614e31565b82115b15611547578084611544919061501d565b93505b50508080611554906150a2565b915050611403565b5080915050919050565b61156e61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614eb1565b60405180910390fd5b600060078190555060006008819055506000600a819055506000600c81905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b61167161281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614eb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117c461281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890614eb1565b60405180910390fd5b80601360166101000a81548160ff02191690831515021790555050565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490508110156119b9576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001828154811061191b5761191a615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008381526020019081526020016000205490506009544261198e9190614e31565b8211156119a45780846119a1919061501d565b93505b505080806119b1906150a2565b915050611878565b5080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f80546119fb90614dd0565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2790614dd0565b8015611a745780601f10611a4957610100808354040283529160200191611a74565b820191906000526020600020905b815481529060010190602001808311611a5757829003601f168201915b5050505050905090565b611a8661281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614eb1565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806000905060005b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050811015611cd1576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110611c1b57611c1a615073565b5b906000526020600020015490506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054905060095442611c8e9190614e31565b82108015611ca85750600b5442611ca59190614e31565b82115b15611cbc578084611cb9919061501d565b93505b50508080611cc9906150a2565b915050611b78565b5080915050919050565b6000611d7d611ce861281c565b848460046000611cf661281c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d789190614e31565b612824565b6001905092915050565b611d8f61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390614eb1565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611e89611e8461281c565b61226a565b15611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec0906151a2565b60405180910390fd5b611edb611ed461281c565b84846129ef565b6001905092915050565b611eed61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614eb1565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac826040516120179190614afb565b60405180910390a25050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120b261281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690614eb1565b60405180910390fd5b80601360156101000a81548160ff02191690831515021790555050565b61216461281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614eb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890615234565b60405180910390fd5b42601181905550565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6122c861281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90614eb1565b60405180910390fd5b6000600781905550565b61236761281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614eb1565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61245761281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db90614eb1565b60405180910390fd5b60096008819055506006600a819055506003600c81905550565b61250661281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614eb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa906152c6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126c861281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90614eb1565b60405180910390fd5b6009600781905550565b60115481565b61276d61281c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614eb1565b60405180910390fd5b600960078190555060096008819055506006600a819055506003600c81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b90615234565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90615358565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e29190614b9f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a56906153ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac69061547c565b60405180910390fd5b60008111612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b099061550e565b60405180910390fd5b610708601154612b22919061501d565b42108015612b375750660e35fa931a00008110155b8015612b765750612b466119c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad906155a0565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c595750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90508015612cad5781612c6b85610d85565b1015612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca390615632565b60405180910390fd5b5b6000612cba858585612d33565b9050612cc7848284613668565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d249190614b9f565b60405180910390a35050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9b906153ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b9061547c565b60405180910390fd5b60008211612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4e9061550e565b60405180910390fd5b600082905060008060005b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050811015613134576000600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110612f0557612f04615073565b5b906000526020600020015490506000600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054905085811115612f7a57859050612f8a565b600183612f87919061501d565b93505b60095442612f989190614e31565b821115612fcb57606460085482612faf9190614f31565b612fb99190614f00565b85612fc4919061501d565b945061304b565b600b5442612fd99190614e31565b82111561300c576064600a5482612ff09190614f31565b612ffa9190614f00565b85613005919061501d565b945061304a565b600d544261301a9190614e31565b821115613049576064600c54826130319190614f31565b61303b9190614f00565b85613046919061501d565b94505b5b5b80600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000848152602001908152602001600020546130aa9190614e31565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600084815260200190815260200160002081905550808661310d9190614e31565b9550600086141561311f575050613134565b5050808061312c906150a2565b915050612e62565b5061313f8782613ecf565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461318d9190614e31565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550601360169054906101000a900460ff1615806132385750600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061328c5750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132e55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b156132ef57600091505b60008211156134d3578160036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154613368919061501d565b60036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508160036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be100815260200190815260200160002054613455919061501d565b60036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be1008152602001908152602001600020819055505b60006134de866141b3565b9050600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135815750600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561358b57600090505b613594816141d6565b600061359f3061161d565b905060155481101580156135c05750601360149054906101000a900460ff16155b80156135d85750601360159054906101000a900460ff165b80156136325750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156136435761364260155461432b565b5b8382886136509190614e31565b61365a9190614e31565b955050505050509392505050565b61367183614453565b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546136bf919061501d565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090508115613bf557600181101561382d57600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001635e0be100908060018154018082558091505060019003906000526020600020016000909190919091505582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050613eca565b635e0be100600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154811061388757613886615073565b5b9060005260206000200154141561395c5782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be1008152602001908152602001600020546138fb919061501d565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050613eca565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016001836139ed9190614e31565b815481106139fe576139fd615073565b5b906000526020600020015490806001815401808255809150506001900390600052602060002001600090919091909150556000600182613a3e9190614e31565b90505b6000811115613b2a57600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600182613a999190614e31565b81548110613aaa57613aa9615073565b5b9060005260206000200154600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110613b0957613b08615073565b5b90600052602060002001819055508080613b2290615652565b915050613a41565b50635e0be100600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600081548110613b8557613b84615073565b5b906000526020600020018190555082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050613eca565b6001811015613cc557600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000142908060018154018082558091505060019003906000526020600020016000909190919091505582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160004281526020019081526020016000208190555050613eca565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600183613d169190614e31565b81548110613d2757613d26615073565b5b9060005260206000200154905061a8c042613d429190614e31565b811115613e065783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600083815260200190815260200160002054613da8919061501d565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000838152602001908152602001600020819055505050613eca565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000142908060018154018082558091505060019003906000526020600020016000909190919091505583600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160004281526020019081526020016000208190555050505b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050905060008211613f2757506141af565b808210613fef575b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905014613fe957600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480613fce57613fcd61567c565b5b60019003818190600052602060002001600090559055613f2f565b506141af565b60008282613ffd9190614e31565b90506000808490505b838110156140f057600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001818154811061406257614061615073565b5b9060005260206000200154600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000183815481106140c1576140c0615073565b5b906000526020600020018190555081806140da906150a2565b92505080806140e8906150a2565b915050614006565b505b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905082146141ab57600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054806141905761418f61567c565b5b600190038181906000526020600020016000905590556140f2565b5050505b5050565b60006064600754836141c59190614f31565b6141cf9190614f00565b9050919050565b80600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614224919061501d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be1008152602001908152602001600020546142cd919061501d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be10081526020019081526020016000208190555050565b6001601360146101000a81548160ff0219169083151502179055506000479050614354826146fa565b600081476143629190614e31565b90506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516143ac906156dc565b60006040518083038185875af1925050503d80600081146143e9576040519150601f19603f3d011682016040523d82523d6000602084013e6143ee565b606091505b5050905080614432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144299061573d565b60405180910390fd5b5050506000601360146101000a81548160ff02191690831515021790555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050905060018110156144ac57506146f7565b6000600d54426144bc9190614e31565b905080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154811061451457614513615073565b5b9060005260206000200154111561452c5750506146f7565b60008060005b84811015614623576000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106145905761458f615073565b5b90600052602060002001549050848111156145ab5750614623565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828152602001908152602001600020548361460a919061501d565b925081935050808061461b906150a2565b915050614532565b5061462e8583613ecf565b635e0be100600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154811061468857614687615073565b5b906000526020600020018190555080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000635e0be100815260200190815260200160002081905550505050505b50565b6000600267ffffffffffffffff8111156147175761471661575d565b5b6040519080825280602002602001820160405280156147455781602001602082028036833780820191505090505b509050308160008151811061475d5761475c615073565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156147ff57600080fd5b505afa158015614813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148379190615100565b8160018151811061484b5761484a615073565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506148b230601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612824565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614916959493929190615885565b600060405180830381600087803b15801561493057600080fd5b505af1158015614944573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561498657808201518184015260208101905061496b565b83811115614995576000848401525b50505050565b6000601f19601f8301169050919050565b60006149b78261494c565b6149c18185614957565b93506149d1818560208601614968565b6149da8161499b565b840191505092915050565b600060208201905081810360008301526149ff81846149ac565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a3782614a0c565b9050919050565b614a4781614a2c565b8114614a5257600080fd5b50565b600081359050614a6481614a3e565b92915050565b6000819050919050565b614a7d81614a6a565b8114614a8857600080fd5b50565b600081359050614a9a81614a74565b92915050565b60008060408385031215614ab757614ab6614a07565b5b6000614ac585828601614a55565b9250506020614ad685828601614a8b565b9150509250929050565b60008115159050919050565b614af581614ae0565b82525050565b6000602082019050614b106000830184614aec565b92915050565b6000819050919050565b6000614b3b614b36614b3184614a0c565b614b16565b614a0c565b9050919050565b6000614b4d82614b20565b9050919050565b6000614b5f82614b42565b9050919050565b614b6f81614b54565b82525050565b6000602082019050614b8a6000830184614b66565b92915050565b614b9981614a6a565b82525050565b6000602082019050614bb46000830184614b90565b92915050565b600080600060608486031215614bd357614bd2614a07565b5b6000614be186828701614a55565b9350506020614bf286828701614a55565b9250506040614c0386828701614a8b565b9150509250925092565b600060208284031215614c2357614c22614a07565b5b6000614c3184828501614a8b565b91505092915050565b600060ff82169050919050565b614c5081614c3a565b82525050565b6000602082019050614c6b6000830184614c47565b92915050565b600060208284031215614c8757614c86614a07565b5b6000614c9584828501614a55565b91505092915050565b614ca781614a2c565b82525050565b6000602082019050614cc26000830184614c9e565b92915050565b614cd181614ae0565b8114614cdc57600080fd5b50565b600081359050614cee81614cc8565b92915050565b600060208284031215614d0a57614d09614a07565b5b6000614d1884828501614cdf565b91505092915050565b60008060408385031215614d3857614d37614a07565b5b6000614d4685828601614a55565b9250506020614d5785828601614cdf565b9150509250929050565b60008060408385031215614d7857614d77614a07565b5b6000614d8685828601614a55565b9250506020614d9785828601614a55565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614de857607f821691505b60208210811415614dfc57614dfb614da1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e3c82614a6a565b9150614e4783614a6a565b925082821015614e5a57614e59614e02565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e9b602083614957565b9150614ea682614e65565b602082019050919050565b60006020820190508181036000830152614eca81614e8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f0b82614a6a565b9150614f1683614a6a565b925082614f2657614f25614ed1565b5b828204905092915050565b6000614f3c82614a6a565b9150614f4783614a6a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f8057614f7f614e02565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e203120706572636560008201527f6e74206f66207468652063697263756c6174696e6720737570706c7900000000602082015250565b6000614fe7603c83614957565b9150614ff282614f8b565b604082019050919050565b6000602082019050818103600083015261501681614fda565b9050919050565b600061502882614a6a565b915061503383614a6a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506857615067614e02565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150ad82614a6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150e0576150df614e02565b5b600182019050919050565b6000815190506150fa81614a3e565b92915050565b60006020828403121561511657615115614a07565b5b6000615124848285016150eb565b91505092915050565b60006040820190506151426000830185614c9e565b61514f6020830184614c9e565b9392505050565b7f626c61636b6c697374656420736f727279000000000000000000000000000000600082015250565b600061518c601183614957565b915061519782615156565b602082019050919050565b600060208201905081810360008301526151bb8161517f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061521e602483614957565b9150615229826151c2565b604082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152b0602683614957565b91506152bb82615254565b604082019050919050565b600060208201905081810360008301526152df816152a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615342602283614957565b915061534d826152e6565b604082019050919050565b6000602082019050818103600083015261537181615335565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153d4602583614957565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615466602383614957565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006154f8602983614957565b91506155038261549c565b604082019050919050565b60006020820190508181036000830152615527816154eb565b9050919050565b7f596f752063616e6e6f74207472616e73666572206d6f7265207468616e20312560008201527f206e6f7700000000000000000000000000000000000000000000000000000000602082015250565b600061558a602483614957565b91506155958261552e565b604082019050919050565b600060208201905081810360008301526155b98161557d565b9050919050565b7f496e73756666696369656e74206469616d6f6e642068616e6420746f6b656e2060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b600061561c602783614957565b9150615627826155c0565b604082019050919050565b6000602082019050818103600083015261564b8161560f565b9050919050565b600061565d82614a6a565b9150600082141561567157615670614e02565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b50565b60006156c66000836156ab565b91506156d1826156b6565b600082019050919050565b60006156e7826156b9565b9150819050919050565b7f556e61626c6520746f2073656e6420746f20686f75736520636f6e7472616374600082015250565b6000615727602083614957565b9150615732826156f1565b602082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006157b16157ac6157a78461578c565b614b16565b614a6a565b9050919050565b6157c181615796565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157fc81614a2c565b82525050565b600061580e83836157f3565b60208301905092915050565b6000602082019050919050565b6000615832826157c7565b61583c81856157d2565b9350615847836157e3565b8060005b8381101561587857815161585f8882615802565b975061586a8361581a565b92505060018101905061584b565b5085935050505092915050565b600060a08201905061589a6000830188614b90565b6158a760208301876157b8565b81810360408301526158b98186615827565b90506158c86060830185614c9e565b6158d56080830184614b90565b969550505050505056fea2646970667358221220d8e5876341505f2cea78046146cd068108a91fd142acb362864fe4b45b42d25564736f6c63430008090033

Deployed Bytecode Sourcemap

13753:24606:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17246:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21129:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15057:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17523:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21298:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34162:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17432:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21572:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34641:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15105:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20123:606;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33257:150;;;;;;;;;;;;;:::i;:::-;;35249:696;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19457:658;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33629:180;;;;;;;;;;;;;:::i;:::-;;17631:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5272:148;;;;;;;;;;;;;:::i;:::-;;32842:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17783:612;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4636:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17337:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35009:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18789:660;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21795:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34880:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20737:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18408:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20978:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32948:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22371:174;;;;;;;;;;;;;:::i;:::-;;18675:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33054:84;;;;;;;;;;;;;:::i;:::-;;34761:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33415:206;;;;;;;;;;;;;:::i;:::-;;5575:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33146:103;;;;;;;;;;;;;:::i;:::-;;15021:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33817:252;;;;;;;;;;;;;:::i;:::-;;17246:83;17283:13;17316:5;17309:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17246:83;:::o;21129:161::-;21204:4;21221:39;21230:12;:10;:12::i;:::-;21244:7;21253:6;21221:8;:39::i;:::-;21278:4;21271:11;;21129:161;;;;:::o;15057:41::-;;;;;;;;;;;;;:::o;17523:100::-;17576:7;17603:12;;17596:19;;17523:100;:::o;21298:266::-;21396:4;21413:36;21423:6;21431:9;21442:6;21413:9;:36::i;:::-;21460:74;21469:6;21477:12;:10;:12::i;:::-;21527:6;21491:11;:19;21503:6;21491:19;;;;;;;;;;;;;;;:33;21511:12;:10;:12::i;:::-;21491:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;21460:8;:74::i;:::-;21552:4;21545:11;;21298:266;;;;;:::o;34162:471::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34246:25:::1;34289:23;34299:12;;;;;;;;;;;34289:9;:23::i;:::-;34274:12;;:38;;;;:::i;:::-;34246:66;;34325:27;34375:3;34355:17;:23;;;;:::i;:::-;34325:53;;34389:30;34434:5;34422:9;:17;;;;:::i;:::-;34389:50;;34485:19;34460:22;:44;34452:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;34603:22;34580:20;:45;;;;34235:398;;;34162:471:::0;:::o;17432:83::-;17473:5;17498:9;;;;;;;;;;;17491:16;;17432:83;:::o;21572:215::-;21660:4;21677:80;21686:12;:10;:12::i;:::-;21700:7;21746:10;21709:11;:25;21721:12;:10;:12::i;:::-;21709:25;;;;;;;;;;;;;;;:34;21735:7;21709:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;21677:8;:80::i;:::-;21775:4;21768:11;;21572:215;;;;:::o;34641:112::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34741:4:::1;34710:19;:28;34730:7;34710:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34641:112:::0;:::o;15105:28::-;;;;;;;;;;;;;:::o;20123:606::-;20188:7;20208:19;20230:1;20208:23;;20249:6;20244:447;20265:21;:30;20287:7;20265:30;;;;;;;;;;;;;;;:43;;:50;;;;20261:1;:54;20244:447;;;20337:11;20351:21;:30;20373:7;20351:30;;;;;;;;;;;;;;;:43;;20395:1;20351:46;;;;;;;;:::i;:::-;;;;;;;;;;20337:60;;20412:20;20435:21;:30;20457:7;20435:30;;;;;;;;;;;;;;;:44;;:52;20480:6;20435:52;;;;;;;;;;;;20412:75;;20593:10;;20575:15;:28;;;;:::i;:::-;20566:6;:37;20562:118;;;20652:12;20638:11;:26;;;;:::i;:::-;20624:40;;20562:118;20322:369;;20317:3;;;;;:::i;:::-;;;;20244:447;;;;20710:11;20703:18;;;20123:606;;;:::o;33257:150::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33336:1:::1;33313:20;:24;;;;33367:1;33348:16;:20;;;;33398:1;33379:16;:20;;;;33257:150::o:0;35249:696::-;35321:7;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35341:35:::1;35398:7;35341:65;;35419:15;35455:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35437:53;;;35499:4;35506:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35437:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35419:111;;35563:1;35544:21;;:7;:21;;;35541:207;;;35644:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35626:70;;;35705:4;35712:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35626:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35616:120;;35541:207;35803:7;35787:13;;:23;;;;;;;;;;;;;;;;;;35894:16;35876:15;;:34;;;;;;;;;;;;;;;;;;35930:7;35923:14;;;;35249:696:::0;;;:::o;19457:658::-;19532:7;19552:19;19574:1;19552:23;;19593:6;19588:489;19609:21;:30;19631:7;19609:30;;;;;;;;;;;;;;;:43;;:50;;;;19605:1;:54;19588:489;;;19681:11;19695:21;:30;19717:7;19695:30;;;;;;;;;;;;;;;:43;;19739:1;19695:46;;;;;;;;:::i;:::-;;;;;;;;;;19681:60;;19756:20;19779:21;:30;19801:7;19779:30;;;;;;;;;;;;;;;:44;;:52;19824:6;19779:52;;;;;;;;;;;;19756:75;;19938:10;;19920:15;:28;;;;:::i;:::-;19911:6;:37;:78;;;;;19979:10;;19961:15;:28;;;;:::i;:::-;19952:6;:37;19911:78;19907:159;;;20038:12;20024:11;:26;;;;:::i;:::-;20010:40;;19907:159;19666:411;;19661:3;;;;;:::i;:::-;;;;19588:489;;;;20096:11;20089:18;;;19457:658;;;:::o;33629:180::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33703:1:::1;33684:16;:20;;;;33738:1;33715:20;:24;;;;33769:1;33750:16;:20;;;;33800:1;33781:16;:20;;;;33629:180::o:0;17631:144::-;17697:7;17724:21;:30;17746:7;17724:30;;;;;;;;;;;;;;;:43;;;17717:50;;17631:144;;;:::o;5272:148::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5379:1:::1;5342:40;;5363:6;::::0;::::1;;;;;;;;5342:40;;;;;;;;;;;;5410:1;5393:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5272:148::o:0;32842:98::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32925:7:::1;32910:12;;:22;;;;;;;;;;;;;;;;;;32842:98:::0;:::o;17783:612::-;17853:7;17873:19;17895:1;17873:23;;17914:6;17909:448;17930:21;:30;17952:7;17930:30;;;;;;;;;;;;;;;:43;;:50;;;;17926:1;:54;17909:448;;;18002:11;18016:21;:30;18038:7;18016:30;;;;;;;;;;;;;;;:43;;18060:1;18016:46;;;;;;;;:::i;:::-;;;;;;;;;;18002:60;;18077:20;18100:21;:30;18122:7;18100:30;;;;;;;;;;;;;;;:44;;:52;18145:6;18100:52;;;;;;;;;;;;18077:75;;18255:14;;18237:15;:32;;;;:::i;:::-;18228:6;:41;18224:122;;;18318:12;18304:11;:26;;;;:::i;:::-;18290:40;;18224:122;17987:370;;17982:3;;;;;:::i;:::-;;;;17909:448;;;;18376:11;18369:18;;;17783:612;;;:::o;4636:79::-;4674:7;4701:6;;;;;;;;;;;4694:13;;4636:79;:::o;17337:87::-;17376:13;17409:7;17402:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17337:87;:::o;35009:127::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35123:5:::1;35092:19;:28;35112:7;35092:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35009:127:::0;:::o;18789:660::-;18863:7;18883:19;18905:1;18883:23;;18924:6;18919:492;18940:21;:30;18962:7;18940:30;;;;;;;;;;;;;;;:43;;:50;;;;18936:1;:54;18919:492;;;19012:11;19026:21;:30;19048:7;19026:30;;;;;;;;;;;;;;;:43;;19070:1;19026:46;;;;;;;;:::i;:::-;;;;;;;;;;19012:60;;19087:20;19110:21;:30;19132:7;19110:30;;;;;;;;;;;;;;;:44;;:52;19155:6;19110:52;;;;;;;;;;;;19087:75;;19268:14;;19250:15;:32;;;;:::i;:::-;19241:6;:41;:82;;;;;19313:10;;19295:15;:28;;;;:::i;:::-;19286:6;:37;19241:82;19237:163;;;19372:12;19358:11;:26;;;;:::i;:::-;19344:40;;19237:163;18997:414;;18992:3;;;;;:::i;:::-;;;;18919:492;;;;19430:11;19423:18;;;18789:660;;;:::o;21795:225::-;21888:4;21905:85;21914:12;:10;:12::i;:::-;21928:7;21974:15;21937:11;:25;21949:12;:10;:12::i;:::-;21937:25;;;;;;;;;;;;;;;:34;21963:7;21937:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;21905:8;:85::i;:::-;22008:4;22001:11;;21795:225;;;;:::o;34880:121::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34989:4:::1;34958:19;:28;34978:7;34958:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34880:121:::0;:::o;20737:233::-;20815:4;20838:27;20852:12;:10;:12::i;:::-;20838:13;:27::i;:::-;20837:28;20828:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20898:42;20908:12;:10;:12::i;:::-;20922:9;20933:6;20898:9;:42::i;:::-;20958:4;20951:11;;20737:233;;;;:::o;18408:255::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18605:5:::1;18586:10;:16;18597:4;18586:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;18643:4;18626:29;;;18649:5;18626:29;;;;;;:::i;:::-;;;;;;;;18408:255:::0;;:::o;20978:143::-;21059:7;21086:11;:18;21098:5;21086:18;;;;;;;;;;;;;;;:27;21105:7;21086:27;;;;;;;;;;;;;;;;21079:34;;20978:143;;;;:::o;32948:98::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33031:7:::1;33016:12;;:22;;;;;;;;;;;;;;;;;;32948:98:::0;:::o;22371:174::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22457:1:::1;22435:24;;:10;:24;;;;22427:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22522:15;22507:12;:30;;;;22371:174::o:0;18675:106::-;18733:4;18757:10;:16;18768:4;18757:16;;;;;;;;;;;;;;;;;;;;;;;;;18750:23;;18675:106;;;:::o;33054:84::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33129:1:::1;33110:16;:20;;;;33054:84::o:0;34761:111::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34859:5:::1;34828:19;:28;34848:7;34828:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;34761:111:::0;:::o;33415:206::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14537:1:::1;33474:20;:45;;;;14677:1;33530:16;:36;;;;14809:1;33577:16;:36;;;;33415:206::o:0;5575:244::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5684:1:::1;5664:22;;:8;:22;;;;5656:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5774:8;5745:38;;5766:6;::::0;::::1;;;;;;;;5745:38;;;;;;;;;;;;5803:8;5794:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5575:244:::0;:::o;33146:103::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14442:1:::1;33205:16;:36;;;;33146:103::o:0;15021:27::-;;;;:::o;33817:252::-;4858:12;:10;:12::i;:::-;4848:22;;:6;;;;;;;;;;:22;;;4840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14442:1:::1;33875:16;:36;;;;14537:1;33922:20;:45;;;;14677:1;33978:16;:36;;;;14809:1;34025:16;:36;;;;33817:252::o:0;3237:115::-;3290:15;3333:10;3318:26;;3237:115;:::o;22028:337::-;22138:1;22121:19;;:5;:19;;;;22113:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22219:1;22200:21;;:7;:21;;;;22192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22303:6;22273:11;:18;22285:5;22273:18;;;;;;;;;;;;;;;:27;22292:7;22273:27;;;;;;;;;;;;;;;:36;;;;22341:7;22325:32;;22334:5;22325:32;;;22350:6;22325:32;;;;;;:::i;:::-;;;;;;;;22028:337;;;:::o;22553:1257::-;22691:1;22675:18;;:4;:18;;;;22667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22768:1;22754:16;;:2;:16;;;;22746:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22838:1;22829:6;:10;22821:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22928:10;22913:12;;:25;;;;:::i;:::-;22895:15;:43;:74;;;;;22952:17;22942:6;:27;;22895:74;22894:97;;;;;22983:7;:5;:7::i;:::-;22975:15;;:4;:15;;;;22894:97;22890:167;;;23007:46;;;;;;;;;;:::i;:::-;;;;;;;;22890:167;23232:24;23259:19;:25;23279:4;23259:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23288:19;:23;23308:2;23288:23;;;;;;;;;;;;;;;;;;;;;;;;;23259:52;23232:79;;23326:19;23322:137;;;23397:6;23370:23;23388:4;23370:17;:23::i;:::-;:33;;23362:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23322:137;23554:22;23579:38;23600:4;23606:2;23610:6;23579:20;:38::i;:::-;23554:63;;23684:66;23710:2;23714:14;23730:19;23684:25;:66::i;:::-;23783:2;23768:34;;23777:4;23768:34;;;23787:14;23768:34;;;;;;:::i;:::-;;;;;;;;22656:1154;;22553:1257;;;:::o;23818:4528::-;23931:7;23977:1;23959:20;;:6;:20;;;;23951:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24061:1;24040:23;;:9;:23;;;;24032:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24146:1;24122:21;:25;24114:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;24290:23;24316:21;24290:47;;24419:23;24538:22;24619:6;24614:1757;24635:21;:29;24657:6;24635:29;;;;;;;;;;;;;;;:42;;:49;;;;24631:1;:53;24614:1757;;;24706:11;24720:21;:29;24742:6;24720:29;;;;;;;;;;;;;;;:42;;24763:1;24720:45;;;;;;;;:::i;:::-;;;;;;;;;;24706:59;;24780:20;24803:21;:29;24825:6;24803:29;;;;;;;;;;;;;;;:43;;:51;24847:6;24803:51;;;;;;;;;;;;24780:74;;25083:15;25068:12;:30;25064:230;;;25134:15;25119:30;;25064:230;;;25277:1;25273;:5;;;;:::i;:::-;25253:25;;25064:230;25504:14;;25486:15;:32;;;;:::i;:::-;25477:6;:41;25473:485;;;25616:3;25592:20;;25577:12;:35;;;;:::i;:::-;25576:43;;;;:::i;:::-;25557:15;:63;;;;:::i;:::-;25539:81;;25473:485;;;25673:10;;25655:15;:28;;;;:::i;:::-;25646:6;:37;25642:316;;;25777:3;25757:16;;25742:12;:31;;;;:::i;:::-;25741:39;;;;:::i;:::-;25722:15;:59;;;;:::i;:::-;25704:77;;25642:316;;;25834:10;;25816:15;:28;;;;:::i;:::-;25807:6;:37;25803:155;;;25938:3;25918:16;;25903:12;:31;;;;:::i;:::-;25902:39;;;;:::i;:::-;25883:15;:59;;;;:::i;:::-;25865:77;;25803:155;25642:316;25473:485;26129:12;26075:21;:29;26097:6;26075:29;;;;;;;;;;;;;;;:43;;:51;26119:6;26075:51;;;;;;;;;;;;:66;;;;:::i;:::-;26021:21;:29;26043:6;26021:29;;;;;;;;;;;;;;;:43;;:51;26065:6;26021:51;;;;;;;;;;;:120;;;;26194:12;26176:15;:30;;;;:::i;:::-;26158:48;;26317:1;26298:15;:20;26294:66;;;26339:5;;;;26294:66;24691:1680;;24686:3;;;;;:::i;:::-;;;;24614:1757;;;;26383:47;26404:6;26412:17;26383:20;:47::i;:::-;26572:21;26527;:29;26549:6;26527:29;;;;;;;;;;;;;;;:42;;;:66;;;;:::i;:::-;26482:21;:29;26504:6;26482:29;;;;;;;;;;;;;;;:42;;:111;;;;26729:12;;;;;;;;;;;26728:13;:44;;;;26745:19;:27;26765:6;26745:27;;;;;;;;;;;;;;;;;;;;;;;;;26728:44;:78;;;;26776:19;:30;26796:9;26776:30;;;;;;;;;;;;;;;;;;;;;;;;;26728:78;:108;;;;26823:13;;;;;;;;;;;26810:26;;:9;:26;;;;26728:108;26724:160;;;26871:1;26853:19;;26724:160;26918:1;26900:15;:19;26896:353;;;27038:15;26987:21;:35;27009:12;;;;;;;;;;;26987:35;;;;;;;;;;;;;;;:48;;;:66;;;;:::i;:::-;26936:21;:35;26958:12;;;;;;;;;;;26936:35;;;;;;;;;;;;;;;:48;;:117;;;;27222:15;27145:21;:35;27167:12;;;;;;;;;;;27145:35;;;;;;;;;;;;;;;:49;;:74;15341:10;27145:74;;;;;;;;;;;;:92;;;;:::i;:::-;27068:21;:35;27090:12;;;;;;;;;;;27068:35;;;;;;;;;;;;;;;:49;;:74;15341:10;27068:74;;;;;;;;;;;:169;;;;26896:353;27261:24;27288:41;27307:21;27288:18;:41::i;:::-;27261:68;;27413:19;:27;27433:6;27413:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;27444:19;:30;27464:9;27444:30;;;;;;;;;;;;;;;;;;;;;;;;;27413:61;27409:114;;;27510:1;27491:20;;27409:114;27586:37;27606:16;27586:19;:37::i;:::-;27636:28;27667:24;27685:4;27667:9;:24::i;:::-;27636:55;;27889:20;;27865;:44;;:76;;;;;27927:14;;;;;;;;;;;27926:15;27865:76;:105;;;;;27958:12;;;;;;;;;;;27865:105;:145;;;;;27997:13;;;;;;;;;;;27987:23;;:6;:23;;;;27865:145;27847:317;;;28111:41;28131:20;;28111:19;:41::i;:::-;27847:317;28323:15;28304:16;28280:21;:40;;;;:::i;:::-;:58;;;;:::i;:::-;28273:65;;;;;;;23818:4528;;;;;:::o;28717:2729::-;28840:36;28866:9;28840:25;:36::i;:::-;28985:14;28937:21;:32;28959:9;28937:32;;;;;;;;;;;;;;;:45;;;:62;;;;:::i;:::-;28889:21;:32;28911:9;28889:32;;;;;;;;;;;;;;;:45;;:110;;;;29012:16;29031:21;:32;29053:9;29031:32;;;;;;;;;;;;;;;:45;;:52;;;;29012:71;;29100:19;29096:1490;;;29248:1;29237:8;:12;29233:260;;;29270:21;:32;29292:9;29270:32;;;;;;;;;;;;;;;:45;;15341:10;29270:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29438:14;29364:21;:32;29386:9;29364:32;;;;;;;;;;;;;;;:46;;:71;15341:10;29364:71;;;;;;;;;;;:88;;;;29471:7;;;29233:260;15341:10;29637:21;:32;29659:9;29637:32;;;;;;;;;;;;;;;:45;;29683:1;29637:48;;;;;;;;:::i;:::-;;;;;;;;;;:75;29633:303;;;29881:14;29807:21;:32;29829:9;29807:32;;;;;;;;;;;;;;;:46;;:71;15341:10;29807:71;;;;;;;;;;;;:88;;;;:::i;:::-;29733:21;:32;29755:9;29733:32;;;;;;;;;;;;;;;:46;;:71;15341:10;29733:71;;;;;;;;;;;:162;;;;29914:7;;;29633:303;30058:21;:32;30080:9;30058:32;;;;;;;;;;;;;;;:45;;30109:21;:32;30131:9;30109:32;;;;;;;;;;;;;;;:45;;30166:1;30155:8;:12;;;;:::i;:::-;30109:59;;;;;;;;:::i;:::-;;;;;;;;;;30058:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30189:6;30209:1;30198:8;:12;;;;:::i;:::-;30189:21;;30184:178;30216:1;30212;:5;30184:178;;;30294:21;:32;30316:9;30294:32;;;;;;;;;;;;;;;:45;;30344:1;30340;:5;;;;:::i;:::-;30294:52;;;;;;;;:::i;:::-;;;;;;;;;;30243:21;:32;30265:9;30243:32;;;;;;;;;;;;;;;:45;;30289:1;30243:48;;;;;;;;:::i;:::-;;;;;;;;;:103;;;;30219:3;;;;;:::i;:::-;;;;30184:178;;;;15341:10;30376:21;:32;30398:9;30376:32;;;;;;;;;;;;;;;:45;;30422:1;30376:48;;;;;;;;:::i;:::-;;;;;;;;;:74;;;;30539:14;30465:21;:32;30487:9;30465:32;;;;;;;;;;;;;;;:46;;:71;15341:10;30465:71;;;;;;;;;;;:88;;;;30568:7;;;29096:1490;30613:1;30602:8;:12;30598:228;;;30631:21;:32;30653:9;30631:32;;;;;;;;;;;;;;;:45;;30682:15;30631:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30779:14;30713:21;:32;30735:9;30713:32;;;;;;;;;;;;;;;:46;;:63;30760:15;30713:63;;;;;;;;;;;:80;;;;30808:7;;;30598:228;30838:18;30859:21;:32;30881:9;30859:32;;;;;;;;;;;;;;;:45;;30916:1;30905:8;:12;;;;:::i;:::-;30859:59;;;;;;;;:::i;:::-;;;;;;;;;;30838:80;;31074:8;31056:15;:26;;;;:::i;:::-;31043:10;:39;31039:229;;;31221:14;31160:21;:32;31182:9;31160:32;;;;;;;;;;;;;;;:46;;:58;31207:10;31160:58;;;;;;;;;;;;:75;;;;:::i;:::-;31099:21;:32;31121:9;31099:32;;;;;;;;;;;;;;;:46;;:58;31146:10;31099:58;;;;;;;;;;;:136;;;;31250:7;;;;31039:229;31280:21;:32;31302:9;31280:32;;;;;;;;;;;;;;;:45;;31331:15;31280:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31424:14;31358:21;:32;31380:9;31358:32;;;;;;;;;;;;;;;:46;;:63;31405:15;31358:63;;;;;;;;;;;:80;;;;28829:2617;;28717:2729;;;;:::o;37448:908::-;37530:19;37552:21;:30;37574:7;37552:30;;;;;;;;;;;;;;;:43;;:50;;;;37530:72;;37632:1;37619:9;:14;37615:27;;37635:7;;;37615:27;37671:14;37658:9;:27;37654:228;;37702:148;37763:1;37709:21;:30;37731:7;37709:30;;;;;;;;;;;;;;;:43;;:50;;;;:55;37702:148;;37785:21;:30;37807:7;37785:30;;;;;;;;;;;;;;;:43;;:49;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37702:148;;;37864:7;;;37654:228;37894:19;37933:9;37916:14;:26;;;;:::i;:::-;37894:48;;37955:12;37987:6;37996:9;37987:18;;37982:202;38011:14;38007:1;:18;37982:202;;;38102:21;:30;38124:7;38102:30;;;;;;;;;;;;;;;:43;;38146:1;38102:46;;;;;;;;:::i;:::-;;;;;;;;;;38047:21;:30;38069:7;38047:30;;;;;;;;;;;;;;;:43;;38091:7;38047:52;;;;;;;;:::i;:::-;;;;;;;;;:101;;;;38163:9;;;;;:::i;:::-;;;;38027:3;;;;;:::i;:::-;;;;37982:202;;;;38196:153;38221:21;:30;38243:7;38221:30;;;;;;;;;;;;;;;:43;;:50;;;;38203:14;:68;38196:153;;38288:21;:30;38310:7;38288:30;;;;;;;;;;;;;;;:43;;:49;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38196:153;;;37519:837;;;37448:908;;;:::o;31454:148::-;31527:7;31591:3;31571:16;;31555:13;:32;;;;:::i;:::-;31554:40;;;;:::i;:::-;31547:47;;31454:148;;;:::o;28354:355::-;28522:6;28470:21;:36;28500:4;28470:36;;;;;;;;;;;;;;;:49;;;:58;;;;:::i;:::-;28418:21;:36;28448:4;28418:36;;;;;;;;;;;;;;;:49;;:110;;;;28695:6;28617:21;:36;28647:4;28617:36;;;;;;;;;;;;;;;:50;;:75;15341:10;28617:75;;;;;;;;;;;;:84;;;;:::i;:::-;28539:21;:36;28569:4;28539:36;;;;;;;;;;;;;;;:50;;:75;15341:10;28539:75;;;;;;;;;;;:162;;;;28354:355;:::o;31610:532::-;15500:4;15483:14;;:21;;;;;;;;;;;;;;;;;;31692:22:::1;31717:21;31692:46;;31800:31;31818:12;31800:17;:31::i;:::-;31888:18;31933:14;31909:21;:38;;;;:::i;:::-;31888:59;;32012:12;32030:14;;;;;;;;;;;:19;;32056:10;32030:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32011:60;;;32090:7;32082:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;31681:461;;;15544:5:::0;15527:14;;:22;;;;;;;;;;;;;;;;;;31610:532;:::o;36048:1174::-;36118:23;36144:21;:29;36166:6;36144:29;;;;;;;;;;;;;;;:42;;:49;;;;36118:75;;36228:1;36210:15;:19;36206:58;;;36246:7;;;36206:58;36276:23;36320:10;;36302:15;:28;;;;:::i;:::-;36276:54;;36477:15;36429:21;:29;36451:6;36429:29;;;;;;;;;;;;;;;:42;;36472:1;36429:45;;;;;;;;:::i;:::-;;;;;;;;;;:63;36425:102;;;36509:7;;;;36425:102;36539:23;36577:19;36616:6;36611:366;36632:15;36628:1;:19;36611:366;;;36669:19;36691:21;:29;36713:6;36691:29;;;;;;;;;;;;;;;:42;;36734:1;36691:45;;;;;;;;:::i;:::-;;;;;;;;;;36669:67;;36771:15;36757:11;:29;36753:75;;;36807:5;;;36753:75;36872:21;:29;36894:6;36872:29;;;;;;;;;;;;;;;:43;;:56;36916:11;36872:56;;;;;;;;;;;;36858:11;:70;;;;:::i;:::-;36844:84;;36964:1;36943:22;;36654:323;36649:3;;;;;:::i;:::-;;;;36611:366;;;;36989:48;37010:6;37018:18;36989:20;:48::i;:::-;15341:10;37050:21;:29;37072:6;37050:29;;;;;;;;;;;;;;;:42;;37093:1;37050:45;;;;;;;;:::i;:::-;;;;;;;;;:71;;;;37203:11;37132:21;:29;37154:6;37132:29;;;;;;;;;;;;;;;:43;;:68;15341:10;37132:68;;;;;;;;;;;:82;;;;36107:1115;;;;36048:1174;;:::o;32244:590::-;32371:21;32409:1;32395:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32371:40;;32440:4;32422;32427:1;32422:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32466:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32456:4;32461:1;32456:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32501:62;32518:4;32533:15;;;;;;;;;;;32551:11;32501:8;:62::i;:::-;32602:15;;;;;;;;;;;:66;;;32683:11;32709:1;32753:4;32780;32800:15;32602:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32300:534;32244:590;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:152::-;3916:9;3949:37;3980:5;3949:37;:::i;:::-;3936:50;;3840:152;;;:::o;3998:183::-;4111:63;4168:5;4111:63;:::i;:::-;4106:3;4099:76;3998:183;;:::o;4187:274::-;4306:4;4344:2;4333:9;4329:18;4321:26;;4357:97;4451:1;4440:9;4436:17;4427:6;4357:97;:::i;:::-;4187:274;;;;:::o;4467:118::-;4554:24;4572:5;4554:24;:::i;:::-;4549:3;4542:37;4467:118;;:::o;4591:222::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4735:71;4803:1;4792:9;4788:17;4779:6;4735:71;:::i;:::-;4591:222;;;;:::o;4819:619::-;4896:6;4904;4912;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;5342:2;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5313:118;4819:619;;;;;:::o;5444:329::-;5503:6;5552:2;5540:9;5531:7;5527:23;5523:32;5520:119;;;5558:79;;:::i;:::-;5520:119;5678:1;5703:53;5748:7;5739:6;5728:9;5724:22;5703:53;:::i;:::-;5693:63;;5649:117;5444:329;;;;:::o;5779:86::-;5814:7;5854:4;5847:5;5843:16;5832:27;;5779:86;;;:::o;5871:112::-;5954:22;5970:5;5954:22;:::i;:::-;5949:3;5942:35;5871:112;;:::o;5989:214::-;6078:4;6116:2;6105:9;6101:18;6093:26;;6129:67;6193:1;6182:9;6178:17;6169:6;6129:67;:::i;:::-;5989:214;;;;:::o;6209:329::-;6268:6;6317:2;6305:9;6296:7;6292:23;6288:32;6285:119;;;6323:79;;:::i;:::-;6285:119;6443:1;6468:53;6513:7;6504:6;6493:9;6489:22;6468:53;:::i;:::-;6458:63;;6414:117;6209:329;;;;:::o;6544:118::-;6631:24;6649:5;6631:24;:::i;:::-;6626:3;6619:37;6544:118;;:::o;6668:222::-;6761:4;6799:2;6788:9;6784:18;6776:26;;6812:71;6880:1;6869:9;6865:17;6856:6;6812:71;:::i;:::-;6668:222;;;;:::o;6896:116::-;6966:21;6981:5;6966:21;:::i;:::-;6959:5;6956:32;6946:60;;7002:1;6999;6992:12;6946:60;6896:116;:::o;7018:133::-;7061:5;7099:6;7086:20;7077:29;;7115:30;7139:5;7115:30;:::i;:::-;7018:133;;;;:::o;7157:323::-;7213:6;7262:2;7250:9;7241:7;7237:23;7233:32;7230:119;;;7268:79;;:::i;:::-;7230:119;7388:1;7413:50;7455:7;7446:6;7435:9;7431:22;7413:50;:::i;:::-;7403:60;;7359:114;7157:323;;;;:::o;7486:468::-;7551:6;7559;7608:2;7596:9;7587:7;7583:23;7579:32;7576:119;;;7614:79;;:::i;:::-;7576:119;7734:1;7759:53;7804:7;7795:6;7784:9;7780:22;7759:53;:::i;:::-;7749:63;;7705:117;7861:2;7887:50;7929:7;7920:6;7909:9;7905:22;7887:50;:::i;:::-;7877:60;;7832:115;7486:468;;;;;:::o;7960:474::-;8028:6;8036;8085:2;8073:9;8064:7;8060:23;8056:32;8053:119;;;8091:79;;:::i;:::-;8053:119;8211:1;8236:53;8281:7;8272:6;8261:9;8257:22;8236:53;:::i;:::-;8226:63;;8182:117;8338:2;8364:53;8409:7;8400:6;8389:9;8385:22;8364:53;:::i;:::-;8354:63;;8309:118;7960:474;;;;;:::o;8440:180::-;8488:77;8485:1;8478:88;8585:4;8582:1;8575:15;8609:4;8606:1;8599:15;8626:320;8670:6;8707:1;8701:4;8697:12;8687:22;;8754:1;8748:4;8744:12;8775:18;8765:81;;8831:4;8823:6;8819:17;8809:27;;8765:81;8893:2;8885:6;8882:14;8862:18;8859:38;8856:84;;;8912:18;;:::i;:::-;8856:84;8677:269;8626:320;;;:::o;8952:180::-;9000:77;8997:1;8990:88;9097:4;9094:1;9087:15;9121:4;9118:1;9111:15;9138:191;9178:4;9198:20;9216:1;9198:20;:::i;:::-;9193:25;;9232:20;9250:1;9232:20;:::i;:::-;9227:25;;9271:1;9268;9265:8;9262:34;;;9276:18;;:::i;:::-;9262:34;9321:1;9318;9314:9;9306:17;;9138:191;;;;:::o;9335:182::-;9475:34;9471:1;9463:6;9459:14;9452:58;9335:182;:::o;9523:366::-;9665:3;9686:67;9750:2;9745:3;9686:67;:::i;:::-;9679:74;;9762:93;9851:3;9762:93;:::i;:::-;9880:2;9875:3;9871:12;9864:19;;9523:366;;;:::o;9895:419::-;10061:4;10099:2;10088:9;10084:18;10076:26;;10148:9;10142:4;10138:20;10134:1;10123:9;10119:17;10112:47;10176:131;10302:4;10176:131;:::i;:::-;10168:139;;9895:419;;;:::o;10320:180::-;10368:77;10365:1;10358:88;10465:4;10462:1;10455:15;10489:4;10486:1;10479:15;10506:185;10546:1;10563:20;10581:1;10563:20;:::i;:::-;10558:25;;10597:20;10615:1;10597:20;:::i;:::-;10592:25;;10636:1;10626:35;;10641:18;;:::i;:::-;10626:35;10683:1;10680;10676:9;10671:14;;10506:185;;;;:::o;10697:348::-;10737:7;10760:20;10778:1;10760:20;:::i;:::-;10755:25;;10794:20;10812:1;10794:20;:::i;:::-;10789:25;;10982:1;10914:66;10910:74;10907:1;10904:81;10899:1;10892:9;10885:17;10881:105;10878:131;;;10989:18;;:::i;:::-;10878:131;11037:1;11034;11030:9;11019:20;;10697:348;;;;:::o;11051:247::-;11191:34;11187:1;11179:6;11175:14;11168:58;11260:30;11255:2;11247:6;11243:15;11236:55;11051:247;:::o;11304:366::-;11446:3;11467:67;11531:2;11526:3;11467:67;:::i;:::-;11460:74;;11543:93;11632:3;11543:93;:::i;:::-;11661:2;11656:3;11652:12;11645:19;;11304:366;;;:::o;11676:419::-;11842:4;11880:2;11869:9;11865:18;11857:26;;11929:9;11923:4;11919:20;11915:1;11904:9;11900:17;11893:47;11957:131;12083:4;11957:131;:::i;:::-;11949:139;;11676:419;;;:::o;12101:305::-;12141:3;12160:20;12178:1;12160:20;:::i;:::-;12155:25;;12194:20;12212:1;12194:20;:::i;:::-;12189:25;;12348:1;12280:66;12276:74;12273:1;12270:81;12267:107;;;12354:18;;:::i;:::-;12267:107;12398:1;12395;12391:9;12384:16;;12101:305;;;;:::o;12412:180::-;12460:77;12457:1;12450:88;12557:4;12554:1;12547:15;12581:4;12578:1;12571:15;12598:233;12637:3;12660:24;12678:5;12660:24;:::i;:::-;12651:33;;12706:66;12699:5;12696:77;12693:103;;;12776:18;;:::i;:::-;12693:103;12823:1;12816:5;12812:13;12805:20;;12598:233;;;:::o;12837:143::-;12894:5;12925:6;12919:13;12910:22;;12941:33;12968:5;12941:33;:::i;:::-;12837:143;;;;:::o;12986:351::-;13056:6;13105:2;13093:9;13084:7;13080:23;13076:32;13073:119;;;13111:79;;:::i;:::-;13073:119;13231:1;13256:64;13312:7;13303:6;13292:9;13288:22;13256:64;:::i;:::-;13246:74;;13202:128;12986:351;;;;:::o;13343:332::-;13464:4;13502:2;13491:9;13487:18;13479:26;;13515:71;13583:1;13572:9;13568:17;13559:6;13515:71;:::i;:::-;13596:72;13664:2;13653:9;13649:18;13640:6;13596:72;:::i;:::-;13343:332;;;;;:::o;13681:167::-;13821:19;13817:1;13809:6;13805:14;13798:43;13681:167;:::o;13854:366::-;13996:3;14017:67;14081:2;14076:3;14017:67;:::i;:::-;14010:74;;14093:93;14182:3;14093:93;:::i;:::-;14211:2;14206:3;14202:12;14195:19;;13854:366;;;:::o;14226:419::-;14392:4;14430:2;14419:9;14415:18;14407:26;;14479:9;14473:4;14469:20;14465:1;14454:9;14450:17;14443:47;14507:131;14633:4;14507:131;:::i;:::-;14499:139;;14226:419;;;:::o;14651:223::-;14791:34;14787:1;14779:6;14775:14;14768:58;14860:6;14855:2;14847:6;14843:15;14836:31;14651:223;:::o;14880:366::-;15022:3;15043:67;15107:2;15102:3;15043:67;:::i;:::-;15036:74;;15119:93;15208:3;15119:93;:::i;:::-;15237:2;15232:3;15228:12;15221:19;;14880:366;;;:::o;15252:419::-;15418:4;15456:2;15445:9;15441:18;15433:26;;15505:9;15499:4;15495:20;15491:1;15480:9;15476:17;15469:47;15533:131;15659:4;15533:131;:::i;:::-;15525:139;;15252:419;;;:::o;15677:225::-;15817:34;15813:1;15805:6;15801:14;15794:58;15886:8;15881:2;15873:6;15869:15;15862:33;15677:225;:::o;15908:366::-;16050:3;16071:67;16135:2;16130:3;16071:67;:::i;:::-;16064:74;;16147:93;16236:3;16147:93;:::i;:::-;16265:2;16260:3;16256:12;16249:19;;15908:366;;;:::o;16280:419::-;16446:4;16484:2;16473:9;16469:18;16461:26;;16533:9;16527:4;16523:20;16519:1;16508:9;16504:17;16497:47;16561:131;16687:4;16561:131;:::i;:::-;16553:139;;16280:419;;;:::o;16705:221::-;16845:34;16841:1;16833:6;16829:14;16822:58;16914:4;16909:2;16901:6;16897:15;16890:29;16705:221;:::o;16932:366::-;17074:3;17095:67;17159:2;17154:3;17095:67;:::i;:::-;17088:74;;17171:93;17260:3;17171:93;:::i;:::-;17289:2;17284:3;17280:12;17273:19;;16932:366;;;:::o;17304:419::-;17470:4;17508:2;17497:9;17493:18;17485:26;;17557:9;17551:4;17547:20;17543:1;17532:9;17528:17;17521:47;17585:131;17711:4;17585:131;:::i;:::-;17577:139;;17304:419;;;:::o;17729:224::-;17869:34;17865:1;17857:6;17853:14;17846:58;17938:7;17933:2;17925:6;17921:15;17914:32;17729:224;:::o;17959:366::-;18101:3;18122:67;18186:2;18181:3;18122:67;:::i;:::-;18115:74;;18198:93;18287:3;18198:93;:::i;:::-;18316:2;18311:3;18307:12;18300:19;;17959:366;;;:::o;18331:419::-;18497:4;18535:2;18524:9;18520:18;18512:26;;18584:9;18578:4;18574:20;18570:1;18559:9;18555:17;18548:47;18612:131;18738:4;18612:131;:::i;:::-;18604:139;;18331:419;;;:::o;18756:222::-;18896:34;18892:1;18884:6;18880:14;18873:58;18965:5;18960:2;18952:6;18948:15;18941:30;18756:222;:::o;18984:366::-;19126:3;19147:67;19211:2;19206:3;19147:67;:::i;:::-;19140:74;;19223:93;19312:3;19223:93;:::i;:::-;19341:2;19336:3;19332:12;19325:19;;18984:366;;;:::o;19356:419::-;19522:4;19560:2;19549:9;19545:18;19537:26;;19609:9;19603:4;19599:20;19595:1;19584:9;19580:17;19573:47;19637:131;19763:4;19637:131;:::i;:::-;19629:139;;19356:419;;;:::o;19781:228::-;19921:34;19917:1;19909:6;19905:14;19898:58;19990:11;19985:2;19977:6;19973:15;19966:36;19781:228;:::o;20015:366::-;20157:3;20178:67;20242:2;20237:3;20178:67;:::i;:::-;20171:74;;20254:93;20343:3;20254:93;:::i;:::-;20372:2;20367:3;20363:12;20356:19;;20015:366;;;:::o;20387:419::-;20553:4;20591:2;20580:9;20576:18;20568:26;;20640:9;20634:4;20630:20;20626:1;20615:9;20611:17;20604:47;20668:131;20794:4;20668:131;:::i;:::-;20660:139;;20387:419;;;:::o;20812:223::-;20952:34;20948:1;20940:6;20936:14;20929:58;21021:6;21016:2;21008:6;21004:15;20997:31;20812:223;:::o;21041:366::-;21183:3;21204:67;21268:2;21263:3;21204:67;:::i;:::-;21197:74;;21280:93;21369:3;21280:93;:::i;:::-;21398:2;21393:3;21389:12;21382:19;;21041:366;;;:::o;21413:419::-;21579:4;21617:2;21606:9;21602:18;21594:26;;21666:9;21660:4;21656:20;21652:1;21641:9;21637:17;21630:47;21694:131;21820:4;21694:131;:::i;:::-;21686:139;;21413:419;;;:::o;21838:226::-;21978:34;21974:1;21966:6;21962:14;21955:58;22047:9;22042:2;22034:6;22030:15;22023:34;21838:226;:::o;22070:366::-;22212:3;22233:67;22297:2;22292:3;22233:67;:::i;:::-;22226:74;;22309:93;22398:3;22309:93;:::i;:::-;22427:2;22422:3;22418:12;22411:19;;22070:366;;;:::o;22442:419::-;22608:4;22646:2;22635:9;22631:18;22623:26;;22695:9;22689:4;22685:20;22681:1;22670:9;22666:17;22659:47;22723:131;22849:4;22723:131;:::i;:::-;22715:139;;22442:419;;;:::o;22867:171::-;22906:3;22929:24;22947:5;22929:24;:::i;:::-;22920:33;;22975:4;22968:5;22965:15;22962:41;;;22983:18;;:::i;:::-;22962:41;23030:1;23023:5;23019:13;23012:20;;22867:171;;;:::o;23044:180::-;23092:77;23089:1;23082:88;23189:4;23186:1;23179:15;23213:4;23210:1;23203:15;23230:147;23331:11;23368:3;23353:18;;23230:147;;;;:::o;23383:114::-;;:::o;23503:398::-;23662:3;23683:83;23764:1;23759:3;23683:83;:::i;:::-;23676:90;;23775:93;23864:3;23775:93;:::i;:::-;23893:1;23888:3;23884:11;23877:18;;23503:398;;;:::o;23907:379::-;24091:3;24113:147;24256:3;24113:147;:::i;:::-;24106:154;;24277:3;24270:10;;23907:379;;;:::o;24292:182::-;24432:34;24428:1;24420:6;24416:14;24409:58;24292:182;:::o;24480:366::-;24622:3;24643:67;24707:2;24702:3;24643:67;:::i;:::-;24636:74;;24719:93;24808:3;24719:93;:::i;:::-;24837:2;24832:3;24828:12;24821:19;;24480:366;;;:::o;24852:419::-;25018:4;25056:2;25045:9;25041:18;25033:26;;25105:9;25099:4;25095:20;25091:1;25080:9;25076:17;25069:47;25133:131;25259:4;25133:131;:::i;:::-;25125:139;;24852:419;;;:::o;25277:180::-;25325:77;25322:1;25315:88;25422:4;25419:1;25412:15;25446:4;25443:1;25436:15;25463:85;25508:7;25537:5;25526:16;;25463:85;;;:::o;25554:158::-;25612:9;25645:61;25663:42;25672:32;25698:5;25672:32;:::i;:::-;25663:42;:::i;:::-;25645:61;:::i;:::-;25632:74;;25554:158;;;:::o;25718:147::-;25813:45;25852:5;25813:45;:::i;:::-;25808:3;25801:58;25718:147;;:::o;25871:114::-;25938:6;25972:5;25966:12;25956:22;;25871:114;;;:::o;25991:184::-;26090:11;26124:6;26119:3;26112:19;26164:4;26159:3;26155:14;26140:29;;25991:184;;;;:::o;26181:132::-;26248:4;26271:3;26263:11;;26301:4;26296:3;26292:14;26284:22;;26181:132;;;:::o;26319:108::-;26396:24;26414:5;26396:24;:::i;:::-;26391:3;26384:37;26319:108;;:::o;26433:179::-;26502:10;26523:46;26565:3;26557:6;26523:46;:::i;:::-;26601:4;26596:3;26592:14;26578:28;;26433:179;;;;:::o;26618:113::-;26688:4;26720;26715:3;26711:14;26703:22;;26618:113;;;:::o;26767:732::-;26886:3;26915:54;26963:5;26915:54;:::i;:::-;26985:86;27064:6;27059:3;26985:86;:::i;:::-;26978:93;;27095:56;27145:5;27095:56;:::i;:::-;27174:7;27205:1;27190:284;27215:6;27212:1;27209:13;27190:284;;;27291:6;27285:13;27318:63;27377:3;27362:13;27318:63;:::i;:::-;27311:70;;27404:60;27457:6;27404:60;:::i;:::-;27394:70;;27250:224;27237:1;27234;27230:9;27225:14;;27190:284;;;27194:14;27490:3;27483:10;;26891:608;;;26767:732;;;;:::o;27505:831::-;27768:4;27806:3;27795:9;27791:19;27783:27;;27820:71;27888:1;27877:9;27873:17;27864:6;27820:71;:::i;:::-;27901:80;27977:2;27966:9;27962:18;27953:6;27901:80;:::i;:::-;28028:9;28022:4;28018:20;28013:2;28002:9;27998:18;27991:48;28056:108;28159:4;28150:6;28056:108;:::i;:::-;28048:116;;28174:72;28242:2;28231:9;28227:18;28218:6;28174:72;:::i;:::-;28256:73;28324:3;28313:9;28309:19;28300:6;28256:73;:::i;:::-;27505:831;;;;;;;;:::o

Swarm Source

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