ETH Price: $3,916.06 (+0.12%)

Token

ERC-20: TruthGPT (TRUTH)
 

Overview

Max Total Supply

1,000,000,000,000 TRUTH

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,348,911,967.746539797 TRUTH

Value
$0.00
0x9f40fc719aac70127dddcc5f5cd59cd6a78a680e
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:
TRUTHContract

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-17
*/

// SPDX-License-Identifier: MIT

/*
*/

pragma solidity ^0.8.17;

abstract contract Project {
    address public marketingWallet = 0x2a7A95CA3AC8392bd5D61e7C7a12904aFbC9278F;
    address public devWallet = 0x2a7A95CA3AC8392bd5D61e7C7a12904aFbC9278F;

    string constant _name = "TruthGPT";
    string constant _symbol = "TRUTH";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1 * 10**12 * 10**_decimals;

    uint256 public _maxTxAmount = (_totalSupply * 20) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%]
    uint256 public _maxWalletToken = (_totalSupply * 20) / 1000; //

    uint256 public buyBurnFee         = 0;
    uint256 public buyFee             = 20;
    uint256 public buyTotalFee        = buyFee + buyBurnFee;

    uint256 public swapLpFee          = 0;
    uint256 public swapMarketing      = 20;
    uint256 public swapTreasuryFee    = 30;
    uint256 public swapBurnFee        = 0;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee + swapBurnFee;

    uint256 public transFee           = 0;

    uint256 public feeDenominator     = 100;

}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {

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

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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


/**
 * @dev 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;
    uint256 private _lockTime;

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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


/**
 * MainContract
 */
contract TRUTHContract is Project, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isBurnExempt;
    address public burnTo;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 30 / 10000;
    uint256 public swapAmount = _totalSupply * 100 / 10000;

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

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        contractRouter = _uniswapV2Router;

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isFeeExempt[marketingWallet] = true;
        isMaxExempt[marketingWallet] = true;
        isTxLimitExempt[marketingWallet] = true;

        isBurnExempt[uniswapV2Pair] = true;
        isBurnExempt[address(this)] = true;
        isBurnExempt[DEAD] = true;
        isBurnExempt[marketingWallet] = true;

        burnTo = DEAD;
        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external onlyOwner() {
        _maxTxAmount = amount;
    }

// *** 
// Functions for the burning mechanism 
// *** 

    /**
    * Burn an amount of tokens for the current wallet (if they have enough)
    */
    function burnTokens(uint256 amount) external {
        // does this user have enough tokens to perform the burn
        if(_balances[msg.sender] > amount) {
            _basicTransfer(msg.sender, DEAD, amount);
        }
    }

    function setBurnTo(address newBurnTo) external onlyOwner() {
        burnTo = newBurnTo;
    }

    function setBuyBurnFee(uint256 newBuyBurnFee) external onlyOwner() {
        buyBurnFee = newBuyBurnFee;
    }

    function setSwapBurnFee(uint256 newSwapBurnFee) external onlyOwner() {
        swapBurnFee = newSwapBurnFee;
    }

    function manage_burn_exempt(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isBurnExempt[addresses[i]] = status;
        }
    }

