ETH Price: $2,634.23 (+2.21%)

Token

Ponzinomics (PONZI)
 

Overview

Max Total Supply

1,000,000,000 PONZI

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
gamblerinho.eth
Balance
17,657,379.654058640308848105 PONZI

Value
$0.00
0xba68e07e9af8ba8b2fdd5cf9a000edb5af9a3ec1
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:
Ponzinomics

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/*


//Welcome to Ponzinomics:

$PONZI is the cryptocurrency that wears its $PONZI badge with a smile. In a world where everything seems like a pyramid scheme, we decided to join the party and be upfront about it. So, if you’ve ever wondered whether that new crypto you just bought is secretly a pyramid in disguise, well, welcome to $PONZI, where we promise that our pyramid is right there in the name! The difference is, in this $PONZI, we only go up thanks to our newly created tokenomics.

Tokenomics:

We have incorporated a dynamic tax into our token, each sell increases the sell tax by 3% up to 30% and each buy reduces the sell tax by 3%. Sell taxes can remain on 0% if there are enough buys. Buy tax will always remain at 1%

🐦 - https://twitter.com/ThePonziETH
💻 - https://ponzinomics.vip/
📥 -https://t.me/PonzinomicsPortal

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


pragma solidity 0.8.19;




interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}
 
interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
 
contract Ponzinomics is IERC20, Ownable {
    using Address for address payable;
 
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) public normalBalance;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
 
    address[] private _excluded;
 
    bool public swapEnabled;
    bool private swapping;
    bool public tradingEnabled;
 
    IRouter public router;
    address public pair;
    address public devWallet;
    address public buybackWallet;
 
    uint8 private constant _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
 
    uint256 private _tTotal = 1_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
 
    uint256 public totalRfi;
    uint256 public swapThreshold = 500_000 * 10**_decimals;
    uint256 public constant MAX_TX_AMOUNT = 20_000_000 * 10**_decimals; // can't be changed
    uint256 public constant MAX_WALLET_AMOUNT = 20_000_000 * 10**_decimals; // can't be changed
    uint256 public buyThreshold = 1_000_000 * 10**_decimals;
    uint256 public startBlock;
    uint256 public offlineBlocks = 5;
 
    uint256 public buyTax = 150; // 15%
    uint256 public sellTax = 150; // 15%
    uint256 public dynamicTax = 30; // 3%
    uint256 public constant MAX_SELL_TAX = 300; // 30%
 
    string private constant _name = "Ponzinomics";
    string private constant _symbol = "PONZI";
 
    struct TaxesPercentage {
      uint256 rfi;
      uint256 dev;
      uint256 buyBack;
      uint256 lp;
    }
 
    TaxesPercentage public taxesPercentage = TaxesPercentage(10,10,50,30);
 
    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rSwap;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tSwap;
    }
 
 
    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }
 
    constructor (address _routerAddress, address _devWallet, address _buybackWallet) {
 
        IRouter _router = IRouter(_routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
 
        router = _router;
        pair = _pair;
 
        excludeFromReward(pair);
 
        _rOwned[msg.sender] = _rTotal;
        normalBalance[msg.sender] = _tTotal;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_devWallet]=true;
        _isExcludedFromFee[_buybackWallet] = true;
 
        devWallet = _devWallet;
        buybackWallet = _buybackWallet;
 
        emit Transfer(address(0), msg.sender, _tTotal);
    }
 
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
 
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
 
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
 
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);
 
        return true;
    }
 
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
 
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
 
        return true;
    }
 
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
 
    function getCirculatingSupply() external view returns(uint256){
        uint256 deadBalance = balanceOf(address(0xdead));
        uint256 zeroBalance = balanceOf(address(0));
        return totalSupply() - deadBalance - zeroBalance;
    }
 
    function getTotAmountBurned() external view returns(uint256){
        uint256 deadBalance = balanceOf(address(0xdead));
        uint256 zeroBalance = balanceOf(address(0));
        return deadBalance + zeroBalance;
    }
 
    function getReflectionEarned(address user) external view returns(uint256) {
        if(balanceOf(user) >= normalBalance[user]) return balanceOf(user) - normalBalance[user];
        else return 0;
    }
 
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }
 
    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
 
    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function excludeFromFee(address account, bool status) public onlyOwner {
        _isExcludedFromFee[account] = status;
    }
 
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
 
    function setTaxesPercentage(uint256 _rfi, uint256 _dev, uint256 _buyback, uint256 _lp) public onlyOwner {
        require(_rfi + _dev + _buyback + _lp == 100, "Total must be 100");
        taxesPercentage = TaxesPercentage(_rfi, _dev, _buyback, _lp);
    }
 
    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totalRfi +=tRfi;
    }
 
    function _takeSwapFees(uint256 rValue, uint256 tValue) private {
        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tValue;
        }
        _rOwned[address(this)] +=rValue;
    }
 
    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rSwap) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }
 
    function _getTValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory s) {
 
        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
 
        uint256 tempTax = isSell ? sellTax : buyTax;
        uint256 rfiTax = tempTax * taxesPercentage.rfi / 100;
        uint256 swapTax = tempTax * (100 - taxesPercentage.rfi) / 100;
        s.tRfi = tAmount * rfiTax / 1000;
        s.tSwap = tAmount * swapTax / 1000;
        s.tTransferAmount = tAmount - s.tRfi - s.tSwap;
        return s;
    }
 
    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rSwap) {
        rAmount = tAmount*currentRate;
 
        if(!takeFee) {
          return(rAmount, rAmount, 0,0);
        }
 
        rRfi = s.tRfi*currentRate;
        rSwap = s.tSwap*currentRate;
        rTransferAmount =  rAmount-rRfi-rSwap;
        return (rAmount, rTransferAmount, rRfi,rSwap);
    }
 
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }
 
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
 
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
 
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
 
        if(buyTax != 10 && tradingEnabled){
            if(startBlock + offlineBlocks < block.number) buyTax = 10;
        }
 
        bool takeFee = false;
 
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled ,"Liquidity has not been added yet");
            require(amount <= MAX_TX_AMOUNT, "You are exceeding MAX_TX_AMOUNT");
            if(to != pair) require(balanceOf(to) + amount <= MAX_WALLET_AMOUNT, "You are exceeding MAX_WALLET_AMOUNT");
            takeFee = true;
            if(from == pair && startBlock + offlineBlocks < block.number){
                if(amount >= buyThreshold){
                    if(sellTax >= dynamicTax) sellTax -= dynamicTax;
                    else sellTax = 0;
                }
            }
        }
 
        bool canSwap = balanceOf(address(this)) >= swapThreshold;
        if(!swapping && taxesPercentage.rfi != 100 && swapEnabled && canSwap && from != pair && takeFee){
            swapAndLiquify(swapThreshold);
        }
 
        _tokenTransfer(from, to, amount, takeFee);
    }
 
 
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {
 
        bool isSell = recipient == pair ? true : false;
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);
 
        if(isSell && takeFee && startBlock + offlineBlocks < block.number){
            if(sellTax + dynamicTax > MAX_SELL_TAX) sellTax = MAX_SELL_TAX;
            else sellTax += dynamicTax;
        }
 
        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }
 
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        normalBalance[recipient] += s.tTransferAmount;
        normalBalance[sender] -= s.tTransferAmount;
        normalBalance[address(this)] += s.tSwap;
 
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rSwap > 0 || s.tSwap > 0) _takeSwapFees(s.rSwap, s.tSwap);
 
 
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tSwap > 0) emit Transfer(sender, address(this), s.tSwap);
 
    }
 
    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 denominator = (100 - taxesPercentage.rfi) * 2;
        uint256 tokensToAddLiquidityWith = tokens * taxesPercentage.lp / denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
 
        uint256 initialBalance = address(this).balance;
 
        swapTokensForETH(toSwap);
 
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (denominator - taxesPercentage.lp);
        uint256 ethToAddLiquidityWith = unitBalance * taxesPercentage.lp;
 
        if(ethToAddLiquidityWith > 0){
            // Add liquidity to uniswap
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }
 
        uint256 devAmt = unitBalance * 2 * taxesPercentage.dev;
        if(devAmt > 0){
            payable(devWallet).sendValue(devAmt);
        }
 
        uint256 buybackAmt = unitBalance * 2 * taxesPercentage.buyBack;
        if(buybackAmt > 0){
            payable(buybackWallet).sendValue(buybackAmt);
        }
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);
 
        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }
 
    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
 
        _approve(address(this), address(router), tokenAmount);
 
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
 
    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Already live");
        tradingEnabled = true;
        swapEnabled = true;
        startBlock = block.number;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
        _isExcludedFromFee[devWallet] = true;
    }
 
    function updateBuybackWallet(address newWallet) external onlyOwner{
        buybackWallet = newWallet;
        _isExcludedFromFee[buybackWallet] = true;
    }
 
    function updateBuyThreshold(uint256 amount) external onlyOwner{
        buyThreshold = amount * 10**_decimals;
    }
 
    function updateSwapThreshold(uint256 amount) external onlyOwner{
        swapThreshold = amount * 10**_decimals;
    }
 
    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }
 
    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
 
    function updateDynamicTax(uint256 amount) external onlyOwner{
        dynamicTax = amount;
    }
 
    function rescueETH(uint256 weiAmount) external onlyOwner{
        payable(msg.sender).transfer(weiAmount);
    }
 
    function rescueTokens(address _tokenAddr, address _to, uint _amount) external onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
 
    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_buybackWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SELL_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TX_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WALLET_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReflectionEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotAmountBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"normalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"offlineBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"},{"internalType":"uint256","name":"_lp","type":"uint256"}],"name":"setTaxesPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","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":"swapThreshold","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":"taxesPercentage","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRfi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBuyThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateDynamicTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062000f06565b633b9aca0062000025919062000f57565b600c55600c546000196200003a919062000fd1565b60001962000049919062001009565b600d556012600a6200005c919062000f06565b6207a1206200006c919062000f57565b600f556012600a6200007f919062000f06565b620f42406200008f919062000f57565b601055600560125560966013556096601455601e6015556040518060800160405280600a8152602001600a815260200160328152602001601e81525060166000820151816000015560208201518160010155604082015181600201556060820151816003015550503480156200010457600080fd5b50604051620063ad380380620063ad83398181016040528101906200012a9190620010ae565b6200014a6200013e6200065060201b60201c565b6200065860201b60201c565b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c391906200110a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025191906200110a565b6040518363ffffffff1660e01b8152600401620002709291906200114d565b6020604051808303816000875af115801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b691906200110a565b905081600860036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200036d600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200071c60201b60201c565b600d54600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c54600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200063d91906200118b565b60405180910390a35050505050620013e9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200072c6200095760201b60201c565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615620007bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b39062001209565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115620008995762000855600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620009e860201b60201c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620009676200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200098d62000a5c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009dd906200127b565b60405180910390fd5b565b6000600d5482111562000a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a299062001313565b60405180910390fd5b600062000a4462000a8560201b60201c565b9050808362000a54919062001335565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600062000a9a62000ab360201b60201c565b91509150808262000aac919062001335565b9250505090565b6000806000600d5490506000600c54905060005b60078054905081101562000d325782600160006007848154811062000af15762000af06200136d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000be3575081600260006007848154811062000b7b5762000b7a6200136d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000bfc57600d54600c549450945050505062000d68565b600160006007838154811062000c175762000c166200136d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000c8a919062001009565b9250600260006007838154811062000ca75762000ca66200136d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548262000d1a919062001009565b9150808062000d29906200139c565b91505062000ac7565b50600c54600d5462000d45919062001335565b82101562000d5f57600d54600c5493509350505062000d68565b81819350935050505b9091565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dfa5780860481111562000dd25762000dd162000d6c565b5b600185161562000de25780820291505b808102905062000df28562000d9b565b945062000db2565b94509492505050565b60008262000e15576001905062000ee8565b8162000e25576000905062000ee8565b816001811462000e3e576002811462000e495762000e7f565b600191505062000ee8565b60ff84111562000e5e5762000e5d62000d6c565b5b8360020a91508482111562000e785762000e7762000d6c565b5b5062000ee8565b5060208310610133831016604e8410600b841016171562000eb95782820a90508381111562000eb35762000eb262000d6c565b5b62000ee8565b62000ec8848484600162000da8565b9250905081840481111562000ee25762000ee162000d6c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000f138262000eef565b915062000f208362000ef9565b925062000f4f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e03565b905092915050565b600062000f648262000eef565b915062000f718362000eef565b925082820262000f818162000eef565b9150828204841483151762000f9b5762000f9a62000d6c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fde8262000eef565b915062000feb8362000eef565b92508262000ffe5762000ffd62000fa2565b5b828206905092915050565b6000620010168262000eef565b9150620010238362000eef565b92508282039050818111156200103e576200103d62000d6c565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010768262001049565b9050919050565b620010888162001069565b81146200109457600080fd5b50565b600081519050620010a8816200107d565b92915050565b600080600060608486031215620010ca57620010c962001044565b5b6000620010da8682870162001097565b9350506020620010ed8682870162001097565b9250506040620011008682870162001097565b9150509250925092565b60006020828403121562001123576200112262001044565b5b6000620011338482850162001097565b91505092915050565b620011478162001069565b82525050565b60006040820190506200116460008301856200113c565b6200117360208301846200113c565b9392505050565b620011858162000eef565b82525050565b6000602082019050620011a260008301846200117a565b92915050565b600082825260208201905092915050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000620011f1601b83620011a8565b9150620011fe82620011b9565b602082019050919050565b600060208201905081810360008301526200122481620011e2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001263602083620011a8565b915062001270826200122b565b602082019050919050565b60006020820190508181036000830152620012968162001254565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000620012fb602a83620011a8565b915062001308826200129d565b604082019050919050565b600060208201905081810360008301526200132e81620012ec565b9050919050565b6000620013428262000eef565b91506200134f8362000eef565b92508262001362576200136162000fa2565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620013a98262000eef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620013de57620013dd62000d6c565b5b600182019050919050565b614fb480620013f96000396000f3fe60806040526004361061031e5760003560e01c8063715018a6116101ab578063a6e3e1e1116100f7578063dd62ed3e11610095578063e7cb0df91161006f578063e7cb0df914610bfe578063f13cff4114610c29578063f2fde38b14610c54578063f887ea4014610c7d57610325565b8063dd62ed3e14610b6d578063deab8aea14610baa578063df8408fe14610bd557610325565b8063bd614ff7116100d1578063bd614ff714610ac5578063cc1776d314610af0578063cc274b2914610b1b578063cea9d26f14610b4457610325565b8063a6e3e1e114610a20578063a8aa1b3114610a5d578063a9059cbb14610a8857610325565b80638da5cb5b1161016457806395d89b411161013e57806395d89b4114610966578063963fbc50146109915780639e252f00146109ba578063a457c2d7146109e357610325565b80638da5cb5b146108e75780638ea5220f14610912578063924de9b71461093d57610325565b8063715018a6146107fd578063799754d7146108145780637e0ec1d11461083d57806388f82020146108685780638a8c523c146108a55780638ae2702f146108bc57610325565b8063395093511161026a5780634da86156116102235780635342acb4116101fd5780635342acb41461072d578063649011c81461076a5780636ddd17131461079557806370a08231146107c057610325565b80634da86156146106ae5780634f7041a5146106d957806352390c021461070457610325565b8063395093511461058c5780633b073d8a146105c95780633b63e0ab1461060657806340b28c2f1461062f57806348cd4cb1146106585780634ada218b1461068357610325565b80631816467f116102d75780632b112e49116102b15780632b112e49146104d05780632d838119146104fb578063313ce567146105385780633685d4191461056357610325565b80631816467f1461043f5780631a6611811461046857806323b872dd1461049357610325565b8063029514f71461032a5780630445b6671461035857806304dacd501461038357806306fdde03146103ac578063095ea7b3146103d757806318160ddd1461041457610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca8565b60405161034f9493929190613a5e565b60405180910390f35b34801561036457600080fd5b5061036d610cc6565b60405161037a9190613aa3565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613b21565b610ccc565b005b3480156103b857600080fd5b506103c1610d92565b6040516103ce9190613bde565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613c2c565b610dcf565b60405161040b9190613c87565b60405180910390f35b34801561042057600080fd5b50610429610ded565b6040516104369190613aa3565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613b21565b610df7565b005b34801561047457600080fd5b5061047d610ebd565b60405161048a9190613aa3565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190613ca2565b610ec3565b6040516104c79190613c87565b60405180910390f35b3480156104dc57600080fd5b506104e5610fc4565b6040516104f29190613aa3565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613cf5565b611007565b60405161052f9190613aa3565b60405180910390f35b34801561054457600080fd5b5061054d61106e565b60405161055a9190613d3e565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613b21565b611077565b005b34801561059857600080fd5b506105b360048036038101906105ae9190613c2c565b611338565b6040516105c09190613c87565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613b21565b6113e4565b6040516105fd9190613aa3565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613d59565b6113fc565b005b34801561063b57600080fd5b5061065660048036038101906106519190613dc0565b6114bc565b005b34801561066457600080fd5b5061066d61154a565b60405161067a9190613aa3565b60405180910390f35b34801561068f57600080fd5b50610698611550565b6040516106a59190613c87565b60405180910390f35b3480156106ba57600080fd5b506106c3611563565b6040516106d09190613aa3565b60405180910390f35b3480156106e557600080fd5b506106ee611569565b6040516106fb9190613aa3565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190613b21565b61156f565b005b34801561073957600080fd5b50610754600480360381019061074f9190613b21565b611796565b6040516107619190613c87565b60405180910390f35b34801561077657600080fd5b5061077f6117ec565b60405161078c9190613aa3565b60405180910390f35b3480156107a157600080fd5b506107aa6117f2565b6040516107b79190613c87565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613b21565b611805565b6040516107f49190613aa3565b60405180910390f35b34801561080957600080fd5b506108126118f0565b005b34801561082057600080fd5b5061083b60048036038101906108369190613cf5565b611904565b005b34801561084957600080fd5b5061085261192e565b60405161085f9190613aa3565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190613b21565b61194e565b60405161089c9190613c87565b60405180910390f35b3480156108b157600080fd5b506108ba6119a4565b005b3480156108c857600080fd5b506108d1611a3b565b6040516108de9190613aa3565b60405180910390f35b3480156108f357600080fd5b506108fc611a5b565b6040516109099190613e0f565b60405180910390f35b34801561091e57600080fd5b50610927611a84565b6040516109349190613e0f565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190613e56565b611aaa565b005b34801561097257600080fd5b5061097b611acf565b6040516109889190613bde565b60405180910390f35b34801561099d57600080fd5b506109b860048036038101906109b39190613cf5565b611b0c565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613cf5565b611b1e565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613c2c565b611b70565b604051610a179190613c87565b60405180910390f35b348015610a2c57600080fd5b50610a476004803603810190610a429190613b21565b611c64565b604051610a549190613aa3565b60405180910390f35b348015610a6957600080fd5b50610a72611d18565b604051610a7f9190613e0f565b60405180910390f35b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190613c2c565b611d3e565b604051610abc9190613c87565b60405180910390f35b348015610ad157600080fd5b50610ada611d5c565b604051610ae79190613aa3565b60405180910390f35b348015610afc57600080fd5b50610b05611d8d565b604051610b129190613aa3565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190613cf5565b611d93565b005b348015610b5057600080fd5b50610b6b6004803603810190610b669190613ca2565b611dbd565b005b348015610b7957600080fd5b50610b946004803603810190610b8f9190613dc0565b611e49565b604051610ba19190613aa3565b60405180910390f35b348015610bb657600080fd5b50610bbf611ed0565b604051610bcc9190613e0f565b60405180910390f35b348015610be157600080fd5b50610bfc6004803603810190610bf79190613e83565b611ef6565b005b348015610c0a57600080fd5b50610c13611f59565b604051610c209190613aa3565b60405180910390f35b348015610c3557600080fd5b50610c3e611f5f565b604051610c4b9190613aa3565b60405180910390f35b348015610c6057600080fd5b50610c7b6004803603810190610c769190613b21565b611f65565b005b348015610c8957600080fd5b50610c92611fe8565b604051610c9f9190613f22565b60405180910390f35b60168060000154908060010154908060020154908060030154905084565b600f5481565b610cd461200e565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600b81526020017f506f6e7a696e6f6d696373000000000000000000000000000000000000000000815250905090565b6000610de3610ddc61208c565b8484612094565b6001905092915050565b6000600c54905090565b610dff61200e565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e5481565b6000610ed084848461225d565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f1b61208c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613faf565b60405180910390fd5b610fb885610fa761208c565b8584610fb39190613ffe565b612094565b60019150509392505050565b600080610fd261dead611805565b90506000610fe06000611805565b90508082610fec610ded565b610ff69190613ffe565b6110009190613ffe565b9250505090565b6000600d5482111561104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906140a4565b60405180910390fd5b6000611058612751565b9050808361106691906140f3565b915050919050565b60006012905090565b61107f61200e565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614170565b60405180910390fd5b60005b600780549050811015611334578173ffffffffffffffffffffffffffffffffffffffff166007828154811061114657611145614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361132157600760016007805490506111a09190613ffe565b815481106111b1576111b0614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111f0576111ef614190565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112e7576112e66141bf565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611334565b808061132c906141ee565b91505061110e565b5050565b60006113da61134561208c565b84846004600061135361208c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d59190614236565b612094565b6001905092915050565b60036020528060005260406000206000915090505481565b61140461200e565b6064818385876114149190614236565b61141e9190614236565b6114289190614236565b14611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f906142b6565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018281525060166000820151816000015560208201518160010155604082015181600201556060820151816003015590505050505050565b6114c461200e565b81600860036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60115481565b600860029054906101000a900460ff1681565b60155481565b60135481565b61157761200e565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb90614322565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116d857611694600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611007565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600860009054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118a057600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118eb565b6118e8600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611007565b90505b919050565b6118f861200e565b6119026000612775565b565b61190c61200e565b6012600a61191a9190614475565b8161192591906144c0565b60108190555050565b6012600a61193c9190614475565b6301312d0061194b91906144c0565b81565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119ac61200e565b600860029054906101000a900460ff16156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f39061454e565b60405180910390fd5b6001600860026101000a81548160ff0219169083151502179055506001600860006101000a81548160ff02191690831515021790555043601181905550565b6012600a611a499190614475565b6301312d00611a5891906144c0565b81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ab261200e565b80600860006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600581526020017f504f4e5a49000000000000000000000000000000000000000000000000000000815250905090565b611b1461200e565b8060158190555050565b611b2661200e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b6c573d6000803e3d6000fd5b5050565b60008060046000611b7f61208c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c33906145e0565b60405180910390fd5b611c59611c4761208c565b858584611c549190613ffe565b612094565b600191505092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611caf83611805565b10611d0e57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cfd83611805565b611d079190613ffe565b9050611d13565b600090505b919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d52611d4b61208c565b848461225d565b6001905092915050565b600080611d6a61dead611805565b90506000611d786000611805565b90508082611d869190614236565b9250505090565b60145481565b611d9b61200e565b6012600a611da99190614475565b81611db491906144c0565b600f8190555050565b611dc561200e565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611e00929190614600565b6020604051808303816000875af1158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e43919061463e565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611efe61200e565b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61012c81565b60105481565b611f6d61200e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd3906146dd565b60405180910390fd5b611fe581612775565b50565b600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61201661208c565b73ffffffffffffffffffffffffffffffffffffffff16612034611a5b565b73ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190614749565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa906147db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061486d565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122509190613aa3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c3906148ff565b60405180910390fd5b6000811161230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614991565b60405180910390fd5b61231883611805565b81111561235a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235190614a23565b60405180910390fd5b600a601354141580156123795750600860029054906101000a900460ff165b1561239f574360125460115461238f9190614236565b101561239e57600a6013819055505b5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124455750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561267457600860029054906101000a900460ff16612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614a8f565b60405180910390fd5b6012600a6124a79190614475565b6301312d006124b691906144c0565b8211156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90614afb565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125c0576012600a61255b9190614475565b6301312d0061256a91906144c0565b8261257485611805565b61257e9190614236565b11156125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614b8d565b60405180910390fd5b5b60019050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561262f57504360125460115461262d9190614236565b105b156126735760105482106126725760155460145410612668576015546014600082825461265c9190613ffe565b92505081905550612671565b60006014819055505b5b5b5b6000600f5461268230611805565b10159050600860019054906101000a900460ff161580156126a95750606460166000015414155b80156126c15750600860009054906101000a900460ff165b80156126ca5750805b80156127245750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561272d5750815b1561273e5761273d600f54612839565b5b61274a85858585612a20565b5050505050565b600080600061275e61303d565b91509150808261276e91906140f3565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600860016101000a81548160ff02191690831515021790555060006002601660000154606461286a9190613ffe565b61287491906144c0565b90506000816016600301548461288a91906144c0565b61289491906140f3565b9050600081846128a49190613ffe565b905060004790506128b4826132db565b600081476128c29190613ffe565b90506000601660030154866128d79190613ffe565b826128e291906140f3565b90506000601660030154826128f791906144c0565b9050600081111561290d5761290c868261351e565b5b600060166001015460028461292291906144c0565b61292c91906144c0565b905060008111156129835761298281600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661361e90919063ffffffff16565b5b600060166002015460028561299891906144c0565b6129a291906144c0565b905060008111156129f9576129f881600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661361e90919063ffffffff16565b5b5050505050505050506000600860016101000a81548160ff02191690831515021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612a7e576000612a81565b60015b90506000612a90848484613712565b9050818015612a9c5750825b8015612ab6575043601254601154612ab49190614236565b105b15612aff5761012c601554601454612ace9190614236565b1115612ae25761012c601481905550612afe565b60155460146000828254612af69190614236565b925050819055505b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612be05783600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9c9190613ffe565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cc5578060800151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c819190614236565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8060000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d149190613ffe565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612da69190614236565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060800151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e3c9190614236565b925050819055508060800151600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e969190613ffe565b925050819055508060c00151600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef09190614236565b92505081905550600081604001511180612f0e575060008160a00151115b15612f2657612f2581604001518260a00151613765565b5b600081606001511180612f3d575060008160c00151115b15612f5557612f5481606001518260c0015161379b565b5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051612fb69190613aa3565b60405180910390a360008160c001511115613035573073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161302c9190613aa3565b60405180910390a35b505050505050565b6000806000600d5490506000600c54905060005b6007805490508110156132a55782600160006007848154811061307757613076614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061316557508160026000600784815481106130fd576130fc614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561317c57600d54600c54945094505050506132d7565b600160006007838154811061319457613193614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132059190613ffe565b9250600260006007838154811061321f5761321e614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826132909190613ffe565b9150808061329d906141ee565b915050613051565b50600c54600d546132b691906140f3565b8210156132ce57600d54600c549350935050506132d7565b81819350935050505b9091565b6000600267ffffffffffffffff8111156132f8576132f7614bad565b5b6040519080825280602002602001820160405280156133265781602001602082028036833780820191505090505b509050308160008151811061333e5761333d614190565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190614bf1565b8160018151811061341d5761341c614190565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061348430600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612094565b600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134e8959493929190614d17565b600060405180830381600087803b15801561350257600080fd5b505af1158015613516573d6000803e3d6000fd5b505050505050565b61354b30600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612094565b600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016135d496959493929190614d71565b60606040518083038185885af11580156135f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136179190614de7565b5050505050565b80471015613661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365890614e86565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161368790614ed7565b60006040518083038185875af1925050503d80600081146136c4576040519150601f19603f3d011682016040523d82523d6000602084013e6136c9565b606091505b505090508061370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370490614f5e565b60405180910390fd5b505050565b61371a613a08565b61372584848461389e565b905061373a818585613735612751565b613994565b8460000185602001866040018760600184815250848152508481525084815250505050509392505050565b81600d60008282546137779190613ffe565b9250508190555080600e60008282546137909190614236565b925050819055505050565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138445780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461383c9190614236565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138939190614236565b925050819055505050565b6138a6613a08565b826138ba578381608001818152505061398d565b6000826138c9576013546138cd565b6014545b905060006064601660000154836138e491906144c0565b6138ee91906140f3565b90506000606460166000015460646139069190613ffe565b8461391191906144c0565b61391b91906140f3565b90506103e8828861392c91906144c0565b61393691906140f3565b8460a00181815250506103e8818861394e91906144c0565b61395891906140f3565b8460c00181815250508360c001518460a00151886139769190613ffe565b6139809190613ffe565b8460800181815250505050505b9392505050565b60008060008084876139a691906144c0565b9350856139bf57838460008093509350935093506139fd565b848860a001516139cf91906144c0565b9150848860c001516139e191906144c0565b90508082856139f09190613ffe565b6139fa9190613ffe565b92505b945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000819050919050565b613a5881613a45565b82525050565b6000608082019050613a736000830187613a4f565b613a806020830186613a4f565b613a8d6040830185613a4f565b613a9a6060830184613a4f565b95945050505050565b6000602082019050613ab86000830184613a4f565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aee82613ac3565b9050919050565b613afe81613ae3565b8114613b0957600080fd5b50565b600081359050613b1b81613af5565b92915050565b600060208284031215613b3757613b36613abe565b5b6000613b4584828501613b0c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b88578082015181840152602081019050613b6d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bb082613b4e565b613bba8185613b59565b9350613bca818560208601613b6a565b613bd381613b94565b840191505092915050565b60006020820190508181036000830152613bf88184613ba5565b905092915050565b613c0981613a45565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b60008060408385031215613c4357613c42613abe565b5b6000613c5185828601613b0c565b9250506020613c6285828601613c17565b9150509250929050565b60008115159050919050565b613c8181613c6c565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b600080600060608486031215613cbb57613cba613abe565b5b6000613cc986828701613b0c565b9350506020613cda86828701613b0c565b9250506040613ceb86828701613c17565b9150509250925092565b600060208284031215613d0b57613d0a613abe565b5b6000613d1984828501613c17565b91505092915050565b600060ff82169050919050565b613d3881613d22565b82525050565b6000602082019050613d536000830184613d2f565b92915050565b60008060008060808587031215613d7357613d72613abe565b5b6000613d8187828801613c17565b9450506020613d9287828801613c17565b9350506040613da387828801613c17565b9250506060613db487828801613c17565b91505092959194509250565b60008060408385031215613dd757613dd6613abe565b5b6000613de585828601613b0c565b9250506020613df685828601613b0c565b9150509250929050565b613e0981613ae3565b82525050565b6000602082019050613e246000830184613e00565b92915050565b613e3381613c6c565b8114613e3e57600080fd5b50565b600081359050613e5081613e2a565b92915050565b600060208284031215613e6c57613e6b613abe565b5b6000613e7a84828501613e41565b91505092915050565b60008060408385031215613e9a57613e99613abe565b5b6000613ea885828601613b0c565b9250506020613eb985828601613e41565b9150509250929050565b6000819050919050565b6000613ee8613ee3613ede84613ac3565b613ec3565b613ac3565b9050919050565b6000613efa82613ecd565b9050919050565b6000613f0c82613eef565b9050919050565b613f1c81613f01565b82525050565b6000602082019050613f376000830184613f13565b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f99602883613b59565b9150613fa482613f3d565b604082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061400982613a45565b915061401483613a45565b925082820390508181111561402c5761402b613fcf565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061408e602a83613b59565b915061409982614032565b604082019050919050565b600060208201905081810360008301526140bd81614081565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140fe82613a45565b915061410983613a45565b925082614119576141186140c4565b5b828204905092915050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b600061415a601783613b59565b915061416582614124565b602082019050919050565b600060208201905081810360008301526141898161414d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006141f982613a45565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361422b5761422a613fcf565b5b600182019050919050565b600061424182613a45565b915061424c83613a45565b925082820190508082111561426457614263613fcf565b5b92915050565b7f546f74616c206d75737420626520313030000000000000000000000000000000600082015250565b60006142a0601183613b59565b91506142ab8261426a565b602082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061430c601b83613b59565b9150614317826142d6565b602082019050919050565b6000602082019050818103600083015261433b816142ff565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156143995780860481111561437557614374613fcf565b5b60018516156143845780820291505b808102905061439285614342565b9450614359565b94509492505050565b6000826143b2576001905061446e565b816143c0576000905061446e565b81600181146143d657600281146143e05761440f565b600191505061446e565b60ff8411156143f2576143f1613fcf565b5b8360020a91508482111561440957614408613fcf565b5b5061446e565b5060208310610133831016604e8410600b84101617156144445782820a90508381111561443f5761443e613fcf565b5b61446e565b614451848484600161434f565b9250905081840481111561446857614467613fcf565b5b81810290505b9392505050565b600061448082613a45565b915061448b83613d22565b92506144b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846143a2565b905092915050565b60006144cb82613a45565b91506144d683613a45565b92508282026144e481613a45565b915082820484148315176144fb576144fa613fcf565b5b5092915050565b7f416c7265616479206c6976650000000000000000000000000000000000000000600082015250565b6000614538600c83613b59565b915061454382614502565b602082019050919050565b600060208201905081810360008301526145678161452b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145ca602583613b59565b91506145d58261456e565b604082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b60006040820190506146156000830185613e00565b6146226020830184613a4f565b9392505050565b60008151905061463881613e2a565b92915050565b60006020828403121561465457614653613abe565b5b600061466284828501614629565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146c7602683613b59565b91506146d28261466b565b604082019050919050565b600060208201905081810360008301526146f6816146ba565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614733602083613b59565b915061473e826146fd565b602082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147c5602483613b59565b91506147d082614769565b604082019050919050565b600060208201905081810360008301526147f4816147b8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614857602283613b59565b9150614862826147fb565b604082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148e9602583613b59565b91506148f48261488d565b604082019050919050565b60006020820190508181036000830152614918816148dc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061497b602983613b59565b91506149868261491f565b604082019050919050565b600060208201905081810360008301526149aa8161496e565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614a0d603183613b59565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f4c697175696469747920686173206e6f74206265656e20616464656420796574600082015250565b6000614a79602083613b59565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f596f752061726520657863656564696e67204d41585f54585f414d4f554e5400600082015250565b6000614ae5601f83613b59565b9150614af082614aaf565b602082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b7f596f752061726520657863656564696e67204d41585f57414c4c45545f414d4f60008201527f554e540000000000000000000000000000000000000000000000000000000000602082015250565b6000614b77602383613b59565b9150614b8282614b1b565b604082019050919050565b60006020820190508181036000830152614ba681614b6a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614beb81613af5565b92915050565b600060208284031215614c0757614c06613abe565b5b6000614c1584828501614bdc565b91505092915050565b6000819050919050565b6000614c43614c3e614c3984614c1e565b613ec3565b613a45565b9050919050565b614c5381614c28565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c8e81613ae3565b82525050565b6000614ca08383614c85565b60208301905092915050565b6000602082019050919050565b6000614cc482614c59565b614cce8185614c64565b9350614cd983614c75565b8060005b83811015614d0a578151614cf18882614c94565b9750614cfc83614cac565b925050600181019050614cdd565b5085935050505092915050565b600060a082019050614d2c6000830188613a4f565b614d396020830187614c4a565b8181036040830152614d4b8186614cb9565b9050614d5a6060830185613e00565b614d676080830184613a4f565b9695505050505050565b600060c082019050614d866000830189613e00565b614d936020830188613a4f565b614da06040830187614c4a565b614dad6060830186614c4a565b614dba6080830185613e00565b614dc760a0830184613a4f565b979650505050505050565b600081519050614de181613c00565b92915050565b600080600060608486031215614e0057614dff613abe565b5b6000614e0e86828701614dd2565b9350506020614e1f86828701614dd2565b9250506040614e3086828701614dd2565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614e70601d83613b59565b9150614e7b82614e3a565b602082019050919050565b60006020820190508181036000830152614e9f81614e63565b9050919050565b600081905092915050565b50565b6000614ec1600083614ea6565b9150614ecc82614eb1565b600082019050919050565b6000614ee282614eb4565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614f48603a83613b59565b9150614f5382614eec565b604082019050919050565b60006020820190508181036000830152614f7781614f3b565b905091905056fea264697066735822122051e4c6b3f06972af1781e68fae8d1f3a2a638435dcea4d68c145d354d454490a64736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000007ec1c4fa36c5da14dd6e1522ab42a87ea90e30c6000000000000000000000000bcefe6cf46eb1a394cac969bbdddc609f7be94b5

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063715018a6116101ab578063a6e3e1e1116100f7578063dd62ed3e11610095578063e7cb0df91161006f578063e7cb0df914610bfe578063f13cff4114610c29578063f2fde38b14610c54578063f887ea4014610c7d57610325565b8063dd62ed3e14610b6d578063deab8aea14610baa578063df8408fe14610bd557610325565b8063bd614ff7116100d1578063bd614ff714610ac5578063cc1776d314610af0578063cc274b2914610b1b578063cea9d26f14610b4457610325565b8063a6e3e1e114610a20578063a8aa1b3114610a5d578063a9059cbb14610a8857610325565b80638da5cb5b1161016457806395d89b411161013e57806395d89b4114610966578063963fbc50146109915780639e252f00146109ba578063a457c2d7146109e357610325565b80638da5cb5b146108e75780638ea5220f14610912578063924de9b71461093d57610325565b8063715018a6146107fd578063799754d7146108145780637e0ec1d11461083d57806388f82020146108685780638a8c523c146108a55780638ae2702f146108bc57610325565b8063395093511161026a5780634da86156116102235780635342acb4116101fd5780635342acb41461072d578063649011c81461076a5780636ddd17131461079557806370a08231146107c057610325565b80634da86156146106ae5780634f7041a5146106d957806352390c021461070457610325565b8063395093511461058c5780633b073d8a146105c95780633b63e0ab1461060657806340b28c2f1461062f57806348cd4cb1146106585780634ada218b1461068357610325565b80631816467f116102d75780632b112e49116102b15780632b112e49146104d05780632d838119146104fb578063313ce567146105385780633685d4191461056357610325565b80631816467f1461043f5780631a6611811461046857806323b872dd1461049357610325565b8063029514f71461032a5780630445b6671461035857806304dacd501461038357806306fdde03146103ac578063095ea7b3146103d757806318160ddd1461041457610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca8565b60405161034f9493929190613a5e565b60405180910390f35b34801561036457600080fd5b5061036d610cc6565b60405161037a9190613aa3565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613b21565b610ccc565b005b3480156103b857600080fd5b506103c1610d92565b6040516103ce9190613bde565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613c2c565b610dcf565b60405161040b9190613c87565b60405180910390f35b34801561042057600080fd5b50610429610ded565b6040516104369190613aa3565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613b21565b610df7565b005b34801561047457600080fd5b5061047d610ebd565b60405161048a9190613aa3565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190613ca2565b610ec3565b6040516104c79190613c87565b60405180910390f35b3480156104dc57600080fd5b506104e5610fc4565b6040516104f29190613aa3565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613cf5565b611007565b60405161052f9190613aa3565b60405180910390f35b34801561054457600080fd5b5061054d61106e565b60405161055a9190613d3e565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613b21565b611077565b005b34801561059857600080fd5b506105b360048036038101906105ae9190613c2c565b611338565b6040516105c09190613c87565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613b21565b6113e4565b6040516105fd9190613aa3565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613d59565b6113fc565b005b34801561063b57600080fd5b5061065660048036038101906106519190613dc0565b6114bc565b005b34801561066457600080fd5b5061066d61154a565b60405161067a9190613aa3565b60405180910390f35b34801561068f57600080fd5b50610698611550565b6040516106a59190613c87565b60405180910390f35b3480156106ba57600080fd5b506106c3611563565b6040516106d09190613aa3565b60405180910390f35b3480156106e557600080fd5b506106ee611569565b6040516106fb9190613aa3565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190613b21565b61156f565b005b34801561073957600080fd5b50610754600480360381019061074f9190613b21565b611796565b6040516107619190613c87565b60405180910390f35b34801561077657600080fd5b5061077f6117ec565b60405161078c9190613aa3565b60405180910390f35b3480156107a157600080fd5b506107aa6117f2565b6040516107b79190613c87565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613b21565b611805565b6040516107f49190613aa3565b60405180910390f35b34801561080957600080fd5b506108126118f0565b005b34801561082057600080fd5b5061083b60048036038101906108369190613cf5565b611904565b005b34801561084957600080fd5b5061085261192e565b60405161085f9190613aa3565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190613b21565b61194e565b60405161089c9190613c87565b60405180910390f35b3480156108b157600080fd5b506108ba6119a4565b005b3480156108c857600080fd5b506108d1611a3b565b6040516108de9190613aa3565b60405180910390f35b3480156108f357600080fd5b506108fc611a5b565b6040516109099190613e0f565b60405180910390f35b34801561091e57600080fd5b50610927611a84565b6040516109349190613e0f565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190613e56565b611aaa565b005b34801561097257600080fd5b5061097b611acf565b6040516109889190613bde565b60405180910390f35b34801561099d57600080fd5b506109b860048036038101906109b39190613cf5565b611b0c565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613cf5565b611b1e565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613c2c565b611b70565b604051610a179190613c87565b60405180910390f35b348015610a2c57600080fd5b50610a476004803603810190610a429190613b21565b611c64565b604051610a549190613aa3565b60405180910390f35b348015610a6957600080fd5b50610a72611d18565b604051610a7f9190613e0f565b60405180910390f35b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190613c2c565b611d3e565b604051610abc9190613c87565b60405180910390f35b348015610ad157600080fd5b50610ada611d5c565b604051610ae79190613aa3565b60405180910390f35b348015610afc57600080fd5b50610b05611d8d565b604051610b129190613aa3565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190613cf5565b611d93565b005b348015610b5057600080fd5b50610b6b6004803603810190610b669190613ca2565b611dbd565b005b348015610b7957600080fd5b50610b946004803603810190610b8f9190613dc0565b611e49565b604051610ba19190613aa3565b60405180910390f35b348015610bb657600080fd5b50610bbf611ed0565b604051610bcc9190613e0f565b60405180910390f35b348015610be157600080fd5b50610bfc6004803603810190610bf79190613e83565b611ef6565b005b348015610c0a57600080fd5b50610c13611f59565b604051610c209190613aa3565b60405180910390f35b348015610c3557600080fd5b50610c3e611f5f565b604051610c4b9190613aa3565b60405180910390f35b348015610c6057600080fd5b50610c7b6004803603810190610c769190613b21565b611f65565b005b348015610c8957600080fd5b50610c92611fe8565b604051610c9f9190613f22565b60405180910390f35b60168060000154908060010154908060020154908060030154905084565b600f5481565b610cd461200e565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600b81526020017f506f6e7a696e6f6d696373000000000000000000000000000000000000000000815250905090565b6000610de3610ddc61208c565b8484612094565b6001905092915050565b6000600c54905090565b610dff61200e565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e5481565b6000610ed084848461225d565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f1b61208c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613faf565b60405180910390fd5b610fb885610fa761208c565b8584610fb39190613ffe565b612094565b60019150509392505050565b600080610fd261dead611805565b90506000610fe06000611805565b90508082610fec610ded565b610ff69190613ffe565b6110009190613ffe565b9250505090565b6000600d5482111561104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906140a4565b60405180910390fd5b6000611058612751565b9050808361106691906140f3565b915050919050565b60006012905090565b61107f61200e565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614170565b60405180910390fd5b60005b600780549050811015611334578173ffffffffffffffffffffffffffffffffffffffff166007828154811061114657611145614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361132157600760016007805490506111a09190613ffe565b815481106111b1576111b0614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111f0576111ef614190565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112e7576112e66141bf565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611334565b808061132c906141ee565b91505061110e565b5050565b60006113da61134561208c565b84846004600061135361208c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d59190614236565b612094565b6001905092915050565b60036020528060005260406000206000915090505481565b61140461200e565b6064818385876114149190614236565b61141e9190614236565b6114289190614236565b14611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f906142b6565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018281525060166000820151816000015560208201518160010155604082015181600201556060820151816003015590505050505050565b6114c461200e565b81600860036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60115481565b600860029054906101000a900460ff1681565b60155481565b60135481565b61157761200e565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb90614322565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116d857611694600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611007565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600860009054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118a057600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118eb565b6118e8600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611007565b90505b919050565b6118f861200e565b6119026000612775565b565b61190c61200e565b6012600a61191a9190614475565b8161192591906144c0565b60108190555050565b6012600a61193c9190614475565b6301312d0061194b91906144c0565b81565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119ac61200e565b600860029054906101000a900460ff16156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f39061454e565b60405180910390fd5b6001600860026101000a81548160ff0219169083151502179055506001600860006101000a81548160ff02191690831515021790555043601181905550565b6012600a611a499190614475565b6301312d00611a5891906144c0565b81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ab261200e565b80600860006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600581526020017f504f4e5a49000000000000000000000000000000000000000000000000000000815250905090565b611b1461200e565b8060158190555050565b611b2661200e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b6c573d6000803e3d6000fd5b5050565b60008060046000611b7f61208c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c33906145e0565b60405180910390fd5b611c59611c4761208c565b858584611c549190613ffe565b612094565b600191505092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611caf83611805565b10611d0e57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cfd83611805565b611d079190613ffe565b9050611d13565b600090505b919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d52611d4b61208c565b848461225d565b6001905092915050565b600080611d6a61dead611805565b90506000611d786000611805565b90508082611d869190614236565b9250505090565b60145481565b611d9b61200e565b6012600a611da99190614475565b81611db491906144c0565b600f8190555050565b611dc561200e565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611e00929190614600565b6020604051808303816000875af1158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e43919061463e565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611efe61200e565b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61012c81565b60105481565b611f6d61200e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd3906146dd565b60405180910390fd5b611fe581612775565b50565b600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61201661208c565b73ffffffffffffffffffffffffffffffffffffffff16612034611a5b565b73ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190614749565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa906147db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061486d565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122509190613aa3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c3906148ff565b60405180910390fd5b6000811161230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614991565b60405180910390fd5b61231883611805565b81111561235a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235190614a23565b60405180910390fd5b600a601354141580156123795750600860029054906101000a900460ff165b1561239f574360125460115461238f9190614236565b101561239e57600a6013819055505b5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124455750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561267457600860029054906101000a900460ff16612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614a8f565b60405180910390fd5b6012600a6124a79190614475565b6301312d006124b691906144c0565b8211156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90614afb565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125c0576012600a61255b9190614475565b6301312d0061256a91906144c0565b8261257485611805565b61257e9190614236565b11156125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614b8d565b60405180910390fd5b5b60019050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561262f57504360125460115461262d9190614236565b105b156126735760105482106126725760155460145410612668576015546014600082825461265c9190613ffe565b92505081905550612671565b60006014819055505b5b5b5b6000600f5461268230611805565b10159050600860019054906101000a900460ff161580156126a95750606460166000015414155b80156126c15750600860009054906101000a900460ff165b80156126ca5750805b80156127245750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561272d5750815b1561273e5761273d600f54612839565b5b61274a85858585612a20565b5050505050565b600080600061275e61303d565b91509150808261276e91906140f3565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600860016101000a81548160ff02191690831515021790555060006002601660000154606461286a9190613ffe565b61287491906144c0565b90506000816016600301548461288a91906144c0565b61289491906140f3565b9050600081846128a49190613ffe565b905060004790506128b4826132db565b600081476128c29190613ffe565b90506000601660030154866128d79190613ffe565b826128e291906140f3565b90506000601660030154826128f791906144c0565b9050600081111561290d5761290c868261351e565b5b600060166001015460028461292291906144c0565b61292c91906144c0565b905060008111156129835761298281600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661361e90919063ffffffff16565b5b600060166002015460028561299891906144c0565b6129a291906144c0565b905060008111156129f9576129f881600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661361e90919063ffffffff16565b5b5050505050505050506000600860016101000a81548160ff02191690831515021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612a7e576000612a81565b60015b90506000612a90848484613712565b9050818015612a9c5750825b8015612ab6575043601254601154612ab49190614236565b105b15612aff5761012c601554601454612ace9190614236565b1115612ae25761012c601481905550612afe565b60155460146000828254612af69190614236565b925050819055505b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612be05783600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9c9190613ffe565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cc5578060800151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c819190614236565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8060000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d149190613ffe565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612da69190614236565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060800151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e3c9190614236565b925050819055508060800151600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e969190613ffe565b925050819055508060c00151600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef09190614236565b92505081905550600081604001511180612f0e575060008160a00151115b15612f2657612f2581604001518260a00151613765565b5b600081606001511180612f3d575060008160c00151115b15612f5557612f5481606001518260c0015161379b565b5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051612fb69190613aa3565b60405180910390a360008160c001511115613035573073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161302c9190613aa3565b60405180910390a35b505050505050565b6000806000600d5490506000600c54905060005b6007805490508110156132a55782600160006007848154811061307757613076614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061316557508160026000600784815481106130fd576130fc614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561317c57600d54600c54945094505050506132d7565b600160006007838154811061319457613193614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132059190613ffe565b9250600260006007838154811061321f5761321e614190565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826132909190613ffe565b9150808061329d906141ee565b915050613051565b50600c54600d546132b691906140f3565b8210156132ce57600d54600c549350935050506132d7565b81819350935050505b9091565b6000600267ffffffffffffffff8111156132f8576132f7614bad565b5b6040519080825280602002602001820160405280156133265781602001602082028036833780820191505090505b509050308160008151811061333e5761333d614190565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190614bf1565b8160018151811061341d5761341c614190565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061348430600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612094565b600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134e8959493929190614d17565b600060405180830381600087803b15801561350257600080fd5b505af1158015613516573d6000803e3d6000fd5b505050505050565b61354b30600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612094565b600860039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016135d496959493929190614d71565b60606040518083038185885af11580156135f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136179190614de7565b5050505050565b80471015613661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365890614e86565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161368790614ed7565b60006040518083038185875af1925050503d80600081146136c4576040519150601f19603f3d011682016040523d82523d6000602084013e6136c9565b606091505b505090508061370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370490614f5e565b60405180910390fd5b505050565b61371a613a08565b61372584848461389e565b905061373a818585613735612751565b613994565b8460000185602001866040018760600184815250848152508481525084815250505050509392505050565b81600d60008282546137779190613ffe565b9250508190555080600e60008282546137909190614236565b925050819055505050565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138445780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461383c9190614236565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138939190614236565b925050819055505050565b6138a6613a08565b826138ba578381608001818152505061398d565b6000826138c9576013546138cd565b6014545b905060006064601660000154836138e491906144c0565b6138ee91906140f3565b90506000606460166000015460646139069190613ffe565b8461391191906144c0565b61391b91906140f3565b90506103e8828861392c91906144c0565b61393691906140f3565b8460a00181815250506103e8818861394e91906144c0565b61395891906140f3565b8460c00181815250508360c001518460a00151886139769190613ffe565b6139809190613ffe565b8460800181815250505050505b9392505050565b60008060008084876139a691906144c0565b9350856139bf57838460008093509350935093506139fd565b848860a001516139cf91906144c0565b9150848860c001516139e191906144c0565b90508082856139f09190613ffe565b6139fa9190613ffe565b92505b945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000819050919050565b613a5881613a45565b82525050565b6000608082019050613a736000830187613a4f565b613a806020830186613a4f565b613a8d6040830185613a4f565b613a9a6060830184613a4f565b95945050505050565b6000602082019050613ab86000830184613a4f565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aee82613ac3565b9050919050565b613afe81613ae3565b8114613b0957600080fd5b50565b600081359050613b1b81613af5565b92915050565b600060208284031215613b3757613b36613abe565b5b6000613b4584828501613b0c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b88578082015181840152602081019050613b6d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bb082613b4e565b613bba8185613b59565b9350613bca818560208601613b6a565b613bd381613b94565b840191505092915050565b60006020820190508181036000830152613bf88184613ba5565b905092915050565b613c0981613a45565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b60008060408385031215613c4357613c42613abe565b5b6000613c5185828601613b0c565b9250506020613c6285828601613c17565b9150509250929050565b60008115159050919050565b613c8181613c6c565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b600080600060608486031215613cbb57613cba613abe565b5b6000613cc986828701613b0c565b9350506020613cda86828701613b0c565b9250506040613ceb86828701613c17565b9150509250925092565b600060208284031215613d0b57613d0a613abe565b5b6000613d1984828501613c17565b91505092915050565b600060ff82169050919050565b613d3881613d22565b82525050565b6000602082019050613d536000830184613d2f565b92915050565b60008060008060808587031215613d7357613d72613abe565b5b6000613d8187828801613c17565b9450506020613d9287828801613c17565b9350506040613da387828801613c17565b9250506060613db487828801613c17565b91505092959194509250565b60008060408385031215613dd757613dd6613abe565b5b6000613de585828601613b0c565b9250506020613df685828601613b0c565b9150509250929050565b613e0981613ae3565b82525050565b6000602082019050613e246000830184613e00565b92915050565b613e3381613c6c565b8114613e3e57600080fd5b50565b600081359050613e5081613e2a565b92915050565b600060208284031215613e6c57613e6b613abe565b5b6000613e7a84828501613e41565b91505092915050565b60008060408385031215613e9a57613e99613abe565b5b6000613ea885828601613b0c565b9250506020613eb985828601613e41565b9150509250929050565b6000819050919050565b6000613ee8613ee3613ede84613ac3565b613ec3565b613ac3565b9050919050565b6000613efa82613ecd565b9050919050565b6000613f0c82613eef565b9050919050565b613f1c81613f01565b82525050565b6000602082019050613f376000830184613f13565b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f99602883613b59565b9150613fa482613f3d565b604082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061400982613a45565b915061401483613a45565b925082820390508181111561402c5761402b613fcf565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061408e602a83613b59565b915061409982614032565b604082019050919050565b600060208201905081810360008301526140bd81614081565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140fe82613a45565b915061410983613a45565b925082614119576141186140c4565b5b828204905092915050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b600061415a601783613b59565b915061416582614124565b602082019050919050565b600060208201905081810360008301526141898161414d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006141f982613a45565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361422b5761422a613fcf565b5b600182019050919050565b600061424182613a45565b915061424c83613a45565b925082820190508082111561426457614263613fcf565b5b92915050565b7f546f74616c206d75737420626520313030000000000000000000000000000000600082015250565b60006142a0601183613b59565b91506142ab8261426a565b602082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061430c601b83613b59565b9150614317826142d6565b602082019050919050565b6000602082019050818103600083015261433b816142ff565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156143995780860481111561437557614374613fcf565b5b60018516156143845780820291505b808102905061439285614342565b9450614359565b94509492505050565b6000826143b2576001905061446e565b816143c0576000905061446e565b81600181146143d657600281146143e05761440f565b600191505061446e565b60ff8411156143f2576143f1613fcf565b5b8360020a91508482111561440957614408613fcf565b5b5061446e565b5060208310610133831016604e8410600b84101617156144445782820a90508381111561443f5761443e613fcf565b5b61446e565b614451848484600161434f565b9250905081840481111561446857614467613fcf565b5b81810290505b9392505050565b600061448082613a45565b915061448b83613d22565b92506144b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846143a2565b905092915050565b60006144cb82613a45565b91506144d683613a45565b92508282026144e481613a45565b915082820484148315176144fb576144fa613fcf565b5b5092915050565b7f416c7265616479206c6976650000000000000000000000000000000000000000600082015250565b6000614538600c83613b59565b915061454382614502565b602082019050919050565b600060208201905081810360008301526145678161452b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145ca602583613b59565b91506145d58261456e565b604082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b60006040820190506146156000830185613e00565b6146226020830184613a4f565b9392505050565b60008151905061463881613e2a565b92915050565b60006020828403121561465457614653613abe565b5b600061466284828501614629565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146c7602683613b59565b91506146d28261466b565b604082019050919050565b600060208201905081810360008301526146f6816146ba565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614733602083613b59565b915061473e826146fd565b602082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147c5602483613b59565b91506147d082614769565b604082019050919050565b600060208201905081810360008301526147f4816147b8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614857602283613b59565b9150614862826147fb565b604082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148e9602583613b59565b91506148f48261488d565b604082019050919050565b60006020820190508181036000830152614918816148dc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061497b602983613b59565b91506149868261491f565b604082019050919050565b600060208201905081810360008301526149aa8161496e565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614a0d603183613b59565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f4c697175696469747920686173206e6f74206265656e20616464656420796574600082015250565b6000614a79602083613b59565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f596f752061726520657863656564696e67204d41585f54585f414d4f554e5400600082015250565b6000614ae5601f83613b59565b9150614af082614aaf565b602082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b7f596f752061726520657863656564696e67204d41585f57414c4c45545f414d4f60008201527f554e540000000000000000000000000000000000000000000000000000000000602082015250565b6000614b77602383613b59565b9150614b8282614b1b565b604082019050919050565b60006020820190508181036000830152614ba681614b6a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614beb81613af5565b92915050565b600060208284031215614c0757614c06613abe565b5b6000614c1584828501614bdc565b91505092915050565b6000819050919050565b6000614c43614c3e614c3984614c1e565b613ec3565b613a45565b9050919050565b614c5381614c28565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c8e81613ae3565b82525050565b6000614ca08383614c85565b60208301905092915050565b6000602082019050919050565b6000614cc482614c59565b614cce8185614c64565b9350614cd983614c75565b8060005b83811015614d0a578151614cf18882614c94565b9750614cfc83614cac565b925050600181019050614cdd565b5085935050505092915050565b600060a082019050614d2c6000830188613a4f565b614d396020830187614c4a565b8181036040830152614d4b8186614cb9565b9050614d5a6060830185613e00565b614d676080830184613a4f565b9695505050505050565b600060c082019050614d866000830189613e00565b614d936020830188613a4f565b614da06040830187614c4a565b614dad6060830186614c4a565b614dba6080830185613e00565b614dc760a0830184613a4f565b979650505050505050565b600081519050614de181613c00565b92915050565b600080600060608486031215614e0057614dff613abe565b5b6000614e0e86828701614dd2565b9350506020614e1f86828701614dd2565b9250506040614e3086828701614dd2565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614e70601d83613b59565b9150614e7b82614e3a565b602082019050919050565b60006020820190508181036000830152614e9f81614e63565b9050919050565b600081905092915050565b50565b6000614ec1600083614ea6565b9150614ecc82614eb1565b600082019050919050565b6000614ee282614eb4565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614f48603a83613b59565b9150614f5382614eec565b604082019050919050565b60006020820190508181036000830152614f7781614f3b565b905091905056fea264697066735822122051e4c6b3f06972af1781e68fae8d1f3a2a638435dcea4d68c145d354d454490a64736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000007ec1c4fa36c5da14dd6e1522ab42a87ea90e30c6000000000000000000000000bcefe6cf46eb1a394cac969bbdddc609f7be94b5

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _devWallet (address): 0x7Ec1c4fA36c5DA14DD6e1522ab42a87Ea90e30c6
Arg [2] : _buybackWallet (address): 0xbCeFE6cF46EB1A394CAc969BBDddc609f7bE94b5

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000007ec1c4fa36c5da14dd6e1522ab42a87ea90e30c6
Arg [2] : 000000000000000000000000bcefe6cf46eb1a394cac969bbdddc609f7be94b5


Deployed Bytecode Sourcemap

17735:16878:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19472:69;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;18674:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33490:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20650:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21563:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20924:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33332:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18644:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21733:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22906:242;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23603:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20832:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24200:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22166:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17927:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24949:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34026:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18987:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18268:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19144:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19061:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23860:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24817:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19019:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18210:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21028:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16142:103;;;;;;;;;;;;;:::i;:::-;;33660:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18828:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22777:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33124:199;;;;;;;;;;;;;:::i;:::-;;18735:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15501:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18358:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33916:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20739:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34189:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34296:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22390:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23390:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18332:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21235:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23157:224;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19102:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33787:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34419:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21411:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18389:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24682:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19187:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18925:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16400:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18304:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19472:69;;;;;;;;;;;;;;;;;;;;;;;;:::o;18674:54::-;;;;:::o;33490:161::-;15387:13;:11;:13::i;:::-;33583:9:::1;33567:13;;:25;;;;;;;;;;;;;;;;;;33639:4;33603:18;:33;33622:13;;;;;;;;;;;33603:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;33490:161:::0;:::o;20650:83::-;20687:13;20720:5;;;;;;;;;;;;;;;;;20713:12;;20650:83;:::o;21563:161::-;21638:4;21655:39;21664:12;:10;:12::i;:::-;21678:7;21687:6;21655:8;:39::i;:::-;21712:4;21705:11;;21563:161;;;;:::o;20924:95::-;20977:7;21004;;20997:14;;20924:95;:::o;33332:149::-;15387:13;:11;:13::i;:::-;33417:9:::1;33405;;:21;;;;;;;;;;;;;;;;;;33469:4;33437:18;:29;33456:9;;;;;;;;;;;33437:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;33332:149:::0;:::o;18644:23::-;;;;:::o;21733:424::-;21839:4;21856:36;21866:6;21874:9;21885:6;21856:9;:36::i;:::-;21906:24;21933:11;:19;21945:6;21933:19;;;;;;;;;;;;;;;:33;21953:12;:10;:12::i;:::-;21933:33;;;;;;;;;;;;;;;;21906:60;;22005:6;21985:16;:26;;21977:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22067:57;22076:6;22084:12;:10;:12::i;:::-;22117:6;22098:16;:25;;;;:::i;:::-;22067:8;:57::i;:::-;22145:4;22138:11;;;21733:424;;;;;:::o;22906:242::-;22960:7;22979:19;23001:26;23019:6;23001:9;:26::i;:::-;22979:48;;23038:19;23060:21;23078:1;23060:9;:21::i;:::-;23038:43;;23129:11;23115;23099:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;;;;:::i;:::-;23092:48;;;;22906:242;:::o;23603:248::-;23669:7;23708;;23697;:18;;23689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23773:19;23796:10;:8;:10::i;:::-;23773:33;;23832:11;23824:7;:19;;;;:::i;:::-;23817:26;;;23603:248;;;:::o;20832:83::-;20873:5;18462:2;20891:16;;20832:83;:::o;24200:473::-;15387:13;:11;:13::i;:::-;24280:11:::1;:20;24292:7;24280:20;;;;;;;;;;;;;;;;;;;;;;;;;24272:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24344:9;24339:327;24363:9;:16;;;;24359:1;:20;24339:327;;;24421:7;24405:23;;:9;24415:1;24405:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;24401:254:::1;;24464:9;24493:1;24474:9;:16;;;;:20;;;;:::i;:::-;24464:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24449:9;24459:1;24449:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24533:1;24514:7;:16;24522:7;24514:16;;;;;;;;;;;;;;;:20;;;;24576:5;24553:11;:20;24565:7;24553:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24600:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24634:5;;24401:254;24381:3;;;;;:::i;:::-;;;;24339:327;;;;24200:473:::0;:::o;22166:215::-;22254:4;22271:80;22280:12;:10;:12::i;:::-;22294:7;22340:10;22303:11;:25;22315:12;:10;:12::i;:::-;22303:25;;;;;;;;;;;;;;;:34;22329:7;22303:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;22271:8;:80::i;:::-;22369:4;22362:11;;22166:215;;;;:::o;17927:49::-;;;;;;;;;;;;;;;;;:::o;24949:259::-;15387:13;:11;:13::i;:::-;25104:3:::1;25097;25086:8;25079:4;25072;:11;;;;:::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;:35;25064:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;25158:42;;;;;;;;25174:4;25158:42;;;;25180:4;25158:42;;;;25186:8;25158:42;;;;25196:3;25158:42;;::::0;25140:15:::1;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24949:259:::0;;;;:::o;34026:154::-;15387:13;:11;:13::i;:::-;34137:9:::1;34120:6;;:27;;;;;;;;;;;;;;;;;;34165:7;34158:4;;:14;;;;;;;;;;;;;;;;;;34026:154:::0;;:::o;18987:25::-;;;;:::o;18268:26::-;;;;;;;;;;;;;:::o;19144:30::-;;;;:::o;19061:27::-;;;;:::o;23860:331::-;15387:13;:11;:13::i;:::-;23941:11:::1;:20;23953:7;23941:20;;;;;;;;;;;;;;;;;;;;;;;;;23940:21;23932:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24026:1;24007:7;:16;24015:7;24007:16;;;;;;;;;;;;;;;;:20;24004:108;;;24063:37;24083:7;:16;24091:7;24083:16;;;;;;;;;;;;;;;;24063:19;:37::i;:::-;24044:7;:16;24052:7;24044:16;;;;;;;;;;;;;;;:56;;;;24004:108;24145:4;24122:11;:20;24134:7;24122:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24160:9;24175:7;24160:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23860:331:::0;:::o;24817:123::-;24881:4;24905:18;:27;24924:7;24905:27;;;;;;;;;;;;;;;;;;;;;;;;;24898:34;;24817:123;;;:::o;19019:32::-;;;;:::o;18210:23::-;;;;;;;;;;;;;:::o;21028:198::-;21094:7;21118:11;:20;21130:7;21118:20;;;;;;;;;;;;;;;;;;;;;;;;;21114:49;;;21147:7;:16;21155:7;21147:16;;;;;;;;;;;;;;;;21140:23;;;;21114:49;21181:37;21201:7;:16;21209:7;21201:16;;;;;;;;;;;;;;;;21181:19;:37::i;:::-;21174:44;;21028:198;;;;:::o;16142:103::-;15387:13;:11;:13::i;:::-;16207:30:::1;16234:1;16207:18;:30::i;:::-;16142:103::o:0;33660:118::-;15387:13;:11;:13::i;:::-;18462:2:::1;33757;:13;;;;:::i;:::-;33748:6;:22;;;;:::i;:::-;33733:12;:37;;;;33660:118:::0;:::o;18828:70::-;18462:2;18885;:13;;;;:::i;:::-;18872:10;:26;;;;:::i;:::-;18828:70;:::o;22777:120::-;22845:4;22869:11;:20;22881:7;22869:20;;;;;;;;;;;;;;;;;;;;;;;;;22862:27;;22777:120;;;:::o;33124:199::-;15387:13;:11;:13::i;:::-;33187:14:::1;;;;;;;;;;;33186:15;33178:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33246:4;33229:14;;:21;;;;;;;;;;;;;;;;;;33275:4;33261:11;;:18;;;;;;;;;;;;;;;;;;33303:12;33290:10;:25;;;;33124:199::o:0;18735:66::-;18462:2;18788;:13;;;;:::i;:::-;18775:10;:26;;;;:::i;:::-;18735:66;:::o;15501:87::-;15547:7;15574:6;;;;;;;;;;;15567:13;;15501:87;:::o;18358:24::-;;;;;;;;;;;;;:::o;33916:101::-;15387:13;:11;:13::i;:::-;34001:8:::1;33987:11;;:22;;;;;;;;;;;;;;;;;;33916:101:::0;:::o;20739:87::-;20778:13;20811:7;;;;;;;;;;;;;;;;;20804:14;;20739:87;:::o;34189:98::-;15387:13;:11;:13::i;:::-;34273:6:::1;34260:10;:19;;;;34189:98:::0;:::o;34296:114::-;15387:13;:11;:13::i;:::-;34371:10:::1;34363:28;;:39;34392:9;34363:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34296:114:::0;:::o;22390:378::-;22483:4;22500:24;22527:11;:25;22539:12;:10;:12::i;:::-;22527:25;;;;;;;;;;;;;;;:34;22553:7;22527:34;;;;;;;;;;;;;;;;22500:61;;22600:15;22580:16;:35;;22572:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22668:67;22677:12;:10;:12::i;:::-;22691:7;22719:15;22700:16;:34;;;;:::i;:::-;22668:8;:67::i;:::-;22756:4;22749:11;;;22390:378;;;;:::o;23390:204::-;23455:7;23497:13;:19;23511:4;23497:19;;;;;;;;;;;;;;;;23478:15;23488:4;23478:9;:15::i;:::-;:38;23475:111;;23543:13;:19;23557:4;23543:19;;;;;;;;;;;;;;;;23525:15;23535:4;23525:9;:15::i;:::-;:37;;;;:::i;:::-;23518:44;;;;23475:111;23585:1;23578:8;;23390:204;;;;:::o;18332:19::-;;;;;;;;;;;;;:::o;21235:167::-;21313:4;21330:42;21340:12;:10;:12::i;:::-;21354:9;21365:6;21330:9;:42::i;:::-;21390:4;21383:11;;21235:167;;;;:::o;23157:224::-;23209:7;23228:19;23250:26;23268:6;23250:9;:26::i;:::-;23228:48;;23287:19;23309:21;23327:1;23309:9;:21::i;:::-;23287:43;;23362:11;23348;:25;;;;:::i;:::-;23341:32;;;;23157:224;:::o;19102:28::-;;;;:::o;33787:120::-;15387:13;:11;:13::i;:::-;18462:2:::1;33886;:13;;;;:::i;:::-;33877:6;:22;;;;:::i;:::-;33861:13;:38;;;;33787:120:::0;:::o;34419:148::-;15387:13;:11;:13::i;:::-;34525:10:::1;34518:27;;;34546:3;34551:7;34518:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34419:148:::0;;;:::o;21411:143::-;21492:7;21519:11;:18;21531:5;21519:18;;;;;;;;;;;;;;;:27;21538:7;21519:27;;;;;;;;;;;;;;;;21512:34;;21411:143;;;;:::o;18389:28::-;;;;;;;;;;;;;:::o;24682:126::-;15387:13;:11;:13::i;:::-;24794:6:::1;24764:18;:27;24783:7;24764:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24682:126:::0;;:::o;19187:42::-;19226:3;19187:42;:::o;18925:55::-;;;;:::o;16400:201::-;15387:13;:11;:13::i;:::-;16509:1:::1;16489:22;;:8;:22;;::::0;16481:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16565:28;16584:8;16565:18;:28::i;:::-;16400:201:::0;:::o;18304:21::-;;;;;;;;;;;;;:::o;15666:132::-;15741:12;:10;:12::i;:::-;15730:23;;:7;:5;:7::i;:::-;:23;;;15722:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15666:132::o;14052:98::-;14105:7;14132:10;14125:17;;14052:98;:::o;27763:335::-;27873:1;27856:19;;:5;:19;;;27848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27954:1;27935:21;;:7;:21;;;27927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28036:6;28006:11;:18;28018:5;28006:18;;;;;;;;;;;;;;;:27;28025:7;28006:27;;;;;;;;;;;;;;;:36;;;;28074:7;28058:32;;28067:5;28058:32;;;28083:6;28058:32;;;;;;:::i;:::-;;;;;;;;27763:335;;;:::o;28110:1431::-;28214:1;28198:18;;:4;:18;;;28190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28286:1;28277:6;:10;28269:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28362:15;28372:4;28362:9;:15::i;:::-;28352:6;:25;;28344:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;28457:2;28447:6;;:12;;:30;;;;;28463:14;;;;;;;;;;;28447:30;28444:118;;;28525:12;28509:13;;28496:10;;:26;;;;:::i;:::-;:41;28493:57;;;28548:2;28539:6;:11;;;;28493:57;28444:118;28575:12;28613:18;:24;28632:4;28613:24;;;;;;;;;;;;;;;;;;;;;;;;;28612:25;:52;;;;;28642:18;:22;28661:2;28642:22;;;;;;;;;;;;;;;;;;;;;;;;;28641:23;28612:52;28609:638;;;28688:14;;;;;;;;;;;28680:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;18462:2;18788;:13;;;;:::i;:::-;18775:10;:26;;;;:::i;:::-;28762:6;:23;;28754:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28845:4;;;;;;;;;;;28839:10;;:2;:10;;;28836:106;;18462:2;18885;:13;;;;:::i;:::-;18872:10;:26;;;;:::i;:::-;28875:6;28859:13;28869:2;28859:9;:13::i;:::-;:22;;;;:::i;:::-;:43;;28851:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28836:106;28967:4;28957:14;;28997:4;;;;;;;;;;;28989:12;;:4;:12;;;:57;;;;;29034:12;29018:13;;29005:10;;:26;;;;:::i;:::-;:41;28989:57;28986:250;;;29079:12;;29069:6;:22;29066:155;;29129:10;;29118:7;;:21;29115:86;;29152:10;;29141:7;;:21;;;;;;;:::i;:::-;;;;;;;;29115:86;;;29200:1;29190:7;:11;;;;29115:86;29066:155;28986:250;28609:638;29260:12;29303:13;;29275:24;29293:4;29275:9;:24::i;:::-;:41;;29260:56;;29331:8;;;;;;;;;;;29330:9;:39;;;;;29366:3;29343:15;:19;;;:26;;29330:39;:54;;;;;29373:11;;;;;;;;;;;29330:54;:65;;;;;29388:7;29330:65;:81;;;;;29407:4;;;;;;;;;;;29399:12;;:4;:12;;;;29330:81;:92;;;;;29415:7;29330:92;29327:152;;;29438:29;29453:13;;29438:14;:29::i;:::-;29327:152;29492:41;29507:4;29513:2;29517:6;29525:7;29492:14;:41::i;:::-;28179:1362;;28110:1431;;;:::o;27047:158::-;27088:7;27109:15;27126;27145:19;:17;:19::i;:::-;27108:56;;;;27190:7;27182;:15;;;;:::i;:::-;27175:22;;;;27047:158;:::o;16761:191::-;16835:16;16854:6;;;;;;;;;;;16835:25;;16880:8;16871:6;;:17;;;;;;;;;;;;;;;;;;16935:8;16904:40;;16925:8;16904:40;;;;;;;;;;;;16824:128;16761:191;:::o;30926:1109::-;19814:4;19803:8;;:15;;;;;;;;;;;;;;;;;;30996:19:::1;31048:1;31025:15;:19;;;31019:3;:25;;;;:::i;:::-;31018:31;;;;:::i;:::-;30996:53;;31060:32;31125:11;31104:15;:18;;;31095:6;:27;;;;:::i;:::-;:41;;;;:::i;:::-;31060:76;;31147:14;31173:24;31164:6;:33;;;;:::i;:::-;31147:50;;31211:22;31236:21;31211:46;;31271:24;31288:6;31271:16;:24::i;:::-;31309:20;31356:14;31332:21;:38;;;;:::i;:::-;31309:61;;31381:19;31432:15;:18;;;31418:11;:32;;;;:::i;:::-;31402:12;:49;;;;:::i;:::-;31381:70;;31462:29;31508:15;:18;;;31494:11;:32;;;;:::i;:::-;31462:64;;31567:1;31543:21;:25;31540:158;;;31625:61;31638:24;31664:21;31625:12;:61::i;:::-;31540:158;31711:14;31746:15;:19;;;31742:1;31728:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;31711:54;;31788:1;31779:6;:10;31776:77;;;31805:36;31834:6;31813:9;;;;;;;;;;;31805:28;;;;:36;;;;:::i;:::-;31776:77;31866:18;31905:15;:23;;;31901:1;31887:11;:15;;;;:::i;:::-;:41;;;;:::i;:::-;31866:62;;31955:1;31942:10;:14;31939:89;;;31972:44;32005:10;31980:13;;;;;;;;;;;31972:32;;;;:44;;;;:::i;:::-;31939:89;30985:1050;;;;;;;;;19852:5:::0;19841:8;;:16;;;;;;;;;;;;;;;;;;30926:1109;:::o;29626:1291::-;29738:11;29765:4;;;;;;;;;;;29752:17;;:9;:17;;;:32;;29779:5;29752:32;;;29772:4;29752:32;29738:46;;29795:28;29826:36;29837:7;29846;29855:6;29826:10;:36::i;:::-;29795:67;;29879:6;:17;;;;;29889:7;29879:17;:62;;;;;29929:12;29913:13;;29900:10;;:26;;;;:::i;:::-;:41;29879:62;29876:196;;;19226:3;29970:10;;29960:7;;:20;;;;:::i;:::-;:35;29957:103;;;19226:3;29997:7;:22;;;;29957:103;;;30050:10;;30039:7;;:21;;;;;;;:::i;:::-;;;;;;;;29957:103;29876:196;30089:11;:19;30101:6;30089:19;;;;;;;;;;;;;;;;;;;;;;;;;30085:115;;;30181:7;30165;:15;30173:6;30165:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;30147:7;:15;30155:6;30147:15;;;;;;;;;;;;;;;:41;;;;30085:115;30214:11;:22;30226:9;30214:22;;;;;;;;;;;;;;;;;;;;;;;;;30210:130;;;30311:1;:17;;;30292:7;:18;30300:9;30292:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30271:7;:18;30279:9;30271:18;;;;;;;;;;;;;;;:57;;;;30210:130;30387:1;:9;;;30371:7;:15;30379:6;30371:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;30353:7;:15;30361:6;30353:15;;;;;;;;;;;;;;;:43;;;;30447:1;:17;;;30428:7;:18;30436:9;30428:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30407:7;:18;30415:9;30407:18;;;;;;;;;;;;;;;:57;;;;30503:1;:17;;;30475:13;:24;30489:9;30475:24;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;30556:1;:17;;;30531:13;:21;30545:6;30531:21;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;30616:1;:7;;;30584:13;:28;30606:4;30584:28;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;30649:1;30640;:6;;;:10;:24;;;;30663:1;30654;:6;;;:10;30640:24;30637:56;;;30666:27;30678:1;:6;;;30686:1;:6;;;30666:11;:27::i;:::-;30637:56;30717:1;30707;:7;;;:11;:26;;;;30732:1;30722;:7;;;:11;30707:26;30704:62;;;30735:31;30749:1;:7;;;30758:1;:7;;;30735:13;:31::i;:::-;30704:62;30805:9;30788:46;;30797:6;30788:46;;;30816:1;:17;;;30788:46;;;;;;:::i;:::-;;;;;;;;30858:1;30848;:7;;;:11;30845:61;;;30891:4;30866:40;;30875:6;30866:40;;;30898:1;:7;;;30866:40;;;;;;:::i;:::-;;;;;;;;30845:61;29724:1193;;29626:1291;;;;:::o;27214:540::-;27264:7;27273;27293:15;27311:7;;27293:25;;27329:15;27347:7;;27329:25;;27370:9;27365:279;27389:9;:16;;;;27385:1;:20;27365:279;;;27455:7;27431;:21;27439:9;27449:1;27439:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27431:21;;;;;;;;;;;;;;;;:31;:66;;;;27490:7;27466;:21;27474:9;27484:1;27474:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27466:21;;;;;;;;;;;;;;;;:31;27431:66;27427:97;;;27507:7;;27516;;27499:25;;;;;;;;;27427:97;27557:7;:21;27565:9;27575:1;27565:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27557:21;;;;;;;;;;;;;;;;27549:7;:29;;;;:::i;:::-;27539:39;;27611:7;:21;27619:9;27629:1;27619:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27611:21;;;;;;;;;;;;;;;;27603:7;:29;;;;:::i;:::-;27593:39;;27407:3;;;;;:::i;:::-;;;;27365:279;;;;27676:7;;27668;;:15;;;;:::i;:::-;27658:7;:25;27654:56;;;27693:7;;27702;;27685:25;;;;;;;;27654:56;27729:7;27738;27721:25;;;;;;27214:540;;;:::o;32551:564::-;32677:21;32715:1;32701:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32677:40;;32746:4;32728;32733:1;32728:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32772:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32762:4;32767:1;32762:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32799:53;32816:4;32831:6;;;;;;;;;;;32840:11;32799:8;:53::i;:::-;32892:6;;;;;;;;;;;:57;;;32964:11;32990:1;33034:4;33061;33081:15;32892:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32606:509;32551:564;:::o;32044:498::-;32192:53;32209:4;32224:6;;;;;;;;;;;32233:11;32192:8;:53::i;:::-;32289:6;;;;;;;;;;;:22;;;32319:9;32352:4;32372:11;32398:1;32441;32484:9;;;;;;;;;;;32508:15;32289:245;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32044:498;;:::o;3628:317::-;3743:6;3718:21;:31;;3710:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3797:12;3815:9;:14;;3837:6;3815:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3796:52;;;3867:7;3859:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;3699:246;3628:317;;:::o;25571:364::-;25657:36;;:::i;:::-;25718:37;25730:7;25739;25748:6;25718:11;:37::i;:::-;25706:49;;25848:52;25860:9;25871:7;25880;25889:10;:8;:10::i;:::-;25848:11;:52::i;:::-;25767:9;:17;;25786:9;:25;;25813:9;:14;;25829:9;:15;;25766:134;;;;;;;;;;;;;;;;;;;;25571:364;;;;;:::o;25217:116::-;25295:4;25285:7;;:14;;;;;;;:::i;:::-;;;;;;;;25321:4;25310:8;;:15;;;;;;;:::i;:::-;;;;;;;;25217:116;;:::o;25342:220::-;25419:11;:26;25439:4;25419:26;;;;;;;;;;;;;;;;;;;;;;;;;25416:97;;;25495:6;25471:7;:22;25487:4;25471:22;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;25416:97;25548:6;25523:7;:22;25539:4;25523:22;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;25342:220;;:::o;25944:580::-;26031:28;;:::i;:::-;26079:7;26075:86;;26121:7;26101:1;:17;;:27;;;;;26141:8;;26075:86;26174:15;26192:6;:25;;26211:6;;26192:25;;;26201:7;;26192:25;26174:43;;26228:14;26277:3;26255:15;:19;;;26245:7;:29;;;;:::i;:::-;:35;;;;:::i;:::-;26228:52;;26291:15;26349:3;26326:15;:19;;;26320:3;:25;;;;:::i;:::-;26309:7;:37;;;;:::i;:::-;:43;;;;:::i;:::-;26291:61;;26391:4;26382:6;26372:7;:16;;;;:::i;:::-;:23;;;;:::i;:::-;26363:1;:6;;:32;;;;;26436:4;26426:7;26416;:17;;;;:::i;:::-;:24;;;;:::i;:::-;26406:1;:7;;:34;;;;;26490:1;:7;;;26481:1;:6;;;26471:7;:16;;;;:::i;:::-;:26;;;;:::i;:::-;26451:1;:17;;:46;;;;;26508:8;;;25944:580;;;;;;:::o;26533:505::-;26658:15;26675:23;26700:12;26714:13;26758:11;26750:7;:19;;;;:::i;:::-;26740:29;;26787:7;26783:67;;26816:7;26825;26834:1;26836;26809:29;;;;;;;;;;26783:67;26877:11;26870:1;:6;;;:18;;;;:::i;:::-;26863:25;;26915:11;26907:1;:7;;;:19;;;;:::i;:::-;26899:27;;26969:5;26964:4;26956:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;26937:37;;26533:505;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:553::-;391:4;429:3;418:9;414:19;406:27;;443:71;511:1;500:9;496:17;487:6;443:71;:::i;:::-;524:72;592:2;581:9;577:18;568:6;524:72;:::i;:::-;606;674:2;663:9;659:18;650:6;606:72;:::i;:::-;688;756:2;745:9;741:18;732:6;688:72;:::i;:::-;214:553;;;;;;;:::o;773:222::-;866:4;904:2;893:9;889:18;881:26;;917:71;985:1;974:9;970:17;961:6;917:71;:::i;:::-;773:222;;;;:::o;1082:117::-;1191:1;1188;1181:12;1328:126;1365:7;1405:42;1398:5;1394:54;1383:65;;1328:126;;;:::o;1460:96::-;1497:7;1526:24;1544:5;1526:24;:::i;:::-;1515:35;;1460:96;;;:::o;1562:122::-;1635:24;1653:5;1635:24;:::i;:::-;1628:5;1625:35;1615:63;;1674:1;1671;1664:12;1615:63;1562:122;:::o;1690:139::-;1736:5;1774:6;1761:20;1752:29;;1790:33;1817:5;1790:33;:::i;:::-;1690:139;;;;:::o;1835:329::-;1894:6;1943:2;1931:9;1922:7;1918:23;1914:32;1911:119;;;1949:79;;:::i;:::-;1911:119;2069:1;2094:53;2139:7;2130:6;2119:9;2115:22;2094:53;:::i;:::-;2084:63;;2040:117;1835:329;;;;:::o;2170:99::-;2222:6;2256:5;2250:12;2240:22;;2170:99;;;:::o;2275:169::-;2359:11;2393:6;2388:3;2381:19;2433:4;2428:3;2424:14;2409:29;;2275:169;;;;:::o;2450:246::-;2531:1;2541:113;2555:6;2552:1;2549:13;2541:113;;;2640:1;2635:3;2631:11;2625:18;2621:1;2616:3;2612:11;2605:39;2577:2;2574:1;2570:10;2565:15;;2541:113;;;2688:1;2679:6;2674:3;2670:16;2663:27;2512:184;2450:246;;;:::o;2702:102::-;2743:6;2794:2;2790:7;2785:2;2778:5;2774:14;2770:28;2760:38;;2702:102;;;:::o;2810:377::-;2898:3;2926:39;2959:5;2926:39;:::i;:::-;2981:71;3045:6;3040:3;2981:71;:::i;:::-;2974:78;;3061:65;3119:6;3114:3;3107:4;3100:5;3096:16;3061:65;:::i;:::-;3151:29;3173:6;3151:29;:::i;:::-;3146:3;3142:39;3135:46;;2902:285;2810:377;;;;:::o;3193:313::-;3306:4;3344:2;3333:9;3329:18;3321:26;;3393:9;3387:4;3383:20;3379:1;3368:9;3364:17;3357:47;3421:78;3494:4;3485:6;3421:78;:::i;:::-;3413:86;;3193:313;;;;:::o;3512:122::-;3585:24;3603:5;3585:24;:::i;:::-;3578:5;3575:35;3565:63;;3624:1;3621;3614:12;3565:63;3512:122;:::o;3640:139::-;3686:5;3724:6;3711:20;3702:29;;3740:33;3767:5;3740:33;:::i;:::-;3640:139;;;;:::o;3785:474::-;3853:6;3861;3910:2;3898:9;3889:7;3885:23;3881:32;3878:119;;;3916:79;;:::i;:::-;3878:119;4036:1;4061:53;4106:7;4097:6;4086:9;4082:22;4061:53;:::i;:::-;4051:63;;4007:117;4163:2;4189:53;4234:7;4225:6;4214:9;4210:22;4189:53;:::i;:::-;4179:63;;4134:118;3785:474;;;;;:::o;4265:90::-;4299:7;4342:5;4335:13;4328:21;4317:32;;4265:90;;;:::o;4361:109::-;4442:21;4457:5;4442:21;:::i;:::-;4437:3;4430:34;4361:109;;:::o;4476:210::-;4563:4;4601:2;4590:9;4586:18;4578:26;;4614:65;4676:1;4665:9;4661:17;4652:6;4614:65;:::i;:::-;4476:210;;;;:::o;4692:619::-;4769:6;4777;4785;4834:2;4822:9;4813:7;4809:23;4805:32;4802:119;;;4840:79;;:::i;:::-;4802:119;4960:1;4985:53;5030:7;5021:6;5010:9;5006:22;4985:53;:::i;:::-;4975:63;;4931:117;5087:2;5113:53;5158:7;5149:6;5138:9;5134:22;5113:53;:::i;:::-;5103:63;;5058:118;5215:2;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5186:118;4692:619;;;;;:::o;5317:329::-;5376:6;5425:2;5413:9;5404:7;5400:23;5396:32;5393:119;;;5431:79;;:::i;:::-;5393:119;5551:1;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5522:117;5317:329;;;;:::o;5652:86::-;5687:7;5727:4;5720:5;5716:16;5705:27;;5652:86;;;:::o;5744:112::-;5827:22;5843:5;5827:22;:::i;:::-;5822:3;5815:35;5744:112;;:::o;5862:214::-;5951:4;5989:2;5978:9;5974:18;5966:26;;6002:67;6066:1;6055:9;6051:17;6042:6;6002:67;:::i;:::-;5862:214;;;;:::o;6082:765::-;6168:6;6176;6184;6192;6241:3;6229:9;6220:7;6216:23;6212:33;6209:120;;;6248:79;;:::i;:::-;6209:120;6368:1;6393:53;6438:7;6429:6;6418:9;6414:22;6393:53;:::i;:::-;6383:63;;6339:117;6495:2;6521:53;6566:7;6557:6;6546:9;6542:22;6521:53;:::i;:::-;6511:63;;6466:118;6623:2;6649:53;6694:7;6685:6;6674:9;6670:22;6649:53;:::i;:::-;6639:63;;6594:118;6751:2;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6722:118;6082:765;;;;;;;:::o;6853:474::-;6921:6;6929;6978:2;6966:9;6957:7;6953:23;6949:32;6946:119;;;6984:79;;:::i;:::-;6946:119;7104:1;7129:53;7174:7;7165:6;7154:9;7150:22;7129:53;:::i;:::-;7119:63;;7075:117;7231:2;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7202:118;6853:474;;;;;:::o;7333:118::-;7420:24;7438:5;7420:24;:::i;:::-;7415:3;7408:37;7333:118;;:::o;7457:222::-;7550:4;7588:2;7577:9;7573:18;7565:26;;7601:71;7669:1;7658:9;7654:17;7645:6;7601:71;:::i;:::-;7457:222;;;;:::o;7685:116::-;7755:21;7770:5;7755:21;:::i;:::-;7748:5;7745:32;7735:60;;7791:1;7788;7781:12;7735:60;7685:116;:::o;7807:133::-;7850:5;7888:6;7875:20;7866:29;;7904:30;7928:5;7904:30;:::i;:::-;7807:133;;;;:::o;7946:323::-;8002:6;8051:2;8039:9;8030:7;8026:23;8022:32;8019:119;;;8057:79;;:::i;:::-;8019:119;8177:1;8202:50;8244:7;8235:6;8224:9;8220:22;8202:50;:::i;:::-;8192:60;;8148:114;7946:323;;;;:::o;8275:468::-;8340:6;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:50;8718:7;8709:6;8698:9;8694:22;8676:50;:::i;:::-;8666:60;;8621:115;8275:468;;;;;:::o;8749:60::-;8777:3;8798:5;8791:12;;8749:60;;;:::o;8815:142::-;8865:9;8898:53;8916:34;8925:24;8943:5;8925:24;:::i;:::-;8916:34;:::i;:::-;8898:53;:::i;:::-;8885:66;;8815:142;;;:::o;8963:126::-;9013:9;9046:37;9077:5;9046:37;:::i;:::-;9033:50;;8963:126;;;:::o;9095:141::-;9160:9;9193:37;9224:5;9193:37;:::i;:::-;9180:50;;9095:141;;;:::o;9242:161::-;9344:52;9390:5;9344:52;:::i;:::-;9339:3;9332:65;9242:161;;:::o;9409:252::-;9517:4;9555:2;9544:9;9540:18;9532:26;;9568:86;9651:1;9640:9;9636:17;9627:6;9568:86;:::i;:::-;9409:252;;;;:::o;9667:227::-;9807:34;9803:1;9795:6;9791:14;9784:58;9876:10;9871:2;9863:6;9859:15;9852:35;9667:227;:::o;9900:366::-;10042:3;10063:67;10127:2;10122:3;10063:67;:::i;:::-;10056:74;;10139:93;10228:3;10139:93;:::i;:::-;10257:2;10252:3;10248:12;10241:19;;9900:366;;;:::o;10272:419::-;10438:4;10476:2;10465:9;10461:18;10453:26;;10525:9;10519:4;10515:20;10511:1;10500:9;10496:17;10489:47;10553:131;10679:4;10553:131;:::i;:::-;10545:139;;10272:419;;;:::o;10697:180::-;10745:77;10742:1;10735:88;10842:4;10839:1;10832:15;10866:4;10863:1;10856:15;10883:194;10923:4;10943:20;10961:1;10943:20;:::i;:::-;10938:25;;10977:20;10995:1;10977:20;:::i;:::-;10972:25;;11021:1;11018;11014:9;11006:17;;11045:1;11039:4;11036:11;11033:37;;;11050:18;;:::i;:::-;11033:37;10883:194;;;;:::o;11083:229::-;11223:34;11219:1;11211:6;11207:14;11200:58;11292:12;11287:2;11279:6;11275:15;11268:37;11083:229;:::o;11318:366::-;11460:3;11481:67;11545:2;11540:3;11481:67;:::i;:::-;11474:74;;11557:93;11646:3;11557:93;:::i;:::-;11675:2;11670:3;11666:12;11659:19;;11318:366;;;:::o;11690:419::-;11856:4;11894:2;11883:9;11879:18;11871:26;;11943:9;11937:4;11933:20;11929:1;11918:9;11914:17;11907:47;11971:131;12097:4;11971:131;:::i;:::-;11963:139;;11690:419;;;:::o;12115:180::-;12163:77;12160:1;12153:88;12260:4;12257:1;12250:15;12284:4;12281:1;12274:15;12301:185;12341:1;12358:20;12376:1;12358:20;:::i;:::-;12353:25;;12392:20;12410:1;12392:20;:::i;:::-;12387:25;;12431:1;12421:35;;12436:18;;:::i;:::-;12421:35;12478:1;12475;12471:9;12466:14;;12301:185;;;;:::o;12492:173::-;12632:25;12628:1;12620:6;12616:14;12609:49;12492:173;:::o;12671:366::-;12813:3;12834:67;12898:2;12893:3;12834:67;:::i;:::-;12827:74;;12910:93;12999:3;12910:93;:::i;:::-;13028:2;13023:3;13019:12;13012:19;;12671:366;;;:::o;13043:419::-;13209:4;13247:2;13236:9;13232:18;13224:26;;13296:9;13290:4;13286:20;13282:1;13271:9;13267:17;13260:47;13324:131;13450:4;13324:131;:::i;:::-;13316:139;;13043:419;;;:::o;13468:180::-;13516:77;13513:1;13506:88;13613:4;13610:1;13603:15;13637:4;13634:1;13627:15;13654:180;13702:77;13699:1;13692:88;13799:4;13796:1;13789:15;13823:4;13820:1;13813:15;13840:233;13879:3;13902:24;13920:5;13902:24;:::i;:::-;13893:33;;13948:66;13941:5;13938:77;13935:103;;14018:18;;:::i;:::-;13935:103;14065:1;14058:5;14054:13;14047:20;;13840:233;;;:::o;14079:191::-;14119:3;14138:20;14156:1;14138:20;:::i;:::-;14133:25;;14172:20;14190:1;14172:20;:::i;:::-;14167:25;;14215:1;14212;14208:9;14201:16;;14236:3;14233:1;14230:10;14227:36;;;14243:18;;:::i;:::-;14227:36;14079:191;;;;:::o;14276:167::-;14416:19;14412:1;14404:6;14400:14;14393:43;14276:167;:::o;14449:366::-;14591:3;14612:67;14676:2;14671:3;14612:67;:::i;:::-;14605:74;;14688:93;14777:3;14688:93;:::i;:::-;14806:2;14801:3;14797:12;14790:19;;14449:366;;;:::o;14821:419::-;14987:4;15025:2;15014:9;15010:18;15002:26;;15074:9;15068:4;15064:20;15060:1;15049:9;15045:17;15038:47;15102:131;15228:4;15102:131;:::i;:::-;15094:139;;14821:419;;;:::o;15246:177::-;15386:29;15382:1;15374:6;15370:14;15363:53;15246:177;:::o;15429:366::-;15571:3;15592:67;15656:2;15651:3;15592:67;:::i;:::-;15585:74;;15668:93;15757:3;15668:93;:::i;:::-;15786:2;15781:3;15777:12;15770:19;;15429:366;;;:::o;15801:419::-;15967:4;16005:2;15994:9;15990:18;15982:26;;16054:9;16048:4;16044:20;16040:1;16029:9;16025:17;16018:47;16082:131;16208:4;16082:131;:::i;:::-;16074:139;;15801:419;;;:::o;16226:102::-;16268:8;16315:5;16312:1;16308:13;16287:34;;16226:102;;;:::o;16334:848::-;16395:5;16402:4;16426:6;16417:15;;16450:5;16441:14;;16464:712;16485:1;16475:8;16472:15;16464:712;;;16580:4;16575:3;16571:14;16565:4;16562:24;16559:50;;;16589:18;;:::i;:::-;16559:50;16639:1;16629:8;16625:16;16622:451;;;17054:4;17047:5;17043:16;17034:25;;16622:451;17104:4;17098;17094:15;17086:23;;17134:32;17157:8;17134:32;:::i;:::-;17122:44;;16464:712;;;16334:848;;;;;;;:::o;17188:1073::-;17242:5;17433:8;17423:40;;17454:1;17445:10;;17456:5;;17423:40;17482:4;17472:36;;17499:1;17490:10;;17501:5;;17472:36;17568:4;17616:1;17611:27;;;;17652:1;17647:191;;;;17561:277;;17611:27;17629:1;17620:10;;17631:5;;;17647:191;17692:3;17682:8;17679:17;17676:43;;;17699:18;;:::i;:::-;17676:43;17748:8;17745:1;17741:16;17732:25;;17783:3;17776:5;17773:14;17770:40;;;17790:18;;:::i;:::-;17770:40;17823:5;;;17561:277;;17947:2;17937:8;17934:16;17928:3;17922:4;17919:13;17915:36;17897:2;17887:8;17884:16;17879:2;17873:4;17870:12;17866:35;17850:111;17847:246;;;18003:8;17997:4;17993:19;17984:28;;18038:3;18031:5;18028:14;18025:40;;;18045:18;;:::i;:::-;18025:40;18078:5;;17847:246;18118:42;18156:3;18146:8;18140:4;18137:1;18118:42;:::i;:::-;18103:57;;;;18192:4;18187:3;18183:14;18176:5;18173:25;18170:51;;;18201:18;;:::i;:::-;18170:51;18250:4;18243:5;18239:16;18230:25;;17188:1073;;;;;;:::o;18267:281::-;18325:5;18349:23;18367:4;18349:23;:::i;:::-;18341:31;;18393:25;18409:8;18393:25;:::i;:::-;18381:37;;18437:104;18474:66;18464:8;18458:4;18437:104;:::i;:::-;18428:113;;18267:281;;;;:::o;18554:410::-;18594:7;18617:20;18635:1;18617:20;:::i;:::-;18612:25;;18651:20;18669:1;18651:20;:::i;:::-;18646:25;;18706:1;18703;18699:9;18728:30;18746:11;18728:30;:::i;:::-;18717:41;;18907:1;18898:7;18894:15;18891:1;18888:22;18868:1;18861:9;18841:83;18818:139;;18937:18;;:::i;:::-;18818:139;18602:362;18554:410;;;;:::o;18970:162::-;19110:14;19106:1;19098:6;19094:14;19087:38;18970:162;:::o;19138:366::-;19280:3;19301:67;19365:2;19360:3;19301:67;:::i;:::-;19294:74;;19377:93;19466:3;19377:93;:::i;:::-;19495:2;19490:3;19486:12;19479:19;;19138:366;;;:::o;19510:419::-;19676:4;19714:2;19703:9;19699:18;19691:26;;19763:9;19757:4;19753:20;19749:1;19738:9;19734:17;19727:47;19791:131;19917:4;19791:131;:::i;:::-;19783:139;;19510:419;;;:::o;19935:224::-;20075:34;20071:1;20063:6;20059:14;20052:58;20144:7;20139:2;20131:6;20127:15;20120:32;19935:224;:::o;20165:366::-;20307:3;20328:67;20392:2;20387:3;20328:67;:::i;:::-;20321:74;;20404:93;20493:3;20404:93;:::i;:::-;20522:2;20517:3;20513:12;20506:19;;20165:366;;;:::o;20537:419::-;20703:4;20741:2;20730:9;20726:18;20718:26;;20790:9;20784:4;20780:20;20776:1;20765:9;20761:17;20754:47;20818:131;20944:4;20818:131;:::i;:::-;20810:139;;20537:419;;;:::o;20962:332::-;21083:4;21121:2;21110:9;21106:18;21098:26;;21134:71;21202:1;21191:9;21187:17;21178:6;21134:71;:::i;:::-;21215:72;21283:2;21272:9;21268:18;21259:6;21215:72;:::i;:::-;20962:332;;;;;:::o;21300:137::-;21354:5;21385:6;21379:13;21370:22;;21401:30;21425:5;21401:30;:::i;:::-;21300:137;;;;:::o;21443:345::-;21510:6;21559:2;21547:9;21538:7;21534:23;21530:32;21527:119;;;21565:79;;:::i;:::-;21527:119;21685:1;21710:61;21763:7;21754:6;21743:9;21739:22;21710:61;:::i;:::-;21700:71;;21656:125;21443:345;;;;:::o;21794:225::-;21934:34;21930:1;21922:6;21918:14;21911:58;22003:8;21998:2;21990:6;21986:15;21979:33;21794:225;:::o;22025:366::-;22167:3;22188:67;22252:2;22247:3;22188:67;:::i;:::-;22181:74;;22264:93;22353:3;22264:93;:::i;:::-;22382:2;22377:3;22373:12;22366:19;;22025:366;;;:::o;22397:419::-;22563:4;22601:2;22590:9;22586:18;22578:26;;22650:9;22644:4;22640:20;22636:1;22625:9;22621:17;22614:47;22678:131;22804:4;22678:131;:::i;:::-;22670:139;;22397:419;;;:::o;22822:182::-;22962:34;22958:1;22950:6;22946:14;22939:58;22822:182;:::o;23010:366::-;23152:3;23173:67;23237:2;23232:3;23173:67;:::i;:::-;23166:74;;23249:93;23338:3;23249:93;:::i;:::-;23367:2;23362:3;23358:12;23351:19;;23010:366;;;:::o;23382:419::-;23548:4;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23382:419;;;:::o;23807:223::-;23947:34;23943:1;23935:6;23931:14;23924:58;24016:6;24011:2;24003:6;23999:15;23992:31;23807:223;:::o;24036:366::-;24178:3;24199:67;24263:2;24258:3;24199:67;:::i;:::-;24192:74;;24275:93;24364:3;24275:93;:::i;:::-;24393:2;24388:3;24384:12;24377:19;;24036:366;;;:::o;24408:419::-;24574:4;24612:2;24601:9;24597:18;24589:26;;24661:9;24655:4;24651:20;24647:1;24636:9;24632:17;24625:47;24689:131;24815:4;24689:131;:::i;:::-;24681:139;;24408:419;;;:::o;24833:221::-;24973:34;24969:1;24961:6;24957:14;24950:58;25042:4;25037:2;25029:6;25025:15;25018:29;24833:221;:::o;25060:366::-;25202:3;25223:67;25287:2;25282:3;25223:67;:::i;:::-;25216:74;;25299:93;25388:3;25299:93;:::i;:::-;25417:2;25412:3;25408:12;25401:19;;25060:366;;;:::o;25432:419::-;25598:4;25636:2;25625:9;25621:18;25613:26;;25685:9;25679:4;25675:20;25671:1;25660:9;25656:17;25649:47;25713:131;25839:4;25713:131;:::i;:::-;25705:139;;25432:419;;;:::o;25857:224::-;25997:34;25993:1;25985:6;25981:14;25974:58;26066:7;26061:2;26053:6;26049:15;26042:32;25857:224;:::o;26087:366::-;26229:3;26250:67;26314:2;26309:3;26250:67;:::i;:::-;26243:74;;26326:93;26415:3;26326:93;:::i;:::-;26444:2;26439:3;26435:12;26428:19;;26087:366;;;:::o;26459:419::-;26625:4;26663:2;26652:9;26648:18;26640:26;;26712:9;26706:4;26702:20;26698:1;26687:9;26683:17;26676:47;26740:131;26866:4;26740:131;:::i;:::-;26732:139;;26459:419;;;:::o;26884:228::-;27024:34;27020:1;27012:6;27008:14;27001:58;27093:11;27088:2;27080:6;27076:15;27069:36;26884:228;:::o;27118:366::-;27260:3;27281:67;27345:2;27340:3;27281:67;:::i;:::-;27274:74;;27357:93;27446:3;27357:93;:::i;:::-;27475:2;27470:3;27466:12;27459:19;;27118:366;;;:::o;27490:419::-;27656:4;27694:2;27683:9;27679:18;27671:26;;27743:9;27737:4;27733:20;27729:1;27718:9;27714:17;27707:47;27771:131;27897:4;27771:131;:::i;:::-;27763:139;;27490:419;;;:::o;27915:236::-;28055:34;28051:1;28043:6;28039:14;28032:58;28124:19;28119:2;28111:6;28107:15;28100:44;27915:236;:::o;28157:366::-;28299:3;28320:67;28384:2;28379:3;28320:67;:::i;:::-;28313:74;;28396:93;28485:3;28396:93;:::i;:::-;28514:2;28509:3;28505:12;28498:19;;28157:366;;;:::o;28529:419::-;28695:4;28733:2;28722:9;28718:18;28710:26;;28782:9;28776:4;28772:20;28768:1;28757:9;28753:17;28746:47;28810:131;28936:4;28810:131;:::i;:::-;28802:139;;28529:419;;;:::o;28954:182::-;29094:34;29090:1;29082:6;29078:14;29071:58;28954:182;:::o;29142:366::-;29284:3;29305:67;29369:2;29364:3;29305:67;:::i;:::-;29298:74;;29381:93;29470:3;29381:93;:::i;:::-;29499:2;29494:3;29490:12;29483:19;;29142:366;;;:::o;29514:419::-;29680:4;29718:2;29707:9;29703:18;29695:26;;29767:9;29761:4;29757:20;29753:1;29742:9;29738:17;29731:47;29795:131;29921:4;29795:131;:::i;:::-;29787:139;;29514:419;;;:::o;29939:181::-;30079:33;30075:1;30067:6;30063:14;30056:57;29939:181;:::o;30126:366::-;30268:3;30289:67;30353:2;30348:3;30289:67;:::i;:::-;30282:74;;30365:93;30454:3;30365:93;:::i;:::-;30483:2;30478:3;30474:12;30467:19;;30126:366;;;:::o;30498:419::-;30664:4;30702:2;30691:9;30687:18;30679:26;;30751:9;30745:4;30741:20;30737:1;30726:9;30722:17;30715:47;30779:131;30905:4;30779:131;:::i;:::-;30771:139;;30498:419;;;:::o;30923:222::-;31063:34;31059:1;31051:6;31047:14;31040:58;31132:5;31127:2;31119:6;31115:15;31108:30;30923:222;:::o;31151:366::-;31293:3;31314:67;31378:2;31373:3;31314:67;:::i;:::-;31307:74;;31390:93;31479:3;31390:93;:::i;:::-;31508:2;31503:3;31499:12;31492:19;;31151:366;;;:::o;31523:419::-;31689:4;31727:2;31716:9;31712:18;31704:26;;31776:9;31770:4;31766:20;31762:1;31751:9;31747:17;31740:47;31804:131;31930:4;31804:131;:::i;:::-;31796:139;;31523:419;;;:::o;31948:180::-;31996:77;31993:1;31986:88;32093:4;32090:1;32083:15;32117:4;32114:1;32107:15;32134:143;32191:5;32222:6;32216:13;32207:22;;32238:33;32265:5;32238:33;:::i;:::-;32134:143;;;;:::o;32283:351::-;32353:6;32402:2;32390:9;32381:7;32377:23;32373:32;32370:119;;;32408:79;;:::i;:::-;32370:119;32528:1;32553:64;32609:7;32600:6;32589:9;32585:22;32553:64;:::i;:::-;32543:74;;32499:128;32283:351;;;;:::o;32640:85::-;32685:7;32714:5;32703:16;;32640:85;;;:::o;32731:158::-;32789:9;32822:61;32840:42;32849:32;32875:5;32849:32;:::i;:::-;32840:42;:::i;:::-;32822:61;:::i;:::-;32809:74;;32731:158;;;:::o;32895:147::-;32990:45;33029:5;32990:45;:::i;:::-;32985:3;32978:58;32895:147;;:::o;33048:114::-;33115:6;33149:5;33143:12;33133:22;;33048:114;;;:::o;33168:184::-;33267:11;33301:6;33296:3;33289:19;33341:4;33336:3;33332:14;33317:29;;33168:184;;;;:::o;33358:132::-;33425:4;33448:3;33440:11;;33478:4;33473:3;33469:14;33461:22;;33358:132;;;:::o;33496:108::-;33573:24;33591:5;33573:24;:::i;:::-;33568:3;33561:37;33496:108;;:::o;33610:179::-;33679:10;33700:46;33742:3;33734:6;33700:46;:::i;:::-;33778:4;33773:3;33769:14;33755:28;;33610:179;;;;:::o;33795:113::-;33865:4;33897;33892:3;33888:14;33880:22;;33795:113;;;:::o;33944:732::-;34063:3;34092:54;34140:5;34092:54;:::i;:::-;34162:86;34241:6;34236:3;34162:86;:::i;:::-;34155:93;;34272:56;34322:5;34272:56;:::i;:::-;34351:7;34382:1;34367:284;34392:6;34389:1;34386:13;34367:284;;;34468:6;34462:13;34495:63;34554:3;34539:13;34495:63;:::i;:::-;34488:70;;34581:60;34634:6;34581:60;:::i;:::-;34571:70;;34427:224;34414:1;34411;34407:9;34402:14;;34367:284;;;34371:14;34667:3;34660:10;;34068:608;;;33944:732;;;;:::o;34682:831::-;34945:4;34983:3;34972:9;34968:19;34960:27;;34997:71;35065:1;35054:9;35050:17;35041:6;34997:71;:::i;:::-;35078:80;35154:2;35143:9;35139:18;35130:6;35078:80;:::i;:::-;35205:9;35199:4;35195:20;35190:2;35179:9;35175:18;35168:48;35233:108;35336:4;35327:6;35233:108;:::i;:::-;35225:116;;35351:72;35419:2;35408:9;35404:18;35395:6;35351:72;:::i;:::-;35433:73;35501:3;35490:9;35486:19;35477:6;35433:73;:::i;:::-;34682:831;;;;;;;;:::o;35519:807::-;35768:4;35806:3;35795:9;35791:19;35783:27;;35820:71;35888:1;35877:9;35873:17;35864:6;35820:71;:::i;:::-;35901:72;35969:2;35958:9;35954:18;35945:6;35901:72;:::i;:::-;35983:80;36059:2;36048:9;36044:18;36035:6;35983:80;:::i;:::-;36073;36149:2;36138:9;36134:18;36125:6;36073:80;:::i;:::-;36163:73;36231:3;36220:9;36216:19;36207:6;36163:73;:::i;:::-;36246;36314:3;36303:9;36299:19;36290:6;36246:73;:::i;:::-;35519:807;;;;;;;;;:::o;36332:143::-;36389:5;36420:6;36414:13;36405:22;;36436:33;36463:5;36436:33;:::i;:::-;36332:143;;;;:::o;36481:663::-;36569:6;36577;36585;36634:2;36622:9;36613:7;36609:23;36605:32;36602:119;;;36640:79;;:::i;:::-;36602:119;36760:1;36785:64;36841:7;36832:6;36821:9;36817:22;36785:64;:::i;:::-;36775:74;;36731:128;36898:2;36924:64;36980:7;36971:6;36960:9;36956:22;36924:64;:::i;:::-;36914:74;;36869:129;37037:2;37063:64;37119:7;37110:6;37099:9;37095:22;37063:64;:::i;:::-;37053:74;;37008:129;36481:663;;;;;:::o;37150:179::-;37290:31;37286:1;37278:6;37274:14;37267:55;37150:179;:::o;37335:366::-;37477:3;37498:67;37562:2;37557:3;37498:67;:::i;:::-;37491:74;;37574:93;37663:3;37574:93;:::i;:::-;37692:2;37687:3;37683:12;37676:19;;37335:366;;;:::o;37707:419::-;37873:4;37911:2;37900:9;37896:18;37888:26;;37960:9;37954:4;37950:20;37946:1;37935:9;37931:17;37924:47;37988:131;38114:4;37988:131;:::i;:::-;37980:139;;37707:419;;;:::o;38132:147::-;38233:11;38270:3;38255:18;;38132:147;;;;:::o;38285:114::-;;:::o;38405:398::-;38564:3;38585:83;38666:1;38661:3;38585:83;:::i;:::-;38578:90;;38677:93;38766:3;38677:93;:::i;:::-;38795:1;38790:3;38786:11;38779:18;;38405:398;;;:::o;38809:379::-;38993:3;39015:147;39158:3;39015:147;:::i;:::-;39008:154;;39179:3;39172:10;;38809:379;;;:::o;39194:245::-;39334:34;39330:1;39322:6;39318:14;39311:58;39403:28;39398:2;39390:6;39386:15;39379:53;39194:245;:::o;39445:366::-;39587:3;39608:67;39672:2;39667:3;39608:67;:::i;:::-;39601:74;;39684:93;39773:3;39684:93;:::i;:::-;39802:2;39797:3;39793:12;39786:19;;39445:366;;;:::o;39817:419::-;39983:4;40021:2;40010:9;40006:18;39998:26;;40070:9;40064:4;40060:20;40056:1;40045:9;40041:17;40034:47;40098:131;40224:4;40098:131;:::i;:::-;40090:139;;39817:419;;;:::o

Swarm Source

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