ETH Price: $3,641.19 (+0.77%)
 

Overview

Max Total Supply

750,000 VLTG

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
750,000 VLTG

Value
$0.00
0x1106517aee14a282f0b85d986b92dc2c965c49fd
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xbc9F3c0F...F3640EA76
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
BurnableMintableTaxHolderToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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



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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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);
    }
}




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

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

    uint256 internal _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }
        _burn(account, amount);
    }
}



contract BurnableMintableTaxHolderToken is ERC20Burnable, Ownable {

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping (address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint8 private _decimals;

    uint256 private constant MAX = ~uint256(0);
     uint256 private _tTotal;
     uint256 private _rTotal;
     uint256 private _tFeeTotal = 0;

    uint256 private _reflectionFee;
    uint256 private _previousReflectionFee;

    uint256 private _burnFee;
    uint256 private _previousBurnFee;
     
    uint256 private _taxFee;
    uint256 private _previousTaxFee;

    address private _feeAccount;

    constructor(uint256 tTotal_, string memory name_, string memory symbol_, uint8 decimals_, uint256 burnFee_, uint256 taxFee_, uint256 reflectionFee_, address feeAccount_, address service_) ERC20(name_, symbol_) payable {
        _decimals = decimals_;
        _tTotal = tTotal_ * 10 ** decimals_;
        _rTotal = (MAX - (MAX % _tTotal));

        _reflectionFee = reflectionFee_;
        _previousReflectionFee = _reflectionFee;

        _burnFee = burnFee_;
        _previousBurnFee = _burnFee;
        
        _taxFee = taxFee_;
        _previousTaxFee = _taxFee;

        _feeAccount = feeAccount_;

        //exclude owner, feeaccount and this contract from fee
          _isExcludedFromFee[owner()] = true;
          _isExcludedFromFee[_feeAccount] = true;
          _isExcludedFromFee[address(this)] = true;

        _mintStart(_msgSender(), _rTotal, _tTotal);
        payable(service_).transfer(getBalance());
    }

    receive() payable external{
        
    }

    function getBalance() private view returns(uint256){
        return address(this).balance;
    }

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

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

    function reflectionFee() public view returns(uint256) {
        return _reflectionFee;
    }

    function getBurnFee() public view returns (uint256) {
        return _burnFee;
    }
    
    function getTaxFee() public view returns (uint256) {
        return _taxFee;
    }
    
    function getFeeAccount() public view returns(address){
        return _feeAccount;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
          return _isExcludedFromFee[account];
    }

    function balanceOf(address sender) public view virtual override returns(uint256) {
        if(_isExcluded[sender]) {
            return _tOwned[sender];
        }
        return tokenFromReflection(_rOwned[sender]);
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFeesRedistributed() public view returns (uint256) {
        return _tFeeTotal;
    }


    function excludeFromFee(address account) public onlyOwner() {
          _isExcludedFromFee[account] = true;
    }
      
     function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

    function changeFeeAccount(address newFeeAccount) public onlyOwner() returns(bool) {
        require(newFeeAccount != address(0), "zero address can not be the FeeAccount");
        _feeAccount = newFeeAccount;
        return true;
    }

    function changeReflectionFee(uint256 newReflectionFee) public onlyOwner() returns(bool) {
        require(newReflectionFee >= 0, "Reflection fee must be greater or equal to zero");
        require(newReflectionFee <= 10, "Reflection fee must be lower or equal to ten");
        _reflectionFee = newReflectionFee;
        return true;
    }

    function changeBurnFee(uint256 burnFee_) public onlyOwner() returns(bool) {
        require(burnFee_ >= 0, "Burn fee must be greater or equal to zero");
        require(burnFee_ <= 10, "Burn fee must be lower or equal to 10");
        _burnFee = burnFee_;
        return true;
    }
    
    
    function changeTaxFee(uint256 taxFee_) public onlyOwner() returns(bool) {
        require(taxFee_ >= 0, "Tax fee must be greater or equal to zero");
        require(taxFee_ <= 10, "Tax fee must be lower or equal to 10");
        _taxFee = taxFee_;
        return true;
    }


    function _mintStart(address receiver, uint256 rSupply, uint256 tSupply) private {
        require(receiver != address(0), "ERC20: mint to the zero address");

        _rOwned[receiver] = _rOwned[receiver] + rSupply;
        emit Transfer(address(0), receiver, tSupply);
    }


    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,) = _getTransferValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }


    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,) = _getTransferValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,) = _getTransferValues(tAmount);
            return rTransferAmount;
        }
    }
    
    
    function tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount / currentRate;
    }
    
    
    function excludeAccountFromReward(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 includeAccountinReward(address account) public onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        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 _transfer(address sender, address recipient, uint256 amount) internal virtual override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        uint256 senderBalance = balanceOf(sender);
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        _beforeTokenTransfer(sender, recipient, amount);

        bool takeFee = true;
        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        }
        
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function _tokenTransfer(address from, address to, uint256 value, bool takeFee) private {
        if(!takeFee) {
            removeAllFee();
        }
        
        if (_isExcluded[from] && !_isExcluded[to]) {
            _transferFromExcluded(from, to, value);
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _transferToExcluded(from, to, value);
        } else if (!_isExcluded[from] && !_isExcluded[to]) {
            _transferStandard(from, to, value);
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _transferBothExcluded(from, to, value);
        } else {
            _transferStandard(from, to, value);
        }
        
        if(!takeFee) {
            restoreAllFee();
        }
    }

    function removeAllFee() private {
          if(_reflectionFee == 0 && _taxFee == 0 && _burnFee == 0) return;
          
          _previousReflectionFee = _reflectionFee;
          _previousTaxFee = _taxFee;
          _previousBurnFee = _burnFee;
          
          _reflectionFee = 0;
          _taxFee = 0;
          _burnFee = 0;
      }
      
      function restoreAllFee() private {
          _reflectionFee = _previousReflectionFee;
          _taxFee = _previousTaxFee;
          _burnFee = _previousBurnFee;
      }


    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;    
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;   
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate) = _getTransferValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;   
        
        burnFeeTransfer(sender, tAmount, currentRate);
        taxFeeTransfer(sender, tAmount, currentRate);
        _reflectFee(tAmount, currentRate);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _getCompleteTaxValue(uint256 tAmount) private view returns(uint256) {
        uint256 allTaxes = _reflectionFee + _taxFee + _burnFee;
        uint256 taxValue = tAmount * allTaxes / 100;
        return taxValue;
    }
    
    function _getTransferValues(uint256 tAmount) private view returns(uint256, uint256, uint256, uint256) {
        uint256 taxValue = _getCompleteTaxValue(tAmount);
        uint256 tTransferAmount = tAmount - taxValue;
        uint256 currentRate = _getRate();
        uint256 rTransferAmount = tTransferAmount * currentRate;
        uint256 rAmount = tAmount * currentRate;
        return(rAmount, rTransferAmount, tTransferAmount, currentRate);
    }
    
    
    function _reflectFee(uint256 tAmount, uint256 currentRate) private {
        uint256 tFee = tAmount * _reflectionFee / 100;
        uint256 rFee = tFee * currentRate;

        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }
    
    
    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 burnFeeTransfer(address sender, uint256 tAmount, uint256 currentRate) private {
        uint256 tBurnFee = tAmount * _burnFee / 100;
        if(tBurnFee > 0){
            uint256 rBurnFee = tBurnFee * currentRate;
            _tTotal = _tTotal - tBurnFee;
            _rTotal = _rTotal - rBurnFee;
            emit Transfer(sender, address(0), tBurnFee);
        }
    }
    
    function taxFeeTransfer(address sender, uint256 tAmount, uint256 currentRate) private {
        uint256 tTaxFee = tAmount * _taxFee / 100;
        if(tTaxFee > 0){
            uint256 rTaxFee = tTaxFee * currentRate;
            _rOwned[_feeAccount] = _rOwned[_feeAccount] + rTaxFee;
            emit Transfer(sender, _feeAccount, tTaxFee);
        }
    }


    function _burn(address account, uint256 amount) internal virtual override {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = balanceOf(account);
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

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

        uint256 currentRate = _getRate();
        uint256 rAmount = amount * currentRate;
        
        if(_isExcluded[account]){
            _tOwned[account] = _tOwned[account] - amount;
        }
        
        _rOwned[account] = _rOwned[account] - rAmount;
        
        _tTotal = _tTotal - amount;
        _rTotal = _rTotal - rAmount;
        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }


    function mint(address receiver, uint256 amount) public onlyOwner() {
        _mint(receiver, amount);
    }

    function _mint(address account, uint256 amount) internal virtual override {
        require(account != address(0), "ERC20: mint to the zero address");

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

        uint256 currentRate = _getRate();
        uint256 rAmount = amount * currentRate;
        
        if(_isExcluded[account]){
            _tOwned[account] = _tOwned[account] + amount;
        }
        
        _rOwned[account] = _rOwned[account] + rAmount;
        
        _tTotal = _tTotal + amount;
        _rTotal = _rTotal + rAmount;
        
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"tTotal_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"burnFee_","type":"uint256"},{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"reflectionFee_","type":"uint256"},{"internalType":"address","name":"feeAccount_","type":"address"},{"internalType":"address","name":"service_","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee_","type":"uint256"}],"name":"changeBurnFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeAccount","type":"address"}],"name":"changeFeeAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReflectionFee","type":"uint256"}],"name":"changeReflectionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee_","type":"uint256"}],"name":"changeTaxFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccountFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccountinReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesRedistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e5560405162005f6e38038062005f6e83398181016040528101906200002e9190620008b9565b87878160039080519060200190620000489291906200058e565b508060049080519060200190620000619291906200058e565b50505062000084620000786200031e60201b60201c565b6200032660201b60201c565b85600b60006101000a81548160ff021916908360ff16021790555085600a620000ae919062000b59565b89620000bb919062000baa565b600c81905550600c54600019620000d3919062000c3a565b600019620000e2919062000c72565b600d8190555082600f81905550600f54601081905550846011819055506011546012819055508360138190555060135460148190555081601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860006200016f620003ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002b8620002a66200031e60201b60201c565b600d54600c546200041660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff166108fc620002e26200058660201b60201c565b9081150290604051600060405180830381858888f193505050501580156200030e573d6000803e3d6000fd5b5050505050505050505062000e20565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004809062000d0e565b60405180910390fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620004d6919062000d30565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000579919062000d9e565b60405180910390a3505050565b600047905090565b8280546200059c9062000dea565b90600052602060002090601f016020900481019282620005c057600085556200060c565b82601f10620005db57805160ff19168380011785556200060c565b828001600101855582156200060c579182015b828111156200060b578251825591602001919060010190620005ee565b5b5090506200061b91906200061f565b5090565b5b808211156200063a57600081600090555060010162000620565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620006678162000652565b81146200067357600080fd5b50565b60008151905062000687816200065c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006e28262000697565b810181811067ffffffffffffffff82111715620007045762000703620006a8565b5b80604052505050565b6000620007196200063e565b9050620007278282620006d7565b919050565b600067ffffffffffffffff8211156200074a5762000749620006a8565b5b620007558262000697565b9050602081019050919050565b60005b838110156200078257808201518184015260208101905062000765565b8381111562000792576000848401525b50505050565b6000620007af620007a9846200072c565b6200070d565b905082815260208101848484011115620007ce57620007cd62000692565b5b620007db84828562000762565b509392505050565b600082601f830112620007fb57620007fa6200068d565b5b81516200080d84826020860162000798565b91505092915050565b600060ff82169050919050565b6200082e8162000816565b81146200083a57600080fd5b50565b6000815190506200084e8162000823565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008818262000854565b9050919050565b620008938162000874565b81146200089f57600080fd5b50565b600081519050620008b38162000888565b92915050565b60008060008060008060008060006101208a8c031215620008df57620008de62000648565b5b6000620008ef8c828d0162000676565b99505060208a015167ffffffffffffffff8111156200091357620009126200064d565b5b620009218c828d01620007e3565b98505060408a015167ffffffffffffffff8111156200094557620009446200064d565b5b620009538c828d01620007e3565b9750506060620009668c828d016200083d565b9650506080620009798c828d0162000676565b95505060a06200098c8c828d0162000676565b94505060c06200099f8c828d0162000676565b93505060e0620009b28c828d01620008a2565b925050610100620009c68c828d01620008a2565b9150509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a645780860481111562000a3c5762000a3b620009d6565b5b600185161562000a4c5780820291505b808102905062000a5c8562000a05565b945062000a1c565b94509492505050565b60008262000a7f576001905062000b52565b8162000a8f576000905062000b52565b816001811462000aa8576002811462000ab35762000ae9565b600191505062000b52565b60ff84111562000ac85762000ac7620009d6565b5b8360020a91508482111562000ae25762000ae1620009d6565b5b5062000b52565b5060208310610133831016604e8410600b841016171562000b235782820a90508381111562000b1d5762000b1c620009d6565b5b62000b52565b62000b32848484600162000a12565b9250905081840481111562000b4c5762000b4b620009d6565b5b81810290505b9392505050565b600062000b668262000652565b915062000b738362000816565b925062000ba27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a6d565b905092915050565b600062000bb78262000652565b915062000bc48362000652565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c005762000bff620009d6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c478262000652565b915062000c548362000652565b92508262000c675762000c6662000c0b565b5b828206905092915050565b600062000c7f8262000652565b915062000c8c8362000652565b92508282101562000ca25762000ca1620009d6565b5b828203905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cf6601f8362000cad565b915062000d038262000cbe565b602082019050919050565b6000602082019050818103600083015262000d298162000ce7565b9050919050565b600062000d3d8262000652565b915062000d4a8362000652565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d825762000d81620009d6565b5b828201905092915050565b62000d988162000652565b82525050565b600060208201905062000db5600083018462000d8d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e0357607f821691505b6020821081141562000e1a5762000e1962000dbb565b5b50919050565b61513e8062000e306000396000f3fe6080604052600436106101fd5760003560e01c806370a082311161010d578063a9059cbb116100a0578063ea2f0b371161006f578063ea2f0b37146107b2578063f2fde38b146107db578063f66608fe14610804578063fc5af7341461082f578063fdeb889f1461086c57610204565b8063a9059cbb146106d0578063aa4b10d11461070d578063cba0e99614610738578063dd62ed3e1461077557610204565b806383ad7994116100dc57806383ad7994146106125780638da5cb5b1461063d57806395d89b4114610668578063a457c2d71461069357610204565b806370a0823114610558578063715018a61461059557806371ffcb16146105ac57806379cc6790146105e957610204565b806339509351116101905780634549b0391161015f5780634549b0391461044d5780634614be9f1461048a5780635342acb4146104b5578063584e8d2a146104f25780636049876e1461052f57610204565b8063395093511461039557806340c10f19146103d257806342966c68146103fb578063437823ec1461042457610204565b806323b872dd116101cc57806323b872dd146102c55780632980555814610302578063313ce5671461033f578063320355041461036a57610204565b8063053ab1821461020957806306fdde0314610232578063095ea7b31461025d57806318160ddd1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613d96565b610895565b005b34801561023e57600080fd5b506102476109f9565b6040516102549190613e5c565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f9190613edc565b610a8b565b6040516102919190613f37565b60405180910390f35b3480156102a657600080fd5b506102af610aa9565b6040516102bc9190613f61565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190613f7c565b610ab3565b6040516102f99190613f37565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613d96565b610bab565b6040516103369190613f37565b60405180910390f35b34801561034b57600080fd5b50610354610cc1565b6040516103619190613feb565b60405180910390f35b34801561037657600080fd5b5061037f610cd8565b60405161038c9190613f61565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613edc565b610ce2565b6040516103c99190613f37565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613edc565b610d8e565b005b34801561040757600080fd5b50610422600480360381019061041d9190613d96565b610e18565b005b34801561043057600080fd5b5061044b60048036038101906104469190614006565b610e2c565b005b34801561045957600080fd5b50610474600480360381019061046f919061405f565b610f03565b6040516104819190613f61565b60405180910390f35b34801561049657600080fd5b5061049f610f83565b6040516104ac91906140ae565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190614006565b610fad565b6040516104e99190613f37565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613d96565b611003565b6040516105269190613f37565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190614006565b611119565b005b34801561056457600080fd5b5061057f600480360381019061057a9190614006565b6113b4565b60405161058c9190613f61565b60405180910390f35b3480156105a157600080fd5b506105aa61149f565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190614006565b611527565b6040516105e09190613f37565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613edc565b61165f565b005b34801561061e57600080fd5b506106276116da565b6040516106349190613f61565b60405180910390f35b34801561064957600080fd5b506106526116e4565b60405161065f91906140ae565b60405180910390f35b34801561067457600080fd5b5061067d61170e565b60405161068a9190613e5c565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613edc565b6117a0565b6040516106c79190613f37565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190613edc565b61188b565b6040516107049190613f37565b60405180910390f35b34801561071957600080fd5b506107226118a9565b60405161072f9190613f61565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190614006565b6118b3565b60405161076c9190613f37565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906140c9565b611909565b6040516107a99190613f61565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d49190614006565b611990565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190614006565b611a67565b005b34801561081057600080fd5b50610819611b5f565b6040516108269190613f61565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613d96565b611b69565b6040516108639190613f37565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614006565b611c7f565b005b600061089f611fb5565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561092e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109259061417b565b60405180910390fd5b600061093983611fbd565b505050905080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461098991906141ca565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600d546109da91906141ca565b600d8190555082600e546109ee91906141fe565b600e81905550505050565b606060038054610a0890614283565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490614283565b8015610a815780601f10610a5657610100808354040283529160200191610a81565b820191906000526020600020905b815481529060010190602001808311610a6457829003601f168201915b5050505050905090565b6000610a9f610a98611fb5565b8484612024565b6001905092915050565b6000600c54905090565b6000610ac08484846121ef565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b0b611fb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290614327565b60405180910390fd5b610b9f85610b97611fb5565b858403612024565b60019150509392505050565b6000610bb5611fb5565b73ffffffffffffffffffffffffffffffffffffffff16610bd36116e4565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090614393565b60405180910390fd5b6000821015610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614425565b60405180910390fd5b600a821115610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906144b7565b60405180910390fd5b81600f8190555060019050919050565b6000600b60009054906101000a900460ff16905090565b6000600e54905090565b6000610d84610cef611fb5565b848460016000610cfd611fb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d7f91906141fe565b612024565b6001905092915050565b610d96611fb5565b73ffffffffffffffffffffffffffffffffffffffff16610db46116e4565b73ffffffffffffffffffffffffffffffffffffffff1614610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190614393565b60405180910390fd5b610e1482826123ee565b5050565b610e29610e23611fb5565b82612695565b50565b610e34611fb5565b73ffffffffffffffffffffffffffffffffffffffff16610e526116e4565b73ffffffffffffffffffffffffffffffffffffffff1614610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90614393565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c54831115610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190614523565b60405180910390fd5b81610f68576000610f5a84611fbd565b505050905080915050610f7d565b6000610f7384611fbd565b5050915050809150505b92915050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061100d611fb5565b73ffffffffffffffffffffffffffffffffffffffff1661102b6116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890614393565b60405180910390fd5b60008210156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc906145b5565b60405180910390fd5b600a821115611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090614647565b60405180910390fd5b8160138190555060019050919050565b611121611fb5565b73ffffffffffffffffffffffffffffffffffffffff1661113f6116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c90614393565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611222576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611219906146b3565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112f6576112b2600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298d565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561144f57600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061149a565b611497600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298d565b90505b919050565b6114a7611fb5565b73ffffffffffffffffffffffffffffffffffffffff166114c56116e4565b73ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290614393565b60405180910390fd5b61152560006129f4565b565b6000611531611fb5565b73ffffffffffffffffffffffffffffffffffffffff1661154f6116e4565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90614393565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614745565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60006116728361166d611fb5565b611909565b9050818110156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae906147d7565b60405180910390fd5b6116cb836116c3611fb5565b848403612024565b6116d58383612695565b505050565b6000600f54905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461171d90614283565b80601f016020809104026020016040519081016040528092919081815260200182805461174990614283565b80156117965780601f1061176b57610100808354040283529160200191611796565b820191906000526020600020905b81548152906001019060200180831161177957829003601f168201915b5050505050905090565b600080600160006117af611fb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614869565b60405180910390fd5b611880611877611fb5565b85858403612024565b600191505092915050565b600061189f611898611fb5565b84846121ef565b6001905092915050565b6000601154905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611998611fb5565b73ffffffffffffffffffffffffffffffffffffffff166119b66116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390614393565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a6f611fb5565b73ffffffffffffffffffffffffffffffffffffffff16611a8d6116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90614393565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906148fb565b60405180910390fd5b611b5c816129f4565b50565b6000601354905090565b6000611b73611fb5565b73ffffffffffffffffffffffffffffffffffffffff16611b916116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90614393565b60405180910390fd5b6000821015611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c229061498d565b60405180910390fd5b600a821115611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690614a1f565b60405180910390fd5b8160118190555060019050919050565b611c87611fb5565b73ffffffffffffffffffffffffffffffffffffffff16611ca56116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf290614393565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90614a8b565b60405180910390fd5b60005b600a80549050811015611fb1578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611dc257611dc1614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f9e57600a6001600a80549050611e1d91906141ca565b81548110611e2e57611e2d614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110611e6d57611e6c614aab565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480611f6457611f63614ada565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fb1565b8080611fa990614b09565b915050611d8a565b5050565b600033905090565b6000806000806000611fce86612aba565b905060008187611fde91906141ca565b90506000611fea612b02565b905060008183611ffa9190614b52565b90506000828a61200a9190614b52565b905080828585985098509850985050505050509193509193565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90614c1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb90614cb0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121e29190613f61565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614d42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614dd4565b60405180910390fd5b60006122da846113b4565b90508181101561231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690614e66565b60405180910390fd5b61232a848484612b26565b600060019050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d15750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123db57600090505b6123e785858584612b2b565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561245e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245590614ed2565b60405180910390fd5b61246a60008383612b26565b6000612474612b02565b9050600081836124849190614b52565b9050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125675782600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252391906141fe565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b291906141fe565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600c5461260391906141fe565b600c8190555080600d5461261791906141fe565b600d819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161267b9190613f61565b60405180910390a361268f60008585612e3c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90614f64565b60405180910390fd5b6000612710836113b4565b905081811015612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90614ff6565b60405180910390fd5b61276183600084612b26565b600061276b612b02565b90506000818461277b9190614b52565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561285e5783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281a91906141ca565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a991906141ca565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600c546128fa91906141ca565b600c8190555080600d5461290e91906141ca565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516129729190613f61565b60405180910390a361298685600086612e3c565b5050505050565b6000600d548211156129d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cb90615088565b60405180910390fd5b60006129de612b02565b905080836129ec91906150d7565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080601154601354600f54612ad091906141fe565b612ada91906141fe565b9050600060648285612aec9190614b52565b612af691906150d7565b90508092505050919050565b6000806000612b0f612e41565b915091508082612b1f91906150d7565b9250505090565b505050565b80612b3957612b386130df565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bdc5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bf157612bec848484613141565b612e28565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c945750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ca957612ca4848484613390565b612e27565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d4d5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6257612d5d8484846135df565b612e26565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e045750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e1957612e148484846137a0565b612e25565b612e248484846135df565b5b5b5b5b80612e3657612e35613a7d565b5b50505050565b505050565b6000806000600d5490506000600c54905060005b600a805490508110156130a9578260066000600a8481548110612e7b57612e7a614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612f6957508160076000600a8481548110612f0157612f00614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612f8057600d54600c54945094505050506130db565b60066000600a8381548110612f9857612f97614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361300991906141ca565b925060076000600a838154811061302357613022614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261309491906141ca565b915080806130a190614b09565b915050612e55565b50600c54600d546130ba91906150d7565b8210156130d257600d54600c549350935050506130db565b81819350935050505b9091565b6000600f541480156130f357506000601354145b801561310157506000601154145b1561310b5761313f565b600f546010819055506013546014819055506011546012819055506000600f81905550600060138190555060006011819055505b565b60008060008061315085611fbd565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a391906141ca565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323191906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bf91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330d878683613a9a565b613318878683613b67565b6133228582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161337f9190613f61565b60405180910390a350505050505050565b60008060008061339f85611fbd565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133f291906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348091906141fe565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461350e91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355c878683613a9a565b613567878683613b67565b6135718582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135ce9190613f61565b60405180910390a350505050505050565b6000806000806135ee85611fbd565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461364191906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136cf91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061371d878683613a9a565b613728878683613b67565b6137328582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161378f9190613f61565b60405180910390a350505050505050565b6000806000806137af85611fbd565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461380291906141ca565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389091906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391e91906141fe565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ac91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139fa878683613a9a565b613a05878683613b67565b613a0f8582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a6c9190613f61565b60405180910390a350505050505050565b601054600f81905550601454601381905550601254601181905550565b6000606460115484613aac9190614b52565b613ab691906150d7565b90506000811115613b615760008282613acf9190614b52565b905081600c54613adf91906141ca565b600c8190555080600d54613af391906141ca565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b579190613f61565b60405180910390a3505b50505050565b6000606460135484613b799190614b52565b613b8391906150d7565b90506000811115613cf95760008282613b9c9190614b52565b90508060066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0b91906141fe565b60066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613cef9190613f61565b60405180910390a3505b50505050565b60006064600f5484613d119190614b52565b613d1b91906150d7565b905060008282613d2b9190614b52565b905080600d54613d3b91906141ca565b600d8190555081600e54613d4f91906141fe565b600e8190555050505050565b600080fd5b6000819050919050565b613d7381613d60565b8114613d7e57600080fd5b50565b600081359050613d9081613d6a565b92915050565b600060208284031215613dac57613dab613d5b565b5b6000613dba84828501613d81565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfd578082015181840152602081019050613de2565b83811115613e0c576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2e82613dc3565b613e388185613dce565b9350613e48818560208601613ddf565b613e5181613e12565b840191505092915050565b60006020820190508181036000830152613e768184613e23565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ea982613e7e565b9050919050565b613eb981613e9e565b8114613ec457600080fd5b50565b600081359050613ed681613eb0565b92915050565b60008060408385031215613ef357613ef2613d5b565b5b6000613f0185828601613ec7565b9250506020613f1285828601613d81565b9150509250929050565b60008115159050919050565b613f3181613f1c565b82525050565b6000602082019050613f4c6000830184613f28565b92915050565b613f5b81613d60565b82525050565b6000602082019050613f766000830184613f52565b92915050565b600080600060608486031215613f9557613f94613d5b565b5b6000613fa386828701613ec7565b9350506020613fb486828701613ec7565b9250506040613fc586828701613d81565b9150509250925092565b600060ff82169050919050565b613fe581613fcf565b82525050565b60006020820190506140006000830184613fdc565b92915050565b60006020828403121561401c5761401b613d5b565b5b600061402a84828501613ec7565b91505092915050565b61403c81613f1c565b811461404757600080fd5b50565b60008135905061405981614033565b92915050565b6000806040838503121561407657614075613d5b565b5b600061408485828601613d81565b92505060206140958582860161404a565b9150509250929050565b6140a881613e9e565b82525050565b60006020820190506140c3600083018461409f565b92915050565b600080604083850312156140e0576140df613d5b565b5b60006140ee85828601613ec7565b92505060206140ff85828601613ec7565b9150509250929050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614165602c83613dce565b915061417082614109565b604082019050919050565b6000602082019050818103600083015261419481614158565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141d582613d60565b91506141e083613d60565b9250828210156141f3576141f261419b565b5b828203905092915050565b600061420982613d60565b915061421483613d60565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142495761424861419b565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429b57607f821691505b602082108114156142af576142ae614254565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614311602883613dce565b915061431c826142b5565b604082019050919050565b6000602082019050818103600083015261434081614304565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061437d602083613dce565b915061438882614347565b602082019050919050565b600060208201905081810360008301526143ac81614370565b9050919050565b7f5265666c656374696f6e20666565206d7573742062652067726561746572206f60008201527f7220657175616c20746f207a65726f0000000000000000000000000000000000602082015250565b600061440f602f83613dce565b915061441a826143b3565b604082019050919050565b6000602082019050818103600083015261443e81614402565b9050919050565b7f5265666c656374696f6e20666565206d757374206265206c6f776572206f722060008201527f657175616c20746f2074656e0000000000000000000000000000000000000000602082015250565b60006144a1602c83613dce565b91506144ac82614445565b604082019050919050565b600060208201905081810360008301526144d081614494565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061450d601f83613dce565b9150614518826144d7565b602082019050919050565b6000602082019050818103600083015261453c81614500565b9050919050565b7f54617820666565206d7573742062652067726561746572206f7220657175616c60008201527f20746f207a65726f000000000000000000000000000000000000000000000000602082015250565b600061459f602883613dce565b91506145aa82614543565b604082019050919050565b600060208201905081810360008301526145ce81614592565b9050919050565b7f54617820666565206d757374206265206c6f776572206f7220657175616c207460008201527f6f20313000000000000000000000000000000000000000000000000000000000602082015250565b6000614631602483613dce565b915061463c826145d5565b604082019050919050565b6000602082019050818103600083015261466081614624565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061469d601b83613dce565b91506146a882614667565b602082019050919050565b600060208201905081810360008301526146cc81614690565b9050919050565b7f7a65726f20616464726573732063616e206e6f7420626520746865204665654160008201527f63636f756e740000000000000000000000000000000000000000000000000000602082015250565b600061472f602683613dce565b915061473a826146d3565b604082019050919050565b6000602082019050818103600083015261475e81614722565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006147c1602483613dce565b91506147cc82614765565b604082019050919050565b600060208201905081810360008301526147f0816147b4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614853602583613dce565b915061485e826147f7565b604082019050919050565b6000602082019050818103600083015261488281614846565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148e5602683613dce565b91506148f082614889565b604082019050919050565b60006020820190508181036000830152614914816148d8565b9050919050565b7f4275726e20666565206d7573742062652067726561746572206f72206571756160008201527f6c20746f207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614977602983613dce565b91506149828261491b565b604082019050919050565b600060208201905081810360008301526149a68161496a565b9050919050565b7f4275726e20666565206d757374206265206c6f776572206f7220657175616c2060008201527f746f203130000000000000000000000000000000000000000000000000000000602082015250565b6000614a09602583613dce565b9150614a14826149ad565b604082019050919050565b60006020820190508181036000830152614a38816149fc565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614a75601b83613dce565b9150614a8082614a3f565b602082019050919050565b60006020820190508181036000830152614aa481614a68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614b1482613d60565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4757614b4661419b565b5b600182019050919050565b6000614b5d82613d60565b9150614b6883613d60565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ba157614ba061419b565b5b828202905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c08602483613dce565b9150614c1382614bac565b604082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c9a602283613dce565b9150614ca582614c3e565b604082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d2c602583613dce565b9150614d3782614cd0565b604082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbe602383613dce565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e50602683613dce565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614ebc601f83613dce565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f4e602183613dce565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe0602283613dce565b9150614feb82614f84565b604082019050919050565b6000602082019050818103600083015261500f81614fd3565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615072602a83613dce565b915061507d82615016565b604082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150e282613d60565b91506150ed83613d60565b9250826150fd576150fc6150a8565b5b82820490509291505056fea264697066735822122074d6cab18c178fbc657a083d8383854989922af9ad054576eecfeb935fc5628864736f6c63430008090033000000000000000000000000000000000000000000000000000000007d2b75000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d7d14ff39c3e7b1882f28430b46170a3c59ba73000000000000000000000000e2c1470d8e3f8cafd7205de006987e7f8edef9ad00000000000000000000000000000000000000000000000000000000000000084d65746154696d6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d54696d65000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c806370a082311161010d578063a9059cbb116100a0578063ea2f0b371161006f578063ea2f0b37146107b2578063f2fde38b146107db578063f66608fe14610804578063fc5af7341461082f578063fdeb889f1461086c57610204565b8063a9059cbb146106d0578063aa4b10d11461070d578063cba0e99614610738578063dd62ed3e1461077557610204565b806383ad7994116100dc57806383ad7994146106125780638da5cb5b1461063d57806395d89b4114610668578063a457c2d71461069357610204565b806370a0823114610558578063715018a61461059557806371ffcb16146105ac57806379cc6790146105e957610204565b806339509351116101905780634549b0391161015f5780634549b0391461044d5780634614be9f1461048a5780635342acb4146104b5578063584e8d2a146104f25780636049876e1461052f57610204565b8063395093511461039557806340c10f19146103d257806342966c68146103fb578063437823ec1461042457610204565b806323b872dd116101cc57806323b872dd146102c55780632980555814610302578063313ce5671461033f578063320355041461036a57610204565b8063053ab1821461020957806306fdde0314610232578063095ea7b31461025d57806318160ddd1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613d96565b610895565b005b34801561023e57600080fd5b506102476109f9565b6040516102549190613e5c565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f9190613edc565b610a8b565b6040516102919190613f37565b60405180910390f35b3480156102a657600080fd5b506102af610aa9565b6040516102bc9190613f61565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190613f7c565b610ab3565b6040516102f99190613f37565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613d96565b610bab565b6040516103369190613f37565b60405180910390f35b34801561034b57600080fd5b50610354610cc1565b6040516103619190613feb565b60405180910390f35b34801561037657600080fd5b5061037f610cd8565b60405161038c9190613f61565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613edc565b610ce2565b6040516103c99190613f37565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613edc565b610d8e565b005b34801561040757600080fd5b50610422600480360381019061041d9190613d96565b610e18565b005b34801561043057600080fd5b5061044b60048036038101906104469190614006565b610e2c565b005b34801561045957600080fd5b50610474600480360381019061046f919061405f565b610f03565b6040516104819190613f61565b60405180910390f35b34801561049657600080fd5b5061049f610f83565b6040516104ac91906140ae565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190614006565b610fad565b6040516104e99190613f37565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613d96565b611003565b6040516105269190613f37565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190614006565b611119565b005b34801561056457600080fd5b5061057f600480360381019061057a9190614006565b6113b4565b60405161058c9190613f61565b60405180910390f35b3480156105a157600080fd5b506105aa61149f565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190614006565b611527565b6040516105e09190613f37565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613edc565b61165f565b005b34801561061e57600080fd5b506106276116da565b6040516106349190613f61565b60405180910390f35b34801561064957600080fd5b506106526116e4565b60405161065f91906140ae565b60405180910390f35b34801561067457600080fd5b5061067d61170e565b60405161068a9190613e5c565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613edc565b6117a0565b6040516106c79190613f37565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190613edc565b61188b565b6040516107049190613f37565b60405180910390f35b34801561071957600080fd5b506107226118a9565b60405161072f9190613f61565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190614006565b6118b3565b60405161076c9190613f37565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906140c9565b611909565b6040516107a99190613f61565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d49190614006565b611990565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190614006565b611a67565b005b34801561081057600080fd5b50610819611b5f565b6040516108269190613f61565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613d96565b611b69565b6040516108639190613f37565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614006565b611c7f565b005b600061089f611fb5565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561092e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109259061417b565b60405180910390fd5b600061093983611fbd565b505050905080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461098991906141ca565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600d546109da91906141ca565b600d8190555082600e546109ee91906141fe565b600e81905550505050565b606060038054610a0890614283565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490614283565b8015610a815780601f10610a5657610100808354040283529160200191610a81565b820191906000526020600020905b815481529060010190602001808311610a6457829003601f168201915b5050505050905090565b6000610a9f610a98611fb5565b8484612024565b6001905092915050565b6000600c54905090565b6000610ac08484846121ef565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b0b611fb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290614327565b60405180910390fd5b610b9f85610b97611fb5565b858403612024565b60019150509392505050565b6000610bb5611fb5565b73ffffffffffffffffffffffffffffffffffffffff16610bd36116e4565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090614393565b60405180910390fd5b6000821015610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614425565b60405180910390fd5b600a821115610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906144b7565b60405180910390fd5b81600f8190555060019050919050565b6000600b60009054906101000a900460ff16905090565b6000600e54905090565b6000610d84610cef611fb5565b848460016000610cfd611fb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d7f91906141fe565b612024565b6001905092915050565b610d96611fb5565b73ffffffffffffffffffffffffffffffffffffffff16610db46116e4565b73ffffffffffffffffffffffffffffffffffffffff1614610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190614393565b60405180910390fd5b610e1482826123ee565b5050565b610e29610e23611fb5565b82612695565b50565b610e34611fb5565b73ffffffffffffffffffffffffffffffffffffffff16610e526116e4565b73ffffffffffffffffffffffffffffffffffffffff1614610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90614393565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c54831115610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190614523565b60405180910390fd5b81610f68576000610f5a84611fbd565b505050905080915050610f7d565b6000610f7384611fbd565b5050915050809150505b92915050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061100d611fb5565b73ffffffffffffffffffffffffffffffffffffffff1661102b6116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890614393565b60405180910390fd5b60008210156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc906145b5565b60405180910390fd5b600a821115611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090614647565b60405180910390fd5b8160138190555060019050919050565b611121611fb5565b73ffffffffffffffffffffffffffffffffffffffff1661113f6116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c90614393565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611222576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611219906146b3565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112f6576112b2600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298d565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561144f57600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061149a565b611497600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298d565b90505b919050565b6114a7611fb5565b73ffffffffffffffffffffffffffffffffffffffff166114c56116e4565b73ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290614393565b60405180910390fd5b61152560006129f4565b565b6000611531611fb5565b73ffffffffffffffffffffffffffffffffffffffff1661154f6116e4565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90614393565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614745565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60006116728361166d611fb5565b611909565b9050818110156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae906147d7565b60405180910390fd5b6116cb836116c3611fb5565b848403612024565b6116d58383612695565b505050565b6000600f54905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461171d90614283565b80601f016020809104026020016040519081016040528092919081815260200182805461174990614283565b80156117965780601f1061176b57610100808354040283529160200191611796565b820191906000526020600020905b81548152906001019060200180831161177957829003601f168201915b5050505050905090565b600080600160006117af611fb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614869565b60405180910390fd5b611880611877611fb5565b85858403612024565b600191505092915050565b600061189f611898611fb5565b84846121ef565b6001905092915050565b6000601154905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611998611fb5565b73ffffffffffffffffffffffffffffffffffffffff166119b66116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390614393565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a6f611fb5565b73ffffffffffffffffffffffffffffffffffffffff16611a8d6116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90614393565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906148fb565b60405180910390fd5b611b5c816129f4565b50565b6000601354905090565b6000611b73611fb5565b73ffffffffffffffffffffffffffffffffffffffff16611b916116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90614393565b60405180910390fd5b6000821015611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c229061498d565b60405180910390fd5b600a821115611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690614a1f565b60405180910390fd5b8160118190555060019050919050565b611c87611fb5565b73ffffffffffffffffffffffffffffffffffffffff16611ca56116e4565b73ffffffffffffffffffffffffffffffffffffffff1614611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf290614393565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90614a8b565b60405180910390fd5b60005b600a80549050811015611fb1578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611dc257611dc1614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f9e57600a6001600a80549050611e1d91906141ca565b81548110611e2e57611e2d614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110611e6d57611e6c614aab565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480611f6457611f63614ada565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fb1565b8080611fa990614b09565b915050611d8a565b5050565b600033905090565b6000806000806000611fce86612aba565b905060008187611fde91906141ca565b90506000611fea612b02565b905060008183611ffa9190614b52565b90506000828a61200a9190614b52565b905080828585985098509850985050505050509193509193565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90614c1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb90614cb0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121e29190613f61565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614d42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614dd4565b60405180910390fd5b60006122da846113b4565b90508181101561231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690614e66565b60405180910390fd5b61232a848484612b26565b600060019050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d15750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123db57600090505b6123e785858584612b2b565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561245e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245590614ed2565b60405180910390fd5b61246a60008383612b26565b6000612474612b02565b9050600081836124849190614b52565b9050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125675782600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252391906141fe565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b291906141fe565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600c5461260391906141fe565b600c8190555080600d5461261791906141fe565b600d819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161267b9190613f61565b60405180910390a361268f60008585612e3c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90614f64565b60405180910390fd5b6000612710836113b4565b905081811015612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90614ff6565b60405180910390fd5b61276183600084612b26565b600061276b612b02565b90506000818461277b9190614b52565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561285e5783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281a91906141ca565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a991906141ca565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600c546128fa91906141ca565b600c8190555080600d5461290e91906141ca565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516129729190613f61565b60405180910390a361298685600086612e3c565b5050505050565b6000600d548211156129d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cb90615088565b60405180910390fd5b60006129de612b02565b905080836129ec91906150d7565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080601154601354600f54612ad091906141fe565b612ada91906141fe565b9050600060648285612aec9190614b52565b612af691906150d7565b90508092505050919050565b6000806000612b0f612e41565b915091508082612b1f91906150d7565b9250505090565b505050565b80612b3957612b386130df565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bdc5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bf157612bec848484613141565b612e28565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c945750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ca957612ca4848484613390565b612e27565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d4d5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6257612d5d8484846135df565b612e26565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e045750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e1957612e148484846137a0565b612e25565b612e248484846135df565b5b5b5b5b80612e3657612e35613a7d565b5b50505050565b505050565b6000806000600d5490506000600c54905060005b600a805490508110156130a9578260066000600a8481548110612e7b57612e7a614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612f6957508160076000600a8481548110612f0157612f00614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612f8057600d54600c54945094505050506130db565b60066000600a8381548110612f9857612f97614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361300991906141ca565b925060076000600a838154811061302357613022614aab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261309491906141ca565b915080806130a190614b09565b915050612e55565b50600c54600d546130ba91906150d7565b8210156130d257600d54600c549350935050506130db565b81819350935050505b9091565b6000600f541480156130f357506000601354145b801561310157506000601154145b1561310b5761313f565b600f546010819055506013546014819055506011546012819055506000600f81905550600060138190555060006011819055505b565b60008060008061315085611fbd565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a391906141ca565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323191906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bf91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330d878683613a9a565b613318878683613b67565b6133228582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161337f9190613f61565b60405180910390a350505050505050565b60008060008061339f85611fbd565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133f291906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348091906141fe565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461350e91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355c878683613a9a565b613567878683613b67565b6135718582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135ce9190613f61565b60405180910390a350505050505050565b6000806000806135ee85611fbd565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461364191906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136cf91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061371d878683613a9a565b613728878683613b67565b6137328582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161378f9190613f61565b60405180910390a350505050505050565b6000806000806137af85611fbd565b935093509350935084600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461380291906141ca565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389091906141ca565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461391e91906141fe565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ac91906141fe565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139fa878683613a9a565b613a05878683613b67565b613a0f8582613cff565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a6c9190613f61565b60405180910390a350505050505050565b601054600f81905550601454601381905550601254601181905550565b6000606460115484613aac9190614b52565b613ab691906150d7565b90506000811115613b615760008282613acf9190614b52565b905081600c54613adf91906141ca565b600c8190555080600d54613af391906141ca565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b579190613f61565b60405180910390a3505b50505050565b6000606460135484613b799190614b52565b613b8391906150d7565b90506000811115613cf95760008282613b9c9190614b52565b90508060066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0b91906141fe565b60066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613cef9190613f61565b60405180910390a3505b50505050565b60006064600f5484613d119190614b52565b613d1b91906150d7565b905060008282613d2b9190614b52565b905080600d54613d3b91906141ca565b600d8190555081600e54613d4f91906141fe565b600e8190555050505050565b600080fd5b6000819050919050565b613d7381613d60565b8114613d7e57600080fd5b50565b600081359050613d9081613d6a565b92915050565b600060208284031215613dac57613dab613d5b565b5b6000613dba84828501613d81565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfd578082015181840152602081019050613de2565b83811115613e0c576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2e82613dc3565b613e388185613dce565b9350613e48818560208601613ddf565b613e5181613e12565b840191505092915050565b60006020820190508181036000830152613e768184613e23565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ea982613e7e565b9050919050565b613eb981613e9e565b8114613ec457600080fd5b50565b600081359050613ed681613eb0565b92915050565b60008060408385031215613ef357613ef2613d5b565b5b6000613f0185828601613ec7565b9250506020613f1285828601613d81565b9150509250929050565b60008115159050919050565b613f3181613f1c565b82525050565b6000602082019050613f4c6000830184613f28565b92915050565b613f5b81613d60565b82525050565b6000602082019050613f766000830184613f52565b92915050565b600080600060608486031215613f9557613f94613d5b565b5b6000613fa386828701613ec7565b9350506020613fb486828701613ec7565b9250506040613fc586828701613d81565b9150509250925092565b600060ff82169050919050565b613fe581613fcf565b82525050565b60006020820190506140006000830184613fdc565b92915050565b60006020828403121561401c5761401b613d5b565b5b600061402a84828501613ec7565b91505092915050565b61403c81613f1c565b811461404757600080fd5b50565b60008135905061405981614033565b92915050565b6000806040838503121561407657614075613d5b565b5b600061408485828601613d81565b92505060206140958582860161404a565b9150509250929050565b6140a881613e9e565b82525050565b60006020820190506140c3600083018461409f565b92915050565b600080604083850312156140e0576140df613d5b565b5b60006140ee85828601613ec7565b92505060206140ff85828601613ec7565b9150509250929050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614165602c83613dce565b915061417082614109565b604082019050919050565b6000602082019050818103600083015261419481614158565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141d582613d60565b91506141e083613d60565b9250828210156141f3576141f261419b565b5b828203905092915050565b600061420982613d60565b915061421483613d60565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142495761424861419b565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429b57607f821691505b602082108114156142af576142ae614254565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614311602883613dce565b915061431c826142b5565b604082019050919050565b6000602082019050818103600083015261434081614304565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061437d602083613dce565b915061438882614347565b602082019050919050565b600060208201905081810360008301526143ac81614370565b9050919050565b7f5265666c656374696f6e20666565206d7573742062652067726561746572206f60008201527f7220657175616c20746f207a65726f0000000000000000000000000000000000602082015250565b600061440f602f83613dce565b915061441a826143b3565b604082019050919050565b6000602082019050818103600083015261443e81614402565b9050919050565b7f5265666c656374696f6e20666565206d757374206265206c6f776572206f722060008201527f657175616c20746f2074656e0000000000000000000000000000000000000000602082015250565b60006144a1602c83613dce565b91506144ac82614445565b604082019050919050565b600060208201905081810360008301526144d081614494565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061450d601f83613dce565b9150614518826144d7565b602082019050919050565b6000602082019050818103600083015261453c81614500565b9050919050565b7f54617820666565206d7573742062652067726561746572206f7220657175616c60008201527f20746f207a65726f000000000000000000000000000000000000000000000000602082015250565b600061459f602883613dce565b91506145aa82614543565b604082019050919050565b600060208201905081810360008301526145ce81614592565b9050919050565b7f54617820666565206d757374206265206c6f776572206f7220657175616c207460008201527f6f20313000000000000000000000000000000000000000000000000000000000602082015250565b6000614631602483613dce565b915061463c826145d5565b604082019050919050565b6000602082019050818103600083015261466081614624565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061469d601b83613dce565b91506146a882614667565b602082019050919050565b600060208201905081810360008301526146cc81614690565b9050919050565b7f7a65726f20616464726573732063616e206e6f7420626520746865204665654160008201527f63636f756e740000000000000000000000000000000000000000000000000000602082015250565b600061472f602683613dce565b915061473a826146d3565b604082019050919050565b6000602082019050818103600083015261475e81614722565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006147c1602483613dce565b91506147cc82614765565b604082019050919050565b600060208201905081810360008301526147f0816147b4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614853602583613dce565b915061485e826147f7565b604082019050919050565b6000602082019050818103600083015261488281614846565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148e5602683613dce565b91506148f082614889565b604082019050919050565b60006020820190508181036000830152614914816148d8565b9050919050565b7f4275726e20666565206d7573742062652067726561746572206f72206571756160008201527f6c20746f207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614977602983613dce565b91506149828261491b565b604082019050919050565b600060208201905081810360008301526149a68161496a565b9050919050565b7f4275726e20666565206d757374206265206c6f776572206f7220657175616c2060008201527f746f203130000000000000000000000000000000000000000000000000000000602082015250565b6000614a09602583613dce565b9150614a14826149ad565b604082019050919050565b60006020820190508181036000830152614a38816149fc565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614a75601b83613dce565b9150614a8082614a3f565b602082019050919050565b60006020820190508181036000830152614aa481614a68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614b1482613d60565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4757614b4661419b565b5b600182019050919050565b6000614b5d82613d60565b9150614b6883613d60565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ba157614ba061419b565b5b828202905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c08602483613dce565b9150614c1382614bac565b604082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c9a602283613dce565b9150614ca582614c3e565b604082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d2c602583613dce565b9150614d3782614cd0565b604082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbe602383613dce565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e50602683613dce565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614ebc601f83613dce565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f4e602183613dce565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe0602283613dce565b9150614feb82614f84565b604082019050919050565b6000602082019050818103600083015261500f81614fd3565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615072602a83613dce565b915061507d82615016565b604082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150e282613d60565b91506150ed83613d60565b9250826150fd576150fc6150a8565b5b82820490509291505056fea264697066735822122074d6cab18c178fbc657a083d8383854989922af9ad054576eecfeb935fc5628864736f6c63430008090033

Deployed Bytecode Sourcemap

19619:15675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24450:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8486:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10653:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21613:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11304:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23214:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21505:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22607;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12205:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34470:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18830:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22717:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24834:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22020:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22122:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23871:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25568:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22255:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5683:103;;;;;;;;;;;;;:::i;:::-;;22967:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19240:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21724:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5032:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8705:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12923:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10117:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21826:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22489:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10355:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22847:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5941:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21924:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23566:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25916:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24450:374;24502:14;24519:12;:10;:12::i;:::-;24502:29;;24551:11;:19;24563:6;24551:19;;;;;;;;;;;;;;;;;;;;;;;;;24550:20;24542:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24631:15;24653:27;24672:7;24653:18;:27::i;:::-;24630:50;;;;;24727:7;24709;:15;24717:6;24709:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;24691:7;:15;24699:6;24691:15;;;;;;;;;;;;;;;:43;;;;24765:7;24755;;:17;;;;:::i;:::-;24745:7;:27;;;;24809:7;24796:10;;:20;;;;:::i;:::-;24783:10;:33;;;;24491:333;;24450:374;:::o;8486:100::-;8540:13;8573:5;8566:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8486:100;:::o;10653:169::-;10736:4;10753:39;10762:12;:10;:12::i;:::-;10776:7;10785:6;10753:8;:39::i;:::-;10810:4;10803:11;;10653:169;;;;:::o;21613:103::-;21674:7;21701;;21694:14;;21613:103;:::o;11304:492::-;11444:4;11461:36;11471:6;11479:9;11490:6;11461:9;:36::i;:::-;11510:24;11537:11;:19;11549:6;11537:19;;;;;;;;;;;;;;;:33;11557:12;:10;:12::i;:::-;11537:33;;;;;;;;;;;;;;;;11510:60;;11609:6;11589:16;:26;;11581:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11696:57;11705:6;11713:12;:10;:12::i;:::-;11746:6;11727:16;:25;11696:8;:57::i;:::-;11784:4;11777:11;;;11304:492;;;;;:::o;23214:344::-;23296:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23341:1:::1;23321:16;:21;;23313:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;23433:2;23413:16;:22;;23405:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23512:16;23495:14;:33;;;;23546:4;23539:11;;23214:344:::0;;;:::o;21505:100::-;21563:5;21588:9;;;;;;;;;;;21581:16;;21505:100;:::o;22607:::-;22662:7;22689:10;;22682:17;;22607:100;:::o;12205:215::-;12293:4;12310:80;12319:12;:10;:12::i;:::-;12333:7;12379:10;12342:11;:25;12354:12;:10;:12::i;:::-;12342:25;;;;;;;;;;;;;;;:34;12368:7;12342:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12310:8;:80::i;:::-;12408:4;12401:11;;12205:215;;;;:::o;34470:109::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34548:23:::1;34554:8;34564:6;34548:5;:23::i;:::-;34470:109:::0;;:::o;18830:91::-;18886:27;18892:12;:10;:12::i;:::-;18906:6;18886:5;:27::i;:::-;18830:91;:::o;22717:115::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22820:4:::1;22790:18;:27;22809:7;22790:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;22717:115:::0;:::o;24834:448::-;24924:7;24963;;24952;:18;;24944:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25022:17;25017:258;;25057:15;25079:27;25098:7;25079:18;:27::i;:::-;25056:50;;;;;25128:7;25121:14;;;;;25017:258;25170:23;25199:27;25218:7;25199:18;:27::i;:::-;25168:58;;;;;25248:15;25241:22;;;24834:448;;;;;:::o;22020:90::-;22065:7;22091:11;;;;;;;;;;;22084:18;;22020:90;:::o;22122:125::-;22186:4;22212:18;:27;22231:7;22212:27;;;;;;;;;;;;;;;;;;;;;;;;;22205:34;;22122:125;;;:::o;23871:279::-;23937:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23973:1:::1;23962:7;:12;;23954:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24049:2;24038:7;:13;;24030:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24113:7;24103;:17;;;;24138:4;24131:11;;23871:279:::0;;;:::o;25568:340::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25658:11:::1;:20;25670:7;25658:20;;;;;;;;;;;;;;;;;;;;;;;;;25657:21;25649:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25743:1;25724:7;:16;25732:7;25724:16;;;;;;;;;;;;;;;;:20;25721:108;;;25780:37;25800:7;:16;25808:7;25800:16;;;;;;;;;;;;;;;;25780:19;:37::i;:::-;25761:7;:16;25769:7;25761:16;;;;;;;;;;;;;;;:56;;;;25721:108;25862:4;25839:11;:20;25851:7;25839:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25877:9;25892:7;25877:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25568:340:::0;:::o;22255:226::-;22327:7;22350:11;:19;22362:6;22350:19;;;;;;;;;;;;;;;;;;;;;;;;;22347:73;;;22393:7;:15;22401:6;22393:15;;;;;;;;;;;;;;;;22386:22;;;;22347:73;22437:36;22457:7;:15;22465:6;22457:15;;;;;;;;;;;;;;;;22437:19;:36::i;:::-;22430:43;;22255:226;;;;:::o;5683:103::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5748:30:::1;5775:1;5748:18;:30::i;:::-;5683:103::o:0;22967:239::-;23043:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23093:1:::1;23068:27;;:13;:27;;;;23060:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23163:13;23149:11;;:27;;;;;;;;;;;;;;;;;;23194:4;23187:11;;22967:239:::0;;;:::o;19240:368::-;19317:24;19344:32;19354:7;19363:12;:10;:12::i;:::-;19344:9;:32::i;:::-;19317:59;;19415:6;19395:16;:26;;19387:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;19498:58;19507:7;19516:12;:10;:12::i;:::-;19549:6;19530:16;:25;19498:8;:58::i;:::-;19578:22;19584:7;19593:6;19578:5;:22::i;:::-;19306:302;19240:368;;:::o;21724:94::-;21769:7;21796:14;;21789:21;;21724:94;:::o;5032:87::-;5078:7;5105:6;;;;;;;;;;;5098:13;;5032:87;:::o;8705:104::-;8761:13;8794:7;8787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8705:104;:::o;12923:413::-;13016:4;13033:24;13060:11;:25;13072:12;:10;:12::i;:::-;13060:25;;;;;;;;;;;;;;;:34;13086:7;13060:34;;;;;;;;;;;;;;;;13033:61;;13133:15;13113:16;:35;;13105:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13226:67;13235:12;:10;:12::i;:::-;13249:7;13277:15;13258:16;:34;13226:8;:67::i;:::-;13324:4;13317:11;;;12923:413;;;;:::o;10117:175::-;10203:4;10220:42;10230:12;:10;:12::i;:::-;10244:9;10255:6;10220:9;:42::i;:::-;10280:4;10273:11;;10117:175;;;;:::o;21826:86::-;21869:7;21896:8;;21889:15;;21826:86;:::o;22489:110::-;22547:4;22571:11;:20;22583:7;22571:20;;;;;;;;;;;;;;;;;;;;;;;;;22564:27;;22489:110;;;:::o;10355:151::-;10444:7;10471:11;:18;10483:5;10471:18;;;;;;;;;;;;;;;:27;10490:7;10471:27;;;;;;;;;;;;;;;;10464:34;;10355:151;;;;:::o;22847:112::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22946:5:::1;22916:18;:27;22935:7;22916:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;22847:112:::0;:::o;5941:201::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6050:1:::1;6030:22;;:8;:22;;;;6022:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6106:28;6125:8;6106:18;:28::i;:::-;5941:201:::0;:::o;21924:84::-;21966:7;21993;;21986:14;;21924:84;:::o;23566:287::-;23634:4;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23671:1:::1;23659:8;:13;;23651:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23749:2;23737:8;:14;;23729:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23815:8;23804;:19;;;;23841:4;23834:11;;23566:287:::0;;;:::o;25916:484::-;5263:12;:10;:12::i;:::-;5252:23;;:7;:5;:7::i;:::-;:23;;;5244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26003:11:::1;:20;26015:7;26003:20;;;;;;;;;;;;;;;;;;;;;;;;;25995:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26071:9;26066:327;26090:9;:16;;;;26086:1;:20;26066:327;;;26148:7;26132:23;;:9;26142:1;26132:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;26128:254;;;26191:9;26220:1;26201:9;:16;;;;:20;;;;:::i;:::-;26191:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26176:9;26186:1;26176:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26260:1;26241:7;:16;26249:7;26241:16;;;;;;;;;;;;;;;:20;;;;26303:5;26280:11;:20;26292:7;26280:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26327:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;26361:5;;26128:254;26108:3;;;;;:::i;:::-;;;;26066:327;;;;25916:484:::0;:::o;3895:98::-;3948:7;3975:10;3968:17;;3895:98;:::o;31305:456::-;31371:7;31380;31389;31398;31418:16;31437:29;31458:7;31437:20;:29::i;:::-;31418:48;;31477:23;31513:8;31503:7;:18;;;;:::i;:::-;31477:44;;31532:19;31554:10;:8;:10::i;:::-;31532:32;;31575:23;31619:11;31601:15;:29;;;;:::i;:::-;31575:55;;31641:15;31669:11;31659:7;:21;;;;:::i;:::-;31641:39;;31698:7;31707:15;31724;31741:11;31691:62;;;;;;;;;;;;;31305:456;;;;;:::o;16607:380::-;16760:1;16743:19;;:5;:19;;;;16735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16841:1;16822:21;;:7;:21;;;;16814:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16925:6;16895:11;:18;16907:5;16895:18;;;;;;;;;;;;;;;:27;16914:7;16895:27;;;;;;;;;;;;;;;:36;;;;16963:7;16947:32;;16956:5;16947:32;;;16972:6;16947:32;;;;;;:::i;:::-;;;;;;;;16607:380;;;:::o;26408:693::-;26541:1;26523:20;;:6;:20;;;;26515:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26625:1;26604:23;;:9;:23;;;;26596:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26678:21;26702:17;26712:6;26702:9;:17::i;:::-;26678:41;;26755:6;26738:13;:23;;26730:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26817:47;26838:6;26846:9;26857:6;26817:20;:47::i;:::-;26877:12;26892:4;26877:19;;26920:18;:26;26939:6;26920:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;26950:18;:29;26969:9;26950:29;;;;;;;;;;;;;;;;;;;;;;;;;26920:59;26917:106;;;27006:5;26996:15;;26917:106;27043:50;27058:6;27066:9;27077:6;27085:7;27043:14;:50::i;:::-;26504:597;;26408:693;;;:::o;34587:704::-;34699:1;34680:21;;:7;:21;;;;34672:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34750:49;34779:1;34783:7;34792:6;34750:20;:49::i;:::-;34812:19;34834:10;:8;:10::i;:::-;34812:32;;34855:15;34882:11;34873:6;:20;;;;:::i;:::-;34855:38;;34917:11;:20;34929:7;34917:20;;;;;;;;;;;;;;;;;;;;;;;;;34914:95;;;34991:6;34972:7;:16;34980:7;34972:16;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;34953:7;:16;34961:7;34953:16;;;;;;;;;;;;;;;:44;;;;34914:95;35067:7;35048;:16;35056:7;35048:16;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;35029:7;:16;35037:7;35029:16;;;;;;;;;;;;;;;:45;;;;35115:6;35105:7;;:16;;;;:::i;:::-;35095:7;:26;;;;35152:7;35142;;:17;;;;:::i;:::-;35132:7;:27;;;;35206:7;35185:37;;35202:1;35185:37;;;35215:6;35185:37;;;;;;:::i;:::-;;;;;;;;35235:48;35263:1;35267:7;35276:6;35235:19;:48::i;:::-;34661:630;;34587:704;;:::o;33628:832::-;33740:1;33721:21;;:7;:21;;;;33713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33791:22;33816:18;33826:7;33816:9;:18::i;:::-;33791:43;;33871:6;33853:14;:24;;33845:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33929:49;33950:7;33967:1;33971:6;33929:20;:49::i;:::-;33991:19;34013:10;:8;:10::i;:::-;33991:32;;34034:15;34061:11;34052:6;:20;;;;:::i;:::-;34034:38;;34096:11;:20;34108:7;34096:20;;;;;;;;;;;;;;;;;;;;;;;;;34093:95;;;34170:6;34151:7;:16;34159:7;34151:16;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;34132:7;:16;34140:7;34132:16;;;;;;;;;;;;;;;:44;;;;34093:95;34246:7;34227;:16;34235:7;34227:16;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;34208:7;:16;34216:7;34208:16;;;;;;;;;;;;;;;:45;;;;34294:6;34284:7;;:16;;;;:::i;:::-;34274:7;:26;;;;34331:7;34321;;:17;;;;:::i;:::-;34311:7;:27;;;;34380:1;34354:37;;34363:7;34354:37;;;34384:6;34354:37;;;;;;:::i;:::-;;;;;;;;34404:48;34424:7;34441:1;34445:6;34404:19;:48::i;:::-;33702:758;;;33628:832;;:::o;25300:250::-;25367:7;25406;;25395;:18;;25387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25471:19;25493:10;:8;:10::i;:::-;25471:32;;25531:11;25521:7;:21;;;;:::i;:::-;25514:28;;;25300:250;;;:::o;6302:191::-;6376:16;6395:6;;;;;;;;;;;6376:25;;6421:8;6412:6;;:17;;;;;;;;;;;;;;;;;;6476:8;6445:40;;6466:8;6445:40;;;;;;;;;;;;6365:128;6302:191;:::o;31063:230::-;31131:7;31151:16;31197:8;;31187:7;;31170:14;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;31151:54;;31216:16;31256:3;31245:8;31235:7;:18;;;;:::i;:::-;:24;;;;:::i;:::-;31216:43;;31277:8;31270:15;;;;31063:230;;;:::o;32050:160::-;32091:7;32112:15;32129;32148:19;:17;:19::i;:::-;32111:56;;;;32195:7;32185;:17;;;;:::i;:::-;32178:24;;;;32050:160;:::o;17587:125::-;;;;:::o;27109:765::-;27211:7;27207:54;;27235:14;:12;:14::i;:::-;27207:54;27285:11;:17;27297:4;27285:17;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;;27307:11;:15;27319:2;27307:15;;;;;;;;;;;;;;;;;;;;;;;;;27306:16;27285:37;27281:511;;;27339:38;27361:4;27367:2;27371:5;27339:21;:38::i;:::-;27281:511;;;27400:11;:17;27412:4;27400:17;;;;;;;;;;;;;;;;;;;;;;;;;27399:18;:37;;;;;27421:11;:15;27433:2;27421:15;;;;;;;;;;;;;;;;;;;;;;;;;27399:37;27395:397;;;27453:36;27473:4;27479:2;27483:5;27453:19;:36::i;:::-;27395:397;;;27512:11;:17;27524:4;27512:17;;;;;;;;;;;;;;;;;;;;;;;;;27511:18;:38;;;;;27534:11;:15;27546:2;27534:15;;;;;;;;;;;;;;;;;;;;;;;;;27533:16;27511:38;27507:285;;;27566:34;27584:4;27590:2;27594:5;27566:17;:34::i;:::-;27507:285;;;27622:11;:17;27634:4;27622:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;27643:11;:15;27655:2;27643:15;;;;;;;;;;;;;;;;;;;;;;;;;27622:36;27618:174;;;27675:38;27697:4;27703:2;27707:5;27675:21;:38::i;:::-;27618:174;;;27746:34;27764:4;27770:2;27774:5;27746:17;:34::i;:::-;27618:174;27507:285;27395:397;27281:511;27816:7;27812:55;;27840:15;:13;:15::i;:::-;27812:55;27109:765;;;;:::o;18316:124::-;;;;:::o;32218:630::-;32268:7;32277;32297:15;32315:7;;32297:25;;32333:15;32351:7;;32333:25;;32383:9;32379:313;32402:9;:16;;;;32398:1;:20;32379:313;;;32466:7;32442;:21;32450:9;32460:1;32450:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32442:21;;;;;;;;;;;;;;;;:31;:66;;;;32501:7;32477;:21;32485:9;32495:1;32485:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32477:21;;;;;;;;;;;;;;;;:31;32442:66;32439:130;;;32536:7;;32545;;32529:24;;;;;;;;;32439:130;32603:7;:21;32611:9;32621:1;32611:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32603:21;;;;;;;;;;;;;;;;32593:7;:31;;;;:::i;:::-;32583:41;;32659:7;:21;32667:9;32677:1;32667:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32659:21;;;;;;;;;;;;;;;;32649:7;:31;;;;:::i;:::-;32639:41;;32420:3;;;;;:::i;:::-;;;;32379:313;;;;32735:7;;32725;;:17;;;;:::i;:::-;32715:7;:27;32712:83;;;32766:7;;32775;;32759:24;;;;;;;;32712:83;32823:7;32832;32815:25;;;;;;32218:630;;;:::o;27882:352::-;27948:1;27930:14;;:19;:35;;;;;27964:1;27953:7;;:12;27930:35;:52;;;;;27981:1;27969:8;;:13;27930:52;27927:64;;;27984:7;;27927:64;28040:14;;28015:22;:39;;;;28085:7;;28067:15;:25;;;;28124:8;;28105:16;:27;;;;28174:1;28157:14;:18;;;;28198:1;28188:7;:11;;;;28223:1;28212:8;:12;;;;27882:352;:::o;29695:642::-;29798:15;29815:23;29840;29865:19;29888:27;29907:7;29888:18;:27::i;:::-;29797:118;;;;;;;;29962:7;29944;:15;29952:6;29944:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29926:7;:15;29934:6;29926:15;;;;;;;;;;;;;;;:43;;;;30016:7;29998;:15;30006:6;29998:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29980:7;:15;29988:6;29980:15;;;;;;;;;;;;;;;:43;;;;30076:15;30055:7;:18;30063:9;30055:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30034:7;:18;30042:9;30034:18;;;;;;;;;;;;;;;:57;;;;30115:45;30131:6;30139:7;30148:11;30115:15;:45::i;:::-;30171:44;30186:6;30194:7;30203:11;30171:14;:44::i;:::-;30226:33;30238:7;30247:11;30226;:33::i;:::-;30302:9;30285:44;;30294:6;30285:44;;;30313:15;30285:44;;;;;;:::i;:::-;;;;;;;;29786:551;;;;29695:642;;;:::o;29032:655::-;29133:15;29150:23;29175;29200:19;29223:27;29242:7;29223:18;:27::i;:::-;29132:118;;;;;;;;29297:7;29279;:15;29287:6;29279:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29261:7;:15;29269:6;29261:15;;;;;;;;;;;;;;;:43;;;;29357:15;29336:7;:18;29344:9;29336:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;29315:7;:18;29323:9;29315:18;;;;;;;;;;;;;;;:57;;;;29425:15;29404:7;:18;29412:9;29404:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;29383:7;:18;29391:9;29383:18;;;;;;;;;;;;;;;:57;;;;29465:45;29481:6;29489:7;29498:11;29465:15;:45::i;:::-;29521:44;29536:6;29544:7;29553:11;29521:14;:44::i;:::-;29576:33;29588:7;29597:11;29576;:33::i;:::-;29652:9;29635:44;;29644:6;29635:44;;;29663:15;29635:44;;;;;;:::i;:::-;;;;;;;;29121:566;;;;29032:655;;;:::o;28433:591::-;28532:15;28549:23;28574;28599:19;28622:27;28641:7;28622:18;:27::i;:::-;28531:118;;;;;;;;28706:7;28688;:15;28696:6;28688:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;28670:7;:15;28678:6;28670:15;;;;;;;;;;;;;;;:43;;;;28766:15;28745:7;:18;28753:9;28745:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;28724:7;:18;28732:9;28724:18;;;;;;;;;;;;;;;:57;;;;28802:45;28818:6;28826:7;28835:11;28802:15;:45::i;:::-;28858:44;28873:6;28881:7;28890:11;28858:14;:44::i;:::-;28913:33;28925:7;28934:11;28913;:33::i;:::-;28989:9;28972:44;;28981:6;28972:44;;;29000:15;28972:44;;;;;;:::i;:::-;;;;;;;;28520:504;;;;28433:591;;;:::o;30345:710::-;30448:15;30465:23;30490;30515:19;30538:27;30557:7;30538:18;:27::i;:::-;30447:118;;;;;;;;30612:7;30594;:15;30602:6;30594:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;30576:7;:15;30584:6;30576:15;;;;;;;;;;;;;;;:43;;;;30666:7;30648;:15;30656:6;30648:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;30630:7;:15;30638:6;30630:15;;;;;;;;;;;;;;;:43;;;;30726:15;30705:7;:18;30713:9;30705:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30684:7;:18;30692:9;30684:18;;;;;;;;;;;;;;;:57;;;;30794:15;30773:7;:18;30781:9;30773:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;30752:7;:18;30760:9;30752:18;;;;;;;;;;;;;;;:57;;;;30833:45;30849:6;30857:7;30866:11;30833:15;:45::i;:::-;30889:44;30904:6;30912:7;30921:11;30889:14;:44::i;:::-;30944:33;30956:7;30965:11;30944;:33::i;:::-;31020:9;31003:44;;31012:6;31003:44;;;31031:15;31003:44;;;;;;:::i;:::-;;;;;;;;30436:619;;;;30345:710;;;:::o;28250:173::-;28313:22;;28296:14;:39;;;;28358:15;;28348:7;:25;;;;28397:16;;28386:8;:27;;;;28250:173::o;32856:387::-;32954:16;32994:3;32983:8;;32973:7;:18;;;;:::i;:::-;:24;;;;:::i;:::-;32954:43;;33022:1;33011:8;:12;33008:228;;;33039:16;33069:11;33058:8;:22;;;;:::i;:::-;33039:41;;33115:8;33105:7;;:18;;;;:::i;:::-;33095:7;:28;;;;33158:8;33148:7;;:18;;;;:::i;:::-;33138:7;:28;;;;33211:1;33186:38;;33195:6;33186:38;;;33215:8;33186:38;;;;;;:::i;:::-;;;;;;;;33024:212;33008:228;32943:300;32856:387;;;:::o;33255:363::-;33352:15;33390:3;33380:7;;33370;:17;;;;:::i;:::-;:23;;;;:::i;:::-;33352:41;;33417:1;33407:7;:11;33404:207;;;33434:15;33462:11;33452:7;:21;;;;:::i;:::-;33434:39;;33534:7;33511;:20;33519:11;;;;;;;;;;;33511:20;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;33488:7;:20;33496:11;;;;;;;;;;;33488:20;;;;;;;;;;;;;;;:53;;;;33578:11;;;;;;;;;;;33561:38;;33570:6;33561:38;;;33591:7;33561:38;;;;;;:::i;:::-;;;;;;;;33419:192;33404:207;33341:277;33255:363;;;:::o;31779:253::-;31857:12;31899:3;31882:14;;31872:7;:24;;;;:::i;:::-;:30;;;;:::i;:::-;31857:45;;31913:12;31935:11;31928:4;:18;;;;:::i;:::-;31913:33;;31979:4;31969:7;;:14;;;;:::i;:::-;31959:7;:24;;;;32020:4;32007:10;;:17;;;;:::i;:::-;31994:10;:30;;;;31846:186;;31779:253;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:329::-;5295:6;5344:2;5332:9;5323:7;5319:23;5315:32;5312:119;;;5350:79;;:::i;:::-;5312:119;5470:1;5495:53;5540:7;5531:6;5520:9;5516:22;5495:53;:::i;:::-;5485:63;;5441:117;5236:329;;;;:::o;5571:116::-;5641:21;5656:5;5641:21;:::i;:::-;5634:5;5631:32;5621:60;;5677:1;5674;5667:12;5621:60;5571:116;:::o;5693:133::-;5736:5;5774:6;5761:20;5752:29;;5790:30;5814:5;5790:30;:::i;:::-;5693:133;;;;:::o;5832:468::-;5897:6;5905;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;6207:2;6233:50;6275:7;6266:6;6255:9;6251:22;6233:50;:::i;:::-;6223:60;;6178:115;5832:468;;;;;:::o;6306:118::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:474::-;6726:6;6734;6783:2;6771:9;6762:7;6758:23;6754:32;6751:119;;;6789:79;;:::i;:::-;6751:119;6909:1;6934:53;6979:7;6970:6;6959:9;6955:22;6934:53;:::i;:::-;6924:63;;6880:117;7036:2;7062:53;7107:7;7098:6;7087:9;7083:22;7062:53;:::i;:::-;7052:63;;7007:118;6658:474;;;;;:::o;7138:231::-;7278:34;7274:1;7266:6;7262:14;7255:58;7347:14;7342:2;7334:6;7330:15;7323:39;7138:231;:::o;7375:366::-;7517:3;7538:67;7602:2;7597:3;7538:67;:::i;:::-;7531:74;;7614:93;7703:3;7614:93;:::i;:::-;7732:2;7727:3;7723:12;7716:19;;7375:366;;;:::o;7747:419::-;7913:4;7951:2;7940:9;7936:18;7928:26;;8000:9;7994:4;7990:20;7986:1;7975:9;7971:17;7964:47;8028:131;8154:4;8028:131;:::i;:::-;8020:139;;7747:419;;;:::o;8172:180::-;8220:77;8217:1;8210:88;8317:4;8314:1;8307:15;8341:4;8338:1;8331:15;8358:191;8398:4;8418:20;8436:1;8418:20;:::i;:::-;8413:25;;8452:20;8470:1;8452:20;:::i;:::-;8447:25;;8491:1;8488;8485:8;8482:34;;;8496:18;;:::i;:::-;8482:34;8541:1;8538;8534:9;8526:17;;8358:191;;;;:::o;8555:305::-;8595:3;8614:20;8632:1;8614:20;:::i;:::-;8609:25;;8648:20;8666:1;8648:20;:::i;:::-;8643:25;;8802:1;8734:66;8730:74;8727:1;8724:81;8721:107;;;8808:18;;:::i;:::-;8721:107;8852:1;8849;8845:9;8838:16;;8555:305;;;;:::o;8866:180::-;8914:77;8911:1;8904:88;9011:4;9008:1;9001:15;9035:4;9032:1;9025:15;9052:320;9096:6;9133:1;9127:4;9123:12;9113:22;;9180:1;9174:4;9170:12;9201:18;9191:81;;9257:4;9249:6;9245:17;9235:27;;9191:81;9319:2;9311:6;9308:14;9288:18;9285:38;9282:84;;;9338:18;;:::i;:::-;9282:84;9103:269;9052:320;;;:::o;9378:227::-;9518:34;9514:1;9506:6;9502:14;9495:58;9587:10;9582:2;9574:6;9570:15;9563:35;9378:227;:::o;9611:366::-;9753:3;9774:67;9838:2;9833:3;9774:67;:::i;:::-;9767:74;;9850:93;9939:3;9850:93;:::i;:::-;9968:2;9963:3;9959:12;9952:19;;9611:366;;;:::o;9983:419::-;10149:4;10187:2;10176:9;10172:18;10164:26;;10236:9;10230:4;10226:20;10222:1;10211:9;10207:17;10200:47;10264:131;10390:4;10264:131;:::i;:::-;10256:139;;9983:419;;;:::o;10408:182::-;10548:34;10544:1;10536:6;10532:14;10525:58;10408:182;:::o;10596:366::-;10738:3;10759:67;10823:2;10818:3;10759:67;:::i;:::-;10752:74;;10835:93;10924:3;10835:93;:::i;:::-;10953:2;10948:3;10944:12;10937:19;;10596:366;;;:::o;10968:419::-;11134:4;11172:2;11161:9;11157:18;11149:26;;11221:9;11215:4;11211:20;11207:1;11196:9;11192:17;11185:47;11249:131;11375:4;11249:131;:::i;:::-;11241:139;;10968:419;;;:::o;11393:234::-;11533:34;11529:1;11521:6;11517:14;11510:58;11602:17;11597:2;11589:6;11585:15;11578:42;11393:234;:::o;11633:366::-;11775:3;11796:67;11860:2;11855:3;11796:67;:::i;:::-;11789:74;;11872:93;11961:3;11872:93;:::i;:::-;11990:2;11985:3;11981:12;11974:19;;11633:366;;;:::o;12005:419::-;12171:4;12209:2;12198:9;12194:18;12186:26;;12258:9;12252:4;12248:20;12244:1;12233:9;12229:17;12222:47;12286:131;12412:4;12286:131;:::i;:::-;12278:139;;12005:419;;;:::o;12430:231::-;12570:34;12566:1;12558:6;12554:14;12547:58;12639:14;12634:2;12626:6;12622:15;12615:39;12430:231;:::o;12667:366::-;12809:3;12830:67;12894:2;12889:3;12830:67;:::i;:::-;12823:74;;12906:93;12995:3;12906:93;:::i;:::-;13024:2;13019:3;13015:12;13008:19;;12667:366;;;:::o;13039:419::-;13205:4;13243:2;13232:9;13228:18;13220:26;;13292:9;13286:4;13282:20;13278:1;13267:9;13263:17;13256:47;13320:131;13446:4;13320:131;:::i;:::-;13312:139;;13039:419;;;:::o;13464:181::-;13604:33;13600:1;13592:6;13588:14;13581:57;13464:181;:::o;13651:366::-;13793:3;13814:67;13878:2;13873:3;13814:67;:::i;:::-;13807:74;;13890:93;13979:3;13890:93;:::i;:::-;14008:2;14003:3;13999:12;13992:19;;13651:366;;;:::o;14023:419::-;14189:4;14227:2;14216:9;14212:18;14204:26;;14276:9;14270:4;14266:20;14262:1;14251:9;14247:17;14240:47;14304:131;14430:4;14304:131;:::i;:::-;14296:139;;14023:419;;;:::o;14448:227::-;14588:34;14584:1;14576:6;14572:14;14565:58;14657:10;14652:2;14644:6;14640:15;14633:35;14448:227;:::o;14681:366::-;14823:3;14844:67;14908:2;14903:3;14844:67;:::i;:::-;14837:74;;14920:93;15009:3;14920:93;:::i;:::-;15038:2;15033:3;15029:12;15022:19;;14681:366;;;:::o;15053:419::-;15219:4;15257:2;15246:9;15242:18;15234:26;;15306:9;15300:4;15296:20;15292:1;15281:9;15277:17;15270:47;15334:131;15460:4;15334:131;:::i;:::-;15326:139;;15053:419;;;:::o;15478:223::-;15618:34;15614:1;15606:6;15602:14;15595:58;15687:6;15682:2;15674:6;15670:15;15663:31;15478:223;:::o;15707:366::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:419::-;16245:4;16283:2;16272:9;16268:18;16260:26;;16332:9;16326:4;16322:20;16318:1;16307:9;16303:17;16296:47;16360:131;16486:4;16360:131;:::i;:::-;16352:139;;16079:419;;;:::o;16504:177::-;16644:29;16640:1;16632:6;16628:14;16621:53;16504:177;:::o;16687:366::-;16829:3;16850:67;16914:2;16909:3;16850:67;:::i;:::-;16843:74;;16926:93;17015:3;16926:93;:::i;:::-;17044:2;17039:3;17035:12;17028:19;;16687:366;;;:::o;17059:419::-;17225:4;17263:2;17252:9;17248:18;17240:26;;17312:9;17306:4;17302:20;17298:1;17287:9;17283:17;17276:47;17340:131;17466:4;17340:131;:::i;:::-;17332:139;;17059:419;;;:::o;17484:225::-;17624:34;17620:1;17612:6;17608:14;17601:58;17693:8;17688:2;17680:6;17676:15;17669:33;17484:225;:::o;17715:366::-;17857:3;17878:67;17942:2;17937:3;17878:67;:::i;:::-;17871:74;;17954:93;18043:3;17954:93;:::i;:::-;18072:2;18067:3;18063:12;18056:19;;17715:366;;;:::o;18087:419::-;18253:4;18291:2;18280:9;18276:18;18268:26;;18340:9;18334:4;18330:20;18326:1;18315:9;18311:17;18304:47;18368:131;18494:4;18368:131;:::i;:::-;18360:139;;18087:419;;;:::o;18512:223::-;18652:34;18648:1;18640:6;18636:14;18629:58;18721:6;18716:2;18708:6;18704:15;18697:31;18512:223;:::o;18741:366::-;18883:3;18904:67;18968:2;18963:3;18904:67;:::i;:::-;18897:74;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18741:366;;;:::o;19113:419::-;19279:4;19317:2;19306:9;19302:18;19294:26;;19366:9;19360:4;19356:20;19352:1;19341:9;19337:17;19330:47;19394:131;19520:4;19394:131;:::i;:::-;19386:139;;19113:419;;;:::o;19538:224::-;19678:34;19674:1;19666:6;19662:14;19655:58;19747:7;19742:2;19734:6;19730:15;19723:32;19538:224;:::o;19768:366::-;19910:3;19931:67;19995:2;19990:3;19931:67;:::i;:::-;19924:74;;20007:93;20096:3;20007:93;:::i;:::-;20125:2;20120:3;20116:12;20109:19;;19768:366;;;:::o;20140:419::-;20306:4;20344:2;20333:9;20329:18;20321:26;;20393:9;20387:4;20383:20;20379:1;20368:9;20364:17;20357:47;20421:131;20547:4;20421:131;:::i;:::-;20413:139;;20140:419;;;:::o;20565:225::-;20705:34;20701:1;20693:6;20689:14;20682:58;20774:8;20769:2;20761:6;20757:15;20750:33;20565:225;:::o;20796:366::-;20938:3;20959:67;21023:2;21018:3;20959:67;:::i;:::-;20952:74;;21035:93;21124:3;21035:93;:::i;:::-;21153:2;21148:3;21144:12;21137:19;;20796:366;;;:::o;21168:419::-;21334:4;21372:2;21361:9;21357:18;21349:26;;21421:9;21415:4;21411:20;21407:1;21396:9;21392:17;21385:47;21449:131;21575:4;21449:131;:::i;:::-;21441:139;;21168:419;;;:::o;21593:228::-;21733:34;21729:1;21721:6;21717:14;21710:58;21802:11;21797:2;21789:6;21785:15;21778:36;21593:228;:::o;21827:366::-;21969:3;21990:67;22054:2;22049:3;21990:67;:::i;:::-;21983:74;;22066:93;22155:3;22066:93;:::i;:::-;22184:2;22179:3;22175:12;22168:19;;21827:366;;;:::o;22199:419::-;22365:4;22403:2;22392:9;22388:18;22380:26;;22452:9;22446:4;22442:20;22438:1;22427:9;22423:17;22416:47;22480:131;22606:4;22480:131;:::i;:::-;22472:139;;22199:419;;;:::o;22624:224::-;22764:34;22760:1;22752:6;22748:14;22741:58;22833:7;22828:2;22820:6;22816:15;22809:32;22624:224;:::o;22854:366::-;22996:3;23017:67;23081:2;23076:3;23017:67;:::i;:::-;23010:74;;23093:93;23182:3;23093:93;:::i;:::-;23211:2;23206:3;23202:12;23195:19;;22854:366;;;:::o;23226:419::-;23392:4;23430:2;23419:9;23415:18;23407:26;;23479:9;23473:4;23469:20;23465:1;23454:9;23450:17;23443:47;23507:131;23633:4;23507:131;:::i;:::-;23499:139;;23226:419;;;:::o;23651:177::-;23791:29;23787:1;23779:6;23775:14;23768:53;23651:177;:::o;23834:366::-;23976:3;23997:67;24061:2;24056:3;23997:67;:::i;:::-;23990:74;;24073:93;24162:3;24073:93;:::i;:::-;24191:2;24186:3;24182:12;24175:19;;23834:366;;;:::o;24206:419::-;24372:4;24410:2;24399:9;24395:18;24387:26;;24459:9;24453:4;24449:20;24445:1;24434:9;24430:17;24423:47;24487:131;24613:4;24487:131;:::i;:::-;24479:139;;24206:419;;;:::o;24631:180::-;24679:77;24676:1;24669:88;24776:4;24773:1;24766:15;24800:4;24797:1;24790:15;24817:180;24865:77;24862:1;24855:88;24962:4;24959:1;24952:15;24986:4;24983:1;24976:15;25003:233;25042:3;25065:24;25083:5;25065:24;:::i;:::-;25056:33;;25111:66;25104:5;25101:77;25098:103;;;25181:18;;:::i;:::-;25098:103;25228:1;25221:5;25217:13;25210:20;;25003:233;;;:::o;25242:348::-;25282:7;25305:20;25323:1;25305:20;:::i;:::-;25300:25;;25339:20;25357:1;25339:20;:::i;:::-;25334:25;;25527:1;25459:66;25455:74;25452:1;25449:81;25444:1;25437:9;25430:17;25426:105;25423:131;;;25534:18;;:::i;:::-;25423:131;25582:1;25579;25575:9;25564:20;;25242:348;;;;:::o;25596:223::-;25736:34;25732:1;25724:6;25720:14;25713:58;25805:6;25800:2;25792:6;25788:15;25781:31;25596:223;:::o;25825:366::-;25967:3;25988:67;26052:2;26047:3;25988:67;:::i;:::-;25981:74;;26064:93;26153:3;26064:93;:::i;:::-;26182:2;26177:3;26173:12;26166:19;;25825:366;;;:::o;26197:419::-;26363:4;26401:2;26390:9;26386:18;26378:26;;26450:9;26444:4;26440:20;26436:1;26425:9;26421:17;26414:47;26478:131;26604:4;26478:131;:::i;:::-;26470:139;;26197:419;;;:::o;26622:221::-;26762:34;26758:1;26750:6;26746:14;26739:58;26831:4;26826:2;26818:6;26814:15;26807:29;26622:221;:::o;26849:366::-;26991:3;27012:67;27076:2;27071:3;27012:67;:::i;:::-;27005:74;;27088:93;27177:3;27088:93;:::i;:::-;27206:2;27201:3;27197:12;27190:19;;26849:366;;;:::o;27221:419::-;27387:4;27425:2;27414:9;27410:18;27402:26;;27474:9;27468:4;27464:20;27460:1;27449:9;27445:17;27438:47;27502:131;27628:4;27502:131;:::i;:::-;27494:139;;27221:419;;;:::o;27646:224::-;27786:34;27782:1;27774:6;27770:14;27763:58;27855:7;27850:2;27842:6;27838:15;27831:32;27646:224;:::o;27876:366::-;28018:3;28039:67;28103:2;28098:3;28039:67;:::i;:::-;28032:74;;28115:93;28204:3;28115:93;:::i;:::-;28233:2;28228:3;28224:12;28217:19;;27876:366;;;:::o;28248:419::-;28414:4;28452:2;28441:9;28437:18;28429:26;;28501:9;28495:4;28491:20;28487:1;28476:9;28472:17;28465:47;28529:131;28655:4;28529:131;:::i;:::-;28521:139;;28248:419;;;:::o;28673:222::-;28813:34;28809:1;28801:6;28797:14;28790:58;28882:5;28877:2;28869:6;28865:15;28858:30;28673:222;:::o;28901:366::-;29043:3;29064:67;29128:2;29123:3;29064:67;:::i;:::-;29057:74;;29140:93;29229:3;29140:93;:::i;:::-;29258:2;29253:3;29249:12;29242:19;;28901:366;;;:::o;29273:419::-;29439:4;29477:2;29466:9;29462:18;29454:26;;29526:9;29520:4;29516:20;29512:1;29501:9;29497:17;29490:47;29554:131;29680:4;29554:131;:::i;:::-;29546:139;;29273:419;;;:::o;29698:225::-;29838:34;29834:1;29826:6;29822:14;29815:58;29907:8;29902:2;29894:6;29890:15;29883:33;29698:225;:::o;29929:366::-;30071:3;30092:67;30156:2;30151:3;30092:67;:::i;:::-;30085:74;;30168:93;30257:3;30168:93;:::i;:::-;30286:2;30281:3;30277:12;30270:19;;29929:366;;;:::o;30301:419::-;30467:4;30505:2;30494:9;30490:18;30482:26;;30554:9;30548:4;30544:20;30540:1;30529:9;30525:17;30518:47;30582:131;30708:4;30582:131;:::i;:::-;30574:139;;30301:419;;;:::o;30726:181::-;30866:33;30862:1;30854:6;30850:14;30843:57;30726:181;:::o;30913:366::-;31055:3;31076:67;31140:2;31135:3;31076:67;:::i;:::-;31069:74;;31152:93;31241:3;31152:93;:::i;:::-;31270:2;31265:3;31261:12;31254:19;;30913:366;;;:::o;31285:419::-;31451:4;31489:2;31478:9;31474:18;31466:26;;31538:9;31532:4;31528:20;31524:1;31513:9;31509:17;31502:47;31566:131;31692:4;31566:131;:::i;:::-;31558:139;;31285:419;;;:::o;31710:220::-;31850:34;31846:1;31838:6;31834:14;31827:58;31919:3;31914:2;31906:6;31902:15;31895:28;31710:220;:::o;31936:366::-;32078:3;32099:67;32163:2;32158:3;32099:67;:::i;:::-;32092:74;;32175:93;32264:3;32175:93;:::i;:::-;32293:2;32288:3;32284:12;32277:19;;31936:366;;;:::o;32308:419::-;32474:4;32512:2;32501:9;32497:18;32489:26;;32561:9;32555:4;32551:20;32547:1;32536:9;32532:17;32525:47;32589:131;32715:4;32589:131;:::i;:::-;32581:139;;32308:419;;;:::o;32733:221::-;32873:34;32869:1;32861:6;32857:14;32850:58;32942:4;32937:2;32929:6;32925:15;32918:29;32733:221;:::o;32960:366::-;33102:3;33123:67;33187:2;33182:3;33123:67;:::i;:::-;33116:74;;33199:93;33288:3;33199:93;:::i;:::-;33317:2;33312:3;33308:12;33301:19;;32960:366;;;:::o;33332:419::-;33498:4;33536:2;33525:9;33521:18;33513:26;;33585:9;33579:4;33575:20;33571:1;33560:9;33556:17;33549:47;33613:131;33739:4;33613:131;:::i;:::-;33605:139;;33332:419;;;:::o;33757:229::-;33897:34;33893:1;33885:6;33881:14;33874:58;33966:12;33961:2;33953:6;33949:15;33942:37;33757:229;:::o;33992:366::-;34134:3;34155:67;34219:2;34214:3;34155:67;:::i;:::-;34148:74;;34231:93;34320:3;34231:93;:::i;:::-;34349:2;34344:3;34340:12;34333:19;;33992:366;;;:::o;34364:419::-;34530:4;34568:2;34557:9;34553:18;34545:26;;34617:9;34611:4;34607:20;34603:1;34592:9;34588:17;34581:47;34645:131;34771:4;34645:131;:::i;:::-;34637:139;;34364:419;;;:::o;34789:180::-;34837:77;34834:1;34827:88;34934:4;34931:1;34924:15;34958:4;34955:1;34948:15;34975:185;35015:1;35032:20;35050:1;35032:20;:::i;:::-;35027:25;;35066:20;35084:1;35066:20;:::i;:::-;35061:25;;35105:1;35095:35;;35110:18;;:::i;:::-;35095:35;35152:1;35149;35145:9;35140:14;;34975:185;;;;:::o

Swarm Source

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