// *** 
// End functions for the burning mechanism 
// *** 

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != marketingWallet && 
            recipient != devWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        if (sender == uniswapV2Pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]
        ){
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        // but no point if the recipient is exempt
        // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount
        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        // Do NOT take a fee if sender AND recipient are NOT the contract
        // i.e. you are doing a transfer
        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

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

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

// *** 
// Handle Fees
// *** 

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {

        uint256 feeToTake = isSell ? swapTotalFee.sub(swapBurnFee) : buyTotalFee.sub(buyBurnFee);
        uint256 burnToTake = isSell ? swapBurnFee : buyBurnFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        uint256 burnAmount = burnToTake > 0 ? amount.mul(burnToTake).mul(100).div(feeDenominator * 100) : 0;

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        if(burnAmount > 0) {
            if(_balances[address(this)] > burnAmount) {
                _basicTransfer(address(this), burnTo, burnAmount);
            }
        }

        return amount.sub(feeAmount).sub(burnAmount);
    }

// *** 
// End Handle Fees
// *** 

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(swapTotalFee.sub(swapBurnFee)).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = contractRouter.WETH();

        uint256 balanceBefore = address(this).balance;

        contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(devWallet).call{value: amountETHTreasury, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            contractRouter.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

// *** 
// Various exempt functions
// *** 

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

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

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

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

// *** 
// End various exempt functions
// *** 


// ***
// Start fee things
// ***

    function setTransFee(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
        require(swapTotalFee < 90, "Fees cannot be that high");
    }

    function setBuyFees(uint256 buyTax) external onlyOwner() {
        buyTotalFee = buyTax;
    }


// ***
// end fee stuff. 
// ***

    function setTreasuryFeeReceiver(address _newWallet) external onlyOwner() {
        isFeeExempt[devWallet] = false;
        isFeeExempt[_newWallet] = true;
        devWallet = _newWallet;
    }

    function setMarketingWallet(address _newWallet) external onlyOwner() {
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newWallet] = true;

        isMaxExempt[_newWallet] = true;

        marketingWallet = _newWallet;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newdevWallet ) external onlyOwner() {

        isFeeExempt[devWallet] = false;
        isFeeExempt[_newdevWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;

        isMaxExempt[_newMarketingWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
        devWallet = _newdevWallet;
    }

// ***
// Swap settings
// ***

    /// @notice setting this will set the threshold for swap back. i.e. the CA should have this number of tokens before considering a swap
    /// @param _amount the amount for the threshold, remember to add decimalsa at the end
    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    /// @notice When we've reached the threshold. how many tokens should we sell
    /// @param _amount the amount to sell, remember to add decimalsa at the end
    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

// ***
// End Swap settings
// ***

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_burn_exempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBurnTo","type":"address"}],"name":"setBurnTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyBurnFee","type":"uint256"}],"name":"setBuyBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newdevWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapBurnFee","type":"uint256"}],"name":"setSwapBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTreasuryFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052732a7a95ca3ac8392bd5d61e7c7a12904afbc9278f6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732a7a95ca3ac8392bd5d61e7c7a12904afbc9278f600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000bd919062000e50565b64e8d4a51000620000cf919062000ea1565b6002556103e86014600254620000e6919062000ea1565b620000f2919062000f1b565b6003556103e8601460025462000109919062000ea1565b62000115919062000f1b565b6004556000600555601460065560055460065462000134919062000f53565b60075560006008556014600955601e600a556000600b55600b54600a5460085460095462000163919062000f53565b6200016f919062000f53565b6200017b919062000f53565b600c556000600d556064600e5561dead601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506014601d556064601e556000601f60006101000a81548160ff0219169083151502179055506001601f60016101000a81548160ff021916908315150217905550600a601f60026101000a81548160ff021916908360ff1602179055506001602160006101000a81548160ff021916908315150217905550612710601e60025462000298919062000ea1565b620002a4919062000f1b565b6022556127106064600254620002bb919062000ea1565b620002c7919062000f1b565b602355348015620002d757600080fd5b506000620002ea62000cae60201b60201c565b905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000414919062000ff8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a2919062000ff8565b6040518363ffffffff1660e01b8152600401620004c19291906200103b565b6020604051808303816000875af1158015620004e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000507919062000ff8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000c9f919062001079565b60405180910390a35062001096565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d445780860481111562000d1c5762000d1b62000cb6565b5b600185161562000d2c5780820291505b808102905062000d3c8562000ce5565b945062000cfc565b94509492505050565b60008262000d5f576001905062000e32565b8162000d6f576000905062000e32565b816001811462000d88576002811462000d935762000dc9565b600191505062000e32565b60ff84111562000da85762000da762000cb6565b5b8360020a91508482111562000dc25762000dc162000cb6565b5b5062000e32565b5060208310610133831016604e8410600b841016171562000e035782820a90508381111562000dfd5762000dfc62000cb6565b5b62000e32565b62000e12848484600162000cf2565b9250905081840481111562000e2c5762000e2b62000cb6565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e5d8262000e39565b915062000e6a8362000e43565b925062000e997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d4d565b905092915050565b600062000eae8262000e39565b915062000ebb8362000e39565b925082820262000ecb8162000e39565b9150828204841483151762000ee55762000ee462000cb6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f288262000e39565b915062000f358362000e39565b92508262000f485762000f4762000eec565b5b828204905092915050565b600062000f608262000e39565b915062000f6d8362000e39565b925082820190508082111562000f885762000f8762000cb6565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fc08262000f93565b9050919050565b62000fd28162000fb3565b811462000fde57600080fd5b50565b60008151905062000ff28162000fc7565b92915050565b60006020828403121562001011576200101062000f8e565b5b6000620010218482850162000fe1565b91505092915050565b620010358162000fb3565b82525050565b60006040820190506200105260008301856200102a565b6200106160208301846200102a565b9392505050565b620010738162000e39565b82525050565b600060208201905062001090600083018462001068565b92915050565b60805160a051615d9b6200110260003960008181611c9e01528181612aed0152818161381101528181613864015281816138bb0152818161399f01528181613bb201526147140152600081816121900152818161492d01528181614a0f0152614cac0152615d9b6000f3fe6080604052600436106103fe5760003560e01c806367ac77b411610213578063af2a31a611610123578063dd62ed3e116100ab578063ee9ef29e1161007a578063ee9ef29e14610f02578063f2fde38b14610f2b578063f53fd58414610f54578063f84ba65d14610f7f578063ffb54a9914610fa857610405565b8063dd62ed3e14610e46578063e53c30b014610e83578063e632313c14610eae578063e71dc3f514610ed757610405565b8063d51ed1c8116100f2578063d51ed1c814610d65578063d7c0103214610da2578063dcf7aef314610dcb578063dd395c6314610df4578063dd46706414610e1d57610405565b8063af2a31a614610cbd578063b6c5232414610ce6578063bd9ab53714610d11578063ca33e64c14610d3a57610405565b80637d1db4a5116101a65780638ea5220f116101755780638ea5220f14610bea57806395d89b4114610c15578063a312332014610c40578063a69df4b514610c69578063a9059cbb14610c8057610405565b80637d1db4a514610b405780638038cbd314610b6b578063893d20e814610b945780638da5cb5b14610bbf57610405565b8063715018a6116101e2578063715018a614610aa8578063722b62ad14610abf57806375f0a87414610aea57806378109e5414610b1557610405565b806367ac77b4146109ec5780636d1b229d14610a175780636ddd171314610a4057806370a0823114610a6b57610405565b80632bdaeae11161030e57806346e421a2116102a1578063571ac8b011610270578063571ac8b0146109095780635c85974f146109465780635d098b381461096f578063617fe0ed14610998578063658d4b7f146109c357610405565b806346e421a21461085f578063470624021461088a57806349bd5a5e146108b557806350db71fb146108e057610405565b80633705b392116102dd5780633705b392146107b75780633ba061d9146107e2578063405dcb1b1461080d57806344a33fd21461083657610405565b80632bdaeae11461070d5780632d594567146107385780632e8fa82114610761578063313ce5671461078c57610405565b8063180b0d7e116103915780631e25dc54116103605780631e25dc5414610628578063201e79911461065357806323b872dd1461067c57806329e04b4a146106b95780632b112e49146106e257610405565b8063180b0d7e1461058057806318160ddd146105ab5780631ad017b9146105d65780631da1db5e146105ff57610405565b8063095ea7b3116103cd578063095ea7b3146104b45780630d295980146104f15780631161ae391461051a57806312b9efa91461055757610405565b8063026f7d151461040a5780630445b6671461043557806306fdde031461046057806309302dc61461048b57610405565b3661040557005b600080fd5b34801561041657600080fd5b5061041f610fd3565b60405161042c9190614df2565b60405180910390f35b34801561044157600080fd5b5061044a610fd9565b6040516104579190614df2565b60405180910390f35b34801561046c57600080fd5b50610475610fdf565b6040516104829190614e9d565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190614ef5565b61101c565b005b3480156104c057600080fd5b506104db60048036038101906104d69190614f80565b6110d7565b6040516104e89190614fdb565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190615022565b6111c9565b005b34801561052657600080fd5b50610541600480360381019061053c919061504f565b61127d565b60405161054e9190614fdb565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190614ef5565b611292565b005b34801561058c57600080fd5b50610595611333565b6040516105a29190614df2565b60405180910390f35b3480156105b757600080fd5b506105c0611339565b6040516105cd9190614df2565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f8919061508f565b611343565b005b34801561060b57600080fd5b5061062660048036038101906106219190614ef5565b6114f0565b005b34801561063457600080fd5b5061063d61160e565b60405161064a9190614df2565b60405180910390f35b34801561065f57600080fd5b5061067a6004803603810190610675919061504f565b611614565b005b34801561068857600080fd5b506106a3600480360381019061069e91906150bc565b6116bd565b6040516106b09190614fdb565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db9190614ef5565b6118bd565b005b3480156106ee57600080fd5b506106f761195e565b6040516107049190614df2565b60405180910390f35b34801561071957600080fd5b506107226119e0565b60405161072f9190614df2565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190615148565b6119e6565b005b34801561076d57600080fd5b50610776611ab6565b6040516107839190614df2565b60405180910390f35b34801561079857600080fd5b506107a1611abc565b6040516107ae9190615197565b60405180910390f35b3480156107c357600080fd5b506107cc611ac5565b6040516107d99190614df2565b60405180910390f35b3480156107ee57600080fd5b506107f7611acb565b60405161080491906151c1565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190614ef5565b611af1565b005b34801561084257600080fd5b5061085d60048036038101906108589190614ef5565b611b92565b005b34801561086b57600080fd5b50610874611c90565b6040516108819190614df2565b60405180910390f35b34801561089657600080fd5b5061089f611c96565b6040516108ac9190614df2565b60405180910390f35b3480156108c157600080fd5b506108ca611c9c565b6040516108d791906151c1565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906151dc565b611cc0565b005b34801561091557600080fd5b50610930600480360381019061092b919061508f565b611db2565b60405161093d9190614fdb565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190614ef5565b611de5565b005b34801561097b57600080fd5b506109966004803603810190610991919061508f565b611e86565b005b3480156109a457600080fd5b506109ad612089565b6040516109ba9190614fdb565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e591906151dc565b61209c565b005b3480156109f857600080fd5b50610a0161218e565b604051610a0e919061527b565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190614ef5565b6121b2565b005b348015610a4c57600080fd5b50610a5561222b565b604051610a629190614fdb565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d919061508f565b61223e565b604051610a9f9190614df2565b60405180910390f35b348015610ab457600080fd5b50610abd612287565b005b348015610acb57600080fd5b50610ad46123df565b604051610ae19190615197565b60405180910390f35b348015610af657600080fd5b50610aff6123f2565b604051610b0c91906151c1565b60405180910390f35b348015610b2157600080fd5b50610b2a612416565b604051610b379190614df2565b60405180910390f35b348015610b4c57600080fd5b50610b5561241c565b604051610b629190614df2565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d9190615296565b612422565b005b348015610ba057600080fd5b50610ba961254b565b604051610bb691906151c1565b60405180910390f35b348015610bcb57600080fd5b50610bd461255a565b604051610be191906151c1565b60405180910390f35b348015610bf657600080fd5b50610bff612584565b604051610c0c91906151c1565b60405180910390f35b348015610c2157600080fd5b50610c2a6125aa565b604051610c379190614e9d565b60405180910390f35b348015610c4c57600080fd5b50610c676004803603810190610c629190615362565b6125e7565b005b348015610c7557600080fd5b50610c7e612721565b005b348015610c8c57600080fd5b50610ca76004803603810190610ca29190614f80565b6128f8565b604051610cb49190614fdb565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf919061508f565b61290d565b005b348015610cf257600080fd5b50610cfb6129e8565b604051610d089190614df2565b60405180910390f35b348015610d1d57600080fd5b50610d386004803603810190610d339190614ef5565b6129f2565b005b348015610d4657600080fd5b50610d4f612aad565b604051610d5c91906151c1565b60405180910390f35b348015610d7157600080fd5b50610d8c6004803603810190610d879190614ef5565b612ad3565b604051610d999190614df2565b60405180910390f35b348015610dae57600080fd5b50610dc96004803603810190610dc491906153c2565b612b43565b005b348015610dd757600080fd5b50610df26004803603810190610ded9190614ef5565b612e9c565b005b348015610e0057600080fd5b50610e1b6004803603810190610e1691906151dc565b612f3d565b005b348015610e2957600080fd5b50610e446004803603810190610e3f9190614ef5565b61302f565b005b348015610e5257600080fd5b50610e6d6004803603810190610e689190615415565b6131fd565b604051610e7a9190614df2565b60405180910390f35b348015610e8f57600080fd5b50610e98613284565b604051610ea59190614df2565b60405180910390f35b348015610eba57600080fd5b50610ed56004803603810190610ed09190614ef5565b61328a565b005b348015610ee357600080fd5b50610eec613344565b604051610ef99190614df2565b60405180910390f35b348015610f0e57600080fd5b50610f296004803603810190610f249190614ef5565b61334a565b005b348015610f3757600080fd5b50610f526004803603810190610f4d919061508f565b6133eb565b005b348015610f6057600080fd5b50610f696135b1565b604051610f769190614df2565b60405180910390f35b348015610f8b57600080fd5b50610fa66004803603810190610fa191906151dc565b6135b7565b005b348015610fb457600080fd5b50610fbd6136a9565b604051610fca9190614fdb565b60405180910390f35b60095481565b60225481565b60606040518060400160405280600881526020017f5472757468475054000000000000000000000000000000000000000000000000815250905090565b6110246136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa906154a1565b60405180910390fd5b6103e8816002546110c491906154f0565b6110ce9190615561565b60048190555050565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111b79190614df2565b60405180910390a36001905092915050565b6111d16136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906154a1565b60405180910390fd5b80601f60006101000a81548160ff02191690831515021790555050565b60008261128983612ad3565b11905092915050565b61129a6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611320906154a1565b60405180910390fd5b80600b8190555050565b600e5481565b6000600254905090565b61134b6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d1906154a1565b60405180910390fd5b600060166000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114f86136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906154a1565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846115d491906154f0565b6115de9190615561565b9081150290604051600060405180830381858888f19350505050158015611609573d6000803e3d6000fd5b505050565b600d5481565b61161c6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906154a1565b60405180910390fd5b81601d8190555080601e819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118a957611828826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c49092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6118b4848484613719565b90509392505050565b6118c56136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b906154a1565b60405180910390fd5b8060228190555050565b60006119db61198e601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661223e565b6119cd6119bc601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661223e565b600254613fe690919063ffffffff16565b613fe690919063ffffffff16565b905090565b600b5481565b6119ee6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a74906154a1565b60405180910390fd5b81601f60016101000a81548160ff02191690831515021790555080601f60026101000a81548160ff021916908360ff1602179055505050565b60235481565b60006009905090565b60075481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611af96136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f906154a1565b60405180910390fd5b8060058190555050565b611b9a6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906154a1565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484611c5691906154f0565b611c609190615561565b9081150290604051600060405180830381858888f19350505050158015611c8b573d6000803e3d6000fd5b505050565b60085481565b60065481565b7f000000000000000000000000000000000000000000000000000000000000000081565b611cc86136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e906154a1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611dde827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6110d7565b9050919050565b611ded6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e73906154a1565b60405180910390fd5b8060038190555050565b611e8e6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f14906154a1565b60405180910390fd5b6000601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f60019054906101000a900460ff1681565b6120a46136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a906154a1565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122285761222633601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ffc565b505b50565b602160009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61228f6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612315906154a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601f60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61242a6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b0906154a1565b60405180910390fd5b836008819055508260098190555081600a819055506124f3826124e585876141cf90919063ffffffff16565b6141cf90919063ffffffff16565b600c8190555080600e81905550605a600c5410612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c906155de565b60405180910390fd5b50505050565b600061255561255a565b905090565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600581526020017f5452555448000000000000000000000000000000000000000000000000000000815250905090565b6125ef6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612675906154a1565b60405180910390fd5b60005b8383905081101561271b5781601a60008686858181106126a4576126a36155fe565b5b90506020020160208101906126b9919061508f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806127149061562d565b9050612681565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906156e7565b60405180910390fd5b60115442116127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615753565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612905338484613719565b905092915050565b6129156136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299b906154a1565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601154905090565b6129fa6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a80906154a1565b60405180910390fd5b6103e881600254612a9a91906154f0565b612aa49190615561565b60038190555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612b3c612ae061195e565b612b2e612b1f6002612b117f000000000000000000000000000000000000000000000000000000000000000061223e565b6141e590919063ffffffff16565b856141e590919063ffffffff16565b6141fb90919063ffffffff16565b9050919050565b612b4b6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd1906154a1565b60405180910390fd5b600060166000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612ea46136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a906154a1565b60405180910390fd5b8060078190555050565b612f456136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb906154a1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6130376136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bd906154a1565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426131779190615773565b601181905550600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b6132926136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613318906154a1565b60405180910390fd5b60225481111561333957602254602381905550613341565b806023819055505b50565b60055481565b6133526136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d8906154a1565b60405180910390fd5b80600d8190555050565b6133f36136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613479906154a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036134f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e890615819565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6135bf6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461364e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613645906154a1565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900460ff1681565b600033905090565b600083831115829061370c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137039190614e9d565b60405180910390fd5b5082840390509392505050565b6000602460009054906101000a900460ff16156137425761373b848484613ffc565b9050613fdf565b61374a61255a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156137b8575061378861255a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561380d57601f60009054906101000a900460ff1661380c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380390615885565b60405180910390fd5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561390a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156139965750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156139ee57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a46575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613aa05750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613afa5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613bb0576000613b0a8661223e565b9050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613bae576004548582613b6c9190615773565b1115613bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba490615917565b60405180910390fd5b5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015613c175750601f60019054906101000a900460ff165b8015613c6d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d555742602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cea906159a9565b60405180910390fd5b601f60029054906101000a900460ff1660ff1642613d119190615773565b602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613db157613db08685614211565b5b613e3a846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c49092919063ffffffff16565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613ea5576000600d541115613ea057613e9d87866142ae565b90505b613edd565b613eae87614417565b613eb85784613ec4565b613ec387868561446e565b5b9050613ece614710565b15613edc57613edb6147e5565b5b5b613f2f81601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fcf9190614df2565b60405180910390a3600193505050505b9392505050565b60008183613ff491906159c9565b905092915050565b6000614087826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c49092919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411c82601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141bc9190614df2565b60405180910390a3600190509392505050565b600081836141dd9190615773565b905092915050565b600081836141f391906154f0565b905092915050565b600081836142099190615561565b905092915050565b6003548111158061426b5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6142aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a190615a49565b60405180910390fd5b5050565b600080600d54905060006142fe6064600e546142ca91906154f0565b6142f060646142e286896141e590919063ffffffff16565b6141e590919063ffffffff16565b6141fb90919063ffffffff16565b905061435281601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143f29190614df2565b60405180910390a361440d8185613fe690919063ffffffff16565b9250505092915050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080826144925761448d600554600754613fe690919063ffffffff16565b6144aa565b6144a9600b54600c54613fe690919063ffffffff16565b5b90506000836144bb576005546144bf565b600b545b905060006145096064600e546144d591906154f0565b6144fb60646144ed878b6141e590919063ffffffff16565b6141e590919063ffffffff16565b6141fb90919063ffffffff16565b9050600080831161451b576000614562565b6145616064600e5461452d91906154f0565b6145536064614545878c6141e590919063ffffffff16565b6141e590919063ffffffff16565b6141fb90919063ffffffff16565b5b90506145b682601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516146569190614df2565b60405180910390a360008111156146de5780601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146dd576146db30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ffc565b505b5b614703816146f5848a613fe690919063ffffffff16565b613fe690919063ffffffff16565b9450505050509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561477b5750602460009054906101000a900460ff16155b80156147935750602160009054906101000a900460ff165b80156147e05750602254601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602460006101000a81548160ff0219169083151502179055506000614810601d54601e5461127d565b61481c5760085461481f565b60005b905060006148736002614865614842600b54600c54613fe690919063ffffffff16565b614857866022546141e590919063ffffffff16565b6141fb90919063ffffffff16565b6141fb90919063ffffffff16565b9050600061488c82602354613fe690919063ffffffff16565b90506000600267ffffffffffffffff8111156148ab576148aa615a69565b5b6040519080825280602002602001820160405280156148d95781602001602082028036833780820191505090505b50905030816000815181106148f1576148f06155fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149ba9190615aad565b816001815181106149ce576149cd6155fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614a6f959493929190615bd3565b600060405180830381600087803b158015614a8957600080fd5b505af1158015614a9d573d6000803e3d6000fd5b505050506000614ab68247613fe690919063ffffffff16565b90506000614ae2614ad16002896141fb90919063ffffffff16565b600c54613fe690919063ffffffff16565b90506000614b206002614b1284614b04600854886141e590919063ffffffff16565b6141fb90919063ffffffff16565b6141fb90919063ffffffff16565b90506000614b4b83614b3d600954876141e590919063ffffffff16565b6141fb90919063ffffffff16565b90506000614b7684614b68600a54886141e590919063ffffffff16565b6141fb90919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051614bc390615c5e565b600060405180830381858888f193505050503d8060008114614c01576040519150601f19603f3d011682016040523d82523d6000602084013e614c06565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051614c5490615c5e565b600060405180830381858888f193505050503d8060008114614c92576040519150601f19603f3d011682016040523d82523d6000602084013e614c97565b606091505b5050809150506000905060008a1115614db1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614d3196959493929190615c73565b60606040518083038185885af1158015614d4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614d749190615ce9565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051614da8929190615d3c565b60405180910390a15b50505050505050505050506000602460006101000a81548160ff021916908315150217905550565b6000819050919050565b614dec81614dd9565b82525050565b6000602082019050614e076000830184614de3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614e47578082015181840152602081019050614e2c565b60008484015250505050565b6000601f19601f8301169050919050565b6000614e6f82614e0d565b614e798185614e18565b9350614e89818560208601614e29565b614e9281614e53565b840191505092915050565b60006020820190508181036000830152614eb78184614e64565b905092915050565b600080fd5b600080fd5b614ed281614dd9565b8114614edd57600080fd5b50565b600081359050614eef81614ec9565b92915050565b600060208284031215614f0b57614f0a614ebf565b5b6000614f1984828501614ee0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614f4d82614f22565b9050919050565b614f5d81614f42565b8114614f6857600080fd5b50565b600081359050614f7a81614f54565b92915050565b60008060408385031215614f9757614f96614ebf565b5b6000614fa585828601614f6b565b9250506020614fb685828601614ee0565b9150509250929050565b60008115159050919050565b614fd581614fc0565b82525050565b6000602082019050614ff06000830184614fcc565b92915050565b614fff81614fc0565b811461500a57600080fd5b50565b60008135905061501c81614ff6565b92915050565b60006020828403121561503857615037614ebf565b5b60006150468482850161500d565b91505092915050565b6000806040838503121561506657615065614ebf565b5b600061507485828601614ee0565b925050602061508585828601614ee0565b9150509250929050565b6000602082840312156150a5576150a4614ebf565b5b60006150b384828501614f6b565b91505092915050565b6000806000606084860312156150d5576150d4614ebf565b5b60006150e386828701614f6b565b93505060206150f486828701614f6b565b925050604061510586828701614ee0565b9150509250925092565b600060ff82169050919050565b6151258161510f565b811461513057600080fd5b50565b6000813590506151428161511c565b92915050565b6000806040838503121561515f5761515e614ebf565b5b600061516d8582860161500d565b925050602061517e85828601615133565b9150509250929050565b6151918161510f565b82525050565b60006020820190506151ac6000830184615188565b92915050565b6151bb81614f42565b82525050565b60006020820190506151d660008301846151b2565b92915050565b600080604083850312156151f3576151f2614ebf565b5b600061520185828601614f6b565b92505060206152128582860161500d565b9150509250929050565b6000819050919050565b600061524161523c61523784614f22565b61521c565b614f22565b9050919050565b600061525382615226565b9050919050565b600061526582615248565b9050919050565b6152758161525a565b82525050565b6000602082019050615290600083018461526c565b92915050565b600080600080608085870312156152b0576152af614ebf565b5b60006152be87828801614ee0565b94505060206152cf87828801614ee0565b93505060406152e087828801614ee0565b92505060606152f187828801614ee0565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112615322576153216152fd565b5b8235905067ffffffffffffffff81111561533f5761533e615302565b5b60208301915083602082028301111561535b5761535a615307565b5b9250929050565b60008060006040848603121561537b5761537a614ebf565b5b600084013567ffffffffffffffff81111561539957615398614ec4565b5b6153a58682870161530c565b935093505060206153b88682870161500d565b9150509250925092565b6000806000606084860312156153db576153da614ebf565b5b60006153e986828701614f6b565b93505060206153fa86828701614f6b565b925050604061540b86828701614f6b565b9150509250925092565b6000806040838503121561542c5761542b614ebf565b5b600061543a85828601614f6b565b925050602061544b85828601614f6b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061548b602083614e18565b915061549682615455565b602082019050919050565b600060208201905081810360008301526154ba8161547e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006154fb82614dd9565b915061550683614dd9565b925082820261551481614dd9565b9150828204841483151761552b5761552a6154c1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061556c82614dd9565b915061557783614dd9565b92508261558757615586615532565b5b828204905092915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b60006155c8601883614e18565b91506155d382615592565b602082019050919050565b600060208201905081810360008301526155f7816155bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061563882614dd9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361566a576156696154c1565b5b600182019050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006156d1602383614e18565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061573d601f83614e18565b915061574882615707565b602082019050919050565b6000602082019050818103600083015261576c81615730565b9050919050565b600061577e82614dd9565b915061578983614dd9565b92508282019050808211156157a1576157a06154c1565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615803602683614e18565b915061580e826157a7565b604082019050919050565b60006020820190508181036000830152615832816157f6565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061586f601483614e18565b915061587a82615839565b602082019050919050565b6000602082019050818103600083015261589e81615862565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615901603e83614e18565b915061590c826158a5565b604082019050919050565b60006020820190508181036000830152615930816158f4565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000615993602583614e18565b915061599e82615937565b604082019050919050565b600060208201905081810360008301526159c281615986565b9050919050565b60006159d482614dd9565b91506159df83614dd9565b92508282039050818111156159f7576159f66154c1565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615a33601183614e18565b9150615a3e826159fd565b602082019050919050565b60006020820190508181036000830152615a6281615a26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615aa781614f54565b92915050565b600060208284031215615ac357615ac2614ebf565b5b6000615ad184828501615a98565b91505092915050565b6000819050919050565b6000615aff615afa615af584615ada565b61521c565b614dd9565b9050919050565b615b0f81615ae4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4a81614f42565b82525050565b6000615b5c8383615b41565b60208301905092915050565b6000602082019050919050565b6000615b8082615b15565b615b8a8185615b20565b9350615b9583615b31565b8060005b83811015615bc6578151615bad8882615b50565b9750615bb883615b68565b925050600181019050615b99565b5085935050505092915050565b600060a082019050615be86000830188614de3565b615bf56020830187615b06565b8181036040830152615c078186615b75565b9050615c1660608301856151b2565b615c236080830184614de3565b9695505050505050565b600081905092915050565b50565b6000615c48600083615c2d565b9150615c5382615c38565b600082019050919050565b6000615c6982615c3b565b9150819050919050565b600060c082019050615c8860008301896151b2565b615c956020830188614de3565b615ca26040830187615b06565b615caf6060830186615b06565b615cbc60808301856151b2565b615cc960a0830184614de3565b979650505050505050565b600081519050615ce381614ec9565b92915050565b600080600060608486031215615d0257615d01614ebf565b5b6000615d1086828701615cd4565b9350506020615d2186828701615cd4565b9250506040615d3286828701615cd4565b9150509250925092565b6000604082019050615d516000830185614de3565b615d5e6020830184614de3565b939250505056fea26469706673582212201722fed5b2de5ed8cd7f26c004dd900ea65cf6345aa8e9c0812b305c37af1bb264736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c806367ac77b411610213578063af2a31a611610123578063dd62ed3e116100ab578063ee9ef29e1161007a578063ee9ef29e14610f02578063f2fde38b14610f2b578063f53fd58414610f54578063f84ba65d14610f7f578063ffb54a9914610fa857610405565b8063dd62ed3e14610e46578063e53c30b014610e83578063e632313c14610eae578063e71dc3f514610ed757610405565b8063d51ed1c8116100f2578063d51ed1c814610d65578063d7c0103214610da2578063dcf7aef314610dcb578063dd395c6314610df4578063dd46706414610e1d57610405565b8063af2a31a614610cbd578063b6c5232414610ce6578063bd9ab53714610d11578063ca33e64c14610d3a57610405565b80637d1db4a5116101a65780638ea5220f116101755780638ea5220f14610bea57806395d89b4114610c15578063a312332014610c40578063a69df4b514610c69578063a9059cbb14610c8057610405565b80637d1db4a514610b405780638038cbd314610b6b578063893d20e814610b945780638da5cb5b14610bbf57610405565b8063715018a6116101e2578063715018a614610aa8578063722b62ad14610abf57806375f0a87414610aea57806378109e5414610b1557610405565b806367ac77b4146109ec5780636d1b229d14610a175780636ddd171314610a4057806370a0823114610a6b57610405565b80632bdaeae11161030e57806346e421a2116102a1578063571ac8b011610270578063571ac8b0146109095780635c85974f146109465780635d098b381461096f578063617fe0ed14610998578063658d4b7f146109c357610405565b806346e421a21461085f578063470624021461088a57806349bd5a5e146108b557806350db71fb146108e057610405565b80633705b392116102dd5780633705b392146107b75780633ba061d9146107e2578063405dcb1b1461080d57806344a33fd21461083657610405565b80632bdaeae11461070d5780632d594567146107385780632e8fa82114610761578063313ce5671461078c57610405565b8063180b0d7e116103915780631e25dc54116103605780631e25dc5414610628578063201e79911461065357806323b872dd1461067c57806329e04b4a146106b95780632b112e49146106e257610405565b8063180b0d7e1461058057806318160ddd146105ab5780631ad017b9146105d65780631da1db5e146105ff57610405565b8063095ea7b3116103cd578063095ea7b3146104b45780630d295980146104f15780631161ae391461051a57806312b9efa91461055757610405565b8063026f7d151461040a5780630445b6671461043557806306fdde031461046057806309302dc61461048b57610405565b3661040557005b600080fd5b34801561041657600080fd5b5061041f610fd3565b60405161042c9190614df2565b60405180910390f35b34801561044157600080fd5b5061044a610fd9565b6040516104579190614df2565b60405180910390f35b34801561046c57600080fd5b50610475610fdf565b6040516104829190614e9d565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190614ef5565b61101c565b005b3480156104c057600080fd5b506104db60048036038101906104d69190614f80565b6110d7565b6040516104e89190614fdb565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190615022565b6111c9565b005b34801561052657600080fd5b50610541600480360381019061053c919061504f565b61127d565b60405161054e9190614fdb565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190614ef5565b611292565b005b34801561058c57600080fd5b50610595611333565b6040516105a29190614df2565b60405180910390f35b3480156105b757600080fd5b506105c0611339565b6040516105cd9190614df2565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f8919061508f565b611343565b005b34801561060b57600080fd5b5061062660048036038101906106219190614ef5565b6114f0565b005b34801561063457600080fd5b5061063d61160e565b60405161064a9190614df2565b60405180910390f35b34801561065f57600080fd5b5061067a6004803603810190610675919061504f565b611614565b005b34801561068857600080fd5b506106a3600480360381019061069e91906150bc565b6116bd565b6040516106b09190614fdb565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db9190614ef5565b6118bd565b005b3480156106ee57600080fd5b506106f761195e565b6040516107049190614df2565b60405180910390f35b34801561071957600080fd5b506107226119e0565b60405161072f9190614df2565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190615148565b6119e6565b005b34801561076d57600080fd5b50610776611ab6565b6040516107839190614df2565b60405180910390f35b34801561079857600080fd5b506107a1611abc565b6040516107ae9190615197565b60405180910390f35b3480156107c357600080fd5b506107cc611ac5565b6040516107d99190614df2565b60405180910390f35b3480156107ee57600080fd5b506107f7611acb565b60405161080491906151c1565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190614ef5565b611af1565b005b34801561084257600080fd5b5061085d60048036038101906108589190614ef5565b611b92565b005b34801561086b57600080fd5b50610874611c90565b6040516108819190614df2565b60405180910390f35b34801561089657600080fd5b5061089f611c96565b6040516108ac9190614df2565b60405180910390f35b3480156108c157600080fd5b506108ca611c9c565b6040516108d791906151c1565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906151dc565b611cc0565b005b34801561091557600080fd5b50610930600480360381019061092b919061508f565b611db2565b60405161093d9190614fdb565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190614ef5565b611de5565b005b34801561097b57600080fd5b506109966004803603810190610991919061508f565b611e86565b005b3480156109a457600080fd5b506109ad612089565b6040516109ba9190614fdb565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e591906151dc565b61209c565b005b3480156109f857600080fd5b50610a0161218e565b604051610a0e919061527b565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190614ef5565b6121b2565b005b348015610a4c57600080fd5b50610a5561222b565b604051610a629190614fdb565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d919061508f565b61223e565b604051610a9f9190614df2565b60405180910390f35b348015610ab457600080fd5b50610abd612287565b005b348015610acb57600080fd5b50610ad46123df565b604051610ae19190615197565b60405180910390f35b348015610af657600080fd5b50610aff6123f2565b604051610b0c91906151c1565b60405180910390f35b348015610b2157600080fd5b50610b2a612416565b604051610b379190614df2565b60405180910390f35b348015610b4c57600080fd5b50610b5561241c565b604051610b629190614df2565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d9190615296565b612422565b005b348015610ba057600080fd5b50610ba961254b565b604051610bb691906151c1565b60405180910390f35b348015610bcb57600080fd5b50610bd461255a565b604051610be191906151c1565b60405180910390f35b348015610bf657600080fd5b50610bff612584565b604051610c0c91906151c1565b60405180910390f35b348015610c2157600080fd5b50610c2a6125aa565b604051610c379190614e9d565b60405180910390f35b348015610c4c57600080fd5b50610c676004803603810190610c629190615362565b6125e7565b005b348015610c7557600080fd5b50610c7e612721565b005b348015610c8c57600080fd5b50610ca76004803603810190610ca29190614f80565b6128f8565b604051610cb49190614fdb565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf919061508f565b61290d565b005b348015610cf257600080fd5b50610cfb6129e8565b604051610d089190614df2565b60405180910390f35b348015610d1d57600080fd5b50610d386004803603810190610d339190614ef5565b6129f2565b005b348015610d4657600080fd5b50610d4f612aad565b604051610d5c91906151c1565b60405180910390f35b348015610d7157600080fd5b50610d8c6004803603810190610d879190614ef5565b612ad3565b604051610d999190614df2565b60405180910390f35b348015610dae57600080fd5b50610dc96004803603810190610dc491906153c2565b612b43565b005b348015610dd757600080fd5b50610df26004803603810190610ded9190614ef5565b612e9c565b005b348015610e0057600080fd5b50610e1b6004803603810190610e1691906151dc565b612f3d565b005b348015610e2957600080fd5b50610e446004803603810190610e3f9190614ef5565b61302f565b005b348015610e5257600080fd5b50610e6d6004803603810190610e689190615415565b6131fd565b604051610e7a9190614df2565b60405180910390f35b348015610e8f57600080fd5b50610e98613284565b604051610ea59190614df2565b60405180910390f35b348015610eba57600080fd5b50610ed56004803603810190610ed09190614ef5565b61328a565b005b348015610ee357600080fd5b50610eec613344565b604051610ef99190614df2565b60405180910390f35b348015610f0e57600080fd5b50610f296004803603810190610f249190614ef5565b61334a565b005b348015610f3757600080fd5b50610f526004803603810190610f4d919061508f565b6133eb565b005b348015610f6057600080fd5b50610f696135b1565b604051610f769190614df2565b60405180910390f35b348015610f8b57600080fd5b50610fa66004803603810190610fa191906151dc565b6135b7565b005b348015610fb457600080fd5b50610fbd6136a9565b604051610fca9190614fdb565b60405180910390f35b60095481565b60225481565b60606040518060400160405280600881526020017f5472757468475054000000000000000000000000000000000000000000000000815250905090565b6110246136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa906154a1565b60405180910390fd5b6103e8816002546110c491906154f0565b6110ce9190615561565b60048190555050565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111b79190614df2565b60405180910390a36001905092915050565b6111d16136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906154a1565b60405180910390fd5b80601f60006101000a81548160ff02191690831515021790555050565b60008261128983612ad3565b11905092915050565b61129a6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611320906154a1565b60405180910390fd5b80600b8190555050565b600e5481565b6000600254905090565b61134b6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d1906154a1565b60405180910390fd5b600060166000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114f86136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906154a1565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846115d491906154f0565b6115de9190615561565b9081150290604051600060405180830381858888f19350505050158015611609573d6000803e3d6000fd5b505050565b600d5481565b61161c6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906154a1565b60405180910390fd5b81601d8190555080601e819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118a957611828826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c49092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6118b4848484613719565b90509392505050565b6118c56136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b906154a1565b60405180910390fd5b8060228190555050565b60006119db61198e601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661223e565b6119cd6119bc601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661223e565b600254613fe690919063ffffffff16565b613fe690919063ffffffff16565b905090565b600b5481565b6119ee6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a74906154a1565b60405180910390fd5b81601f60016101000a81548160ff02191690831515021790555080601f60026101000a81548160ff021916908360ff1602179055505050565b60235481565b60006009905090565b60075481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611af96136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f906154a1565b60405180910390fd5b8060058190555050565b611b9a6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906154a1565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484611c5691906154f0565b611c609190615561565b9081150290604051600060405180830381858888f19350505050158015611c8b573d6000803e3d6000fd5b505050565b60085481565b60065481565b7f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c081565b611cc86136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e906154a1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611dde827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6110d7565b9050919050565b611ded6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e73906154a1565b60405180910390fd5b8060038190555050565b611e8e6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f14906154a1565b60405180910390fd5b6000601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f60019054906101000a900460ff1681565b6120a46136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a906154a1565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122285761222633601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ffc565b505b50565b602160009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61228f6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612315906154a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601f60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61242a6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b0906154a1565b60405180910390fd5b836008819055508260098190555081600a819055506124f3826124e585876141cf90919063ffffffff16565b6141cf90919063ffffffff16565b600c8190555080600e81905550605a600c5410612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c906155de565b60405180910390fd5b50505050565b600061255561255a565b905090565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600581526020017f5452555448000000000000000000000000000000000000000000000000000000815250905090565b6125ef6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612675906154a1565b60405180910390fd5b60005b8383905081101561271b5781601a60008686858181106126a4576126a36155fe565b5b90506020020160208101906126b9919061508f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806127149061562d565b9050612681565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906156e7565b60405180910390fd5b60115442116127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615753565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612905338484613719565b905092915050565b6129156136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299b906154a1565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601154905090565b6129fa6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a80906154a1565b60405180910390fd5b6103e881600254612a9a91906154f0565b612aa49190615561565b60038190555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612b3c612ae061195e565b612b2e612b1f6002612b117f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c061223e565b6141e590919063ffffffff16565b856141e590919063ffffffff16565b6141fb90919063ffffffff16565b9050919050565b612b4b6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd1906154a1565b60405180910390fd5b600060166000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612ea46136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a906154a1565b60405180910390fd5b8060078190555050565b612f456136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb906154a1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6130376136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bd906154a1565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426131779190615773565b601181905550600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b6132926136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613318906154a1565b60405180910390fd5b60225481111561333957602254602381905550613341565b806023819055505b50565b60055481565b6133526136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d8906154a1565b60405180910390fd5b80600d8190555050565b6133f36136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613479906154a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036134f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e890615819565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6135bf6136bc565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461364e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613645906154a1565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900460ff1681565b600033905090565b600083831115829061370c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137039190614e9d565b60405180910390fd5b5082840390509392505050565b6000602460009054906101000a900460ff16156137425761373b848484613ffc565b9050613fdf565b61374a61255a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156137b8575061378861255a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561380d57601f60009054906101000a900460ff1661380c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380390615885565b60405180910390fd5b5b60007f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561390a57507f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156139965750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156139ee57507f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a46575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613aa05750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613afa5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613bb0576000613b0a8661223e565b9050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613bae576004548582613b6c9190615773565b1115613bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba490615917565b60405180910390fd5b5b505b7f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015613c175750601f60019054906101000a900460ff165b8015613c6d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d555742602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cea906159a9565b60405180910390fd5b601f60029054906101000a900460ff1660ff1642613d119190615773565b602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613db157613db08685614211565b5b613e3a846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c49092919063ffffffff16565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613ea5576000600d541115613ea057613e9d87866142ae565b90505b613edd565b613eae87614417565b613eb85784613ec4565b613ec387868561446e565b5b9050613ece614710565b15613edc57613edb6147e5565b5b5b613f2f81601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fcf9190614df2565b60405180910390a3600193505050505b9392505050565b60008183613ff491906159c9565b905092915050565b6000614087826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c49092919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411c82601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141bc9190614df2565b60405180910390a3600190509392505050565b600081836141dd9190615773565b905092915050565b600081836141f391906154f0565b905092915050565b600081836142099190615561565b905092915050565b6003548111158061426b5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6142aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a190615a49565b60405180910390fd5b5050565b600080600d54905060006142fe6064600e546142ca91906154f0565b6142f060646142e286896141e590919063ffffffff16565b6141e590919063ffffffff16565b6141fb90919063ffffffff16565b905061435281601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143f29190614df2565b60405180910390a361440d8185613fe690919063ffffffff16565b9250505092915050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080826144925761448d600554600754613fe690919063ffffffff16565b6144aa565b6144a9600b54600c54613fe690919063ffffffff16565b5b90506000836144bb576005546144bf565b600b545b905060006145096064600e546144d591906154f0565b6144fb60646144ed878b6141e590919063ffffffff16565b6141e590919063ffffffff16565b6141fb90919063ffffffff16565b9050600080831161451b576000614562565b6145616064600e5461452d91906154f0565b6145536064614545878c6141e590919063ffffffff16565b6141e590919063ffffffff16565b6141fb90919063ffffffff16565b5b90506145b682601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141cf90919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516146569190614df2565b60405180910390a360008111156146de5780601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146dd576146db30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ffc565b505b5b614703816146f5848a613fe690919063ffffffff16565b613fe690919063ffffffff16565b9450505050509392505050565b60007f0000000000000000000000007400864077375ffe605c1abecb8a4429eedbf5c073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561477b5750602460009054906101000a900460ff16155b80156147935750602160009054906101000a900460ff165b80156147e05750602254601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602460006101000a81548160ff0219169083151502179055506000614810601d54601e5461127d565b61481c5760085461481f565b60005b905060006148736002614865614842600b54600c54613fe690919063ffffffff16565b614857866022546141e590919063ffffffff16565b6141fb90919063ffffffff16565b6141fb90919063ffffffff16565b9050600061488c82602354613fe690919063ffffffff16565b90506000600267ffffffffffffffff8111156148ab576148aa615a69565b5b6040519080825280602002602001820160405280156148d95781602001602082028036833780820191505090505b50905030816000815181106148f1576148f06155fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149ba9190615aad565b816001815181106149ce576149cd6155fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614a6f959493929190615bd3565b600060405180830381600087803b158015614a8957600080fd5b505af1158015614a9d573d6000803e3d6000fd5b505050506000614ab68247613fe690919063ffffffff16565b90506000614ae2614ad16002896141fb90919063ffffffff16565b600c54613fe690919063ffffffff16565b90506000614b206002614b1284614b04600854886141e590919063ffffffff16565b6141fb90919063ffffffff16565b6141fb90919063ffffffff16565b90506000614b4b83614b3d600954876141e590919063ffffffff16565b6141fb90919063ffffffff16565b90506000614b7684614b68600a54886141e590919063ffffffff16565b6141fb90919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051614bc390615c5e565b600060405180830381858888f193505050503d8060008114614c01576040519150601f19603f3d011682016040523d82523d6000602084013e614c06565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051614c5490615c5e565b600060405180830381858888f193505050503d8060008114614c92576040519150601f19603f3d011682016040523d82523d6000602084013e614c97565b606091505b5050809150506000905060008a1115614db1577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614d3196959493929190615c73565b60606040518083038185885af1158015614d4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614d749190615ce9565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051614da8929190615d3c565b60405180910390a15b50505050505050505050506000602460006101000a81548160ff021916908315150217905550565b6000819050919050565b614dec81614dd9565b82525050565b6000602082019050614e076000830184614de3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614e47578082015181840152602081019050614e2c565b60008484015250505050565b6000601f19601f8301169050919050565b6000614e6f82614e0d565b614e798185614e18565b9350614e89818560208601614e29565b614e9281614e53565b840191505092915050565b60006020820190508181036000830152614eb78184614e64565b905092915050565b600080fd5b600080fd5b614ed281614dd9565b8114614edd57600080fd5b50565b600081359050614eef81614ec9565b92915050565b600060208284031215614f0b57614f0a614ebf565b5b6000614f1984828501614ee0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614f4d82614f22565b9050919050565b614f5d81614f42565b8114614f6857600080fd5b50565b600081359050614f7a81614f54565b92915050565b60008060408385031215614f9757614f96614ebf565b5b6000614fa585828601614f6b565b9250506020614fb685828601614ee0565b9150509250929050565b60008115159050919050565b614fd581614fc0565b82525050565b6000602082019050614ff06000830184614fcc565b92915050565b614fff81614fc0565b811461500a57600080fd5b50565b60008135905061501c81614ff6565b92915050565b60006020828403121561503857615037614ebf565b5b60006150468482850161500d565b91505092915050565b6000806040838503121561506657615065614ebf565b5b600061507485828601614ee0565b925050602061508585828601614ee0565b9150509250929050565b6000602082840312156150a5576150a4614ebf565b5b60006150b384828501614f6b565b91505092915050565b6000806000606084860312156150d5576150d4614ebf565b5b60006150e386828701614f6b565b93505060206150f486828701614f6b565b925050604061510586828701614ee0565b9150509250925092565b600060ff82169050919050565b6151258161510f565b811461513057600080fd5b50565b6000813590506151428161511c565b92915050565b6000806040838503121561515f5761515e614ebf565b5b600061516d8582860161500d565b925050602061517e85828601615133565b9150509250929050565b6151918161510f565b82525050565b60006020820190506151ac6000830184615188565b92915050565b6151bb81614f42565b82525050565b60006020820190506151d660008301846151b2565b92915050565b600080604083850312156151f3576151f2614ebf565b5b600061520185828601614f6b565b92505060206152128582860161500d565b9150509250929050565b6000819050919050565b600061524161523c61523784614f22565b61521c565b614f22565b9050919050565b600061525382615226565b9050919050565b600061526582615248565b9050919050565b6152758161525a565b82525050565b6000602082019050615290600083018461526c565b92915050565b600080600080608085870312156152b0576152af614ebf565b5b60006152be87828801614ee0565b94505060206152cf87828801614ee0565b93505060406152e087828801614ee0565b92505060606152f187828801614ee0565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112615322576153216152fd565b5b8235905067ffffffffffffffff81111561533f5761533e615302565b5b60208301915083602082028301111561535b5761535a615307565b5b9250929050565b60008060006040848603121561537b5761537a614ebf565b5b600084013567ffffffffffffffff81111561539957615398614ec4565b5b6153a58682870161530c565b935093505060206153b88682870161500d565b9150509250925092565b6000806000606084860312156153db576153da614ebf565b5b60006153e986828701614f6b565b93505060206153fa86828701614f6b565b925050604061540b86828701614f6b565b9150509250925092565b6000806040838503121561542c5761542b614ebf565b5b600061543a85828601614f6b565b925050602061544b85828601614f6b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061548b602083614e18565b915061549682615455565b602082019050919050565b600060208201905081810360008301526154ba8161547e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006154fb82614dd9565b915061550683614dd9565b925082820261551481614dd9565b9150828204841483151761552b5761552a6154c1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061556c82614dd9565b915061557783614dd9565b92508261558757615586615532565b5b828204905092915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b60006155c8601883614e18565b91506155d382615592565b602082019050919050565b600060208201905081810360008301526155f7816155bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061563882614dd9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361566a576156696154c1565b5b600182019050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006156d1602383614e18565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061573d601f83614e18565b915061574882615707565b602082019050919050565b6000602082019050818103600083015261576c81615730565b9050919050565b600061577e82614dd9565b915061578983614dd9565b92508282019050808211156157a1576157a06154c1565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615803602683614e18565b915061580e826157a7565b604082019050919050565b60006020820190508181036000830152615832816157f6565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061586f601483614e18565b915061587a82615839565b602082019050919050565b6000602082019050818103600083015261589e81615862565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615901603e83614e18565b915061590c826158a5565b604082019050919050565b60006020820190508181036000830152615930816158f4565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000615993602583614e18565b915061599e82615937565b604082019050919050565b600060208201905081810360008301526159c281615986565b9050919050565b60006159d482614dd9565b91506159df83614dd9565b92508282039050818111156159f7576159f66154c1565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615a33601183614e18565b9150615a3e826159fd565b602082019050919050565b60006020820190508181036000830152615a6281615a26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615aa781614f54565b92915050565b600060208284031215615ac357615ac2614ebf565b5b6000615ad184828501615a98565b91505092915050565b6000819050919050565b6000615aff615afa615af584615ada565b61521c565b614dd9565b9050919050565b615b0f81615ae4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4a81614f42565b82525050565b6000615b5c8383615b41565b60208301905092915050565b6000602082019050919050565b6000615b8082615b15565b615b8a8185615b20565b9350615b9583615b31565b8060005b83811015615bc6578151615bad8882615b50565b9750615bb883615b68565b925050600181019050615b99565b5085935050505092915050565b600060a082019050615be86000830188614de3565b615bf56020830187615b06565b8181036040830152615c078186615b75565b9050615c1660608301856151b2565b615c236080830184614de3565b9695505050505050565b600081905092915050565b50565b6000615c48600083615c2d565b9150615c5382615c38565b600082019050919050565b6000615c6982615c3b565b9150819050919050565b600060c082019050615c8860008301896151b2565b615c956020830188614de3565b615ca26040830187615b06565b615caf6060830186615b06565b615cbc60808301856151b2565b615cc960a0830184614de3565b979650505050505050565b600081519050615ce381614ec9565b92915050565b600080600060608486031215615d0257615d01614ebf565b5b6000615d1086828701615cd4565b9350506020615d2186828701615cd4565b9250506040615d3286828701615cd4565b9150509250925092565b6000604082019050615d516000830185614de3565b615d5e6020830184614de3565b939250505056fea26469706673582212201722fed5b2de5ed8cd7f26c004dd900ea65cf6345aa8e9c0812b305c37af1bb264736f6c63430008120033

Deployed Bytecode Sourcemap

18209:16812:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;820:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19263:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21087:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22407:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21511:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28941:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34802:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23493:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1102:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20817:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32470:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28472:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1056:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34276:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22029:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33724:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34468:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;910:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29082:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19326:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20911:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;712:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18777:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23373:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28694:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;776:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;667:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18993;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31503:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21735:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22770:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32674:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19080:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31108:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18936:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23030:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19226:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21259:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8869:148;;;;;;;;;;;;;:::i;:::-;;19124:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;106:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;552:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;442:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31832:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21173:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8226:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;188:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20997:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23617:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9891:305;;;;;;;;;;;;;:::i;:::-;;21865:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23269:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9424:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22590:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18807:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34618:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32931:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32326:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31237:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9589:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21370:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;954:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34007:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;623:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31736:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9172:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;865:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31366:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19040:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;820:38;;;;:::o;19263:56::-;;;;:::o;21087:80::-;21135:13;21159:5;;;;;;;;;;;;;;;;;21152:12;;21087:80;:::o;22407:177::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22572:4:::1;22544:23;22529:12;;:38;;;;:::i;:::-;22528:48;;;;:::i;:::-;22510:15;:66;;;;22407:177:::0;:::o;21511:216::-;21586:4;21638:6;21603:11;:23;21615:10;21603:23;;;;;;;;;;;;;;;:32;21627:7;21603:32;;;;;;;;;;;;;;;:41;;;;21681:7;21660:37;;21669:10;21660:37;;;21690:6;21660:37;;;;;;:::i;:::-;;;;;;;;21715:4;21708:11;;21511:216;;;;:::o;28941:94::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29020:7:::1;29006:11;;:21;;;;;;;;;;;;;;;;;;28941:94:::0;:::o;34802:150::-;34882:4;34938:6;34906:29;34926:8;34906:19;:29::i;:::-;:38;34899:45;;34802:150;;;;:::o;23493:116::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23587:14:::1;23573:11;:28;;;;23493:116:::0;:::o;1102:39::-;;;;:::o;20817:88::-;20872:7;20890:12;;20883:19;;20817:88;:::o;32470:196::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32579:5:::1;32554:11;:22;32566:9;;;;;;;;;;;32554:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32621:4;32595:11;:23;32607:10;32595:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32648:10;32636:9;;:22;;;;;;;;;;;;;;;;;;32470:196:::0;:::o;28472:214::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28557:17:::1;28577:21;28557:41;;28617:15;::::0;::::1;;;;;;;;28609:33;;:69;28674:3;28655:16;28643:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;28609:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28546:140;28472:214:::0;:::o;1056:37::-;;;;:::o;34276:184::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34393:7:::1;34375:15;:25;;;;34440:12;34411:26;:41;;;;34276:184:::0;;:::o;22029:370::-;22129:4;22184:17;22149:11;:19;22161:6;22149:19;;;;;;;;;;;;;;;:31;22169:10;22149:31;;;;;;;;;;;;;;;;:52;22146:186;;22251:69;22287:6;22251:69;;;;;;;;;;;;;;;;;:11;:19;22263:6;22251:19;;;;;;;;;;;;;;;:31;22271:10;22251:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;22217:11;:19;22229:6;22217:19;;;;;;;;;;;;;;;:31;22237:10;22217:31;;;;;;;;;;;;;;;:103;;;;22146:186;22351:40;22365:6;22373:9;22384:6;22351:13;:40::i;:::-;22344:47;;22029:370;;;;;:::o;33724:112::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33821:7:::1;33805:13;:23;;;;33724:112:::0;:::o;34468:142::-;34521:7;34548:54;34586:15;34596:4;;;;;;;;;;;34586:9;:15::i;:::-;34548:33;34565:15;34575:4;;;;;;;;;;;34565:9;:15::i;:::-;34548:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;34541:61;;34468:142;:::o;910:37::-;;;;:::o;29082:164::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29187:7:::1;29166:18;;:28;;;;;;;;;;;;;;;;;;29229:9;29205:21;;:33;;;;;;;;;;;;;;;;;;29082:164:::0;;:::o;19326:54::-;;;;:::o;20911:80::-;20963:5;374:1;20972:16;;20911:80;:::o;712:55::-;;;;:::o;18777:21::-;;;;;;;;;;;;;:::o;23373:112::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23464:13:::1;23451:10;:26;;;;23373:112:::0;:::o;28694:216::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28786:17:::1;28806:21;28786:41;;28846:10;28838:28;;:64;28898:3;28879:16;28867:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;28838:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28775:135;28694:216:::0;:::o;776:37::-;;;;:::o;667:38::-;;;;:::o;18993:::-;;;:::o;31503:131::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31620:6:::1;31593:16;:24;31610:6;31593:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;31503:131:::0;;:::o;21735:122::-;21790:4;21814:35;21822:7;21831:17;21814:7;:35::i;:::-;21807:42;;21735:122;;;:::o;22770:97::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22853:6:::1;22838:12;:21;;;;22770:97:::0;:::o;32674:249::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32785:5:::1;32754:11;:28;32766:15:::0;::::1;;;;;;;;;;32754:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32827:4;32801:11;:23;32813:10;32801:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32870:4;32844:11;:23;32856:10;32844:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32905:10;32887:15;::::0;:28:::1;;;;;;;;;;;;;;;;;;32674:249:::0;:::o;19080:37::-;;;;;;;;;;;;;:::o;31108:121::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31215:6:::1;31193:11;:19;31205:6;31193:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31108:121:::0;;:::o;18936:50::-;;;:::o;23030:231::-;23179:6;23155:9;:21;23165:10;23155:21;;;;;;;;;;;;;;;;:30;23152:102;;;23202:40;23217:10;23229:4;;;;;;;;;;;23235:6;23202:14;:40::i;:::-;;23152:102;23030:231;:::o;19226:30::-;;;;;;;;;;;;;:::o;21259:105::-;21325:7;21343:9;:18;21353:7;21343:18;;;;;;;;;;;;;;;;21336:25;;21259:105;;;:::o;8869:148::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8976:1:::1;8939:40;;8960:6;;;;;;;;;;;8939:40;;;;;;;;;;;;9007:1;8990:6;;:19;;;;;;;;;;;;;;;;;;8869:148::o:0;19124:39::-;;;;;;;;;;;;;:::o;106:75::-;;;;;;;;;;;;:::o;552:59::-;;;;:::o;442:56::-;;;;:::o;31832:486::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32004:13:::1;31992:9;:25;;;;32044:20;32028:13;:36;;;;32093:19;32075:15;:37;;;;32138:64;32182:19;32138:39;32156:20;32138:13;:17;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;32123:12;:79;;;;32230:15;32213:14;:32;;;;32279:2;32264:12;;:17;32256:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;31832:486:::0;;;;:::o;21173:80::-;21225:7;21243;:5;:7::i;:::-;21236:14;;21173:80;:::o;8226:79::-;8264:7;8291:6;;;;;;;;;;;8284:13;;8226:79;:::o;188:69::-;;;;;;;;;;;;;:::o;20997:84::-;21047:13;21071:7;;;;;;;;;;;;;;;;;21064:14;;20997:84;:::o;23617:211::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23721:9:::1;23716:105;23736:9;;:16;;23732:1;:20;23716:105;;;23803:6;23774:12;:26;23787:9;;23797:1;23787:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23774:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23754:3;;;;:::i;:::-;;;23716:105;;;;23617:211:::0;;;:::o;9891:305::-;9961:10;9943:28;;:14;;;;;;;;;;;:28;;;9935:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10048:9;;10030:15;:27;10022:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10139:14;;;;;;;;;;;10110:44;;10131:6;;;;;;;;;;;10110:44;;;;;;;;;;;;10174:14;;;;;;;;;;;10165:6;;:23;;;;;;;;;;;;;;;;;;9891:305::o;21865:156::-;21945:4;21969:44;21983:10;21995:9;22006:6;21969:13;:44::i;:::-;21962:51;;21865:156;;;;:::o;23269:96::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23348:9:::1;23339:6;;:18;;;;;;;;;;;;;;;;;;23269:96:::0;:::o;9424:89::-;9469:7;9496:9;;9489:16;;9424:89;:::o;22590:172::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22750:4:::1;22721:24;22706:12;;:39;;;;:::i;:::-;22705:49;;;;:::i;:::-;22690:12;:64;;;;22590:172:::0;:::o;18807:36::-;;;;;;;;;;;;;:::o;34618:176::-;34686:7;34713:73;34763:22;:20;:22::i;:::-;34713:45;34726:31;34755:1;34726:24;34736:13;34726:9;:24::i;:::-;:28;;:31;;;;:::i;:::-;34713:8;:12;;:45;;;;:::i;:::-;:49;;:73;;;;:::i;:::-;34706:80;;34618:176;;;:::o;32931:518::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33100:5:::1;33075:11;:22;33087:9;;;;;;;;;;;33075:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;33145:4;33116:11;:26;33128:13;33116:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;33191:5;33160:11;:28;33172:15:::0;::::1;;;;;;;;;;33160:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;33242:4;33207:11;:32;33219:19;33207:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33294:4;33259:11;:32;33271:19;33259:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33335:22;33311:21;;:46;;;;;;;;;;;;;;;;;;33386:19;33368:15;::::0;:37:::1;;;;;;;;;;;;;;;;;;33428:13;33416:9;;:25;;;;;;;;;;;;;;;;;;32931:518:::0;;;:::o;32326:96::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32408:6:::1;32394:11;:20;;;;32326:96:::0;:::o;31237:121::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31344:6:::1;31322:11;:19;31334:6;31322:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31237:121:::0;;:::o;9589:226::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9670:6:::1;;;;;;;;;;;9653:14;;:23;;;;;;;;;;;;;;;;;;9704:1;9687:6;;:19;;;;;;;;;;;;;;;;;;9747:4;9729:15;:22;;;;:::i;:::-;9717:9;:34;;;;9804:1;9767:40;;9788:6;;;;;;;;;;;9767:40;;;;;;;;;;;;9589:226:::0;:::o;21370:133::-;21454:7;21472:11;:19;21484:6;21472:19;;;;;;;;;;;;;;;:28;21492:7;21472:28;;;;;;;;;;;;;;;;21465:35;;21370:133;;;;:::o;954:93::-;;;;:::o;34007:221::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34092:13:::1;;34082:7;:23;34079:134;;;34135:13;;34122:10;:26;;;;34079:134;;;34194:7;34181:10;:20;;;;34079:134;34007:221:::0;:::o;623:37::-;;;;:::o;31736:88::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31813:3:::1;31802:8;:14;;;;31736:88:::0;:::o;9172:244::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9281:1:::1;9261:22;;:8;:22;;::::0;9253:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9371:8;9342:38;;9363:6;;;;;;;;;;;9342:38;;;;;;;;;;;;9400:8;9391:6;;:17;;;;;;;;;;;;;;;;;;9172:244:::0;:::o;865:38::-;;;;:::o;31366:129::-;8448:12;:10;:12::i;:::-;8438:22;;:6;;;;;;;;;;;:22;;;8430:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31481:6:::1;31455:15;:23;31471:6;31455:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;31366:129:::0;;:::o;19040:31::-;;;;;;;;;;;;;:::o;6810:98::-;6863:7;6890:10;6883:17;;6810:98;:::o;3898:240::-;4018:7;4076:1;4071;:6;;4079:12;4063:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4118:1;4114;:5;4107:12;;3898:240;;;;;:::o;23901:2380::-;23993:4;24013:6;;;;;;;;;;;24010:63;;;24029:41;24044:6;24052:9;24063:6;24029:14;:41::i;:::-;24022:48;;;;24010:63;24098:7;:5;:7::i;:::-;24088:17;;:6;:17;;;;:41;;;;;24122:7;:5;:7::i;:::-;24109:20;;:9;:20;;;;24088:41;24085:115;;;24153:11;;;;;;;;;;;24145:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;24085:115;24212:11;24240:13;24227:26;;:9;:26;;;24212:42;;24265:15;24297:13;24284:26;;:9;:26;;;;:53;;;;;24324:13;24314:23;;:6;:23;;;;24284:53;24265:73;;24376:4;24355:26;;:9;:26;;;;:70;;;;;24420:4;;;;;;;;;;;24399:26;;:9;:26;;;;24355:70;:114;;;;;24456:13;24443:26;;:9;:26;;;;24355:114;:160;;;;;24500:15;;;;;;;;;;24487:28;;:9;:28;;;;24355:160;:200;;;;;24546:9;;;;;;;;;;;24533:22;;:9;:22;;;;24355:200;:252;;;;;24586:21;;;;;;;;;;;24573:34;;:9;:34;;;;24355:252;24351:526;;;24633:18;24654:20;24664:9;24654;:20::i;:::-;24633:41;;24693:11;:22;24705:9;24693:22;;;;;;;;;;;;;;;;;;;;;;;;;24689:177;;24769:15;;24758:6;24745:10;:19;;;;:::i;:::-;24744:40;;24736:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;24689:177;24618:259;24351:526;24903:13;24893:23;;:6;:23;;;:58;;;;;24933:18;;;;;;;;;;;24893:58;:103;;;;;24969:16;:27;24986:9;24969:27;;;;;;;;;;;;;;;;;;;;;;;;;24968:28;24893:103;24889:317;;;25057:15;25030:13;:24;25044:9;25030:24;;;;;;;;;;;;;;;;:42;25022:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25173:21;;;;;;;;;;;25155:39;;:15;:39;;;;:::i;:::-;25128:13;:24;25142:9;25128:24;;;;;;;;;;;;;;;:66;;;;24889:317;25428:15;:26;25444:9;25428:26;;;;;;;;;;;;;;;;;;;;;;;;;25424:87;;25471:28;25484:6;25492;25471:12;:28::i;:::-;25424:87;25570:53;25592:6;25570:53;;;;;;;;;;;;;;;;;:9;:17;25580:6;25570:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25550:9;:17;25560:6;25550:17;;;;;;;;;;;;;;;:73;;;;25636:22;25661:6;25636:31;;25800:10;25797:318;;;25841:1;25830:8;;:12;25827:100;;;25880:31;25896:6;25904;25880:15;:31::i;:::-;25863:48;;25827:100;25797:318;;;25976:21;25990:6;25976:13;:21::i;:::-;:64;;26034:6;25976:64;;;26000:31;26008:6;26016;26024;26000:7;:31::i;:::-;25976:64;25959:81;;26072:16;:14;:16::i;:::-;26069:35;;;26091:10;:8;:10::i;:::-;26069:35;25797:318;26150:40;26175:14;26150:9;:20;26160:9;26150:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;26127:9;:20;26137:9;26127:20;;;;;;;;;;;;;;;:63;;;;26225:9;26208:43;;26217:6;26208:43;;;26236:14;26208:43;;;;;;:::i;:::-;;;;;;;;26269:4;26262:11;;;;;23901:2380;;;;;;:::o;2000:98::-;2058:7;2089:1;2085;:5;;;;:::i;:::-;2078:12;;2000:98;;;;:::o;26289:330::-;26382:4;26419:53;26441:6;26419:53;;;;;;;;;;;;;;;;;:9;:17;26429:6;26419:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26399:9;:17;26409:6;26399:17;;;;;;;;;;;;;;;:73;;;;26506:32;26531:6;26506:9;:20;26516:9;26506:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26483:9;:20;26493:9;26483:20;;;;;;;;;;;;;;;:55;;;;26571:9;26554:35;;26563:6;26554:35;;;26582:6;26554:35;;;;;;:::i;:::-;;;;;;;;26607:4;26600:11;;26289:330;;;;;:::o;1619:98::-;1677:7;1708:1;1704;:5;;;;:::i;:::-;1697:12;;1619:98;;;;:::o;2357:::-;2415:7;2446:1;2442;:5;;;;:::i;:::-;2435:12;;2357:98;;;;:::o;2756:::-;2814:7;2845:1;2841;:5;;;;:::i;:::-;2834:12;;2756:98;;;;:::o;26627:166::-;26724:12;;26714:6;:22;;:49;;;;26740:15;:23;26756:6;26740:23;;;;;;;;;;;;;;;;;;;;;;;;;26714:49;26706:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26627:166;;:::o;26959:406::-;27034:7;27056:17;27076:8;;27056:28;;27095:17;27115:56;27167:3;27150:14;;:20;;;;:::i;:::-;27115:30;27141:3;27115:21;27126:9;27115:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;27095:76;;27219:39;27248:9;27219;:24;27237:4;27219:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27192:9;:24;27210:4;27192:24;;;;;;;;;;;;;;;:66;;;;27299:4;27274:42;;27283:6;27274:42;;;27306:9;27274:42;;;;;;:::i;:::-;;;;;;;;27336:21;27347:9;27336:6;:10;;:21;;;;:::i;:::-;27329:28;;;;26959:406;;;;:::o;26801:114::-;26863:4;26888:11;:19;26900:6;26888:19;;;;;;;;;;;;;;;;;;;;;;;;;26887:20;26880:27;;26801:114;;;:::o;27373:837::-;27453:7;27475:17;27495:6;:68;;27536:27;27552:10;;27536:11;;:15;;:27;;;;:::i;:::-;27495:68;;;27504:29;27521:11;;27504:12;;:16;;:29;;;;:::i;:::-;27495:68;27475:88;;27574:18;27595:6;:33;;27618:10;;27595:33;;;27604:11;;27595:33;27574:54;;27639:17;27659:56;27711:3;27694:14;;:20;;;;:::i;:::-;27659:30;27685:3;27659:21;27670:9;27659:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;27639:76;;27726:18;27760:1;27747:10;:14;:78;;27824:1;27747:78;;;27764:57;27817:3;27800:14;;:20;;;;:::i;:::-;27764:31;27791:3;27764:22;27775:10;27764:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;:35;;:57;;;;:::i;:::-;27747:78;27726:99;;27865:39;27894:9;27865;:24;27883:4;27865:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27838:9;:24;27856:4;27838:24;;;;;;;;;;;;;;;:66;;;;27945:4;27920:42;;27929:6;27920:42;;;27952:9;27920:42;;;;;;:::i;:::-;;;;;;;;27991:1;27978:10;:14;27975:171;;;28039:10;28012:9;:24;28030:4;28012:24;;;;;;;;;;;;;;;;:37;28009:126;;;28070:49;28093:4;28100:6;;;;;;;;;;;28108:10;28070:14;:49::i;:::-;;28009:126;27975:171;28165:37;28191:10;28165:21;28176:9;28165:6;:10;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;28158:44;;;;;;27373:837;;;;;:::o;28258:206::-;28307:4;28345:13;28331:27;;:10;:27;;;;:47;;;;;28372:6;;;;;;;;;;;28371:7;28331:47;:71;;;;;28391:11;;;;;;;;;;;28331:71;:125;;;;;28443:13;;28415:9;:24;28433:4;28415:24;;;;;;;;;;;;;;;;:41;;28331:125;28324:132;;28258:206;:::o;29254:1797::-;19438:4;19429:6;;:13;;;;;;;;;;;;;;;;;;29303:27:::1;29333:60;29349:15;;29366:26;;29333:15;:60::i;:::-;:76;;29400:9;;29333:76;;;29396:1;29333:76;29303:106;;29420:23;29446:80;29524:1;29446:73;29489:29;29506:11;;29489:12;;:16;;:29;;;;:::i;:::-;29446:38;29464:19;29446:13;;:17;;:38;;;;:::i;:::-;:42;;:73;;;;:::i;:::-;:77;;:80;;;;:::i;:::-;29420:106;;29537:20;29560:31;29575:15;29560:10;;:14;;:31;;;;:::i;:::-;29537:54;;29604:21;29642:1;29628:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29604:40;;29673:4;29655;29660:1;29655:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;29699:14;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29689:4;29694:1;29689:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;29733:21;29757;29733:45;;29791:14;:65;;;29871:12;29898:1;29914:4;29941;29961:15;29791:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30000:17;30020:40;30046:13;30020:21;:25;;:40;;;;:::i;:::-;30000:60;;30073:19;30095:44;30112:26;30136:1;30112:19;:23;;:26;;;;:::i;:::-;30095:12;;:16;;:44;;;;:::i;:::-;30073:66;;30152:26;30181:48;30227:1;30181:41;30210:11;30181:24;30195:9;;30181;:13;;:24;;;;:::i;:::-;:28;;:41;;;;:::i;:::-;:45;;:48;;;;:::i;:::-;30152:77;;30240:26;30269:45;30302:11;30269:28;30283:13;;30269:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;30240:74;;30325:25;30353:47;30388:11;30353:30;30367:15;;30353:9;:13;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;30325:75;;30414:15;30442::::0;::::1;;;;;;;;;;30434:29;;30471:18;30496:5;30434:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30413:93;;;30541:9;;;;;;;;;;;30533:23;;30564:17;30588:5;30533:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30517:81;;;;;30656:5;30643:18;;30695:1;30677:15;:19;30674:370;;;30712:14;:30;;;30750:18;30796:4;30820:15;30854:1;30874::::0;30894:21:::1;;;;;;;;;;;30934:15;30712:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30984:48;30996:18;31016:15;30984:48;;;;;;;:::i;:::-;;;;;;;;30674:370;29292:1759;;;;;;;;;;;19456:5:::0;19447:6;;:14;;;;;;;;;;;;;;;;;;29254:1797::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:122;2184:24;2202:5;2184:24;:::i;:::-;2177:5;2174:35;2164:63;;2223:1;2220;2213:12;2164:63;2111:122;:::o;2239:139::-;2285:5;2323:6;2310:20;2301:29;;2339:33;2366:5;2339:33;:::i;:::-;2239:139;;;;:::o;2384:329::-;2443:6;2492:2;2480:9;2471:7;2467:23;2463:32;2460:119;;;2498:79;;:::i;:::-;2460:119;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2384:329;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:116::-;4203:21;4218:5;4203:21;:::i;:::-;4196:5;4193:32;4183:60;;4239:1;4236;4229:12;4183:60;4133:116;:::o;4255:133::-;4298:5;4336:6;4323:20;4314:29;;4352:30;4376:5;4352:30;:::i;:::-;4255:133;;;;:::o;4394:323::-;4450:6;4499:2;4487:9;4478:7;4474:23;4470:32;4467:119;;;4505:79;;:::i;:::-;4467:119;4625:1;4650:50;4692:7;4683:6;4672:9;4668:22;4650:50;:::i;:::-;4640:60;;4596:114;4394:323;;;;:::o;4723:474::-;4791:6;4799;4848:2;4836:9;4827:7;4823:23;4819:32;4816:119;;;4854:79;;:::i;:::-;4816:119;4974:1;4999:53;5044:7;5035:6;5024:9;5020:22;4999:53;:::i;:::-;4989:63;;4945:117;5101:2;5127:53;5172:7;5163:6;5152:9;5148:22;5127:53;:::i;:::-;5117:63;;5072:118;4723:474;;;;;:::o;5203:329::-;5262:6;5311:2;5299:9;5290:7;5286:23;5282:32;5279:119;;;5317:79;;:::i;:::-;5279:119;5437:1;5462:53;5507:7;5498:6;5487:9;5483:22;5462:53;:::i;:::-;5452:63;;5408:117;5203:329;;;;:::o;5538:619::-;5615:6;5623;5631;5680:2;5668:9;5659:7;5655:23;5651:32;5648:119;;;5686:79;;:::i;:::-;5648:119;5806:1;5831:53;5876:7;5867:6;5856:9;5852:22;5831:53;:::i;:::-;5821:63;;5777:117;5933:2;5959:53;6004:7;5995:6;5984:9;5980:22;5959:53;:::i;:::-;5949:63;;5904:118;6061:2;6087:53;6132:7;6123:6;6112:9;6108:22;6087:53;:::i;:::-;6077:63;;6032:118;5538:619;;;;;:::o;6163:86::-;6198:7;6238:4;6231:5;6227:16;6216:27;;6163:86;;;:::o;6255:118::-;6326:22;6342:5;6326:22;:::i;:::-;6319:5;6316:33;6306:61;;6363:1;6360;6353:12;6306:61;6255:118;:::o;6379:135::-;6423:5;6461:6;6448:20;6439:29;;6477:31;6502:5;6477:31;:::i;:::-;6379:135;;;;:::o;6520:464::-;6583:6;6591;6640:2;6628:9;6619:7;6615:23;6611:32;6608:119;;;6646:79;;:::i;:::-;6608:119;6766:1;6791:50;6833:7;6824:6;6813:9;6809:22;6791:50;:::i;:::-;6781:60;;6737:114;6890:2;6916:51;6959:7;6950:6;6939:9;6935:22;6916:51;:::i;:::-;6906:61;;6861:116;6520:464;;;;;:::o;6990:112::-;7073:22;7089:5;7073:22;:::i;:::-;7068:3;7061:35;6990:112;;:::o;7108:214::-;7197:4;7235:2;7224:9;7220:18;7212:26;;7248:67;7312:1;7301:9;7297:17;7288:6;7248:67;:::i;:::-;7108:214;;;;:::o;7328:118::-;7415:24;7433:5;7415:24;:::i;:::-;7410:3;7403:37;7328:118;;:::o;7452:222::-;7545:4;7583:2;7572:9;7568:18;7560:26;;7596:71;7664:1;7653:9;7649:17;7640:6;7596:71;:::i;:::-;7452:222;;;;:::o;7680:468::-;7745:6;7753;7802:2;7790:9;7781:7;7777:23;7773:32;7770:119;;;7808:79;;:::i;:::-;7770:119;7928:1;7953:53;7998:7;7989:6;7978:9;7974:22;7953:53;:::i;:::-;7943:63;;7899:117;8055:2;8081:50;8123:7;8114:6;8103:9;8099:22;8081:50;:::i;:::-;8071:60;;8026:115;7680:468;;;;;:::o;8154:60::-;8182:3;8203:5;8196:12;;8154:60;;;:::o;8220:142::-;8270:9;8303:53;8321:34;8330:24;8348:5;8330:24;:::i;:::-;8321:34;:::i;:::-;8303:53;:::i;:::-;8290:66;;8220:142;;;:::o;8368:126::-;8418:9;8451:37;8482:5;8451:37;:::i;:::-;8438:50;;8368:126;;;:::o;8500:153::-;8577:9;8610:37;8641:5;8610:37;:::i;:::-;8597:50;;8500:153;;;:::o;8659:185::-;8773:64;8831:5;8773:64;:::i;:::-;8768:3;8761:77;8659:185;;:::o;8850:276::-;8970:4;9008:2;8997:9;8993:18;8985:26;;9021:98;9116:1;9105:9;9101:17;9092:6;9021:98;:::i;:::-;8850:276;;;;:::o;9132:765::-;9218:6;9226;9234;9242;9291:3;9279:9;9270:7;9266:23;9262:33;9259:120;;;9298:79;;:::i;:::-;9259:120;9418:1;9443:53;9488:7;9479:6;9468:9;9464:22;9443:53;:::i;:::-;9433:63;;9389:117;9545:2;9571:53;9616:7;9607:6;9596:9;9592:22;9571:53;:::i;:::-;9561:63;;9516:118;9673:2;9699:53;9744:7;9735:6;9724:9;9720:22;9699:53;:::i;:::-;9689:63;;9644:118;9801:2;9827:53;9872:7;9863:6;9852:9;9848:22;9827:53;:::i;:::-;9817:63;;9772:118;9132:765;;;;;;;:::o;9903:117::-;10012:1;10009;10002:12;10026:117;10135:1;10132;10125:12;10149:117;10258:1;10255;10248:12;10289:568;10362:8;10372:6;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10543:6;10530:20;10520:30;;10573:18;10565:6;10562:30;10559:117;;;10595:79;;:::i;:::-;10559:117;10709:4;10701:6;10697:17;10685:29;;10763:3;10755:4;10747:6;10743:17;10733:8;10729:32;10726:41;10723:128;;;10770:79;;:::i;:::-;10723:128;10289:568;;;;;:::o;10863:698::-;10955:6;10963;10971;11020:2;11008:9;10999:7;10995:23;10991:32;10988:119;;;11026:79;;:::i;:::-;10988:119;11174:1;11163:9;11159:17;11146:31;11204:18;11196:6;11193:30;11190:117;;;11226:79;;:::i;:::-;11190:117;11339:80;11411:7;11402:6;11391:9;11387:22;11339:80;:::i;:::-;11321:98;;;;11117:312;11468:2;11494:50;11536:7;11527:6;11516:9;11512:22;11494:50;:::i;:::-;11484:60;;11439:115;10863:698;;;;;:::o;11567:619::-;11644:6;11652;11660;11709:2;11697:9;11688:7;11684:23;11680:32;11677:119;;;11715:79;;:::i;:::-;11677:119;11835:1;11860:53;11905:7;11896:6;11885:9;11881:22;11860:53;:::i;:::-;11850:63;;11806:117;11962:2;11988:53;12033:7;12024:6;12013:9;12009:22;11988:53;:::i;:::-;11978:63;;11933:118;12090:2;12116:53;12161:7;12152:6;12141:9;12137:22;12116:53;:::i;:::-;12106:63;;12061:118;11567:619;;;;;:::o;12192:474::-;12260:6;12268;12317:2;12305:9;12296:7;12292:23;12288:32;12285:119;;;12323:79;;:::i;:::-;12285:119;12443:1;12468:53;12513:7;12504:6;12493:9;12489:22;12468:53;:::i;:::-;12458:63;;12414:117;12570:2;12596:53;12641:7;12632:6;12621:9;12617:22;12596:53;:::i;:::-;12586:63;;12541:118;12192:474;;;;;:::o;12672:182::-;12812:34;12808:1;12800:6;12796:14;12789:58;12672:182;:::o;12860:366::-;13002:3;13023:67;13087:2;13082:3;13023:67;:::i;:::-;13016:74;;13099:93;13188:3;13099:93;:::i;:::-;13217:2;13212:3;13208:12;13201:19;;12860:366;;;:::o;13232:419::-;13398:4;13436:2;13425:9;13421:18;13413:26;;13485:9;13479:4;13475:20;13471:1;13460:9;13456:17;13449:47;13513:131;13639:4;13513:131;:::i;:::-;13505:139;;13232:419;;;:::o;13657:180::-;13705:77;13702:1;13695:88;13802:4;13799:1;13792:15;13826:4;13823:1;13816:15;13843:410;13883:7;13906:20;13924:1;13906:20;:::i;:::-;13901:25;;13940:20;13958:1;13940:20;:::i;:::-;13935:25;;13995:1;13992;13988:9;14017:30;14035:11;14017:30;:::i;:::-;14006:41;;14196:1;14187:7;14183:15;14180:1;14177:22;14157:1;14150:9;14130:83;14107:139;;14226:18;;:::i;:::-;14107:139;13891:362;13843:410;;;;:::o;14259:180::-;14307:77;14304:1;14297:88;14404:4;14401:1;14394:15;14428:4;14425:1;14418:15;14445:185;14485:1;14502:20;14520:1;14502:20;:::i;:::-;14497:25;;14536:20;14554:1;14536:20;:::i;:::-;14531:25;;14575:1;14565:35;;14580:18;;:::i;:::-;14565:35;14622:1;14619;14615:9;14610:14;;14445:185;;;;:::o;14636:174::-;14776:26;14772:1;14764:6;14760:14;14753:50;14636:174;:::o;14816:366::-;14958:3;14979:67;15043:2;15038:3;14979:67;:::i;:::-;14972:74;;15055:93;15144:3;15055:93;:::i;:::-;15173:2;15168:3;15164:12;15157:19;;14816:366;;;:::o;15188:419::-;15354:4;15392:2;15381:9;15377:18;15369:26;;15441:9;15435:4;15431:20;15427:1;15416:9;15412:17;15405:47;15469:131;15595:4;15469:131;:::i;:::-;15461:139;;15188:419;;;:::o;15613:180::-;15661:77;15658:1;15651:88;15758:4;15755:1;15748:15;15782:4;15779:1;15772:15;15799:233;15838:3;15861:24;15879:5;15861:24;:::i;:::-;15852:33;;15907:66;15900:5;15897:77;15894:103;;15977:18;;:::i;:::-;15894:103;16024:1;16017:5;16013:13;16006:20;;15799:233;;;:::o;16038:222::-;16178:34;16174:1;16166:6;16162:14;16155:58;16247:5;16242:2;16234:6;16230:15;16223:30;16038:222;:::o;16266:366::-;16408:3;16429:67;16493:2;16488:3;16429:67;:::i;:::-;16422:74;;16505:93;16594:3;16505:93;:::i;:::-;16623:2;16618:3;16614:12;16607:19;;16266:366;;;:::o;16638:419::-;16804:4;16842:2;16831:9;16827:18;16819:26;;16891:9;16885:4;16881:20;16877:1;16866:9;16862:17;16855:47;16919:131;17045:4;16919:131;:::i;:::-;16911:139;;16638:419;;;:::o;17063:181::-;17203:33;17199:1;17191:6;17187:14;17180:57;17063:181;:::o;17250:366::-;17392:3;17413:67;17477:2;17472:3;17413:67;:::i;:::-;17406:74;;17489:93;17578:3;17489:93;:::i;:::-;17607:2;17602:3;17598:12;17591:19;;17250:366;;;:::o;17622:419::-;17788:4;17826:2;17815:9;17811:18;17803:26;;17875:9;17869:4;17865:20;17861:1;17850:9;17846:17;17839:47;17903:131;18029:4;17903:131;:::i;:::-;17895:139;;17622:419;;;:::o;18047:191::-;18087:3;18106:20;18124:1;18106:20;:::i;:::-;18101:25;;18140:20;18158:1;18140:20;:::i;:::-;18135:25;;18183:1;18180;18176:9;18169:16;;18204:3;18201:1;18198:10;18195:36;;;18211:18;;:::i;:::-;18195:36;18047:191;;;;:::o;18244:225::-;18384:34;18380:1;18372:6;18368:14;18361:58;18453:8;18448:2;18440:6;18436:15;18429:33;18244:225;:::o;18475:366::-;18617:3;18638:67;18702:2;18697:3;18638:67;:::i;:::-;18631:74;;18714:93;18803:3;18714:93;:::i;:::-;18832:2;18827:3;18823:12;18816:19;;18475:366;;;:::o;18847:419::-;19013:4;19051:2;19040:9;19036:18;19028:26;;19100:9;19094:4;19090:20;19086:1;19075:9;19071:17;19064:47;19128:131;19254:4;19128:131;:::i;:::-;19120:139;;18847:419;;;:::o;19272:170::-;19412:22;19408:1;19400:6;19396:14;19389:46;19272:170;:::o;19448:366::-;19590:3;19611:67;19675:2;19670:3;19611:67;:::i;:::-;19604:74;;19687:93;19776:3;19687:93;:::i;:::-;19805:2;19800:3;19796:12;19789:19;;19448:366;;;:::o;19820:419::-;19986:4;20024:2;20013:9;20009:18;20001:26;;20073:9;20067:4;20063:20;20059:1;20048:9;20044:17;20037:47;20101:131;20227:4;20101:131;:::i;:::-;20093:139;;19820:419;;;:::o;20245:249::-;20385:34;20381:1;20373:6;20369:14;20362:58;20454:32;20449:2;20441:6;20437:15;20430:57;20245:249;:::o;20500:366::-;20642:3;20663:67;20727:2;20722:3;20663:67;:::i;:::-;20656:74;;20739:93;20828:3;20739:93;:::i;:::-;20857:2;20852:3;20848:12;20841:19;;20500:366;;;:::o;20872:419::-;21038:4;21076:2;21065:9;21061:18;21053:26;;21125:9;21119:4;21115:20;21111:1;21100:9;21096:17;21089:47;21153:131;21279:4;21153:131;:::i;:::-;21145:139;;20872:419;;;:::o;21297:224::-;21437:34;21433:1;21425:6;21421:14;21414:58;21506:7;21501:2;21493:6;21489:15;21482:32;21297:224;:::o;21527:366::-;21669:3;21690:67;21754:2;21749:3;21690:67;:::i;:::-;21683:74;;21766:93;21855:3;21766:93;:::i;:::-;21884:2;21879:3;21875:12;21868:19;;21527:366;;;:::o;21899:419::-;22065:4;22103:2;22092:9;22088:18;22080:26;;22152:9;22146:4;22142:20;22138:1;22127:9;22123:17;22116:47;22180:131;22306:4;22180:131;:::i;:::-;22172:139;;21899:419;;;:::o;22324:194::-;22364:4;22384:20;22402:1;22384:20;:::i;:::-;22379:25;;22418:20;22436:1;22418:20;:::i;:::-;22413:25;;22462:1;22459;22455:9;22447:17;;22486:1;22480:4;22477:11;22474:37;;;22491:18;;:::i;:::-;22474:37;22324:194;;;;:::o;22524:167::-;22664:19;22660:1;22652:6;22648:14;22641:43;22524:167;:::o;22697:366::-;22839:3;22860:67;22924:2;22919:3;22860:67;:::i;:::-;22853:74;;22936:93;23025:3;22936:93;:::i;:::-;23054:2;23049:3;23045:12;23038:19;;22697:366;;;:::o;23069:419::-;23235:4;23273:2;23262:9;23258:18;23250:26;;23322:9;23316:4;23312:20;23308:1;23297:9;23293:17;23286:47;23350:131;23476:4;23350:131;:::i;:::-;23342:139;;23069:419;;;:::o;23494:180::-;23542:77;23539:1;23532:88;23639:4;23636:1;23629:15;23663:4;23660:1;23653:15;23680:143;23737:5;23768:6;23762:13;23753:22;;23784:33;23811:5;23784:33;:::i;:::-;23680:143;;;;:::o;23829:351::-;23899:6;23948:2;23936:9;23927:7;23923:23;23919:32;23916:119;;;23954:79;;:::i;:::-;23916:119;24074:1;24099:64;24155:7;24146:6;24135:9;24131:22;24099:64;:::i;:::-;24089:74;;24045:128;23829:351;;;;:::o;24186:85::-;24231:7;24260:5;24249:16;;24186:85;;;:::o;24277:158::-;24335:9;24368:61;24386:42;24395:32;24421:5;24395:32;:::i;:::-;24386:42;:::i;:::-;24368:61;:::i;:::-;24355:74;;24277:158;;;:::o;24441:147::-;24536:45;24575:5;24536:45;:::i;:::-;24531:3;24524:58;24441:147;;:::o;24594:114::-;24661:6;24695:5;24689:12;24679:22;;24594:114;;;:::o;24714:184::-;24813:11;24847:6;24842:3;24835:19;24887:4;24882:3;24878:14;24863:29;;24714:184;;;;:::o;24904:132::-;24971:4;24994:3;24986:11;;25024:4;25019:3;25015:14;25007:22;;24904:132;;;:::o;25042:108::-;25119:24;25137:5;25119:24;:::i;:::-;25114:3;25107:37;25042:108;;:::o;25156:179::-;25225:10;25246:46;25288:3;25280:6;25246:46;:::i;:::-;25324:4;25319:3;25315:14;25301:28;;25156:179;;;;:::o;25341:113::-;25411:4;25443;25438:3;25434:14;25426:22;;25341:113;;;:::o;25490:732::-;25609:3;25638:54;25686:5;25638:54;:::i;:::-;25708:86;25787:6;25782:3;25708:86;:::i;:::-;25701:93;;25818:56;25868:5;25818:56;:::i;:::-;25897:7;25928:1;25913:284;25938:6;25935:1;25932:13;25913:284;;;26014:6;26008:13;26041:63;26100:3;26085:13;26041:63;:::i;:::-;26034:70;;26127:60;26180:6;26127:60;:::i;:::-;26117:70;;25973:224;25960:1;25957;25953:9;25948:14;;25913:284;;;25917:14;26213:3;26206:10;;25614:608;;;25490:732;;;;:::o;26228:831::-;26491:4;26529:3;26518:9;26514:19;26506:27;;26543:71;26611:1;26600:9;26596:17;26587:6;26543:71;:::i;:::-;26624:80;26700:2;26689:9;26685:18;26676:6;26624:80;:::i;:::-;26751:9;26745:4;26741:20;26736:2;26725:9;26721:18;26714:48;26779:108;26882:4;26873:6;26779:108;:::i;:::-;26771:116;;26897:72;26965:2;26954:9;26950:18;26941:6;26897:72;:::i;:::-;26979:73;27047:3;27036:9;27032:19;27023:6;26979:73;:::i;:::-;26228:831;;;;;;;;:::o;27065:147::-;27166:11;27203:3;27188:18;;27065:147;;;;:::o;27218:114::-;;:::o;27338:398::-;27497:3;27518:83;27599:1;27594:3;27518:83;:::i;:::-;27511:90;;27610:93;27699:3;27610:93;:::i;:::-;27728:1;27723:3;27719:11;27712:18;;27338:398;;;:::o;27742:379::-;27926:3;27948:147;28091:3;27948:147;:::i;:::-;27941:154;;28112:3;28105:10;;27742:379;;;:::o;28127:807::-;28376:4;28414:3;28403:9;28399:19;28391:27;;28428:71;28496:1;28485:9;28481:17;28472:6;28428:71;:::i;:::-;28509:72;28577:2;28566:9;28562:18;28553:6;28509:72;:::i;:::-;28591:80;28667:2;28656:9;28652:18;28643:6;28591:80;:::i;:::-;28681;28757:2;28746:9;28742:18;28733:6;28681:80;:::i;:::-;28771:73;28839:3;28828:9;28824:19;28815:6;28771:73;:::i;:::-;28854;28922:3;28911:9;28907:19;28898:6;28854:73;:::i;:::-;28127:807;;;;;;;;;:::o;28940:143::-;28997:5;29028:6;29022:13;29013:22;;29044:33;29071:5;29044:33;:::i;:::-;28940:143;;;;:::o;29089:663::-;29177:6;29185;29193;29242:2;29230:9;29221:7;29217:23;29213:32;29210:119;;;29248:79;;:::i;:::-;29210:119;29368:1;29393:64;29449:7;29440:6;29429:9;29425:22;29393:64;:::i;:::-;29383:74;;29339:128;29506:2;29532:64;29588:7;29579:6;29568:9;29564:22;29532:64;:::i;:::-;29522:74;;29477:129;29645:2;29671:64;29727:7;29718:6;29707:9;29703:22;29671:64;:::i;:::-;29661:74;;29616:129;29089:663;;;;;:::o;29758:332::-;29879:4;29917:2;29906:9;29902:18;29894:26;;29930:71;29998:1;29987:9;29983:17;29974:6;29930:71;:::i;:::-;30011:72;30079:2;30068:9;30064:18;30055:6;30011:72;:::i;:::-;29758:332;;;;;:::o

Swarm Source

ipfs://1722fed5b2de5ed8cd7f26c004dd900ea65cf6345aa8e9c0812b305c37af1bb2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.