ETH Price: $3,248.53 (+2.06%)
Gas: 1 Gwei

Token

SKOLL (SKOLL)
 

Overview

Max Total Supply

333,333,333,333,333 SKOLL

Holders

465

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
Skoll

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-01
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

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

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

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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Pair {
    function sync() external;
}

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
}

abstract contract RibeToken
{
    function buyFeePercentage() external view virtual returns(uint);
    function onBuyFeeCollected(address tokenAddress, uint amount) external virtual;
    function sellFeePercentage() external view virtual returns(uint);
    function onSellFeeCollected(address tokenAddress, uint amount) external virtual;
}


contract Skoll is Context, IERC20, IERC20Metadata, Ownable, RibeToken {
    // Openzeppelin variables
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    // My variables

    bool private inSwap;
    uint256 internal _treasuryFeeCollected;
    uint256 internal _nftHoldersFeeCollected;
    uint256 internal _deployerFeeCollected;

    uint256 public minTokensBeforeSwap;
    
    address public treasury_wallet;
    address public nft_holders_wallet;
    address public deployer_wallet;

    address public usdcAddress;
    address public hatiAddress;

    IUniswapV2Router02 public router;
    address public uniswapPair;
    address public ribeswapPair;

    uint public _feeDecimal = 2;
    // index 0 = buy fee, index 1 = sell fee, index 2 = p2p fee
    uint[] public _treasuryFee;
    uint[] public _nftHoldersFee;
    uint[] public _deployerFee;

    bool public swapEnabled = true;
    bool public isFeeActive = false;

    mapping(address => bool) public isTaxless;

    event Swap(uint swaped, uint sentToTreasury, uint sentToNFTHolders, uint sentToDeployer);
    event AutoLiquify(uint256 amountETH, uint256 amountTokens);

    // Ribe Compatibility variables
    uint public treasuryUSDAmount;
    uint public minTreasuryUSDCBeforeSwap;
    uint public ribeBuyFeePercentage = 400;
    uint public ribeSellFeePercentage = 400;
    uint public ribeTreasuryPercentage = 5000;
    uint public ribeNFTHoldersPercentage = 2500;
    uint public ribeDeployerPercentage = 2500;

    bool public isLaunched = false;

    // Anti bots
    mapping(address => uint256) public _blockNumberByAddress;
    bool public antiBotsActive = false;
    mapping(address => bool) public isContractExempt;
    uint public blockCooldownAmount;
    // End anti bots

    // Openzeppelin functions

    /**
     * @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() {
        // Editable
        string memory e_name = "SKOLL";
        string memory e_symbol = "SKOLL";
        treasury_wallet = 0x21D585b52B802C5fcA579f68b359F77EE6Fc342d;
        nft_holders_wallet = 0xa414518f7cBdAA6D1C2F4A06E1Aebff5209B6806;
        deployer_wallet = 0xf0Bc35eFCc611eb89181cC73EB712650FCdC9087;
        uint e_totalSupply = 333_333_333_333_333 ether;
        blockCooldownAmount = 5;
        minTokensBeforeSwap = (_totalSupply * 100) / 10000; // Autoswap on Uni 1% of Skoll Supply
        minTreasuryUSDCBeforeSwap = 2_000_000_000;           // Autoswap on Ribe 2000 USDC by default
        // End editable

        usdcAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
        hatiAddress = 0x251457b7c5d85251Ca1aB384361c821330bE2520;
 
        _name = e_name;
        _symbol = e_symbol;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), usdcAddress);
        ribeswapPair = IUniswapV2Factory(0x5ACcFe50F9D5A9F3cdAB8864943250b1074146b1).createPair(address(this), usdcAddress);
        router = _uniswapV2Router;

        _treasuryFee.push(100);
        _treasuryFee.push(100);
        _treasuryFee.push(0);

        _nftHoldersFee.push(100);
        _nftHoldersFee.push(100);
        _nftHoldersFee.push(0);

        _deployerFee.push(100);
        _deployerFee.push(100);
        _deployerFee.push(0);

        isTaxless[msg.sender] = true;
        isTaxless[address(this)] = true;
        isTaxless[treasury_wallet] = true;
        isTaxless[nft_holders_wallet] = true;
        isTaxless[deployer_wallet] = true;
        isTaxless[address(0)] = true;

        isContractExempt[address(this)] = true;

        _mint(msg.sender, e_totalSupply);
    }

    /**
     * @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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        // My implementation
        require(isLaunched || from == owner() || (to!=uniswapPair && to!=ribeswapPair), "Please wait to add liquidity!");

        if(from!=ribeswapPair && to!=ribeswapPair)
        {
            // Anti bots
            if(antiBotsActive)
            {
                if(!isContractExempt[from] && !isContractExempt[to])
                {
                    address human = ensureOneHuman(from, to);
                    ensureMaxTxFrequency(human);
                    _blockNumberByAddress[human] = block.number;
                }
            }
            // End anti bots

            if (swapEnabled && !inSwap && from != uniswapPair) {
                swap();
            }

            uint256 feesCollected;
            if (isFeeActive && !isTaxless[from] && !isTaxless[to] && !inSwap) {
                bool sell = to == uniswapPair;
                bool p2p = from != uniswapPair && to != uniswapPair;
                feesCollected = calculateFee(p2p ? 2 : sell ? 1 : 0, amount);
            }

            amount -= feesCollected;
            _balances[from] -= feesCollected;
            _balances[address(this)] += feesCollected;
        }
        // End my implementation

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}

    // My functions

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    function sendViaCall(address payable _to, uint amount) private {
        (bool sent, bytes memory data) = _to.call{value: amount}("");
        data;
        require(sent, "Failed to send Ether");
    }

    function swap() private lockTheSwap {
        // How much are we swaping?
        uint totalCollected = _treasuryFeeCollected + _nftHoldersFeeCollected + _deployerFeeCollected;

        if(minTokensBeforeSwap > totalCollected) return;

        // Let's swap for USDC now
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = usdcAddress;

        address[] memory sellPathHati = new address[](3);
        sellPathHati[0] = address(this);
        sellPathHati[1] = usdcAddress;
        sellPathHati[2] = hatiAddress;    

        _approve(address(this), address(router), totalCollected);
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            _treasuryFeeCollected,
            0,
            sellPathHati,
            treasury_wallet,
            block.timestamp
        );
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            _nftHoldersFeeCollected,
            0,
            sellPath,
            nft_holders_wallet,
            block.timestamp
        );
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            _deployerFeeCollected,
            0,
            sellPath,
            deployer_wallet,
            block.timestamp
        );
        
        _treasuryFeeCollected = 0;
        _nftHoldersFeeCollected = 0;
        _deployerFeeCollected = 0;

        emit Swap(totalCollected, _treasuryFeeCollected, _nftHoldersFeeCollected, _deployerFeeCollected);
    }

    function calculateFee(uint256 feeIndex, uint256 amount) internal returns(uint256) {
        uint256 treasuryFee = (amount * _treasuryFee[feeIndex]) / (10**(_feeDecimal + 2));
        uint256 nftHoldersFee = (amount * _nftHoldersFee[feeIndex]) / (10**(_feeDecimal + 2));
        uint256 deployerFee = (amount * _deployerFee[feeIndex]) / (10**(_feeDecimal + 2));
        
        _treasuryFeeCollected += treasuryFee;
        _nftHoldersFeeCollected += nftHoldersFee;
        _deployerFeeCollected += deployerFee;
        return treasuryFee + nftHoldersFee + deployerFee;
    }

    function setMinTokensBeforeSwap(uint256 amount) external onlyOwner {
        minTokensBeforeSwap = amount;
    }

    function setTreasuryWallet(address wallet)  external onlyOwner {
        treasury_wallet = wallet;
    }

    function setNFTHoldersWallet(address wallet)  external onlyOwner {
        nft_holders_wallet = wallet;
    }

    function setDeployerWallet(address wallet)  external onlyOwner {
        deployer_wallet = wallet;
    }

    function setTreasuryFees(uint256 buy, uint256 sell, uint256 p2p) external onlyOwner {
        _treasuryFee[0] = buy;
        _treasuryFee[1] = sell;
        _treasuryFee[2] = p2p;
    }

    function setNFTHoldersFees(uint256 buy, uint256 sell, uint256 p2p) external onlyOwner {
        _nftHoldersFee[0] = buy;
        _nftHoldersFee[1] = sell;
        _nftHoldersFee[2] = p2p;
    }

    function setDeployerFees(uint256 buy, uint256 sell, uint256 p2p) external onlyOwner {
        _deployerFee[0] = buy;
        _deployerFee[1] = sell;
        _deployerFee[2] = p2p;
    }

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

    function setFeeActive(bool value) external onlyOwner {
        isFeeActive = value;
    }

    function setTaxless(address account, bool value) external onlyOwner {
        isTaxless[account] = value;
    }

    // Anti bots
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function ensureOneHuman(address _to, address _from) internal virtual returns (address) {
        require(!isContract(_to) || !isContract(_from), "No bots allowed!");
        if (isContract(_to)) return _from;
        else return _to;
    }

    function ensureMaxTxFrequency(address addr) internal virtual {
        bool isAllowed = _blockNumberByAddress[addr] == 0 ||
            ((_blockNumberByAddress[addr] + blockCooldownAmount) < (block.number + 1));
        require(isAllowed, "Max tx frequency exceeded!");
    }

    function setAntiBotsActive(bool value) external onlyOwner {
        antiBotsActive = value;
    }

    function setBlockCooldown(uint value) external onlyOwner {
        blockCooldownAmount = value;
    }

    function setContractExempt(address account, bool value) external onlyOwner {
        isContractExempt[account] = value;
    }
    // End anti bots

    // Ribe Functions

    function baseTokenOwnerWithdraw(address destination, address token, uint amount) public onlyOwner {
        IERC20(token).transfer(destination, amount);
    }

    function calculateRibeFee(uint256 amount, uint256 feePercentage, uint256 feeDecimal) internal pure returns(uint256) {
        return (amount * feePercentage) / (10**(feeDecimal + 2));
    }

    function buyFeePercentage() external view override returns(uint)
    {
        return ribeBuyFeePercentage;
    }

    function sellFeePercentage() external view override returns(uint)
    {
        return ribeSellFeePercentage;
    }

    function setMinTreasuryUSDCBeforeSwap(uint amount) public onlyOwner
    {
        minTreasuryUSDCBeforeSwap = amount;
    }

    function setRibeBuyFeePercentage(uint amount) public onlyOwner
    {
        ribeBuyFeePercentage = amount;
    }

    function setRibeSellFeePercentage(uint amount) public onlyOwner
    {
        ribeSellFeePercentage = amount;
    }

    function setRibeTreasuryPercentage(uint amount) public onlyOwner
    {
        ribeTreasuryPercentage = amount;
    }


    function setRibeNFTHoldersPercentage(uint amount) public onlyOwner
    {
        ribeNFTHoldersPercentage = amount;
    }


    function setRibeDeployerPercentage(uint amount) public onlyOwner
    {
        ribeDeployerPercentage = amount;
    }

    function launch() public onlyOwner
    {
        isLaunched = true;
    }

    function swapTreasuryUSDForRibe() public
    {
        address[] memory sellPath = new address[](2);
        sellPath[0] = usdcAddress;
        sellPath[1] = hatiAddress;

        IERC20(usdcAddress).approve(address(router), treasuryUSDAmount);
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            treasuryUSDAmount,
            0,
            sellPath,
            treasury_wallet,
            block.timestamp
        );
        treasuryUSDAmount = 0;
    }

    function processRibeFees(address tokenAddress, uint amount) internal
    {
        if(tokenAddress == usdcAddress)
        {
            treasuryUSDAmount += calculateRibeFee(amount, ribeTreasuryPercentage, 2);
            uint nft_holders_amount = calculateRibeFee(amount, ribeNFTHoldersPercentage, 2);
            uint deployer_amount = calculateRibeFee(amount, ribeDeployerPercentage, 2);

            if(treasuryUSDAmount > minTreasuryUSDCBeforeSwap)
            {
                swapTreasuryUSDForRibe();
            }
            if(nft_holders_amount > 0)
                IERC20(tokenAddress).transfer(nft_holders_wallet, nft_holders_amount);
            if(deployer_amount > 0)
                IERC20(tokenAddress).transfer(deployer_wallet, deployer_amount);
        }else
        {
            IERC20(tokenAddress).transfer(owner(), amount);
        }
    }

    function onBuyFeeCollected(address tokenAddress, uint amount) external override
    {
        processRibeFees(tokenAddress, amount);
    }

    function onSellFeeCollected(address tokenAddress, uint amount) external override
    {
        processRibeFees(tokenAddress, amount);
    }

    fallback() external payable {}
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swaped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sentToTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sentToNFTHolders","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sentToDeployer","type":"uint256"}],"name":"Swap","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blockNumberByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_deployerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_nftHoldersFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"baseTokenOwnerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blockCooldownAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hatiAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isContractExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTaxless","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTreasuryUSDCBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft_holders_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onBuyFeeCollected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onSellFeeCollected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ribeBuyFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ribeDeployerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ribeNFTHoldersPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ribeSellFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ribeTreasuryPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ribeswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAntiBotsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBlockCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setContractExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"p2p","type":"uint256"}],"name":"setDeployerFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDeployerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTreasuryUSDCBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"p2p","type":"uint256"}],"name":"setNFTHoldersFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setNFTHoldersWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRibeBuyFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRibeDeployerPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRibeNFTHoldersPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRibeSellFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRibeTreasuryPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"p2p","type":"uint256"}],"name":"setTreasuryFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryUSDForRibe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryUSDAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260026013556001601760006101000a81548160ff0219169083151502179055506000601760016101000a81548160ff021916908315150217905550610190601b55610190601c55611388601d556109c4601e556109c4601f556000602060006101000a81548160ff0219169083151502179055506000602260006101000a81548160ff021916908315150217905550348015620000a057600080fd5b50620000c1620000b562000a5b60201b60201c565b62000a6360201b60201c565b60006040518060400160405280600581526020017f534b4f4c4c000000000000000000000000000000000000000000000000000000815250905060006040518060400160405280600581526020017f534b4f4c4c00000000000000000000000000000000000000000000000000000081525090507321d585b52b802c5fca579f68b359f77ee6fc342d600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a414518f7cbdaa6d1c2f4a06e1aebff5209b6806600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f0bc35efcc611eb89181cc73eb712650fcdc9087600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006d106f4216d9dbb8f58c1cc834000090506005602481905550612710606460035462000263919062000ce3565b6200026f919062000d73565b600a819055506377359400601a8190555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073251457b7c5d85251ca1ab384361c821330be2520600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600490816200033b91906200101b565b5081600590816200034d91906200101b565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d991906200116c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000437929190620011af565b6020604051808303816000875af115801562000457573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047d91906200116c565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735accfe50f9d5a9f3cdab8864943250b1074146b173ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000530929190620011af565b6020604051808303816000875af115801562000550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057691906200116c565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506014606490806001815401808255809150506001900390600052602060002001600090919091909150556014606490806001815401808255809150506001900390600052602060002001600090919091909150556014600090806001815401808255809150506001900390600052602060002001600090919091909150556015606490806001815401808255809150506001900390600052602060002001600090919091909150556015606490806001815401808255809150506001900390600052602060002001600090919091909150556015600090806001815401808255809150506001900390600052602060002001600090919091909150556016606490806001815401808255809150506001900390600052602060002001600090919091909150556016606490806001815401808255809150506001900390600052602060002001600090919091909150556016600090806001815401808255809150506001900390600052602060002001600090919091909150556001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000a51338362000b2760201b60201c565b50505050620012ea565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b90906200123d565b60405180910390fd5b62000bad6000838362000ca060201b60201c565b806003600082825462000bc191906200125f565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c1991906200125f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c809190620012cd565b60405180910390a362000c9c6000838362000ca560201b60201c565b5050565b505050565b505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cf08262000caa565b915062000cfd8362000caa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d395762000d3862000cb4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d808262000caa565b915062000d8d8362000caa565b92508262000da05762000d9f62000d44565b5b828204905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e2d57607f821691505b60208210810362000e435762000e4262000de5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ead7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e6e565b62000eb9868362000e6e565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000efc62000ef662000ef08462000caa565b62000ed1565b62000caa565b9050919050565b6000819050919050565b62000f188362000edb565b62000f3062000f278262000f03565b84845462000e7b565b825550505050565b600090565b62000f4762000f38565b62000f5481848462000f0d565b505050565b5b8181101562000f7c5762000f7060008262000f3d565b60018101905062000f5a565b5050565b601f82111562000fcb5762000f958162000e49565b62000fa08462000e5e565b8101602085101562000fb0578190505b62000fc862000fbf8562000e5e565b83018262000f59565b50505b505050565b600082821c905092915050565b600062000ff06000198460080262000fd0565b1980831691505092915050565b60006200100b838362000fdd565b9150826002028217905092915050565b620010268262000dab565b67ffffffffffffffff81111562001042576200104162000db6565b5b6200104e825462000e14565b6200105b82828562000f80565b600060209050601f8311600181146200109357600084156200107e578287015190505b6200108a858262000ffd565b865550620010fa565b601f198416620010a38662000e49565b60005b82811015620010cd57848901518255600182019150602085019450602081019050620010a6565b86831015620010ed5784890151620010e9601f89168262000fdd565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011348262001107565b9050919050565b620011468162001127565b81146200115257600080fd5b50565b60008151905062001166816200113b565b92915050565b60006020828403121562001185576200118462001102565b5b6000620011958482850162001155565b91505092915050565b620011a98162001127565b82525050565b6000604082019050620011c660008301856200119e565b620011d560208301846200119e565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001225601f83620011dc565b91506200123282620011ed565b602082019050919050565b60006020820190508181036000830152620012588162001216565b9050919050565b60006200126c8262000caa565b9150620012798362000caa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012b157620012b062000cb4565b5b828201905092915050565b620012c78162000caa565b82525050565b6000602082019050620012e46000830184620012bc565b92915050565b61517580620012fa6000396000f3fe6080604052600436106103f35760003560e01c806380f6831011610208578063b86b0a1d11610118578063d44545e7116100ab578063e43504da1161007a578063e43504da14610f01578063e5d41c6b14610f2c578063f2fde38b14610f57578063f6887cd314610f80578063f887ea4014610fbd576103fa565b8063d44545e714610e45578063dd62ed3e14610e70578063e01af92c14610ead578063e208a93914610ed6576103fa565b8063c1af8359116100e7578063c1af835914610d99578063c6b9ff6e14610dc4578063c816841b14610def578063d31347f214610e1a576103fa565b8063b86b0a1d14610d03578063bbf1900314610d2e578063bc46029314610d57578063bedb94b914610d6e576103fa565b80639d7e4d9e1161019b578063a8602fea1161016a578063a8602fea14610c0e578063a9059cbb14610c37578063af08988214610c74578063b6a479ad14610c9d578063b7bfff6514610cda576103fa565b80639d7e4d9e14610b40578063a0ef351314610b69578063a457c2d714610b94578063a5ae2d2f14610bd1576103fa565b80638da5cb5b116101d75780638da5cb5b14610a985780638f9e4cac14610ac357806395d89b4114610aec5780639686d32214610b17576103fa565b806380f68310146109de5780638159ab3714610a07578063851d78d814610a32578063857f054e14610a6f576103fa565b806333cf5dcf11610303578063558eabb411610296578063715018a611610265578063715018a61461090d578063716b095914610924578063761837361461094d57806377548efe1461097857806377a59f00146109a1576103fa565b8063558eabb414610853578063602b02361461087c5780636ddd1713146108a557806370a08231146108d0576103fa565b806342443e9f116102d257806342443e9f146107ad5780634605d9ab146107d657806347f2dc5b1461080157806348a464731461082a576103fa565b806333cf5dcf146106f357806335d2db701461071c578063395093511461074557806341f20b6814610782576103fa565b806318160ddd116103865780631bc557d9116103555780631bc557d9146105f857806323b872dd14610635578063307aebc914610672578063309892071461069d578063313ce567146106c8576103fa565b806318160ddd1461054c5780631868aadf146105775780631934c76a146105a257806319db457d146105cd576103fa565b8063095ea7b3116103c2578063095ea7b3146104945780630a13a455146104d157806313c72aed146104fa578063159de0c714610523576103fa565b806301339c21146103fc57806302d454571461041357806306fdde031461043e5780630947198714610469576103fa565b366103fa57005b005b34801561040857600080fd5b50610411610fe8565b005b34801561041f57600080fd5b50610428611081565b604051610435919061410c565b60405180910390f35b34801561044a57600080fd5b506104536110a7565b60405161046091906141c0565b60405180910390f35b34801561047557600080fd5b5061047e611139565b60405161048b91906141fb565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190614273565b61113f565b6040516104c891906142ce565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190614273565b611162565b005b34801561050657600080fd5b50610521600480360381019061051c91906142e9565b611170565b005b34801561052f57600080fd5b5061054a60048036038101906105459190614316565b6111f6565b005b34801561055857600080fd5b506105616112e3565b60405161056e91906141fb565b60405180910390f35b34801561058357600080fd5b5061058c6112ed565b60405161059991906141fb565b60405180910390f35b3480156105ae57600080fd5b506105b76112f3565b6040516105c491906141fb565b60405180910390f35b3480156105d957600080fd5b506105e26112f9565b6040516105ef91906141fb565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906142e9565b6112ff565b60405161062c91906141fb565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614369565b611323565b60405161066991906142ce565b60405180910390f35b34801561067e57600080fd5b50610687611352565b60405161069491906142ce565b60405180910390f35b3480156106a957600080fd5b506106b2611365565b6040516106bf919061410c565b60405180910390f35b3480156106d457600080fd5b506106dd61138b565b6040516106ea91906143d8565b60405180910390f35b3480156106ff57600080fd5b5061071a600480360381019061071591906143f3565b611394565b005b34801561072857600080fd5b50610743600480360381019061073e9190614273565b611454565b005b34801561075157600080fd5b5061076c60048036038101906107679190614273565b611462565b60405161077991906142ce565b60405180910390f35b34801561078e57600080fd5b5061079761150c565b6040516107a491906142ce565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906142e9565b61151f565b005b3480156107e257600080fd5b506107eb6115a5565b6040516107f891906141fb565b60405180910390f35b34801561080d57600080fd5b506108286004803603810190610823919061444c565b6115ab565b005b34801561083657600080fd5b50610851600480360381019061084c91906142e9565b611682565b005b34801561085f57600080fd5b5061087a600480360381019061087591906142e9565b611708565b005b34801561088857600080fd5b506108a3600480360381019061089e91906142e9565b61178e565b005b3480156108b157600080fd5b506108ba611814565b6040516108c791906142ce565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f291906143f3565b611827565b60405161090491906141fb565b60405180910390f35b34801561091957600080fd5b50610922611870565b005b34801561093057600080fd5b5061094b600480360381019061094691906142e9565b6118f8565b005b34801561095957600080fd5b5061096261197e565b60405161096f91906141fb565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a91906142e9565b611984565b005b3480156109ad57600080fd5b506109c860048036038101906109c391906143f3565b611a0a565b6040516109d591906141fb565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a00919061448c565b611a22565b005b348015610a1357600080fd5b50610a1c611abb565b604051610a2991906141fb565b60405180910390f35b348015610a3e57600080fd5b50610a596004803603810190610a5491906142e9565b611ac1565b604051610a6691906141fb565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614369565b611ae5565b005b348015610aa457600080fd5b50610aad611be5565b604051610aba919061410c565b60405180910390f35b348015610acf57600080fd5b50610aea6004803603810190610ae59190614316565b611c0e565b005b348015610af857600080fd5b50610b01611cfb565b604051610b0e91906141c0565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b39919061444c565b611d8d565b005b348015610b4c57600080fd5b50610b676004803603810190610b6291906143f3565b611e64565b005b348015610b7557600080fd5b50610b7e611f24565b604051610b8b919061410c565b60405180910390f35b348015610ba057600080fd5b50610bbb6004803603810190610bb69190614273565b611f4a565b604051610bc891906142ce565b60405180910390f35b348015610bdd57600080fd5b50610bf86004803603810190610bf391906143f3565b612034565b604051610c0591906142ce565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c3091906143f3565b612054565b005b348015610c4357600080fd5b50610c5e6004803603810190610c599190614273565b612114565b604051610c6b91906142ce565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190614316565b612137565b005b348015610ca957600080fd5b50610cc46004803603810190610cbf91906142e9565b612224565b604051610cd191906141fb565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc919061448c565b612248565b005b348015610d0f57600080fd5b50610d186122e1565b604051610d2591906141fb565b60405180910390f35b348015610d3a57600080fd5b50610d556004803603810190610d5091906142e9565b6122e7565b005b348015610d6357600080fd5b50610d6c61236d565b005b348015610d7a57600080fd5b50610d83612627565b604051610d9091906141fb565b60405180910390f35b348015610da557600080fd5b50610dae61262d565b604051610dbb919061410c565b60405180910390f35b348015610dd057600080fd5b50610dd9612653565b604051610de6919061410c565b60405180910390f35b348015610dfb57600080fd5b50610e04612679565b604051610e11919061410c565b60405180910390f35b348015610e2657600080fd5b50610e2f61269f565b604051610e3c919061410c565b60405180910390f35b348015610e5157600080fd5b50610e5a6126c5565b604051610e6791906141fb565b60405180910390f35b348015610e7c57600080fd5b50610e976004803603810190610e9291906144b9565b6126cf565b604051610ea491906141fb565b60405180910390f35b348015610eb957600080fd5b50610ed46004803603810190610ecf919061448c565b612756565b005b348015610ee257600080fd5b50610eeb6127ef565b604051610ef891906141fb565b60405180910390f35b348015610f0d57600080fd5b50610f166127f9565b604051610f2391906142ce565b60405180910390f35b348015610f3857600080fd5b50610f4161280c565b604051610f4e91906141fb565b60405180910390f35b348015610f6357600080fd5b50610f7e6004803603810190610f7991906143f3565b612812565b005b348015610f8c57600080fd5b50610fa76004803603810190610fa291906143f3565b612909565b604051610fb491906142ce565b60405180910390f35b348015610fc957600080fd5b50610fd2612929565b604051610fdf9190614558565b60405180910390f35b610ff061294f565b73ffffffffffffffffffffffffffffffffffffffff1661100e611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906145bf565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546110b69061460e565b80601f01602080910402602001604051908101604052809291908181526020018280546110e29061460e565b801561112f5780601f106111045761010080835404028352916020019161112f565b820191906000526020600020905b81548152906001019060200180831161111257829003601f168201915b5050505050905090565b60195481565b60008061114a61294f565b9050611157818585612957565b600191505092915050565b61116c8282612b20565b5050565b61117861294f565b73ffffffffffffffffffffffffffffffffffffffff16611196611be5565b73ffffffffffffffffffffffffffffffffffffffff16146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e3906145bf565b60405180910390fd5b8060248190555050565b6111fe61294f565b73ffffffffffffffffffffffffffffffffffffffff1661121c611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611272576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611269906145bf565b60405180910390fd5b8260166000815481106112885761128761463f565b5b90600052602060002001819055508160166001815481106112ac576112ab61463f565b5b90600052602060002001819055508060166002815481106112d0576112cf61463f565b5b9060005260206000200181905550505050565b6000600354905090565b60245481565b601c5481565b60135481565b6016818154811061130f57600080fd5b906000526020600020016000915090505481565b60008061132e61294f565b905061133b858285612dbc565b611346858585612e48565b60019150509392505050565b602060009054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b61139c61294f565b73ffffffffffffffffffffffffffffffffffffffff166113ba611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611410576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611407906145bf565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61145e8282612b20565b5050565b60008061146d61294f565b9050611501818585600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114fc919061469d565b612957565b600191505092915050565b602260009054906101000a900460ff1681565b61152761294f565b73ffffffffffffffffffffffffffffffffffffffff16611545611be5565b73ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906145bf565b60405180910390fd5b80601c8190555050565b601f5481565b6115b361294f565b73ffffffffffffffffffffffffffffffffffffffff166115d1611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e906145bf565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61168a61294f565b73ffffffffffffffffffffffffffffffffffffffff166116a8611be5565b73ffffffffffffffffffffffffffffffffffffffff16146116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f5906145bf565b60405180910390fd5b80600a8190555050565b61171061294f565b73ffffffffffffffffffffffffffffffffffffffff1661172e611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b906145bf565b60405180910390fd5b80601d8190555050565b61179661294f565b73ffffffffffffffffffffffffffffffffffffffff166117b4611be5565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611801906145bf565b60405180910390fd5b80601a8190555050565b601760009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61187861294f565b73ffffffffffffffffffffffffffffffffffffffff16611896611be5565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906145bf565b60405180910390fd5b6118f66000613731565b565b61190061294f565b73ffffffffffffffffffffffffffffffffffffffff1661191e611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b906145bf565b60405180910390fd5b80601b8190555050565b601a5481565b61198c61294f565b73ffffffffffffffffffffffffffffffffffffffff166119aa611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f7906145bf565b60405180910390fd5b80601f8190555050565b60216020528060005260406000206000915090505481565b611a2a61294f565b73ffffffffffffffffffffffffffffffffffffffff16611a48611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906145bf565b60405180910390fd5b80602260006101000a81548160ff02191690831515021790555050565b601b5481565b60158181548110611ad157600080fd5b906000526020600020016000915090505481565b611aed61294f565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906145bf565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b9c9291906146f3565b6020604051808303816000875af1158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf9190614731565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c1661294f565b73ffffffffffffffffffffffffffffffffffffffff16611c34611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c81906145bf565b60405180910390fd5b826014600081548110611ca057611c9f61463f565b5b9060005260206000200181905550816014600181548110611cc457611cc361463f565b5b9060005260206000200181905550806014600281548110611ce857611ce761463f565b5b9060005260206000200181905550505050565b606060058054611d0a9061460e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d369061460e565b8015611d835780601f10611d5857610100808354040283529160200191611d83565b820191906000526020600020905b815481529060010190602001808311611d6657829003601f168201915b5050505050905090565b611d9561294f565b73ffffffffffffffffffffffffffffffffffffffff16611db3611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e00906145bf565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e6c61294f565b73ffffffffffffffffffffffffffffffffffffffff16611e8a611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906145bf565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611f5561294f565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561201b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612012906147d0565b60405180910390fd5b6120288286868403612957565b60019250505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b61205c61294f565b73ffffffffffffffffffffffffffffffffffffffff1661207a611be5565b73ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c7906145bf565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061211f61294f565b905061212c818585612e48565b600191505092915050565b61213f61294f565b73ffffffffffffffffffffffffffffffffffffffff1661215d611be5565b73ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906145bf565b60405180910390fd5b8260156000815481106121c9576121c861463f565b5b90600052602060002001819055508160156001815481106121ed576121ec61463f565b5b90600052602060002001819055508060156002815481106122115761221061463f565b5b9060005260206000200181905550505050565b6014818154811061223457600080fd5b906000526020600020016000915090505481565b61225061294f565b73ffffffffffffffffffffffffffffffffffffffff1661226e611be5565b73ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906145bf565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b601e5481565b6122ef61294f565b73ffffffffffffffffffffffffffffffffffffffff1661230d611be5565b73ffffffffffffffffffffffffffffffffffffffff1614612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a906145bf565b60405180910390fd5b80601e8190555050565b6000600267ffffffffffffffff81111561238a576123896147f0565b5b6040519080825280602002602001820160405280156123b85781602001602082028036833780820191505090505b509050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106123f2576123f161463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106124635761246261463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166019546040518363ffffffff1660e01b815260040161251e9291906146f3565b6020604051808303816000875af115801561253d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125619190614731565b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795601954600084600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016125ea959493929190614918565b600060405180830381600087803b15801561260457600080fd5b505af1158015612618573d6000803e3d6000fd5b50505050600060198190555050565b601d5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b54905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61275e61294f565b73ffffffffffffffffffffffffffffffffffffffff1661277c611be5565b73ffffffffffffffffffffffffffffffffffffffff16146127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c9906145bf565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b6000601c54905090565b601760019054906101000a900460ff1681565b600a5481565b61281a61294f565b73ffffffffffffffffffffffffffffffffffffffff16612838611be5565b73ffffffffffffffffffffffffffffffffffffffff161461288e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612885906145bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906149e4565b60405180910390fd5b61290681613731565b50565b60236020528060005260406000206000915054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bd90614a76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614b08565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1391906141fb565b60405180910390a3505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3157612b8381601d5460026137f5565b60196000828254612b94919061469d565b925050819055506000612bab82601e5460026137f5565b90506000612bbd83601f5460026137f5565b9050601a546019541115612bd457612bd361236d565b5b6000821115612c7f578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612c3a9291906146f3565b6020604051808303816000875af1158015612c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7d9190614731565b505b6000811115612d2a578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612ce59291906146f3565b6020604051808303816000875af1158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190614731565b505b5050612db8565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612d55611be5565b836040518363ffffffff1660e01b8152600401612d739291906146f3565b6020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190614731565b505b5050565b6000612dc884846126cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612e425781811015612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b90614b74565b60405180910390fd5b612e418484848403612957565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eae90614c06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d90614c98565b60405180910390fd5b612f3183838361382f565b602060009054906101000a900460ff1680612f7e5750612f4f611be5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806130315750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130305750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b5b613070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306790614d04565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561311c5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561359857602260009054906101000a900460ff161561323d57602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131da5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323c5760006131eb8484613834565b90506131f6816138b0565b43602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b5b601760009054906101000a900460ff1680156132665750600660009054906101000a900460ff16155b80156132c05750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156132ce576132cd61399c565b5b6000601760019054906101000a900460ff1680156133365750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561338c5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133a55750600660009054906101000a900460ff16155b156134dc576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156134ad5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b90506134d7816134cb57826134c35760006134c6565b60015b6134ce565b60025b60ff1685613f4c565b925050505b80826134e89190614d24565b915080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135399190614d24565b9250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461358f919061469d565b92505081905550505b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561361f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361690614dca565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136b4919061469d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161371891906141fb565b60405180910390a361372b8484846140b3565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600282613804919061469d565b600a6138109190614f1d565b838561381c9190614f68565b6138269190614ff1565b90509392505050565b505050565b600061383f836140b8565b1580613851575061384f826140b8565b155b613890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138879061506e565b60405180910390fd5b613899836140b8565b156138a6578190506138aa565b8290505b92915050565b600080602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806139565750600143613907919061469d565b602454602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613954919061469d565b105b905080613998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398f906150da565b60405180910390fd5b5050565b6001600660006101000a81548160ff02191690831515021790555060006009546008546007546139cc919061469d565b6139d6919061469d565b905080600a5411156139e85750613f2f565b6000600267ffffffffffffffff811115613a0557613a046147f0565b5b604051908082528060200260200182016040528015613a335781602001602082028036833780820191505090505b5090503081600081518110613a4b57613a4a61463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613abc57613abb61463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600367ffffffffffffffff811115613b1357613b126147f0565b5b604051908082528060200260200182016040528015613b415781602001602082028036833780820191505090505b5090503081600081518110613b5957613b5861463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613bca57613bc961463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110613c3b57613c3a61463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ca230601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612957565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795600754600084600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613d2a959493929190614918565b600060405180830381600087803b158015613d4457600080fd5b505af1158015613d58573d6000803e3d6000fd5b50505050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795600854600085600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613de4959493929190614918565b600060405180830381600087803b158015613dfe57600080fd5b505af1158015613e12573d6000803e3d6000fd5b50505050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795600954600085600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613e9e959493929190614918565b600060405180830381600087803b158015613eb857600080fd5b505af1158015613ecc573d6000803e3d6000fd5b505050506000600781905550600060088190555060006009819055507f298c349c742327269dc8de6ad66687767310c948ea309df826f5bd103e19d20783600754600854600954604051613f2394939291906150fa565b60405180910390a15050505b6000600660006101000a81548160ff021916908315150217905550565b6000806002601354613f5e919061469d565b600a613f6a9190614f1d565b60148581548110613f7e57613f7d61463f565b5b906000526020600020015484613f949190614f68565b613f9e9190614ff1565b905060006002601354613fb1919061469d565b600a613fbd9190614f1d565b60158681548110613fd157613fd061463f565b5b906000526020600020015485613fe79190614f68565b613ff19190614ff1565b905060006002601354614004919061469d565b600a6140109190614f1d565b601687815481106140245761402361463f565b5b90600052602060002001548661403a9190614f68565b6140449190614ff1565b90508260076000828254614058919061469d565b925050819055508160086000828254614071919061469d565b92505081905550806009600082825461408a919061469d565b9250508190555080828461409e919061469d565b6140a8919061469d565b935050505092915050565b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140f6826140cb565b9050919050565b614106816140eb565b82525050565b600060208201905061412160008301846140fd565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614161578082015181840152602081019050614146565b83811115614170576000848401525b50505050565b6000601f19601f8301169050919050565b600061419282614127565b61419c8185614132565b93506141ac818560208601614143565b6141b581614176565b840191505092915050565b600060208201905081810360008301526141da8184614187565b905092915050565b6000819050919050565b6141f5816141e2565b82525050565b600060208201905061421060008301846141ec565b92915050565b600080fd5b614224816140eb565b811461422f57600080fd5b50565b6000813590506142418161421b565b92915050565b614250816141e2565b811461425b57600080fd5b50565b60008135905061426d81614247565b92915050565b6000806040838503121561428a57614289614216565b5b600061429885828601614232565b92505060206142a98582860161425e565b9150509250929050565b60008115159050919050565b6142c8816142b3565b82525050565b60006020820190506142e360008301846142bf565b92915050565b6000602082840312156142ff576142fe614216565b5b600061430d8482850161425e565b91505092915050565b60008060006060848603121561432f5761432e614216565b5b600061433d8682870161425e565b935050602061434e8682870161425e565b925050604061435f8682870161425e565b9150509250925092565b60008060006060848603121561438257614381614216565b5b600061439086828701614232565b93505060206143a186828701614232565b92505060406143b28682870161425e565b9150509250925092565b600060ff82169050919050565b6143d2816143bc565b82525050565b60006020820190506143ed60008301846143c9565b92915050565b60006020828403121561440957614408614216565b5b600061441784828501614232565b91505092915050565b614429816142b3565b811461443457600080fd5b50565b60008135905061444681614420565b92915050565b6000806040838503121561446357614462614216565b5b600061447185828601614232565b925050602061448285828601614437565b9150509250929050565b6000602082840312156144a2576144a1614216565b5b60006144b084828501614437565b91505092915050565b600080604083850312156144d0576144cf614216565b5b60006144de85828601614232565b92505060206144ef85828601614232565b9150509250929050565b6000819050919050565b600061451e614519614514846140cb565b6144f9565b6140cb565b9050919050565b600061453082614503565b9050919050565b600061454282614525565b9050919050565b61455281614537565b82525050565b600060208201905061456d6000830184614549565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145a9602083614132565b91506145b482614573565b602082019050919050565b600060208201905081810360008301526145d88161459c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061462657607f821691505b602082108103614639576146386145df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146a8826141e2565b91506146b3836141e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146e8576146e761466e565b5b828201905092915050565b600060408201905061470860008301856140fd565b61471560208301846141ec565b9392505050565b60008151905061472b81614420565b92915050565b60006020828403121561474757614746614216565b5b60006147558482850161471c565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147ba602583614132565b91506147c58261475e565b604082019050919050565b600060208201905081810360008301526147e9816147ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061484461483f61483a8461481f565b6144f9565b6141e2565b9050919050565b61485481614829565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61488f816140eb565b82525050565b60006148a18383614886565b60208301905092915050565b6000602082019050919050565b60006148c58261485a565b6148cf8185614865565b93506148da83614876565b8060005b8381101561490b5781516148f28882614895565b97506148fd836148ad565b9250506001810190506148de565b5085935050505092915050565b600060a08201905061492d60008301886141ec565b61493a602083018761484b565b818103604083015261494c81866148ba565b905061495b60608301856140fd565b61496860808301846141ec565b9695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149ce602683614132565b91506149d982614972565b604082019050919050565b600060208201905081810360008301526149fd816149c1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a60602483614132565b9150614a6b82614a04565b604082019050919050565b60006020820190508181036000830152614a8f81614a53565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af2602283614132565b9150614afd82614a96565b604082019050919050565b60006020820190508181036000830152614b2181614ae5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614b5e601d83614132565b9150614b6982614b28565b602082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bf0602583614132565b9150614bfb82614b94565b604082019050919050565b60006020820190508181036000830152614c1f81614be3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c82602383614132565b9150614c8d82614c26565b604082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b7f506c65617365207761697420746f20616464206c697175696469747921000000600082015250565b6000614cee601d83614132565b9150614cf982614cb8565b602082019050919050565b60006020820190508181036000830152614d1d81614ce1565b9050919050565b6000614d2f826141e2565b9150614d3a836141e2565b925082821015614d4d57614d4c61466e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614db4602683614132565b9150614dbf82614d58565b604082019050919050565b60006020820190508181036000830152614de381614da7565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614e4157808604811115614e1d57614e1c61466e565b5b6001851615614e2c5780820291505b8081029050614e3a85614dea565b9450614e01565b94509492505050565b600082614e5a5760019050614f16565b81614e685760009050614f16565b8160018114614e7e5760028114614e8857614eb7565b6001915050614f16565b60ff841115614e9a57614e9961466e565b5b8360020a915084821115614eb157614eb061466e565b5b50614f16565b5060208310610133831016604e8410600b8410161715614eec5782820a905083811115614ee757614ee661466e565b5b614f16565b614ef98484846001614df7565b92509050818404811115614f1057614f0f61466e565b5b81810290505b9392505050565b6000614f28826141e2565b9150614f33836141e2565b9250614f607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e4a565b905092915050565b6000614f73826141e2565b9150614f7e836141e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fb757614fb661466e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ffc826141e2565b9150615007836141e2565b92508261501757615016614fc2565b5b828204905092915050565b7f4e6f20626f747320616c6c6f7765642100000000000000000000000000000000600082015250565b6000615058601083614132565b915061506382615022565b602082019050919050565b600060208201905081810360008301526150878161504b565b9050919050565b7f4d6178207478206672657175656e637920657863656564656421000000000000600082015250565b60006150c4601a83614132565b91506150cf8261508e565b602082019050919050565b600060208201905081810360008301526150f3816150b7565b9050919050565b600060808201905061510f60008301876141ec565b61511c60208301866141ec565b61512960408301856141ec565b61513660608301846141ec565b9594505050505056fea26469706673582212202cccd85ea86701d418c9a0ca917f3f5bcde89532308c28f677e7f40b802630ad64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106103f35760003560e01c806380f6831011610208578063b86b0a1d11610118578063d44545e7116100ab578063e43504da1161007a578063e43504da14610f01578063e5d41c6b14610f2c578063f2fde38b14610f57578063f6887cd314610f80578063f887ea4014610fbd576103fa565b8063d44545e714610e45578063dd62ed3e14610e70578063e01af92c14610ead578063e208a93914610ed6576103fa565b8063c1af8359116100e7578063c1af835914610d99578063c6b9ff6e14610dc4578063c816841b14610def578063d31347f214610e1a576103fa565b8063b86b0a1d14610d03578063bbf1900314610d2e578063bc46029314610d57578063bedb94b914610d6e576103fa565b80639d7e4d9e1161019b578063a8602fea1161016a578063a8602fea14610c0e578063a9059cbb14610c37578063af08988214610c74578063b6a479ad14610c9d578063b7bfff6514610cda576103fa565b80639d7e4d9e14610b40578063a0ef351314610b69578063a457c2d714610b94578063a5ae2d2f14610bd1576103fa565b80638da5cb5b116101d75780638da5cb5b14610a985780638f9e4cac14610ac357806395d89b4114610aec5780639686d32214610b17576103fa565b806380f68310146109de5780638159ab3714610a07578063851d78d814610a32578063857f054e14610a6f576103fa565b806333cf5dcf11610303578063558eabb411610296578063715018a611610265578063715018a61461090d578063716b095914610924578063761837361461094d57806377548efe1461097857806377a59f00146109a1576103fa565b8063558eabb414610853578063602b02361461087c5780636ddd1713146108a557806370a08231146108d0576103fa565b806342443e9f116102d257806342443e9f146107ad5780634605d9ab146107d657806347f2dc5b1461080157806348a464731461082a576103fa565b806333cf5dcf146106f357806335d2db701461071c578063395093511461074557806341f20b6814610782576103fa565b806318160ddd116103865780631bc557d9116103555780631bc557d9146105f857806323b872dd14610635578063307aebc914610672578063309892071461069d578063313ce567146106c8576103fa565b806318160ddd1461054c5780631868aadf146105775780631934c76a146105a257806319db457d146105cd576103fa565b8063095ea7b3116103c2578063095ea7b3146104945780630a13a455146104d157806313c72aed146104fa578063159de0c714610523576103fa565b806301339c21146103fc57806302d454571461041357806306fdde031461043e5780630947198714610469576103fa565b366103fa57005b005b34801561040857600080fd5b50610411610fe8565b005b34801561041f57600080fd5b50610428611081565b604051610435919061410c565b60405180910390f35b34801561044a57600080fd5b506104536110a7565b60405161046091906141c0565b60405180910390f35b34801561047557600080fd5b5061047e611139565b60405161048b91906141fb565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190614273565b61113f565b6040516104c891906142ce565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190614273565b611162565b005b34801561050657600080fd5b50610521600480360381019061051c91906142e9565b611170565b005b34801561052f57600080fd5b5061054a60048036038101906105459190614316565b6111f6565b005b34801561055857600080fd5b506105616112e3565b60405161056e91906141fb565b60405180910390f35b34801561058357600080fd5b5061058c6112ed565b60405161059991906141fb565b60405180910390f35b3480156105ae57600080fd5b506105b76112f3565b6040516105c491906141fb565b60405180910390f35b3480156105d957600080fd5b506105e26112f9565b6040516105ef91906141fb565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906142e9565b6112ff565b60405161062c91906141fb565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614369565b611323565b60405161066991906142ce565b60405180910390f35b34801561067e57600080fd5b50610687611352565b60405161069491906142ce565b60405180910390f35b3480156106a957600080fd5b506106b2611365565b6040516106bf919061410c565b60405180910390f35b3480156106d457600080fd5b506106dd61138b565b6040516106ea91906143d8565b60405180910390f35b3480156106ff57600080fd5b5061071a600480360381019061071591906143f3565b611394565b005b34801561072857600080fd5b50610743600480360381019061073e9190614273565b611454565b005b34801561075157600080fd5b5061076c60048036038101906107679190614273565b611462565b60405161077991906142ce565b60405180910390f35b34801561078e57600080fd5b5061079761150c565b6040516107a491906142ce565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906142e9565b61151f565b005b3480156107e257600080fd5b506107eb6115a5565b6040516107f891906141fb565b60405180910390f35b34801561080d57600080fd5b506108286004803603810190610823919061444c565b6115ab565b005b34801561083657600080fd5b50610851600480360381019061084c91906142e9565b611682565b005b34801561085f57600080fd5b5061087a600480360381019061087591906142e9565b611708565b005b34801561088857600080fd5b506108a3600480360381019061089e91906142e9565b61178e565b005b3480156108b157600080fd5b506108ba611814565b6040516108c791906142ce565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f291906143f3565b611827565b60405161090491906141fb565b60405180910390f35b34801561091957600080fd5b50610922611870565b005b34801561093057600080fd5b5061094b600480360381019061094691906142e9565b6118f8565b005b34801561095957600080fd5b5061096261197e565b60405161096f91906141fb565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a91906142e9565b611984565b005b3480156109ad57600080fd5b506109c860048036038101906109c391906143f3565b611a0a565b6040516109d591906141fb565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a00919061448c565b611a22565b005b348015610a1357600080fd5b50610a1c611abb565b604051610a2991906141fb565b60405180910390f35b348015610a3e57600080fd5b50610a596004803603810190610a5491906142e9565b611ac1565b604051610a6691906141fb565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614369565b611ae5565b005b348015610aa457600080fd5b50610aad611be5565b604051610aba919061410c565b60405180910390f35b348015610acf57600080fd5b50610aea6004803603810190610ae59190614316565b611c0e565b005b348015610af857600080fd5b50610b01611cfb565b604051610b0e91906141c0565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b39919061444c565b611d8d565b005b348015610b4c57600080fd5b50610b676004803603810190610b6291906143f3565b611e64565b005b348015610b7557600080fd5b50610b7e611f24565b604051610b8b919061410c565b60405180910390f35b348015610ba057600080fd5b50610bbb6004803603810190610bb69190614273565b611f4a565b604051610bc891906142ce565b60405180910390f35b348015610bdd57600080fd5b50610bf86004803603810190610bf391906143f3565b612034565b604051610c0591906142ce565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c3091906143f3565b612054565b005b348015610c4357600080fd5b50610c5e6004803603810190610c599190614273565b612114565b604051610c6b91906142ce565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190614316565b612137565b005b348015610ca957600080fd5b50610cc46004803603810190610cbf91906142e9565b612224565b604051610cd191906141fb565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc919061448c565b612248565b005b348015610d0f57600080fd5b50610d186122e1565b604051610d2591906141fb565b60405180910390f35b348015610d3a57600080fd5b50610d556004803603810190610d5091906142e9565b6122e7565b005b348015610d6357600080fd5b50610d6c61236d565b005b348015610d7a57600080fd5b50610d83612627565b604051610d9091906141fb565b60405180910390f35b348015610da557600080fd5b50610dae61262d565b604051610dbb919061410c565b60405180910390f35b348015610dd057600080fd5b50610dd9612653565b604051610de6919061410c565b60405180910390f35b348015610dfb57600080fd5b50610e04612679565b604051610e11919061410c565b60405180910390f35b348015610e2657600080fd5b50610e2f61269f565b604051610e3c919061410c565b60405180910390f35b348015610e5157600080fd5b50610e5a6126c5565b604051610e6791906141fb565b60405180910390f35b348015610e7c57600080fd5b50610e976004803603810190610e9291906144b9565b6126cf565b604051610ea491906141fb565b60405180910390f35b348015610eb957600080fd5b50610ed46004803603810190610ecf919061448c565b612756565b005b348015610ee257600080fd5b50610eeb6127ef565b604051610ef891906141fb565b60405180910390f35b348015610f0d57600080fd5b50610f166127f9565b604051610f2391906142ce565b60405180910390f35b348015610f3857600080fd5b50610f4161280c565b604051610f4e91906141fb565b60405180910390f35b348015610f6357600080fd5b50610f7e6004803603810190610f7991906143f3565b612812565b005b348015610f8c57600080fd5b50610fa76004803603810190610fa291906143f3565b612909565b604051610fb491906142ce565b60405180910390f35b348015610fc957600080fd5b50610fd2612929565b604051610fdf9190614558565b60405180910390f35b610ff061294f565b73ffffffffffffffffffffffffffffffffffffffff1661100e611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906145bf565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546110b69061460e565b80601f01602080910402602001604051908101604052809291908181526020018280546110e29061460e565b801561112f5780601f106111045761010080835404028352916020019161112f565b820191906000526020600020905b81548152906001019060200180831161111257829003601f168201915b5050505050905090565b60195481565b60008061114a61294f565b9050611157818585612957565b600191505092915050565b61116c8282612b20565b5050565b61117861294f565b73ffffffffffffffffffffffffffffffffffffffff16611196611be5565b73ffffffffffffffffffffffffffffffffffffffff16146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e3906145bf565b60405180910390fd5b8060248190555050565b6111fe61294f565b73ffffffffffffffffffffffffffffffffffffffff1661121c611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611272576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611269906145bf565b60405180910390fd5b8260166000815481106112885761128761463f565b5b90600052602060002001819055508160166001815481106112ac576112ab61463f565b5b90600052602060002001819055508060166002815481106112d0576112cf61463f565b5b9060005260206000200181905550505050565b6000600354905090565b60245481565b601c5481565b60135481565b6016818154811061130f57600080fd5b906000526020600020016000915090505481565b60008061132e61294f565b905061133b858285612dbc565b611346858585612e48565b60019150509392505050565b602060009054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b61139c61294f565b73ffffffffffffffffffffffffffffffffffffffff166113ba611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611410576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611407906145bf565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61145e8282612b20565b5050565b60008061146d61294f565b9050611501818585600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114fc919061469d565b612957565b600191505092915050565b602260009054906101000a900460ff1681565b61152761294f565b73ffffffffffffffffffffffffffffffffffffffff16611545611be5565b73ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906145bf565b60405180910390fd5b80601c8190555050565b601f5481565b6115b361294f565b73ffffffffffffffffffffffffffffffffffffffff166115d1611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e906145bf565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61168a61294f565b73ffffffffffffffffffffffffffffffffffffffff166116a8611be5565b73ffffffffffffffffffffffffffffffffffffffff16146116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f5906145bf565b60405180910390fd5b80600a8190555050565b61171061294f565b73ffffffffffffffffffffffffffffffffffffffff1661172e611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b906145bf565b60405180910390fd5b80601d8190555050565b61179661294f565b73ffffffffffffffffffffffffffffffffffffffff166117b4611be5565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611801906145bf565b60405180910390fd5b80601a8190555050565b601760009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61187861294f565b73ffffffffffffffffffffffffffffffffffffffff16611896611be5565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906145bf565b60405180910390fd5b6118f66000613731565b565b61190061294f565b73ffffffffffffffffffffffffffffffffffffffff1661191e611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b906145bf565b60405180910390fd5b80601b8190555050565b601a5481565b61198c61294f565b73ffffffffffffffffffffffffffffffffffffffff166119aa611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f7906145bf565b60405180910390fd5b80601f8190555050565b60216020528060005260406000206000915090505481565b611a2a61294f565b73ffffffffffffffffffffffffffffffffffffffff16611a48611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906145bf565b60405180910390fd5b80602260006101000a81548160ff02191690831515021790555050565b601b5481565b60158181548110611ad157600080fd5b906000526020600020016000915090505481565b611aed61294f565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906145bf565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611b9c9291906146f3565b6020604051808303816000875af1158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf9190614731565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c1661294f565b73ffffffffffffffffffffffffffffffffffffffff16611c34611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c81906145bf565b60405180910390fd5b826014600081548110611ca057611c9f61463f565b5b9060005260206000200181905550816014600181548110611cc457611cc361463f565b5b9060005260206000200181905550806014600281548110611ce857611ce761463f565b5b9060005260206000200181905550505050565b606060058054611d0a9061460e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d369061460e565b8015611d835780601f10611d5857610100808354040283529160200191611d83565b820191906000526020600020905b815481529060010190602001808311611d6657829003601f168201915b5050505050905090565b611d9561294f565b73ffffffffffffffffffffffffffffffffffffffff16611db3611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e00906145bf565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e6c61294f565b73ffffffffffffffffffffffffffffffffffffffff16611e8a611be5565b73ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906145bf565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611f5561294f565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561201b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612012906147d0565b60405180910390fd5b6120288286868403612957565b60019250505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b61205c61294f565b73ffffffffffffffffffffffffffffffffffffffff1661207a611be5565b73ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c7906145bf565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061211f61294f565b905061212c818585612e48565b600191505092915050565b61213f61294f565b73ffffffffffffffffffffffffffffffffffffffff1661215d611be5565b73ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906145bf565b60405180910390fd5b8260156000815481106121c9576121c861463f565b5b90600052602060002001819055508160156001815481106121ed576121ec61463f565b5b90600052602060002001819055508060156002815481106122115761221061463f565b5b9060005260206000200181905550505050565b6014818154811061223457600080fd5b906000526020600020016000915090505481565b61225061294f565b73ffffffffffffffffffffffffffffffffffffffff1661226e611be5565b73ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906145bf565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b601e5481565b6122ef61294f565b73ffffffffffffffffffffffffffffffffffffffff1661230d611be5565b73ffffffffffffffffffffffffffffffffffffffff1614612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a906145bf565b60405180910390fd5b80601e8190555050565b6000600267ffffffffffffffff81111561238a576123896147f0565b5b6040519080825280602002602001820160405280156123b85781602001602082028036833780820191505090505b509050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106123f2576123f161463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106124635761246261463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166019546040518363ffffffff1660e01b815260040161251e9291906146f3565b6020604051808303816000875af115801561253d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125619190614731565b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795601954600084600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016125ea959493929190614918565b600060405180830381600087803b15801561260457600080fd5b505af1158015612618573d6000803e3d6000fd5b50505050600060198190555050565b601d5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b54905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61275e61294f565b73ffffffffffffffffffffffffffffffffffffffff1661277c611be5565b73ffffffffffffffffffffffffffffffffffffffff16146127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c9906145bf565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b6000601c54905090565b601760019054906101000a900460ff1681565b600a5481565b61281a61294f565b73ffffffffffffffffffffffffffffffffffffffff16612838611be5565b73ffffffffffffffffffffffffffffffffffffffff161461288e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612885906145bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906149e4565b60405180910390fd5b61290681613731565b50565b60236020528060005260406000206000915054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bd90614a76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614b08565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1391906141fb565b60405180910390a3505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3157612b8381601d5460026137f5565b60196000828254612b94919061469d565b925050819055506000612bab82601e5460026137f5565b90506000612bbd83601f5460026137f5565b9050601a546019541115612bd457612bd361236d565b5b6000821115612c7f578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612c3a9291906146f3565b6020604051808303816000875af1158015612c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7d9190614731565b505b6000811115612d2a578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612ce59291906146f3565b6020604051808303816000875af1158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190614731565b505b5050612db8565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612d55611be5565b836040518363ffffffff1660e01b8152600401612d739291906146f3565b6020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190614731565b505b5050565b6000612dc884846126cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612e425781811015612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b90614b74565b60405180910390fd5b612e418484848403612957565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eae90614c06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d90614c98565b60405180910390fd5b612f3183838361382f565b602060009054906101000a900460ff1680612f7e5750612f4f611be5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806130315750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130305750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b5b613070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306790614d04565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561311c5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561359857602260009054906101000a900460ff161561323d57602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131da5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323c5760006131eb8484613834565b90506131f6816138b0565b43602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b5b601760009054906101000a900460ff1680156132665750600660009054906101000a900460ff16155b80156132c05750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156132ce576132cd61399c565b5b6000601760019054906101000a900460ff1680156133365750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561338c5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133a55750600660009054906101000a900460ff16155b156134dc576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156134ad5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b90506134d7816134cb57826134c35760006134c6565b60015b6134ce565b60025b60ff1685613f4c565b925050505b80826134e89190614d24565b915080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135399190614d24565b9250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461358f919061469d565b92505081905550505b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561361f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361690614dca565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136b4919061469d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161371891906141fb565b60405180910390a361372b8484846140b3565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600282613804919061469d565b600a6138109190614f1d565b838561381c9190614f68565b6138269190614ff1565b90509392505050565b505050565b600061383f836140b8565b1580613851575061384f826140b8565b155b613890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138879061506e565b60405180910390fd5b613899836140b8565b156138a6578190506138aa565b8290505b92915050565b600080602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806139565750600143613907919061469d565b602454602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613954919061469d565b105b905080613998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398f906150da565b60405180910390fd5b5050565b6001600660006101000a81548160ff02191690831515021790555060006009546008546007546139cc919061469d565b6139d6919061469d565b905080600a5411156139e85750613f2f565b6000600267ffffffffffffffff811115613a0557613a046147f0565b5b604051908082528060200260200182016040528015613a335781602001602082028036833780820191505090505b5090503081600081518110613a4b57613a4a61463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613abc57613abb61463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600367ffffffffffffffff811115613b1357613b126147f0565b5b604051908082528060200260200182016040528015613b415781602001602082028036833780820191505090505b5090503081600081518110613b5957613b5861463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613bca57613bc961463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110613c3b57613c3a61463f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ca230601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612957565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795600754600084600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613d2a959493929190614918565b600060405180830381600087803b158015613d4457600080fd5b505af1158015613d58573d6000803e3d6000fd5b50505050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795600854600085600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613de4959493929190614918565b600060405180830381600087803b158015613dfe57600080fd5b505af1158015613e12573d6000803e3d6000fd5b50505050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795600954600085600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613e9e959493929190614918565b600060405180830381600087803b158015613eb857600080fd5b505af1158015613ecc573d6000803e3d6000fd5b505050506000600781905550600060088190555060006009819055507f298c349c742327269dc8de6ad66687767310c948ea309df826f5bd103e19d20783600754600854600954604051613f2394939291906150fa565b60405180910390a15050505b6000600660006101000a81548160ff021916908315150217905550565b6000806002601354613f5e919061469d565b600a613f6a9190614f1d565b60148581548110613f7e57613f7d61463f565b5b906000526020600020015484613f949190614f68565b613f9e9190614ff1565b905060006002601354613fb1919061469d565b600a613fbd9190614f1d565b60158681548110613fd157613fd061463f565b5b906000526020600020015485613fe79190614f68565b613ff19190614ff1565b905060006002601354614004919061469d565b600a6140109190614f1d565b601687815481106140245761402361463f565b5b90600052602060002001548661403a9190614f68565b6140449190614ff1565b90508260076000828254614058919061469d565b925050819055508160086000828254614071919061469d565b92505081905550806009600082825461408a919061469d565b9250508190555080828461409e919061469d565b6140a8919061469d565b935050505092915050565b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140f6826140cb565b9050919050565b614106816140eb565b82525050565b600060208201905061412160008301846140fd565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614161578082015181840152602081019050614146565b83811115614170576000848401525b50505050565b6000601f19601f8301169050919050565b600061419282614127565b61419c8185614132565b93506141ac818560208601614143565b6141b581614176565b840191505092915050565b600060208201905081810360008301526141da8184614187565b905092915050565b6000819050919050565b6141f5816141e2565b82525050565b600060208201905061421060008301846141ec565b92915050565b600080fd5b614224816140eb565b811461422f57600080fd5b50565b6000813590506142418161421b565b92915050565b614250816141e2565b811461425b57600080fd5b50565b60008135905061426d81614247565b92915050565b6000806040838503121561428a57614289614216565b5b600061429885828601614232565b92505060206142a98582860161425e565b9150509250929050565b60008115159050919050565b6142c8816142b3565b82525050565b60006020820190506142e360008301846142bf565b92915050565b6000602082840312156142ff576142fe614216565b5b600061430d8482850161425e565b91505092915050565b60008060006060848603121561432f5761432e614216565b5b600061433d8682870161425e565b935050602061434e8682870161425e565b925050604061435f8682870161425e565b9150509250925092565b60008060006060848603121561438257614381614216565b5b600061439086828701614232565b93505060206143a186828701614232565b92505060406143b28682870161425e565b9150509250925092565b600060ff82169050919050565b6143d2816143bc565b82525050565b60006020820190506143ed60008301846143c9565b92915050565b60006020828403121561440957614408614216565b5b600061441784828501614232565b91505092915050565b614429816142b3565b811461443457600080fd5b50565b60008135905061444681614420565b92915050565b6000806040838503121561446357614462614216565b5b600061447185828601614232565b925050602061448285828601614437565b9150509250929050565b6000602082840312156144a2576144a1614216565b5b60006144b084828501614437565b91505092915050565b600080604083850312156144d0576144cf614216565b5b60006144de85828601614232565b92505060206144ef85828601614232565b9150509250929050565b6000819050919050565b600061451e614519614514846140cb565b6144f9565b6140cb565b9050919050565b600061453082614503565b9050919050565b600061454282614525565b9050919050565b61455281614537565b82525050565b600060208201905061456d6000830184614549565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145a9602083614132565b91506145b482614573565b602082019050919050565b600060208201905081810360008301526145d88161459c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061462657607f821691505b602082108103614639576146386145df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146a8826141e2565b91506146b3836141e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146e8576146e761466e565b5b828201905092915050565b600060408201905061470860008301856140fd565b61471560208301846141ec565b9392505050565b60008151905061472b81614420565b92915050565b60006020828403121561474757614746614216565b5b60006147558482850161471c565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147ba602583614132565b91506147c58261475e565b604082019050919050565b600060208201905081810360008301526147e9816147ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061484461483f61483a8461481f565b6144f9565b6141e2565b9050919050565b61485481614829565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61488f816140eb565b82525050565b60006148a18383614886565b60208301905092915050565b6000602082019050919050565b60006148c58261485a565b6148cf8185614865565b93506148da83614876565b8060005b8381101561490b5781516148f28882614895565b97506148fd836148ad565b9250506001810190506148de565b5085935050505092915050565b600060a08201905061492d60008301886141ec565b61493a602083018761484b565b818103604083015261494c81866148ba565b905061495b60608301856140fd565b61496860808301846141ec565b9695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149ce602683614132565b91506149d982614972565b604082019050919050565b600060208201905081810360008301526149fd816149c1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a60602483614132565b9150614a6b82614a04565b604082019050919050565b60006020820190508181036000830152614a8f81614a53565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af2602283614132565b9150614afd82614a96565b604082019050919050565b60006020820190508181036000830152614b2181614ae5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614b5e601d83614132565b9150614b6982614b28565b602082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bf0602583614132565b9150614bfb82614b94565b604082019050919050565b60006020820190508181036000830152614c1f81614be3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c82602383614132565b9150614c8d82614c26565b604082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b7f506c65617365207761697420746f20616464206c697175696469747921000000600082015250565b6000614cee601d83614132565b9150614cf982614cb8565b602082019050919050565b60006020820190508181036000830152614d1d81614ce1565b9050919050565b6000614d2f826141e2565b9150614d3a836141e2565b925082821015614d4d57614d4c61466e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614db4602683614132565b9150614dbf82614d58565b604082019050919050565b60006020820190508181036000830152614de381614da7565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614e4157808604811115614e1d57614e1c61466e565b5b6001851615614e2c5780820291505b8081029050614e3a85614dea565b9450614e01565b94509492505050565b600082614e5a5760019050614f16565b81614e685760009050614f16565b8160018114614e7e5760028114614e8857614eb7565b6001915050614f16565b60ff841115614e9a57614e9961466e565b5b8360020a915084821115614eb157614eb061466e565b5b50614f16565b5060208310610133831016604e8410600b8410161715614eec5782820a905083811115614ee757614ee661466e565b5b614f16565b614ef98484846001614df7565b92509050818404811115614f1057614f0f61466e565b5b81810290505b9392505050565b6000614f28826141e2565b9150614f33836141e2565b9250614f607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e4a565b905092915050565b6000614f73826141e2565b9150614f7e836141e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fb757614fb661466e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ffc826141e2565b9150615007836141e2565b92508261501757615016614fc2565b5b828204905092915050565b7f4e6f20626f747320616c6c6f7765642100000000000000000000000000000000600082015250565b6000615058601083614132565b915061506382615022565b602082019050919050565b600060208201905081810360008301526150878161504b565b9050919050565b7f4d6178207478206672657175656e637920657863656564656421000000000000600082015250565b60006150c4601a83614132565b91506150cf8261508e565b602082019050919050565b600060208201905081810360008301526150f3816150b7565b9050919050565b600060808201905061510f60008301876141ec565b61511c60208301866141ec565b61512960408301856141ec565b61513660608301846141ec565b9594505050505056fea26469706673582212202cccd85ea86701d418c9a0ca917f3f5bcde89532308c28f677e7f40b802630ad64736f6c634300080f0033

Deployed Bytecode Sourcemap

6873:24637:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29654:76;;;;;;;;;;;;;:::i;:::-;;7557:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11167:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8261:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13518:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31143:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27968:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26579:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12287:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8796:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8386:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7733:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7900:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14299:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8580:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7441;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12129:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26063:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31292:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15003:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8700:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29136:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8530:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26980:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25708:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29262:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28878:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7935:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12458:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4435:103;;;;;;;;;;;;;:::i;:::-;;29012:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8297:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29526:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8637:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27861:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8341:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7865:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28261:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3784:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26177:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11386:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28079:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25944:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7697:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15746:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8012:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25830:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12791:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26374:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7832:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26881:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8480:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29392:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29738:502;;;;;;;;;;;;;:::i;:::-;;8432:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7478:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7518:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7664:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7590;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28628:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13047:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26776:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28752:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7972:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7394:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4693:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8741:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7625:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29654:76;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29718:4:::1;29705:10;;:17;;;;;;;;;;;;;;;;;;29654:76::o:0;7557:26::-;;;;;;;;;;;;;:::o;11167:100::-;11221:13;11254:5;11247:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11167:100;:::o;8261:29::-;;;;:::o;13518:201::-;13601:4;13618:13;13634:12;:10;:12::i;:::-;13618:28;;13657:32;13666:5;13673:7;13682:6;13657:8;:32::i;:::-;13707:4;13700:11;;;13518:201;;;;:::o;31143:141::-;31239:37;31255:12;31269:6;31239:15;:37::i;:::-;31143:141;;:::o;27968:103::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28058:5:::1;28036:19;:27;;;;27968:103:::0;:::o;26579:189::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26692:3:::1;26674:12;26687:1;26674:15;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;26724:4;26706:12;26719:1;26706:15;;;;;;;;:::i;:::-;;;;;;;;;:22;;;;26757:3;26739:12;26752:1;26739:15;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;26579:189:::0;;;:::o;12287:108::-;12348:7;12375:12;;12368:19;;12287:108;:::o;8796:31::-;;;;:::o;8386:39::-;;;;:::o;7733:27::-;;;;:::o;7900:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14299:295::-;14430:4;14447:15;14465:12;:10;:12::i;:::-;14447:30;;14488:38;14504:4;14510:7;14519:6;14488:15;:38::i;:::-;14537:27;14547:4;14553:2;14557:6;14537:9;:27::i;:::-;14582:4;14575:11;;;14299:295;;;;;:::o;8580:30::-;;;;;;;;;;;;;:::o;7441:::-;;;;;;;;;;;;;:::o;12129:93::-;12187:5;12212:2;12205:9;;12129:93;:::o;26063:106::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26155:6:::1;26137:15;;:24;;;;;;;;;;;;;;;;;;26063:106:::0;:::o;31292:142::-;31389:37;31405:12;31419:6;31389:15;:37::i;:::-;31292:142;;:::o;15003:240::-;15091:4;15108:13;15124:12;:10;:12::i;:::-;15108:28;;15147:66;15156:5;15163:7;15202:10;15172:11;:18;15184:5;15172:18;;;;;;;;;;;;;;;:27;15191:7;15172:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;15147:8;:66::i;:::-;15231:4;15224:11;;;15003:240;;;;:::o;8700:34::-;;;;;;;;;;;;;:::o;29136:118::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29240:6:::1;29216:21;:30;;;;29136:118:::0;:::o;8530:41::-;;;;:::o;26980:113::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27080:5:::1;27059:9;:18;27069:7;27059:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;26980:113:::0;;:::o;25708:114::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25808:6:::1;25786:19;:28;;;;25708:114:::0;:::o;29262:120::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29368:6:::1;29343:22;:31;;;;29262:120:::0;:::o;28878:126::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28990:6:::1;28962:25;:34;;;;28878:126:::0;:::o;7935:30::-;;;;;;;;;;;;;:::o;12458:127::-;12532:7;12559:9;:18;12569:7;12559:18;;;;;;;;;;;;;;;;12552:25;;12458:127;;;:::o;4435:103::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4500:30:::1;4527:1;4500:18;:30::i;:::-;4435:103::o:0;29012:116::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29114:6:::1;29091:20;:29;;;;29012:116:::0;:::o;8297:37::-;;;;:::o;29526:120::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29632:6:::1;29607:22;:31;;;;29526:120:::0;:::o;8637:56::-;;;;;;;;;;;;;;;;;:::o;27861:99::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27947:5:::1;27930:14;;:22;;;;;;;;;;;;;;;;;;27861:99:::0;:::o;8341:38::-;;;;:::o;7865:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28261:160::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28377:5:::1;28370:22;;;28393:11;28406:6;28370:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28261:160:::0;;;:::o;3784:87::-;3830:7;3857:6;;;;;;;;;;;3850:13;;3784:87;:::o;26177:189::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26290:3:::1;26272:12;26285:1;26272:15;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;26322:4;26304:12;26317:1;26304:15;;;;;;;;:::i;:::-;;;;;;;;;:22;;;;26355:3;26337:12;26350:1;26337:15;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;26177:189:::0;;;:::o;11386:104::-;11442:13;11475:7;11468:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11386:104;:::o;28079:127::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28193:5:::1;28165:16;:25;28182:7;28165:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;28079:127:::0;;:::o;25944:111::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26041:6:::1;26020:18;;:27;;;;;;;;;;;;;;;;;;25944:111:::0;:::o;7697:27::-;;;;;;;;;;;;;:::o;15746:438::-;15839:4;15856:13;15872:12;:10;:12::i;:::-;15856:28;;15895:24;15922:11;:18;15934:5;15922:18;;;;;;;;;;;;;;;:27;15941:7;15922:27;;;;;;;;;;;;;;;;15895:54;;15988:15;15968:16;:35;;15960:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16081:60;16090:5;16097:7;16125:15;16106:16;:34;16081:8;:60::i;:::-;16172:4;16165:11;;;;15746:438;;;;:::o;8012:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;25830:106::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25922:6:::1;25904:15;;:24;;;;;;;;;;;;;;;;;;25830:106:::0;:::o;12791:193::-;12870:4;12887:13;12903:12;:10;:12::i;:::-;12887:28;;12926;12936:5;12943:2;12947:6;12926:9;:28::i;:::-;12972:4;12965:11;;;12791:193;;;;:::o;26374:197::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26491:3:::1;26471:14;26486:1;26471:17;;;;;;;;:::i;:::-;;;;;;;;;:23;;;;26525:4;26505:14;26520:1;26505:17;;;;;;;;:::i;:::-;;;;;;;;;:24;;;;26560:3;26540:14;26555:1;26540:17;;;;;;;;:::i;:::-;;;;;;;;;:23;;;;26374:197:::0;;;:::o;7832:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26881:91::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26959:5:::1;26945:11;;:19;;;;;;;;;;;;;;;;;;26881:91:::0;:::o;8480:43::-;;;;:::o;29392:124::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29502:6:::1;29475:24;:33;;;;29392:124:::0;:::o;29738:502::-;29795:25;29837:1;29823:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29795:44;;29864:11;;;;;;;;;;;29850:8;29859:1;29850:11;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;29900:11;;;;;;;;;;;29886:8;29895:1;29886:11;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;29931:11;;;;;;;;;;;29924:27;;;29960:6;;;;;;;;;;;29969:17;;29924:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29998:6;;;;;;;;;;;:60;;;30073:17;;30105:1;30121:8;30144:15;;;;;;;;;;;30174;29998:202;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30231:1;30211:17;:21;;;;29784:456;29738:502::o;8432:41::-;;;;:::o;7478:33::-;;;;;;;;;;;;;:::o;7518:30::-;;;;;;;;;;;;;:::o;7664:26::-;;;;;;;;;;;;;:::o;7590:::-;;;;;;;;;;;;;:::o;28628:116::-;28687:4;28716:20;;28709:27;;28628:116;:::o;13047:151::-;13136:7;13163:11;:18;13175:5;13163:18;;;;;;;;;;;;;;;:27;13182:7;13163:27;;;;;;;;;;;;;;;;13156:34;;13047:151;;;;:::o;26776:97::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26858:7:::1;26844:11;;:21;;;;;;;;;;;;;;;;;;26776:97:::0;:::o;28752:118::-;28812:4;28841:21;;28834:28;;28752:118;:::o;7972:31::-;;;;;;;;;;;;;:::o;7394:34::-;;;;:::o;4693:201::-;4015:12;:10;:12::i;:::-;4004:23;;:7;:5;:7::i;:::-;:23;;;3996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4802:1:::1;4782:22;;:8;:22;;::::0;4774:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4858:28;4877:8;4858:18;:28::i;:::-;4693:201:::0;:::o;8741:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;7625:32::-;;;;;;;;;;;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;20634:380::-;20787:1;20770:19;;:5;:19;;;20762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20868:1;20849:21;;:7;:21;;;20841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20952:6;20922:11;:18;20934:5;20922:18;;;;;;;;;;;;;;;:27;20941:7;20922:27;;;;;;;;;;;;;;;:36;;;;20990:7;20974:32;;20983:5;20974:32;;;20999:6;20974:32;;;;;;:::i;:::-;;;;;;;;20634:380;;;:::o;30248:887::-;30352:11;;;;;;;;;;;30336:27;;:12;:27;;;30333:795;;30410:51;30427:6;30435:22;;30459:1;30410:16;:51::i;:::-;30389:17;;:72;;;;;;;:::i;:::-;;;;;;;;30476:23;30502:53;30519:6;30527:24;;30553:1;30502:16;:53::i;:::-;30476:79;;30570:20;30593:51;30610:6;30618:22;;30642:1;30593:16;:51::i;:::-;30570:74;;30684:25;;30664:17;;:45;30661:122;;;30743:24;:22;:24::i;:::-;30661:122;30821:1;30800:18;:22;30797:113;;;30848:12;30841:29;;;30871:18;;;;;;;;;;;30891;30841:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30797:113;30946:1;30928:15;:19;30925:104;;;30973:12;30966:29;;;30996:15;;;;;;;;;;;31013;30966:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30925:104;30374:667;;30333:795;;;31077:12;31070:29;;;31100:7;:5;:7::i;:::-;31109:6;31070:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30333:795;30248:887;;:::o;21301:453::-;21436:24;21463:25;21473:5;21480:7;21463:9;:25::i;:::-;21436:52;;21523:17;21503:16;:37;21499:248;;21585:6;21565:16;:26;;21557:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21669:51;21678:5;21685:7;21713:6;21694:16;:25;21669:8;:51::i;:::-;21499:248;21425:329;21301:453;;;:::o;16663:1923::-;16810:1;16794:18;;:4;:18;;;16786:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16887:1;16873:16;;:2;:16;;;16865:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16942:38;16963:4;16969:2;16973:6;16942:20;:38::i;:::-;17031:10;;;;;;;;;;;:29;;;;17053:7;:5;:7::i;:::-;17045:15;;:4;:15;;;17031:29;:70;;;;17069:11;;;;;;;;;;;17065:15;;:2;:15;;;;:35;;;;;17088:12;;;;;;;;;;;17084:16;;:2;:16;;;;17065:35;17031:70;17023:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;17157:12;;;;;;;;;;;17151:18;;:4;:18;;;;:38;;;;;17177:12;;;;;;;;;;;17173:16;;:2;:16;;;;17151:38;17148:1051;;;17244:14;;;;;;;;;;;17241:335;;;17296:16;:22;17313:4;17296:22;;;;;;;;;;;;;;;;;;;;;;;;;17295:23;:48;;;;;17323:16;:20;17340:2;17323:20;;;;;;;;;;;;;;;;;;;;;;;;;17322:21;17295:48;17292:269;;;17385:13;17401:24;17416:4;17422:2;17401:14;:24::i;:::-;17385:40;;17448:27;17469:5;17448:20;:27::i;:::-;17529:12;17498:21;:28;17520:5;17498:28;;;;;;;;;;;;;;;:43;;;;17362:199;17292:269;17241:335;17626:11;;;;;;;;;;;:22;;;;;17642:6;;;;;;;;;;;17641:7;17626:22;:45;;;;;17660:11;;;;;;;;;;;17652:19;;:4;:19;;;;17626:45;17622:92;;;17692:6;:4;:6::i;:::-;17622:92;17730:21;17770:11;;;;;;;;;;;:31;;;;;17786:9;:15;17796:4;17786:15;;;;;;;;;;;;;;;;;;;;;;;;;17785:16;17770:31;:49;;;;;17806:9;:13;17816:2;17806:13;;;;;;;;;;;;;;;;;;;;;;;;;17805:14;17770:49;:60;;;;;17824:6;;;;;;;;;;;17823:7;17770:60;17766:279;;;17851:9;17869:11;;;;;;;;;;;17863:17;;:2;:17;;;17851:29;;17899:8;17918:11;;;;;;;;;;;17910:19;;:4;:19;;;;:40;;;;;17939:11;;;;;;;;;;;17933:17;;:2;:17;;;;17910:40;17899:51;;17985:44;17998:3;:22;;18008:4;:12;;18019:1;18008:12;;;18015:1;18008:12;17998:22;;;18004:1;17998:22;17985:44;;18022:6;17985:12;:44::i;:::-;17969:60;;17832:213;;17766:279;18071:13;18061:23;;;;;:::i;:::-;;;18118:13;18099:9;:15;18109:4;18099:15;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;18174:13;18146:9;:24;18164:4;18146:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;17200:999;17148:1051;18245:19;18267:9;:15;18277:4;18267:15;;;;;;;;;;;;;;;;18245:37;;18316:6;18301:11;:21;;18293:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18433:6;18419:11;:20;18401:9;:15;18411:4;18401:15;;;;;;;;;;;;;;;:38;;;;18478:6;18461:9;:13;18471:2;18461:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;18517:2;18502:26;;18511:4;18502:26;;;18521:6;18502:26;;;;;;:::i;:::-;;;;;;;;18541:37;18561:4;18567:2;18571:6;18541:19;:37::i;:::-;16775:1811;16663:1923;;;:::o;5054:191::-;5128:16;5147:6;;;;;;;;;;;5128:25;;5173:8;5164:6;;:17;;;;;;;;;;;;;;;;;;5228:8;5197:40;;5218:8;5197:40;;;;;;;;;;;;5117:128;5054:191;:::o;28429:::-;28536:7;28609:1;28596:10;:14;;;;:::i;:::-;28591:2;:20;;;;:::i;:::-;28573:13;28564:6;:22;;;;:::i;:::-;28563:49;;;;:::i;:::-;28556:56;;28429:191;;;;;:::o;22354:125::-;;;;:::o;27323:243::-;27401:7;27430:15;27441:3;27430:10;:15::i;:::-;27429:16;:38;;;;27450:17;27461:5;27450:10;:17::i;:::-;27449:18;27429:38;27421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27503:15;27514:3;27503:10;:15::i;:::-;27499:59;;;27527:5;27520:12;;;;27499:59;27555:3;27548:10;;27323:243;;;;;:::o;27574:279::-;27646:14;27694:1;27663:21;:27;27685:4;27663:27;;;;;;;;;;;;;;;;:32;:123;;;;27783:1;27768:12;:16;;;;:::i;:::-;27744:19;;27714:21;:27;27736:4;27714:27;;;;;;;;;;;;;;;;:49;;;;:::i;:::-;27713:72;27663:123;27646:140;;27805:9;27797:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27635:218;27574:279;:::o;23551:1557::-;23281:4;23272:6;;:13;;;;;;;;;;;;;;;;;;23635:19:::1;23707:21;;23681:23;;23657:21;;:47;;;;:::i;:::-;:71;;;;:::i;:::-;23635:93;;23766:14;23744:19;;:36;23741:48;;;23782:7;;;23741:48;23837:25;23879:1;23865:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23837:44;;23914:4;23892:8;23901:1;23892:11;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;::::0;::::1;23944:11;;;;;;;;;;;23930:8;23939:1;23930:11;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;::::0;::::1;23968:29;24014:1;24000:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23968:48;;24053:4;24027:12;24040:1;24027:15;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;24087:11;;;;;;;;;;;24069:12;24082:1;24069:15;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;24127:11;;;;;;;;;;;24109:12;24122:1;24109:15;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;24155:56;24172:4;24187:6;;;;;;;;;;;24196:14;24155:8;:56::i;:::-;24222:6;;;;;;;;;;;:60;;;24297:21;;24333:1;24349:12;24376:15;;;;;;;;;;;24406;24222:210;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24443:6;;;;;;;;;;;:60;;;24518:23;;24556:1;24572:8;24595:18;;;;;;;;;;;24628:15;24443:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24665:6;;;;;;;;;;;:60;;;24740:21;;24776:1;24792:8;24815:15;;;;;;;;;;;24845;24665:206;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24916:1;24892:21;:25;;;;24954:1;24928:23;:27;;;;24990:1;24966:21;:25;;;;25009:91;25014:14;25030:21;;25053:23;;25078:21;;25009:91;;;;;;;;;:::i;:::-;;;;;;;;23587:1521;;;23296:1;23317:5:::0;23308:6;;:14;;;;;;;;;;;;;;;;;;23551:1557::o;25116:584::-;25189:7;25209:19;25287:1;25273:11;;:15;;;;:::i;:::-;25268:2;:21;;;;:::i;:::-;25241:12;25254:8;25241:22;;;;;;;;:::i;:::-;;;;;;;;;;25232:6;:31;;;;:::i;:::-;25231:59;;;;:::i;:::-;25209:81;;25301:21;25383:1;25369:11;;:15;;;;:::i;:::-;25364:2;:21;;;;:::i;:::-;25335:14;25350:8;25335:24;;;;;;;;:::i;:::-;;;;;;;;;;25326:6;:33;;;;:::i;:::-;25325:61;;;;:::i;:::-;25301:85;;25397:19;25475:1;25461:11;;:15;;;;:::i;:::-;25456:2;:21;;;;:::i;:::-;25429:12;25442:8;25429:22;;;;;;;;:::i;:::-;;;;;;;;;;25420:6;:31;;;;:::i;:::-;25419:59;;;;:::i;:::-;25397:81;;25524:11;25499:21;;:36;;;;;;;:::i;:::-;;;;;;;;25573:13;25546:23;;:40;;;;;;;:::i;:::-;;;;;;;;25622:11;25597:21;;:36;;;;;;;:::i;:::-;;;;;;;;25681:11;25665:13;25651:11;:27;;;;:::i;:::-;:41;;;;:::i;:::-;25644:48;;;;;25116:584;;;;:::o;23083:124::-;;;;:::o;27119:196::-;27179:4;27196:12;27263:7;27251:20;27243:28;;27306:1;27299:4;:8;27292:15;;;27119:196;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;1983:77::-;2020:7;2049:5;2038:16;;1983:77;;;:::o;2066:118::-;2153:24;2171:5;2153:24;:::i;:::-;2148:3;2141:37;2066:118;;:::o;2190:222::-;2283:4;2321:2;2310:9;2306:18;2298:26;;2334:71;2402:1;2391:9;2387:17;2378:6;2334:71;:::i;:::-;2190:222;;;;:::o;2499:117::-;2608:1;2605;2598:12;2745:122;2818:24;2836:5;2818:24;:::i;:::-;2811:5;2808:35;2798:63;;2857:1;2854;2847:12;2798:63;2745:122;:::o;2873:139::-;2919:5;2957:6;2944:20;2935:29;;2973:33;3000:5;2973:33;:::i;:::-;2873:139;;;;:::o;3018:122::-;3091:24;3109:5;3091:24;:::i;:::-;3084:5;3081:35;3071:63;;3130:1;3127;3120:12;3071:63;3018:122;:::o;3146:139::-;3192:5;3230:6;3217:20;3208:29;;3246:33;3273:5;3246:33;:::i;:::-;3146:139;;;;:::o;3291:474::-;3359:6;3367;3416:2;3404:9;3395:7;3391:23;3387:32;3384:119;;;3422:79;;:::i;:::-;3384:119;3542:1;3567:53;3612:7;3603:6;3592:9;3588:22;3567:53;:::i;:::-;3557:63;;3513:117;3669:2;3695:53;3740:7;3731:6;3720:9;3716:22;3695:53;:::i;:::-;3685:63;;3640:118;3291:474;;;;;:::o;3771:90::-;3805:7;3848:5;3841:13;3834:21;3823:32;;3771:90;;;:::o;3867:109::-;3948:21;3963:5;3948:21;:::i;:::-;3943:3;3936:34;3867:109;;:::o;3982:210::-;4069:4;4107:2;4096:9;4092:18;4084:26;;4120:65;4182:1;4171:9;4167:17;4158:6;4120:65;:::i;:::-;3982:210;;;;:::o;4198:329::-;4257:6;4306:2;4294:9;4285:7;4281:23;4277:32;4274:119;;;4312:79;;:::i;:::-;4274:119;4432:1;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4403:117;4198:329;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:::-;5235:6;5243;5251;5300:2;5288:9;5279:7;5275:23;5271:32;5268:119;;;5306:79;;:::i;:::-;5268:119;5426:1;5451:53;5496:7;5487:6;5476:9;5472:22;5451:53;:::i;:::-;5441:63;;5397:117;5553:2;5579:53;5624:7;5615:6;5604:9;5600:22;5579:53;:::i;:::-;5569:63;;5524:118;5681:2;5707:53;5752:7;5743:6;5732:9;5728:22;5707:53;:::i;:::-;5697:63;;5652:118;5158:619;;;;;:::o;5783:86::-;5818:7;5858:4;5851:5;5847:16;5836:27;;5783:86;;;:::o;5875:112::-;5958:22;5974:5;5958:22;:::i;:::-;5953:3;5946:35;5875:112;;:::o;5993:214::-;6082:4;6120:2;6109:9;6105:18;6097:26;;6133:67;6197:1;6186:9;6182:17;6173:6;6133:67;:::i;:::-;5993:214;;;;:::o;6213:329::-;6272:6;6321:2;6309:9;6300:7;6296:23;6292:32;6289:119;;;6327:79;;:::i;:::-;6289:119;6447:1;6472:53;6517:7;6508:6;6497:9;6493:22;6472:53;:::i;:::-;6462:63;;6418:117;6213:329;;;;:::o;6548:116::-;6618:21;6633:5;6618:21;:::i;:::-;6611:5;6608:32;6598:60;;6654:1;6651;6644:12;6598:60;6548:116;:::o;6670:133::-;6713:5;6751:6;6738:20;6729:29;;6767:30;6791:5;6767:30;:::i;:::-;6670:133;;;;:::o;6809:468::-;6874:6;6882;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;7184:2;7210:50;7252:7;7243:6;7232:9;7228:22;7210:50;:::i;:::-;7200:60;;7155:115;6809:468;;;;;:::o;7283:323::-;7339:6;7388:2;7376:9;7367:7;7363:23;7359:32;7356:119;;;7394:79;;:::i;:::-;7356:119;7514:1;7539:50;7581:7;7572:6;7561:9;7557:22;7539:50;:::i;:::-;7529:60;;7485:114;7283:323;;;;:::o;7612:474::-;7680:6;7688;7737:2;7725:9;7716:7;7712:23;7708:32;7705:119;;;7743:79;;:::i;:::-;7705:119;7863:1;7888:53;7933:7;7924:6;7913:9;7909:22;7888:53;:::i;:::-;7878:63;;7834:117;7990:2;8016:53;8061:7;8052:6;8041:9;8037:22;8016:53;:::i;:::-;8006:63;;7961:118;7612:474;;;;;:::o;8092:60::-;8120:3;8141:5;8134:12;;8092:60;;;:::o;8158:142::-;8208:9;8241:53;8259:34;8268:24;8286:5;8268:24;:::i;:::-;8259:34;:::i;:::-;8241:53;:::i;:::-;8228:66;;8158:142;;;:::o;8306:126::-;8356:9;8389:37;8420:5;8389:37;:::i;:::-;8376:50;;8306:126;;;:::o;8438:152::-;8514:9;8547:37;8578:5;8547:37;:::i;:::-;8534:50;;8438:152;;;:::o;8596:183::-;8709:63;8766:5;8709:63;:::i;:::-;8704:3;8697:76;8596:183;;:::o;8785:274::-;8904:4;8942:2;8931:9;8927:18;8919:26;;8955:97;9049:1;9038:9;9034:17;9025:6;8955:97;:::i;:::-;8785:274;;;;:::o;9065:182::-;9205:34;9201:1;9193:6;9189:14;9182:58;9065:182;:::o;9253:366::-;9395:3;9416:67;9480:2;9475:3;9416:67;:::i;:::-;9409:74;;9492:93;9581:3;9492:93;:::i;:::-;9610:2;9605:3;9601:12;9594:19;;9253:366;;;:::o;9625:419::-;9791:4;9829:2;9818:9;9814:18;9806:26;;9878:9;9872:4;9868:20;9864:1;9853:9;9849:17;9842:47;9906:131;10032:4;9906:131;:::i;:::-;9898:139;;9625:419;;;:::o;10050:180::-;10098:77;10095:1;10088:88;10195:4;10192:1;10185:15;10219:4;10216:1;10209:15;10236:320;10280:6;10317:1;10311:4;10307:12;10297:22;;10364:1;10358:4;10354:12;10385:18;10375:81;;10441:4;10433:6;10429:17;10419:27;;10375:81;10503:2;10495:6;10492:14;10472:18;10469:38;10466:84;;10522:18;;:::i;:::-;10466:84;10287:269;10236:320;;;:::o;10562:180::-;10610:77;10607:1;10600:88;10707:4;10704:1;10697:15;10731:4;10728:1;10721:15;10748:180;10796:77;10793:1;10786:88;10893:4;10890:1;10883:15;10917:4;10914:1;10907:15;10934:305;10974:3;10993:20;11011:1;10993:20;:::i;:::-;10988:25;;11027:20;11045:1;11027:20;:::i;:::-;11022:25;;11181:1;11113:66;11109:74;11106:1;11103:81;11100:107;;;11187:18;;:::i;:::-;11100:107;11231:1;11228;11224:9;11217:16;;10934:305;;;;:::o;11245:332::-;11366:4;11404:2;11393:9;11389:18;11381:26;;11417:71;11485:1;11474:9;11470:17;11461:6;11417:71;:::i;:::-;11498:72;11566:2;11555:9;11551:18;11542:6;11498:72;:::i;:::-;11245:332;;;;;:::o;11583:137::-;11637:5;11668:6;11662:13;11653:22;;11684:30;11708:5;11684:30;:::i;:::-;11583:137;;;;:::o;11726:345::-;11793:6;11842:2;11830:9;11821:7;11817:23;11813:32;11810:119;;;11848:79;;:::i;:::-;11810:119;11968:1;11993:61;12046:7;12037:6;12026:9;12022:22;11993:61;:::i;:::-;11983:71;;11939:125;11726:345;;;;:::o;12077:224::-;12217:34;12213:1;12205:6;12201:14;12194:58;12286:7;12281:2;12273:6;12269:15;12262:32;12077:224;:::o;12307:366::-;12449:3;12470:67;12534:2;12529:3;12470:67;:::i;:::-;12463:74;;12546:93;12635:3;12546:93;:::i;:::-;12664:2;12659:3;12655:12;12648:19;;12307:366;;;:::o;12679:419::-;12845:4;12883:2;12872:9;12868:18;12860:26;;12932:9;12926:4;12922:20;12918:1;12907:9;12903:17;12896:47;12960:131;13086:4;12960:131;:::i;:::-;12952:139;;12679:419;;;:::o;13104:180::-;13152:77;13149:1;13142:88;13249:4;13246:1;13239:15;13273:4;13270:1;13263:15;13290:85;13335:7;13364:5;13353:16;;13290:85;;;:::o;13381:158::-;13439:9;13472:61;13490:42;13499:32;13525:5;13499:32;:::i;:::-;13490:42;:::i;:::-;13472:61;:::i;:::-;13459:74;;13381:158;;;:::o;13545:147::-;13640:45;13679:5;13640:45;:::i;:::-;13635:3;13628:58;13545:147;;:::o;13698:114::-;13765:6;13799:5;13793:12;13783:22;;13698:114;;;:::o;13818:184::-;13917:11;13951:6;13946:3;13939:19;13991:4;13986:3;13982:14;13967:29;;13818:184;;;;:::o;14008:132::-;14075:4;14098:3;14090:11;;14128:4;14123:3;14119:14;14111:22;;14008:132;;;:::o;14146:108::-;14223:24;14241:5;14223:24;:::i;:::-;14218:3;14211:37;14146:108;;:::o;14260:179::-;14329:10;14350:46;14392:3;14384:6;14350:46;:::i;:::-;14428:4;14423:3;14419:14;14405:28;;14260:179;;;;:::o;14445:113::-;14515:4;14547;14542:3;14538:14;14530:22;;14445:113;;;:::o;14594:732::-;14713:3;14742:54;14790:5;14742:54;:::i;:::-;14812:86;14891:6;14886:3;14812:86;:::i;:::-;14805:93;;14922:56;14972:5;14922:56;:::i;:::-;15001:7;15032:1;15017:284;15042:6;15039:1;15036:13;15017:284;;;15118:6;15112:13;15145:63;15204:3;15189:13;15145:63;:::i;:::-;15138:70;;15231:60;15284:6;15231:60;:::i;:::-;15221:70;;15077:224;15064:1;15061;15057:9;15052:14;;15017:284;;;15021:14;15317:3;15310:10;;14718:608;;;14594:732;;;;:::o;15332:831::-;15595:4;15633:3;15622:9;15618:19;15610:27;;15647:71;15715:1;15704:9;15700:17;15691:6;15647:71;:::i;:::-;15728:80;15804:2;15793:9;15789:18;15780:6;15728:80;:::i;:::-;15855:9;15849:4;15845:20;15840:2;15829:9;15825:18;15818:48;15883:108;15986:4;15977:6;15883:108;:::i;:::-;15875:116;;16001:72;16069:2;16058:9;16054:18;16045:6;16001:72;:::i;:::-;16083:73;16151:3;16140:9;16136:19;16127:6;16083:73;:::i;:::-;15332:831;;;;;;;;:::o;16169:225::-;16309:34;16305:1;16297:6;16293:14;16286:58;16378:8;16373:2;16365:6;16361:15;16354:33;16169:225;:::o;16400:366::-;16542:3;16563:67;16627:2;16622:3;16563:67;:::i;:::-;16556:74;;16639:93;16728:3;16639:93;:::i;:::-;16757:2;16752:3;16748:12;16741:19;;16400:366;;;:::o;16772:419::-;16938:4;16976:2;16965:9;16961:18;16953:26;;17025:9;17019:4;17015:20;17011:1;17000:9;16996:17;16989:47;17053:131;17179:4;17053:131;:::i;:::-;17045:139;;16772:419;;;:::o;17197:223::-;17337:34;17333:1;17325:6;17321:14;17314:58;17406:6;17401:2;17393:6;17389:15;17382:31;17197:223;:::o;17426:366::-;17568:3;17589:67;17653:2;17648:3;17589:67;:::i;:::-;17582:74;;17665:93;17754:3;17665:93;:::i;:::-;17783:2;17778:3;17774:12;17767:19;;17426:366;;;:::o;17798:419::-;17964:4;18002:2;17991:9;17987:18;17979:26;;18051:9;18045:4;18041:20;18037:1;18026:9;18022:17;18015:47;18079:131;18205:4;18079:131;:::i;:::-;18071:139;;17798:419;;;:::o;18223:221::-;18363:34;18359:1;18351:6;18347:14;18340:58;18432:4;18427:2;18419:6;18415:15;18408:29;18223:221;:::o;18450:366::-;18592:3;18613:67;18677:2;18672:3;18613:67;:::i;:::-;18606:74;;18689:93;18778:3;18689:93;:::i;:::-;18807:2;18802:3;18798:12;18791:19;;18450:366;;;:::o;18822:419::-;18988:4;19026:2;19015:9;19011:18;19003:26;;19075:9;19069:4;19065:20;19061:1;19050:9;19046:17;19039:47;19103:131;19229:4;19103:131;:::i;:::-;19095:139;;18822:419;;;:::o;19247:179::-;19387:31;19383:1;19375:6;19371:14;19364:55;19247:179;:::o;19432:366::-;19574:3;19595:67;19659:2;19654:3;19595:67;:::i;:::-;19588:74;;19671:93;19760:3;19671:93;:::i;:::-;19789:2;19784:3;19780:12;19773:19;;19432:366;;;:::o;19804:419::-;19970:4;20008:2;19997:9;19993:18;19985:26;;20057:9;20051:4;20047:20;20043:1;20032:9;20028:17;20021:47;20085:131;20211:4;20085:131;:::i;:::-;20077:139;;19804:419;;;:::o;20229:224::-;20369:34;20365:1;20357:6;20353:14;20346:58;20438:7;20433:2;20425:6;20421:15;20414:32;20229:224;:::o;20459:366::-;20601:3;20622:67;20686:2;20681:3;20622:67;:::i;:::-;20615:74;;20698:93;20787:3;20698:93;:::i;:::-;20816:2;20811:3;20807:12;20800:19;;20459:366;;;:::o;20831:419::-;20997:4;21035:2;21024:9;21020:18;21012:26;;21084:9;21078:4;21074:20;21070:1;21059:9;21055:17;21048:47;21112:131;21238:4;21112:131;:::i;:::-;21104:139;;20831:419;;;:::o;21256:222::-;21396:34;21392:1;21384:6;21380:14;21373:58;21465:5;21460:2;21452:6;21448:15;21441:30;21256:222;:::o;21484:366::-;21626:3;21647:67;21711:2;21706:3;21647:67;:::i;:::-;21640:74;;21723:93;21812:3;21723:93;:::i;:::-;21841:2;21836:3;21832:12;21825:19;;21484:366;;;:::o;21856:419::-;22022:4;22060:2;22049:9;22045:18;22037:26;;22109:9;22103:4;22099:20;22095:1;22084:9;22080:17;22073:47;22137:131;22263:4;22137:131;:::i;:::-;22129:139;;21856:419;;;:::o;22281:179::-;22421:31;22417:1;22409:6;22405:14;22398:55;22281:179;:::o;22466:366::-;22608:3;22629:67;22693:2;22688:3;22629:67;:::i;:::-;22622:74;;22705:93;22794:3;22705:93;:::i;:::-;22823:2;22818:3;22814:12;22807:19;;22466:366;;;:::o;22838:419::-;23004:4;23042:2;23031:9;23027:18;23019:26;;23091:9;23085:4;23081:20;23077:1;23066:9;23062:17;23055:47;23119:131;23245:4;23119:131;:::i;:::-;23111:139;;22838:419;;;:::o;23263:191::-;23303:4;23323:20;23341:1;23323:20;:::i;:::-;23318:25;;23357:20;23375:1;23357:20;:::i;:::-;23352:25;;23396:1;23393;23390:8;23387:34;;;23401:18;;:::i;:::-;23387:34;23446:1;23443;23439:9;23431:17;;23263:191;;;;:::o;23460:225::-;23600:34;23596:1;23588:6;23584:14;23577:58;23669:8;23664:2;23656:6;23652:15;23645:33;23460:225;:::o;23691:366::-;23833:3;23854:67;23918:2;23913:3;23854:67;:::i;:::-;23847:74;;23930:93;24019:3;23930:93;:::i;:::-;24048:2;24043:3;24039:12;24032:19;;23691:366;;;:::o;24063:419::-;24229:4;24267:2;24256:9;24252:18;24244:26;;24316:9;24310:4;24306:20;24302:1;24291:9;24287:17;24280:47;24344:131;24470:4;24344:131;:::i;:::-;24336:139;;24063:419;;;:::o;24488:102::-;24530:8;24577:5;24574:1;24570:13;24549:34;;24488:102;;;:::o;24596:848::-;24657:5;24664:4;24688:6;24679:15;;24712:5;24703:14;;24726:712;24747:1;24737:8;24734:15;24726:712;;;24842:4;24837:3;24833:14;24827:4;24824:24;24821:50;;;24851:18;;:::i;:::-;24821:50;24901:1;24891:8;24887:16;24884:451;;;25316:4;25309:5;25305:16;25296:25;;24884:451;25366:4;25360;25356:15;25348:23;;25396:32;25419:8;25396:32;:::i;:::-;25384:44;;24726:712;;;24596:848;;;;;;;:::o;25450:1073::-;25504:5;25695:8;25685:40;;25716:1;25707:10;;25718:5;;25685:40;25744:4;25734:36;;25761:1;25752:10;;25763:5;;25734:36;25830:4;25878:1;25873:27;;;;25914:1;25909:191;;;;25823:277;;25873:27;25891:1;25882:10;;25893:5;;;25909:191;25954:3;25944:8;25941:17;25938:43;;;25961:18;;:::i;:::-;25938:43;26010:8;26007:1;26003:16;25994:25;;26045:3;26038:5;26035:14;26032:40;;;26052:18;;:::i;:::-;26032:40;26085:5;;;25823:277;;26209:2;26199:8;26196:16;26190:3;26184:4;26181:13;26177:36;26159:2;26149:8;26146:16;26141:2;26135:4;26132:12;26128:35;26112:111;26109:246;;;26265:8;26259:4;26255:19;26246:28;;26300:3;26293:5;26290:14;26287:40;;;26307:18;;:::i;:::-;26287:40;26340:5;;26109:246;26380:42;26418:3;26408:8;26402:4;26399:1;26380:42;:::i;:::-;26365:57;;;;26454:4;26449:3;26445:14;26438:5;26435:25;26432:51;;;26463:18;;:::i;:::-;26432:51;26512:4;26505:5;26501:16;26492:25;;25450:1073;;;;;;:::o;26529:285::-;26589:5;26613:23;26631:4;26613:23;:::i;:::-;26605:31;;26657:27;26675:8;26657:27;:::i;:::-;26645:39;;26703:104;26740:66;26730:8;26724:4;26703:104;:::i;:::-;26694:113;;26529:285;;;;:::o;26820:348::-;26860:7;26883:20;26901:1;26883:20;:::i;:::-;26878:25;;26917:20;26935:1;26917:20;:::i;:::-;26912:25;;27105:1;27037:66;27033:74;27030:1;27027:81;27022:1;27015:9;27008:17;27004:105;27001:131;;;27112:18;;:::i;:::-;27001:131;27160:1;27157;27153:9;27142:20;;26820:348;;;;:::o;27174:180::-;27222:77;27219:1;27212:88;27319:4;27316:1;27309:15;27343:4;27340:1;27333:15;27360:185;27400:1;27417:20;27435:1;27417:20;:::i;:::-;27412:25;;27451:20;27469:1;27451:20;:::i;:::-;27446:25;;27490:1;27480:35;;27495:18;;:::i;:::-;27480:35;27537:1;27534;27530:9;27525:14;;27360:185;;;;:::o;27551:166::-;27691:18;27687:1;27679:6;27675:14;27668:42;27551:166;:::o;27723:366::-;27865:3;27886:67;27950:2;27945:3;27886:67;:::i;:::-;27879:74;;27962:93;28051:3;27962:93;:::i;:::-;28080:2;28075:3;28071:12;28064:19;;27723:366;;;:::o;28095:419::-;28261:4;28299:2;28288:9;28284:18;28276:26;;28348:9;28342:4;28338:20;28334:1;28323:9;28319:17;28312:47;28376:131;28502:4;28376:131;:::i;:::-;28368:139;;28095:419;;;:::o;28520:176::-;28660:28;28656:1;28648:6;28644:14;28637:52;28520:176;:::o;28702:366::-;28844:3;28865:67;28929:2;28924:3;28865:67;:::i;:::-;28858:74;;28941:93;29030:3;28941:93;:::i;:::-;29059:2;29054:3;29050:12;29043:19;;28702:366;;;:::o;29074:419::-;29240:4;29278:2;29267:9;29263:18;29255:26;;29327:9;29321:4;29317:20;29313:1;29302:9;29298:17;29291:47;29355:131;29481:4;29355:131;:::i;:::-;29347:139;;29074:419;;;:::o;29499:553::-;29676:4;29714:3;29703:9;29699:19;29691:27;;29728:71;29796:1;29785:9;29781:17;29772:6;29728:71;:::i;:::-;29809:72;29877:2;29866:9;29862:18;29853:6;29809:72;:::i;:::-;29891;29959:2;29948:9;29944:18;29935:6;29891:72;:::i;:::-;29973;30041:2;30030:9;30026:18;30017:6;29973:72;:::i;:::-;29499:553;;;;;;;:::o

Swarm Source

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